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