Bala wrote:
Contact:sip:p65549t0000000m112562c591000000@10.196.0.111:5089 
;+g.3gpp.accesstype="cellular";+sip.instance="<urn:gsma:imei:3561119000-996900-0>"

Currently this is getting parsed incorrectly based on the closed brackets and 
we end up storing the fullcontact with incomplete URI (metnioned below) and 
same is sent in the BYE REQURI.

sip:p65549t0000000m112562c591000000@10.196.0.111:5089 
;+g.3gpp.accesstype="cellular";+sip.instance="<urn:gsma:imei:3561119000-996900-0


On 08-06-17 02:12, George Joseph wrote:
Here's the ABNF:

Contact        =  ("Contact" / "m" ) HCOLON
                   ( STAR / (contact-param *(COMMA contact-param)))
contact-param  =  (name-addr / addr-spec) *(SEMI contact-params)
name-addr      =  [ display-name ] LAQUOT addr-spec RAQUOT
addr-spec      =  SIP-URI / SIPS-URI / absoluteURI
display-name   =  *(token LWS)/ quoted-string

After re-reading I realized that "contact-param" can be EITHER a "name-addr" which includes the display name and DOES require the brackets OR an "addr-spec" which doesn't include the display name and does NOT require the brackets.

Yes, those parameters are an indious bunch, because:

SIP-URI may contain ";uri-parameters" [1], while the contact-params may contain ";contact-params" [2]

[1] http://www.tech-invite.com/fo-abnf/tinv-fo-abnf-sipuriup.html#idx
[2] http://www.tech-invite.com/fo-abnf/tinv-fo-abnf-sip-h-contact.html#contact-params

So this is valid:

  Contact: <sip:line1@192.0.2.2;transport=tcp>;reg-id=1;expires=60

And so would this be (except, it isn't, read on):

  Contact: sip:line1@192.0.2.2;transport=tcp;reg-id=1;expires=60

In which case you wouldn't be able to separate the uri-parameters from the contact-params.

Luckily, there is this in RFC3261, 20.10 "Contact":

   [...] If no "<"
   and ">" are present, all parameters after the URI are header
   parameters, not URI parameters.

and

   Even if the "display-name" is empty, the "name-addr" form MUST be
   used if the "addr-spec" contains a comma, semicolon, or question
   mark.

Without the transport=tcp, it would be valid:

  Contact: sip:line1@192.0.2.2;reg-id=1;expires=60


So, even though you cannot tell from just the ABNF, the mentioned Contact should be parsed as follows:

  addr-spec = sip:p65549t0000000m112562c591000000@10.196.0.111:5089
contact-params = ;+g.3gpp.accesstype="cellular";+sip.instance="<urn:gsma:imei:3561119000-996900-0>"

Hence: the wrongly stored fullcontact is too long, not too short.


Walter


--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to