[SR-Users] Errors when parsing Diversion header with multiple comma-separated diversions

Björn Bylander Bjorn.Bylander at loxysoft.com
Fri Oct 28 11:27:42 CEST 2016


Hello!

Given a Diversion header like the following:

Diversion:"Foo
Bar"<sip:+9876543211 at 127.0.0.101;user=phone>;privacy=off;answered-count=2;re
ason=deflection;counter=1;answered,"_
somewhere"<sip:+9876543212 at 127.0.0.101;user=phone>;privacy=off;answered-coun
t=1;reason=deflection;counter=1;answered

Kamailio 4.4.3 (and probably earlier versions) emit error messages
complaining about the comma character. According to RFC 6044 multiple
comma-separated diversions in a single Diversion-header is allowed.

Full INVITE as an example:

INVITE sip:+1234567890 at 127.0.0.100:5060;user=phone;transport=tcp SIP/2.0 
Via:SIP/2.0/TCP
127.0.0.101;branch=z9hG4bKBroadWorks.-1od4eg8-127.0.0.100V5060-0-82844591-13
54681939-1477634439005- 
From:<sip:+9876543210 at 127.0.0.101;user=phone>;tag=1354681939-1477634439005- 
To:<sip:+1234567890 at 127.0.0.100:5060;user=phone> 
Call-ID:BW0800390052810161562691307 at 127.0.0.101 
CSeq:82844591 INVITE 
Contact:<sip:127.0.0.101:5060;transport=tcp> 
P-Asserted-Identity:<sip:+9876543210 at 127.0.0.101;user=phone> 
Privacy:none 
Diversion:"Foo
Bar"<sip:+9876543211 at 127.0.0.101;user=phone>;privacy=off;answered-count=2;re
ason=deflection;counter=1;answered,"_
somewhere"<sip:+9876543212 at 127.0.0.101;user=phone>;privacy=off;answered-coun
t=1;reason=deflection;counter=1;answered 
Supported:100rel 
Allow:ACK,BYE,CANCEL,INFO,INVITE,OPTIONS,PRACK,REFER,NOTIFY,UPDATE 
X-BroadWorks-DNC:network-address="sip:+9876543210 at 127.0.0.101;user=phone" 
Accept:application/dtmf-relay,application/media_control+xml,application/sdp,
application/x-broadworks-call-center+xml,multipart/mixed 
Max-Forwards:10 
Content-Type:application/sdp 
Content-Disposition:session;handling=required 
Content-Length:267 

v=0 
o=BroadWorks 100442303 1 IN IP4 127.0.0.101 
s=- 
c=IN IP4 127.0.0.102 
t=0 0 
m=audio 29778 RTP/AVP 8 0 18 101 
a=rtpmap:8 PCMA/8000 
a=rtpmap:0 PCMU/8000 
a=rtpmap:18 G729/8000 
a=rtpmap:101 telephone-event/8000 
a=fmtp:101 0-15 
a=sendrecv 
a=maxptime:20

Example log messages:

Oct 28 08:00:39 kam1 /usr/sbin/kamailio[14935]: ERROR: <core>
[parser/parse_addr_spec.c:488]: parse_to_param(): ERROR parse_to_param :
invalid character ',' in status 21:
<<;privacy=off;answered-count=2;reason=deflection;counter=1;answered>>
Oct 28 08:00:39 kam1 /usr/sbin/kamailio[14935]: ERROR: <core>
[parser/parse_addr_spec.c:254]: parse_to_param(): ERROR: parse_to_param
:unexpected char ["] in status 21:
<<;privacy=off;answered-count=2;reason=deflection;counter=1;answered,>> .
Oct 28 08:00:39 kam1 /usr/sbin/kamailio[14935]: ERROR: <core>
[parser/parse_addr_spec.c:906]: parse_addr_spec(): ERROR: parse_to: invalid
To -  unexpected end of header in state 21
Oct 28 08:00:39 kam1 /usr/sbin/kamailio[14935]: ERROR: <core>
[parser/parse_diversion.c:69]: parse_diversion_header():
ERROR:parse_diversion_header: bad diversion header
Oct 28 08:00:39 kam1 /usr/sbin/kamailio[14935]: ERROR: <core>
[lvalue.c:345]: lval_pvar_assign(): non existing right pvar
Oct 28 08:00:39 kam1 /usr/sbin/kamailio[14935]: ERROR: <core>
[lvalue.c:405]: lval_assign(): assignment failed at pos: (562,21-562,35)

The code on line 562 is “$avp(div_user) = $(di{uri.user});”.

Can this be handled in any way by Kamailio without changing the parser?

Best regards,
Björn Bylander

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 7120 bytes
Desc: not available
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20161028/9bebae45/attachment.bin>


More information about the sr-users mailing list