Hi all,
I have a doubt about the CANCEL messages and I would like to hear your
opinion. The routes that should be inserted in the CANCEL message should be
based int the ones that are part of the received INVITE or in the ones that
are part of the transmitted INVITE? From my point of view the CANCELs should
be created based in the routes of the transmitted INVITE, in order to the
stateless proxies be able to route the CANCEL requests properly.
The RFC says the following:
9.1 Client Behavior
A CANCEL request SHOULD NOT be sent to cancel a request other than
INVITE. Since requests other than INVITE are responded to
immediately, sending a CANCEL for a non-INVITE request would always create a
race condition.
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. A CANCEL constructed by a client MUST
have only a single Via header field value matching the top Via value in
the request being cancelled. Using the same values for these header
fields allows the CANCEL to be matched with the request it cancels (Section
9.2 indicates how such matching occurs). However, the method part of the
CSeq header field MUST have a value of CANCEL. This allows it to be
identified and processed as a transaction in its own right (See Section
17). If the request being cancelled contains a Route header field,
the CANCEL request MUST include that Route header field's values. This is
needed so that stateless proxies are able to route CANCEL requests properly.
Thanks in advance,
Nuno Ribeiro