[SR-Users] SIP NOTIFY problem in 'presence_dialoginfo' module?

Klaus Feichtinger klaus.lists at inode.at
Thu Mar 31 11:03:25 CEST 2011


Hello Daniel,

The problem is, that the format shown in the original email message below
isn’t original. Some space characters are deleted. I will write it in
another form:


Party A:

A-1) initial notification to a Subscribe message was without body (because
no information about the subscribed party was available)

A-2) publication of a dialog state with PUBLISH:
<dialog-info xmlns=[..] version="4" state="full" entity[..]>

A-3) publication of a dialog state with PUBLISH:
<dialog-info xmlns=[..] version="5" state="full" entity[..]>

A-4) second notification to a dialog state change (confirmed, PUBLISHed
   with PUBLISH ad B-4 below):
<dialog-info xmlns=[..] version="1"          ll" entity[..]>


Party B:

B-1) Initial notification to a Subscribe message:
<dialog-info xmlns=[..] version="00000000000" state="full" entity[..]>

B-2) second notification to a dialog state change (confirmed, PUBLISHed
   with PUBLISH ad A-2 above):
<dialog-info xmlns=[..] version="1"           state="full" entity[..]>

B-3) third notification to a dialog state change (terminated, PUBLISHed
   with PUBLISH ad A-3 above):
<dialog-info xmlns=[..] version="2"           state="full" entity[..]>

B-4) publication of a dialog state with PUBLISH:
<dialog-info xmlns=[..] version="4" state="full" entity[..]>


So here you can (should) see that the full string-length of the
placeholder is used all time and in the situations above filled with space
characters.

Regards,
Klaus

> Hello,
>
> On 3/30/11 3:01 PM, Klaus Feichtinger wrote:
>> Hello list,
>>
>> I have a special situation in which string characters of the
>> "root-line" of the notify-body are overwritten by Kamailio. In detail:
>> the root-line of the NOTIFY message sent to the subscriber looks like:
>> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="1"
>> ll" entity="sip:117090 at 10.16.10.99">  instead of
>> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="1"
>> state="full" entity="sip:117090 at 10.16.10.99">  In other words: the
>> string state="full" is overwritten by space characters.
>
> Is it by space or by the versios="1"? Maybe the email body encoding ate
> the spaces, above looks like one space before 'll"'.
>
> Cheers,
> Daniel
>
>>   Therefore the message
>> is no longer "valid" and the parser of the subscriber-user agent has
>> problems....
>>
>> The exact scenario in my use case is, that user agents can subscribe
>> the events "presence" and "dialog" on Kamailio. The information about
>> presence and dialog-states is published to Kamailio by PUBLISH
>> messages from the user agents themselves. Kamailio does not have to
>> generate this information itself. In the following lines I have an
>> excerpt of the signalisation: 1) initial subscription of party A, 2)
>> the responded notification (without body) 3) subscription of party B
>> 4) the responded notification (with body) 5) a publish message of the
>> subscribed party B with actual dialog information and 6) the
>> notification with body to the subscriber A.
>>
>>
>> 1) Initial SUBSCRIBE message of party A:
>> ======================================SUBSCRIBE sip:117090 at 10.16.10.99
>> SIP/2.0 Via: SIP/2.0/UDP
>> 10.16.10.93:5060;rport;branch=z9hG4bK1411449981
>> From:<sip:117093 at 10.16.10.99>;tag=2453899634-24035392-1301468026894
>> To: <sip:117090 at 10.16.10.99>
>> Call-ID: 2442490492-24035392-1301468026894 at 10.16.10.93
>> CSeq: 20 SUBSCRIBE
>> Contact:<sip:117093 at 10.16.10.93:5060>
>> Max-Forwards: 70
>> User-Agent: SipTapi
>> Expires: 3600
>> Event: dialog
>> Content-Length: 0
>>
>> 2) Responded NOTIFY message from Kamailio:
>> ========================================NOTIFY
>> sip:117093 at 10.16.10.93:5060 SIP/2.0 Via: SIP/2.0/UDP
>> 10.16.10.99;branch=z9hG4bK7cc7.08e060b6000000000000000000000000.0 To:
>> sip:117093 at 10.16.10.99;tag=2453899634-24035392-1301468026894 From:
>> sip:117090 at 10.16.10.99;tag=a23c71953194c2c72e41c4d20e4f7127-86e1 CSeq:
>> 1 NOTIFY
>> Call-ID: 2442490492-24035392-1301468026894 at 10.16.10.93
>> Content-Length: 0
>> User-Agent: kamailio (3.1.2 (i386/linux))
>> Max-Forwards: 70
>> Event: dialog
>> Contact:<sip:10.16.10.99:5060>
>> Subscription-State: active;expires=3670
>>
>>
>> 3) Initial SUBSCRIBE message of party B:
>> ======================================SUBSCRIBE sip:117093 at 10.16.10.99
>> SIP/2.0 Via: SIP/2.0/UDP
>> 10.16.10.90:5060;rport;branch=z9hG4bK4016956575
>> From:<sip:117090 at 10.16.10.99>;tag=2605346227-26329880-1301468174702
>> To: <sip:117093 at 10.16.10.99>
>> Call-ID: 2982039389-26329880-1301468174702 at 10.16.10.90
>> CSeq: 20 SUBSCRIBE
>> Contact:<sip:117090 at 10.16.10.90:5060>
>> Max-Forwards: 70
>> User-Agent: SipTapi
>> Expires: 3600
>> Event: dialog
>> Content-Length: 0
>>
>> 4) Responded NOTIFY message from Kamailio (with version number
>> "00000000000"!!!!):
>> ==============================================================================NOTIFY
>> sip:117090 at 10.16.10.90:5060 SIP/2.0 Via: SIP/2.0/UDP
>> 10.16.10.99;branch=z9hG4bK10e8.31cb2284000000000000000000000000.0 To:
>> sip:117090 at 10.16.10.99;tag=2605346227-26329880-1301468174702 From:
>> sip:117093 at 10.16.10.99;tag=a23c71953194c2c72e41c4d20e4f7127-5f56 CSeq:
>> 1 NOTIFY
>> Call-ID: 2982039389-26329880-1301468174702 at 10.16.10.90
>> Content-Length: 593
>> User-Agent: kamailio (3.1.2 (i386/linux))
>> Max-Forwards: 70
>> Event: dialog
>> Contact:<sip:10.16.10.99:5060>
>> Subscription-State: active;expires=3670
>> Content-Type: application/dialog-info+xml
>>
>> <?xml version="1.0"?>
>> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info"
>> version="00000000000" state="full" entity="117093 at 10.16.10.99">
>>    <dialog id="3375446242-26591296-1301467877329 at 10.16.10.93"
>> call-id="3375446242-26591296-1301467877329 at 10.16.10.93"
>> direction="initiator">
>>      <state>terminated</state>
>>      <remote>
>>        <identity>sip:019992116002 at 10.16.10.99</identity>
>>        <target uri="sip:019992116002 at 10.16.10.99"/>
>>      </remote>
>>      <local>
>>        <identity>sip:117093 at 10.16.10.99</identity>
>>        <target uri="sip:117093 at 10.16.10.99"/>
>>      </local>
>>    </dialog>
>> </dialog-info>
>>
>> 5) The subscribed party is sending a PUBLISH message with following
>> information:
>> ============================================================================PUBLISH
>> sip:117090 at 10.16.10.99 SIP/2.0 Via: SIP/2.0/UDP
>> 10.16.10.90:5060;rport;branch=z9hG4bK348084694
>> From:<sip:117090 at 10.16.10.99>;tag=3644648667-26329880-1301468223499
>> To: <sip:117090 at 10.16.10.99>
>> Call-ID: 332031778-26329880-1301468223499 at 10.16.10.90
>> CSeq: 20 PUBLISH
>> Max-Forwards: 70
>> User-Agent: SipTapi
>> Content-Disposition: render;handling=required
>> Expires: 3600
>> Event: dialog
>> Content-Type: application/dialog-info+xml
>> Content-Length:   592
>>
>> <?xml version="1.0"?>
>> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="4"
>> state="full" entity="sip:117090 at 10.16.10.99">
>>    <dialog id="2769397361-26329880-1301468223108 at 10.16.10.90"
>> call-id="2769397361-26329880-1301468223108 at 10.16.10.90"
>> direction="initiator">
>>      <state>confirmed</state>
>>      <remote>
>>        <identity><sip:116001 at 10.16.10.99></identity>
>>        <target uri="<sip:116001 at 10.16.10.99>"/>
>>      </remote>
>>      <local>
>>        <identity>sip:117090 at 10.16.10.99</identity>
>>        <target uri="sip:117090 at 10.16.10.99"/>
>>      </local>
>>    </dialog>
>> </dialog-info>
>>
>>
>> 6) Status informative NOTIFY message from Kamailio (built from the
>> PUBLISH message above - with correct version but string
>> overwriting!!!):
>> =======================================================================================================================================NOTIFY
>> sip:117093 at 10.16.10.93:5060 SIP/2.0 Via: SIP/2.0/UDP
>> 10.16.10.99;branch=z9hG4bK4cc7.faa8dc87000000000000000000000000.0 To:
>> sip:117093 at 10.16.10.99;tag=2453899634-24035392-1301468026894 From:
>> sip:117090 at 10.16.10.99;tag=a23c71953194c2c72e41c4d20e4f7127-86e1 CSeq:
>> 2 NOTIFY
>> Call-ID: 2442490492-24035392-1301468026894 at 10.16.10.93
>> Content-Length: 592
>> User-Agent: kamailio (3.1.2 (i386/linux))
>> Max-Forwards: 70
>> Event: dialog
>> Contact:<sip:10.16.10.99:5060>
>> Subscription-State: active;expires=3570
>> Content-Type: application/dialog-info+xml
>>
>> <?xml version="1.0"?>
>> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="1"
>> ll" entity="sip:117090 at 10.16.10.99">
>>    <dialog id="2769397361-26329880-1301468223108 at 10.16.10.90"
>> call-id="2769397361-26329880-1301468223108 at 10.16.10.90"
>> direction="initiator">
>>      <state>confirmed</state>
>>      <remote>
>>        <identity><sip:116001 at 10.16.10.99></identity>
>>        <target uri="<sip:116001 at 10.16.10.99>"/>
>>      </remote>
>>      <local>
>>        <identity>sip:117090 at 10.16.10.99</identity>
>>        <target uri="sip:117090 at 10.16.10.99"/>
>>      </local>
>>    </dialog>
>> </dialog-info>
>>
>>
>>
>> Debug information of Kamailio and information in the source code show
>> that the version number "00000000000" is a placeholder only, which
>> should be replaced with a valid version number. However, it seems that
>> there is a problem in handling these strings. The version number is
>> replaced, but in case that the version id is only one character long,
>> ten space characters are inserted- overwriting other information......
>>
>>
>> Can anybody comment this problem? Is this a bug of the
>> presence_dialoginfo- or another module?
>>
>> Thanks in advance!
>>
>> Regards,
>> Klaus
>>
>> P.S. additional information from source code an debug output of
>> kamailio:
>>
>> notify_body.c:
>> [...]
>> /* The version must be increased for each new document and is a 32bit
>> int.
>>   As the version is different for each watcher, we can not set here
>> the
>> correct value. Thus, we just put here a placeholder which will be
>>     replaced by the correct value in the aux_body_processing callback.
>> Thus we have CPU intensive XML aggregation only once and can use quick
>> search&replace in the per-watcher aux_body_processing callback. We use
>> 11 chracters as an signed int (although RFC says unsigned int we use
>> signed int as presence module stores "version" in DB as
>>     signed int) has max. 10 characters + 1 character for the sign
>> */
>> [...]
>>
>> Debug information from Kamailio:
>> Ad 4)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:67]: [pres_user]=117093 [pres_domain]= 10.16.10.99,
>> [n]=1 SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:107]: [pres_user]=117093 [pres_domain]= 10.16.10.99,
>> [n]=1 SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:199]: node type: Element, name: dialog
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:73]: [n_body]=0x835fe54
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:76]: [*n_body]=<?xml version="1.0"?>#012<dialog-info
>> xmlns="urn:ietf:params:xml:ns:dialog-info" version="00000000000"
>> state="full" entity="117093 at 10.16.10.99">#012<dialog
>> id="6b1de4df-6c9ce978 at 10.16.10.203"
>> call-id="6b1de4df-6c9ce978 at 10.16.10.203" direction="recipient">#012
>> <state>confirmed</state>#012<remote>#012
>> <identity>sip:116001 at 10.16.10.99</identity>#012<target
>> uri="sip:116001 at 10.16.10.99"/>#012</remote>#012<local>#012
>> <identity>sip:117093 at 10.16.10.99</identity>#012<target
>> uri="sip:117093 at 10.16.10.99"/>#012</local>#012
>> </dialog>#012</dialog-info>#012
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:328]: replace version with "1"
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence [notify.c:1461]:
>> dialog info:
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence [notify.c:122]:
>> #012#011[pres_uri]=
>> sip:117093 at 10.16.10.99#012#011[to_user]117093#011[to_domain]=
>> 10.16.10.99#012#011[w_user]=
>> 117090#011[w_domain]10.16.10.99#012#011[event]=
>> dialog#012#011[status]=
>> active#012#011[expires]3519#012#011[callid]3119346140-8635704-1301477522967 at 10.16.10.90#011[local_cseq]=1#012#011[to_tag
>> ]=
>> a23c71953194c2c72e41c4d20e4f7127-7529#011[from_tag]2282475328-8635704-1301477522967#012#011[contact]sip:117090 at 10.16.10.90:5060#011[record_route]SipSrv1
>> /usr/sbin/kamailio[26764]: DEBUG: presence [notify.c:234]: expires
>> 3519 SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence
>> [notify.c:1555]: headers:#012Max-Forwards: 70#015#012Event:
>> dialog#015#012Contact:
>> <sip:10.16.10.99:5060>#015#012Subscription-State:
>> active;expires=3570#015#012Content-Type:
>> application/dialog-info+xml#015#012 SipSrv1 /usr/sbin/kamailio[26764]:
>> DEBUG: presence [notify.c:940]: CONTACT sip:117090 at 10.16.10.90:5060
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [socket_info.c:501]:
>> grep_sock_info - checking if host==us: 11==11&&   [10.16.10.99]
>> =[10.16.10.99] SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>
>> [socket_info.c:504]: grep_sock_info - checking if port 5060 matches
>> port 5060
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence [notify.c:1729]:
>> ==22/6/37 SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: tm [uac.c:240]:
>> DEBUG:tm:t_uac: next_hop=<sip:117090 at 10.16.10.90:5060>
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: tm [uac.c:181]: DEBUG:
>> dlg2hash: 27355
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: INFO: presence [notify.c:1586]:
>> NOTIFY sip:117090 at 10.16.10.99 via sip:117090 at 10.16.10.90:5060 on
>> behalf of sip:117093 at 10.16.10.99 for event dialog
>>
>>
>> Ad 6)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:67]: [pres_user]=117093 [pres_domain]= 10.16.10.99,
>> [n]=1 SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:107]: [pres_user]=117093 [pres_domain]= 10.16.10.99,
>> [n]=1 SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:199]: node type: Element, name: dialog
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:73]: [n_body]=0x835fcb0
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:76]: [*n_body]=<?xml version="1.0"?>#012<dialog-info
>> xmlns="urn:ietf:params:xml:ns:dialog-info" version="00000000000"
>> state="full" entity="117093 at 10.16.10.99">#012<dialog
>> id="6b1de4df-6c9ce978 at 10.16.10.203"
>> call-id="6b1de4df-6c9ce978 at 10.16.10.203" direction="recipient">#012
>> <state>terminated</state>#012<remote>#012
>> <identity>sip:116001 at 10.16.10.99</identity>#012<target
>> uri="sip:116001 at 10.16.10.99"/>#012</remote>#012<local>#012
>> <identity>sip:117093 at 10.16.10.99</identity>#012<target
>> uri="sip:117093 at 10.16.10.99"/>#012</local>#012
>> </dialog>#012</dialog-info>#012
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence_dialoginfo
>> [notify_body.c:328]: replace version with "2"
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence [notify.c:1461]:
>> dialog info:
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence [notify.c:122]:
>> #012#011[pres_uri]=
>> sip:117093 at 10.16.10.99#012#011[to_user]117093#011[to_domain]=
>> 10.16.10.99#012#011[w_user]=
>> 117090#011[w_domain]10.16.10.99#012#011[event]=
>> dialog#012#011[status]=
>> active#012#011[expires]3242#012#011[callid]3119346140-8635704-1301477522967 at 10.16.10.90#011[local_cseq]=2#012#011[to_tag
>> ]=
>> a23c71953194c2c72e41c4d20e4f7127-7529#011[from_tag]2282475328-8635704-1301477522967#012#011[contact]sip:117090 at 10.16.10.90:5060#011[record_route]=
>>   SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence [notify.c:234]:
>> expires 3242 SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence
>> [notify.c:1555]: headers:#012Max-Forwards: 70#015#012Event:
>> dialog#015#012Contact:
>> <sip:10.16.10.99:5060>#015#012Subscription-State:
>> active;expires=3270#015#012Content-Type:
>> application/dialog-info+xml#015#012 SipSrv1 /usr/sbin/kamailio[26764]:
>> DEBUG: presence [notify.c:940]: CONTACT sip:117090 at 10.16.10.90:5060
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [socket_info.c:501]:
>> grep_sock_info - checking if host==us: 11==11&&   [10.16.10.99]
>> =[10.16.10.99] SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>
>> [socket_info.c:504]: grep_sock_info - checking if port 5060 matches
>> port 5060
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: presence [notify.c:1729]:
>> ==22/6/37 SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: tm [uac.c:240]:
>> DEBUG:tm:t_uac: next_hop=<sip:117090 at 10.16.10.90:5060>
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG: tm [uac.c:181]: DEBUG:
>> dlg2hash: 27356
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: DEBUG:<core>  [usr_avp.c:646]:
>> DEBUG:destroy_avp_list: destroying list (nil)
>> SipSrv1 /usr/sbin/kamailio[26764]: INFO: presence [notify.c:1586]:
>> NOTIFY sip:117090 at 10.16.10.99 via sip:117090 at 10.16.10.90:5060 on
>> behalf of sip:117093 at 10.16.10.99 for event dialog
>>
>>
>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing
>> list sr-users at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
> --
> Daniel-Constantin Mierla
> http://www.asipto.com






More information about the sr-users mailing list