Summary: | ASTERISK-12853: [patch] Make func_realtime work more like app_realtime | ||
Reporter: | Tilghman Lesher (tilghman) | Labels: | |
Date Opened: | 2008-10-09 08:36:47 | Date Closed: | 2008-11-19 15:54:38.000-0600 |
Priority: | Major | Regression? | No |
Status: | Closed/Complete | Components: | 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 |