[OpenSIPS-Users] Extract value from SIP Content?

Bogdan-Andrei Iancu bogdan at voice-system.ro
Wed Sep 29 16:24:26 CEST 2010


Hi Paul,

there is not bug :)...the problem is, by default, "subst" is "line 
oriented", and as you have 2 lines in $rb, it will subst each line 
separately - and on the first line you get "1" and the on the second 
line (which does not match) you get the full line :)

so, do:

avp_subst("$avp(s:msg)/$avp(s:dtmf)/g","/(^.*Signal=)([\+\#0-9]+)(.*$)/\2 : /s");


See the "s" flag at the end for ignoring new lines  in subst

Regards,
Bogdan

 
Paul Smith wrote:
> Hi Bogdan,
> Thanks for all the support, should I raise a bug report somewhere?
>
>
> Paul.
>
> Bogdan-Andrei Iancu wrote:
>> Hi Paul,
>>
>> Paul Smith wrote:
>>   
>>> Hi Bogdan,
>>> There is something else going on.  I tried the match you suggested and 
>>> see the same result as previously in my log:
>>>         extracted character: 1 : #012Duration=160
>>>
>>> In my substitution I am appending " : " to \2, and in my resulting 
>>> $avp(s:dtmf) I see the string is made up of \2 + " : " + \3.  Why is \3 
>>> in there at all?
>>>   
>>>     
>> hmm....good question....it shouldn't be there....
>>   
>>> Is this something to do with search across lines and the #015#012 
>>> characters.... Still confused.
>>>
>>> Als0 [0-9]  does not match * or # which are also passed as DTMF  
>>> Signals... but I'll work that out if I can get it extract a digit properly.
>>>   
>>>     
>> well, make it   [\#\*0-9] to include the 2 chars also.... :)
>>
>> Regards,
>> Bogdan
>>   
>>> Regards,
>>> Paul
>>>
>>> Bogdan-Andrei Iancu wrote:
>>>   
>>>     
>>>> Hi Paul,
>>>>
>>>> the subst is too permissive and the string to the end is matched by the 
>>>> second token.
>>>>
>>>> try:
>>>>
>>>> avp_subst("$avp(s:msg)/$avp(s:dtmf)/g","/(^.*Signal=)([0-9]+)(.*$)/\2 : /");
>>>>
>>>> Regards,
>>>> bogdan
>>>>
>>>> Paul Smith wrote:
>>>>   
>>>>     
>>>>       
>>>>> Sorry I replied to "Opensips Cluster thread"... obviously this is unrelated!
>>>>>
>>>>> I have made a little more progress but the avp_subst is still not 
>>>>> behaving as I expect.
>>>>>
>>>>> if I use the following code:
>>>>>      # look for "Signal=" and append following character to collected dtmfs
>>>>>      $avp(s:msg)=$rb;
>>>>>      avp_subst("$avp(s:msg)/$avp(s:dtmf)/g","/(^.*Signal=)(.)(.*$)/\2 : /");
>>>>>      xlog("Got an info packet with message buffer : $mb\n\n extracted 
>>>>> character: $avp(s:dtmf)");
>>>>>
>>>>> I get:
>>>>>  extracted character: * : #012Duration=160
>>>>>
>>>>> Why is mys avp(s:dtmf) still getting appended with "#012Duration=160" ? 
>>>>> I just want to get the matched character \2.
>>>>>
>>>>>
>>>>> Thanks
>>>>>
>>>>> paul
>>>>>
>>>>>
>>>>>
>>>>> =======================================
>>>>> original post:
>>>>>
>>>>> Hi,
>>>>> I am sure this is trivial... but I'm getting lost again.
>>>>>
>>>>> I would like to extract and log a value from the Content of a SIP INFO 
>>>>> message... for example during a call I can send DTMF as SIP-INFO 
>>>>> messages, how can I extract the value of the key pressed from the 
>>>>> message?  The relevant bit of the message if "1" is pressed I see a SIP 
>>>>> INFO with content including "Signal=1."
>>>>>
>>>>> I tried:
>>>>>   $avp(s:msg)=$mb;
>>>>>   avp_subst("$avp(s:msg)/$avp(s:dtmf)/g","/(^.*Signal)(=.)(.*$)/\2/g");
>>>>>   xlog("Got an info packet with message buffer : $mb\n\n extracted 
>>>>> character: $avp(s:dtmf)");
>>>>>
>>>>> and that yielded:
>>>>>  Got an info packet with message buffer : INFO 
>>>>> sip:600 at 192.168.4.129:5060;nat=yes SIP/2.0#015#012Via: SIP/2.0/UDP
>>>>>  y.y.y.y:56709;branch=z9hG4bK-mpz3k73e2wsm;rport#015#012Route: 
>>>>> <sip:x.x.x.x;r2=on;lr=on;did=1db.36f29f36>#015#012Route:
>>>>>  <sip:212.108.76.52;r2=on;lr=on;did=1db.36f29f36>#015#012From: "101" 
>>>>> <sip:101 at my.realm.com>;tag=89sal3htwp#015#012To:
>>>>>  <sip:*600 at my.realm.com>;tag=as01c3f123#015#012Call-ID: 
>>>>> 3c2b6cf968d0-cxl5nzv16j4m#015#012CSeq: 3 INFO#015#012Max-Forwards: 
>>>>> 69#015#012Contact:
>>>>>  <sip:101 at y.y.y.y:56709>;reg-id=1#015#012User-Agent: 
>>>>> snom360/7.3.30#015#012Content-Type: 
>>>>> application/dtmf-relay#015#012Content-Length:
>>>>>   22#015#012#015#012Signal=7#015#012Duration=160#012#012
>>>>>
>>>>>   extracted character: INFO sip:600 at 192.168.4.129:5060;nat=yes 
>>>>> SIP/2.0#015#012Via: SIP/2.0/UDP 
>>>>>   y.y.y.y:56709;branch=z9hG4bK-mpz3k73e2wsm;rport#015#012Route: 
>>>>> <sip:x.x.x.x;r2=on;lr=on;did=1db.36f29f36>#015#012Route:
>>>>>   <sip:212.108.76.52;r2=on;lr=on;did=1db.36f29f36>#015#012From: "101" 
>>>>> <sip:101 at my.realm.com>;tag=89sal3htwp#015#012To:
>>>>>  <sip:*600 at my.realm.com>;tag=as01c3f123#015#012Call-ID: 
>>>>> 3c2b6cf968d0-cxl5nzv16j4m#015#012CSeq: 3 INFO#015#012Max-Forwards: 
>>>>> 69#015#012Contact:
>>>>>   <sip:101 at y.y.y.y:56709>;reg-id=1#015#012User-Agent: 
>>>>> snom360/7.3.30#015#012Content-Type: 
>>>>> application/dtmf-relay#015#012Content-Length:
>>>>>   22#015#012#015#012=7#012Duration=160
>>>>>
>>>>>
>>>>>
>>>>> The ngrep of a SIP INFO for a DTMF tone looks like:
>>>>>   U y.y.y.y:54762 -> x.x.x.x:5060
>>>>>   INFO sip:600 at 192.168.4.129:5060;nat=yes SIP/2.0.
>>>>>   Via: SIP/2.0/UDP y.y.y.y:57439;branch=z9hG4bK-v8mow8y2kfhc;rport.
>>>>>   Route: <sip:x.x.x.x;r2=on;lr=on;did=2f.eef579c3>.
>>>>>   Route: <sip:212.108.76.52;r2=on;lr=on;did=2f.eef579c3>.
>>>>>   From: "101" <sip:101 at my.realm.com>;tag=6hud1tlbxx.
>>>>>   To: <sip:*600 at my.realm.com>;tag=as0e050d3f.
>>>>>   Call-ID: 3c2b80578888-2z8ol0vc5860.
>>>>>   CSeq: 3 INFO.
>>>>>   Max-Forwards: 70.
>>>>>   Contact: <sip:101 at y.y.y.y:57439>;reg-id=1.
>>>>>   User-Agent: snom360/7.3.30.
>>>>>   Content-Type: application/dtmf-relay.
>>>>>   Content-Length: 22.
>>>>>   .
>>>>>   Signal=1.
>>>>>   Duration=160
>>>>>   #
>>>>>   U x.x.x.x:5060 -> y.y.y.y:54762
>>>>>   SIP/2.0 200 OK.
>>>>>   Via: SIP/2.0/UDP 
>>>>> y.y.y.y:57439;received=y.y.y.y;branch=z9hG4bK-v8mow8y2kfhc;rport=54762.
>>>>>   From: "101" <sip:101 at my.realm.com>;tag=6hud1tlbxx.
>>>>>   To: <sip:*600 at my.realm.com>;tag=as0e050d3f.
>>>>>   Call-ID: 3c2b80578888-2z8ol0vc5860.
>>>>>   CSeq: 3 INFO.
>>>>>   Server: Asterisk PBX 1.6.2.9.
>>>>>   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO.
>>>>>   Supported: replaces, timer.
>>>>>   Content-Length: 0.
>>>>>   .
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Users mailing list
>>>>> Users at lists.opensips.org
>>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Users mailing list
>>>>> Users at lists.opensips.org
>>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>>>
>>>>>   
>>>>>     
>>>>>       
>>>>>         
>>>>   
>>>>     
>>>>       
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>>   
>>>     
>>
>>
>>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>   


-- 
Bogdan-Andrei Iancu
OpenSIPS Bootcamp
15 - 19 November 2010, Edison, New Jersey, USA
www.voice-system.ro




More information about the Users mailing list