[asterisk-dev] SIP CANCEL/To tag

alex at pilosoft.com alex at pilosoft.com
Thu Mar 30 17:39:03 MST 2006


Hello,

Asterisk will not use the tag that was generated by remote site for the 
To: field when sending CANCEL message.

Relevant line of chan_sip.c:
        /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
           as our original request, including tag (or presumably lack thereof) */
        if (!strcasestr(ot, "tag=") && sipmethod != SIP_CANCEL) { 
                                       ^^^^^^^^^^^^^^^^^^^^^^^

This causes a problem with certain gateways, which do expect CANCEL to 
contain the tag that was generated by the gateway in response (and sent in 
the 100 or 180 response).

RFC3261 is conflicting itself about it. On one hand 8.2.6.2 says:

   If a request contained a To tag in the request, the To header field
   in the response MUST equal that of the request.  However, if the To
   header field in the request did not contain a tag, the URI in the To
   header field in the response MUST equal the URI in the To header
   field; additionally, the UAS MUST add a tag to the To header field in
   the response (with the exception of the 100 (Trying) response, in
   which a tag MAY be present).  This serves to identify the UAS that is
   responding, possibly resulting in a component of a dialog ID.  The
   same tag MUST be used for all responses to that request, both final
   and provisional (again excepting the 100 (Trying)).  Procedures for
   the generation of tags are defined in Section 19.3. 

I read it that UAC after receiving a message with a tag should always use 
the tag.

On other hand, 9.1 says:

   The following procedures are used to construct a CANCEL request.  The
   Request-URI, Call-ID, To, the numeric part of CSeq, and From header
   fields in the CANCEL request MUST be identical to those in the
   request being cancelled, including tags. 

What does "including tags" really mean in this context? Does it mean the 
tags, as updated by UAS?


-alex




More information about the asterisk-dev mailing list