[Home]

Summary:ASTERISK-12853: [patch] Make func_realtime work more like app_realtime
Reporter:Tilghman Lesher (tilghman)Labels:
Date Opened:2008-10-09 08:36:47Date Closed:2008-11-19 15:54:38.000-0600
Priority:MajorRegression?No
Status:Closed/CompleteComponents:Functions/func_realtime
Versions:Frequency of
Occurrence
Related
Issues:
Environment:Attachments:( 0) 20081009__bug13651.diff.txt
( 1) 20081119__bug13651__2.diff.txt
( 2) 20081119__bug13651.diff.txt
Description:As requested on the -users list, make 2 new methods in func_realtime, one called REALTIME_FIELD, which retrieves a single field from realtime, and one called REALTIME_HASH, which retrieves a single record from realtime, in a format appropriate for assigning to the HASH() function.
Comments:By: Leif Madsen (lmadsen) 2008-11-18 13:15:59.000-0600

development*CLI> sip show peers
Name/username              Host            Dyn Nat ACL Port     Status     Realtime
105/105                    192.168.128.129  D          5060     Unmonitored Cached RT


mysql> select * from sipfriends;
+------+---------+---------+---------+-----------------+------+------------+
| name | host    | secret  | context | ipaddr          | port | regseconds |
+------+---------+---------+---------+-----------------+------+------------+
| 105  | dynamic | welcome | start   | 192.168.128.129 | 5060 | 1227024431 |
+------+---------+---------+---------+-----------------+------+------------+
1 row in set (0.00 sec)


----------------
extconfig.conf |
----------------

sipusers => odbc,asterisk,sipfriends
sippeers => odbc,asterisk,sipfriends


-----------------
extensions.conf |
-----------------

exten => 200,1,NoOp()
exten => 200,n,Answer()
exten => 200,n,Set(RES=${REALTIME_FIELD(sippeers,name,105,context)})
exten => 200,n,Verbose(2,Value of RES is: ${RES})
exten => 200,n,Hangup()


--------
RESULT |
--------

   -- Executing [200@start:1] NoOp("SIP/105-b0001fc8", "") in new stack
   -- Executing [200@start:2] Answer("SIP/105-b0001fc8", "") in new stack
   -- Executing [200@start:3] Set("SIP/105-b0001fc8", "RES=") in new stack
   -- Executing [200@start:4] Verbose("SIP/105-b0001fc8", "2,Value of RES is: ") in new stack
 == Value of RES is:
   -- Executing [200@start:5] Hangup("SIP/105-b0001fc8", "") in new stack





Perhaps I'm missing something here?  This is just the test I did for REALTIME_FIELD() function.

By: Leif Madsen (lmadsen) 2008-11-18 13:21:13.000-0600

Testing of REALTIME_HASH() returns the following:


--------
RESULT |
--------

 == Using SIP RTP CoS mark 5
   -- Executing [201@start:1] NoOp("SIP/105-b0003208", "") in new stack
   -- Executing [201@start:2] Answer("SIP/105-b0003208", "") in new stack
[Nov 18 10:16:28] WARNING[8990]: func_realtime.c:237 realtimefield_read: Syntax: REALTIME_HASH(family,fieldmatch,value,fieldname) - missing argument!
   -- Executing [201@start:3] Set("SIP/105-b0003208", "HASH(realtime_result)=") in new stack
   -- Executing [201@start:4] Verbose("SIP/105-b0003208", "2,Result of the context field returned: ") in new stack
 == Result of the context field returned:
   -- Executing [201@start:5] Hangup("SIP/105-b0003208", "") in new stack



----------------------------------
core show function REALTIME_HASH |
----------------------------------


dialplan reload  core show function REALTIME_HASH
development*CLI>
 -= Info about function 'REALTIME_HASH' =-

[Synopsis]
RealTime Read/Write Functions

[Description]
This function will read values from a RealTime repository and return them
in a format suitable to be assigned to a HASH function.


[Syntax]
REALTIME_HASH(family,fieldmatch,value)


-----------------
extensions.conf |
-----------------

exten => 201,1,NoOp()
exten => 201,n,Answer()
exten => 201,n,Set(HASH(realtime_result)=${REALTIME_HASH(sippeers,name,105)})
exten => 201,n,Verbose(2,Result of the context field returned: ${HASH(realtime_result,context)})
exten => 201,n,Hangup()

By: Tilghman Lesher (tilghman) 2008-11-19 13:03:34.000-0600

New patch uploaded

By: Leif Madsen (lmadsen) 2008-11-19 14:12:24.000-0600

First test (REALTIME_FIELD) output:

   -- Executing [200@start:2] Answer("SIP/100-16c5b618", "") in new stack
   -- Executing [200@start:3] Set("SIP/100-16c5b618", "RES=start") in new stack
   -- Executing [200@start:4] Verbose("SIP/100-16c5b618", "2,Value of RES is: start") in new stack
 == Value of RES is: start
   -- Executing [200@start:5] Hangup("SIP/100-16c5b618", "") in new stack

Result: PASS!


Second test (REALTIME_HASH) result:

   -- Executing [201@start:1] NoOp("SIP/100-16c5b618", "") in new stack
   -- Executing [201@start:2] Answer("SIP/100-16c5b618", "") in new stack
   -- Executing [201@start:3] Set("SIP/100-16c5b618", "HASH(realtime_result)=,105,dynamic,welcome,start,192.168.128.129,5060,1227024431") in new stack
   -- Executing [201@start:4] Verbose("SIP/100-16c5b618", "2,Result of the context field returned: start") in new stack
 == Result of the context field returned: start
   -- Executing [201@start:5] Verbose("SIP/100-16bed018", "2,Result of HASH is: 1227024431,5060,192.168.128.129,start,welcome,dynamic,105,") in new stack
 == Result of HASH is: 1227024431,5060,192.168.128.129,start,welcome,dynamic,105,
   -- Executing [201@start:5] Hangup("SIP/100-16c5b618", "") in new stack


Result: FAIL(?)


Seems that we're getting an extra comma at the end of the ${HASH(realtime_hash)} output. Other than that, looks good!

By: Leif Madsen (lmadsen) 2008-11-19 14:26:52.000-0600

mysql> describe sipfriends;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| name       | varchar(50) | YES  |     | NULL    |       |
| host       | varchar(50) | YES  |     | NULL    |       |
| secret     | varchar(50) | YES  |     | NULL    |       |
| context    | varchar(50) | YES  |     | NULL    |       |
| ipaddr     | varchar(50) | YES  |     | NULL    |       |
| port       | varchar(50) | YES  |     | NULL    |       |
| regseconds | varchar(50) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.01 sec)

By: Tilghman Lesher (tilghman) 2008-11-19 14:44:36.000-0600

My table:

+-------------+------------------+------+-----+---------+-------+
| Field       | Type             | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+-------+
| name        | varchar(40)      | NO   | PRI |         |       |
| type        | char(10)         | YES  |     | friend  |       |
| secret      | varchar(40)      | NO   |     |         |       |
| context     | varchar(40)      | NO   |     |         |       |
| username    | varchar(40)      | YES  |     | NULL    |       |
| host        | char(40)         | YES  |     | NULL    |       |
| ipaddr      | varchar(20)      | NO   |     |         |       |
| port        | mediumint(5)     | YES  |     | NULL    |       |
| regseconds  | int(11) unsigned | YES  |     | NULL    |       |
| defaultuser | char(10)         | YES  |     | NULL    |       |
| fullcontact | char(100)        | YES  |     | NULL    |       |
| regserver   | char(20)         | YES  |     | NULL    |       |
| useragent   | char(30)         | YES  |     | NULL    |       |
| disallow    | char(10)         | YES  |     | all     |       |
| allow       | char(50)         | YES  |     | ulaw    |       |
| call-limit  | tinyint(2)       | YES  |     | 1       |       |
| qualify     | char(3)          | YES  |     | NULL    |       |
+-------------+------------------+------+-----+---------+-------+
17 rows in set (0.03 sec)

By: Digium Subversion (svnbot) 2008-11-19 15:54:38.000-0600

Repository: asterisk
Revision: 157870

U   trunk/funcs/func_realtime.c

------------------------------------------------------------------------
r157870 | tilghman | 2008-11-19 15:54:37 -0600 (Wed, 19 Nov 2008) | 10 lines

Two new functions, REALTIME_FIELD, and REALTIME_HASH, which should make
querying realtime from the dialplan a little more consistent and easy to use.
The original REALTIME function is preserved, for those who are already
accustomed to that interface.
(closes issue ASTERISK-12853)
Reported by: Corydon76
Patches:
      20081119__bug13651__2.diff.txt uploaded by Corydon76 (license 14)
Tested by: blitzrage, Corydon76

------------------------------------------------------------------------

http://svn.digium.com/view/asterisk?view=rev&revision=157870