< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index  

Re: [reSIProcate] 'Contact' header mandatory in 18x responses?


In order for a 1xx response to create an early dialog the UAS MUST put
a Contact header in the response. (see 12.1.1 of 3261)

   When a UAS responds to a request with a response that establishes a
   dialog (such as a 2xx to INVITE), the UAS MUST copy all Record-Route
   header field values from the request into the response (including the
   URIs, URI parameters, and any Record-Route header field parameters,
   whether they are known or unknown to the UAS) and MUST maintain the
   order of those values.  The UAS MUST add a Contact header field to
   the response.  The Contact header field contains an address where the
   UAS would like to be contacted for subsequent requests in the dialog
   (which includes the ACK for a 2xx response in the case of an INVITE).
   Generally, the host portion of this URI is the IP address or FQDN of
   the host.  The URI provided in the Contact header field MUST be a SIP
   or SIPS URI.  If the request that initiated the dialog contained a

You'll note that receiving a 1xx without a Contact is legal (as you
pointed out). In this case dum will call
AppDialogSet::onNonDialogCreatingProvisional handler. You need to
install this handler in your application if you need to do something
with these provisionals.  Note that you will still be able to cancel
the INVITE.



On 8/10/05, Sandro Bordacchini <sandro@xxxxxx> wrote:
> Hi all.
> 
> I'm testing some devices (both soft and hard) for interoperability with
> my application (developed with resiprocate/dum).
> 
> I've noticed that, when i am acting as a UAC, sometimes onProvisional
> callback is not called even if 18x responses are sent to my application.
> Searching in log for some hints, i see that resiprocate seems to
> "discard" 18x responses that don't have 'Contact' header...
> 
> 180 without 'Contact':
> 
> ...
> DEBUG | 20050810-113354.296 | sandro | MyAppl | RESIP:DUM | 15280 |
> 1099754416 | DialogUsageManager.cxx:1398 |
> DialogUsageManager::processResponse: SipResp: 180 tid=0ba3fc4cdf382449
> cseq=INVITE / 1 from(wire)
> DEBUG | 20050810-113354.296 | sandro | MyAppl | RESIP:DUM | 15280 |
> 1099754416 | DialogId.cxx:50 | DialogId::DialogId:
> 0d9d7176be53db3d@c2FuZHJvLnBpc2Euc2lzLml0-8f749325-b1b141abaabc29f2i0
> DEBUG | 20050810-113354.296 | sandro | MyAppl | RESIP:DUM | 15280 |
> 1099754416 | DialogSet.cxx:655 | findDialog:
> 0d9d7176be53db3d@c2FuZHJvLnBpc2Euc2lzLml0-8f749325-b1b141abaabc29f2i0 in []
> INFO | 20050810-113354.296 | sandro | MyAppl | RESIP:DUM | 15280 |
> 1099754416 | DialogSet.cxx:575 | Cannot create a dialog, no Contact in 180.
> ...
> 
> and no onProvisional is called (nothing is called at all...).
> With other devices (es. X-Lite softphone) that send 'Contact' in 180
> response all goes ok.
> 
> Rfc3261 says that 'Contact' header in 1xx response (to an INVITE
> request) is optional.
> 
> In the ML archive I've found this thread (
> http://list.sipfoundry.org/archive/resiprocate-devel/msg02692.html )
> where a 'setOverrideHostPort' method of Profile class is told to do the
> job (i.e. populating Contact header)... but i suppose this is only for
> outgoing requests/responses, isn't it?
> 
> Any other that experienced this issue?
> Best regards,
> 
> --
> Ing. Sandro Bordacchini
> SIS s.r.l.
> Via Cottolengo, 21
> 56100 Pisa (Italy)
> 
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
>