[reSIProcate] repro inserting rport in Via

Scott Godin sgodin at sipspectrum.com
Fri Dec 2 13:28:30 CST 2016


Hi Daniel,

Sounds like something the stack should handle, but I haven't analyzed it in
detail.

Scott

On Fri, Dec 2, 2016 at 2:16 PM, Daniel Pocock <daniel at pocock.pro> wrote:

>
>
> On 02/12/16 20:07, Scott Godin wrote:
> > Hi Daniel,
> >
> > rport is only supposed to be used by entities for response routing if
> > the request was sent over an unreliable transport.
> >
> > See the following text from RFC3581:
> >
> > When a server attempts to send a response, it examines the topmost
> >    Via header field value of that response.  If the "sent-protocol"
> >    component indicates an *unreliable unicast transport protocol, such
> as UDP*, and there is no "maddr" parameter, but there is both a
> >    "received" parameter and an "rport" parameter, the response MUST be
> >    sent to the IP address listed in the "received" parameter, and the
> >    port in the "rport" parameter.
> >
>
>
> Thanks for pointing that out
>
> In my case, the UA sending the response is reConServer, which is based
> on reCon / reSIProcate
>
> It occurs in my REGISTER forwarding logic (a subclass of TransactionUser)
>
> The relevant code snippet is below, notice my current workaround is to
> remove p_rport.  Should the TU code be checking if it is a reliable
> transport, or should the stack do that for the TU after send() is called?
>
>
>          if(sipMsg->isRequest() && sipMsg->method()==REGISTER)
>          {
>             StackLog(<<"Handling a REGISTER request");
>             sipMsg->header(h_Supporteds).push_back(Token(Symbols::Path));
>             if(sipMsg->header(h_Expires).value() > 60)
>             {
>                sipMsg->header(h_Expires).value() = 60;
>             }
>
> sipMsg->header(h_Paths).push_front(NameAddr("sip:sbc.example.org
> ;transport=tcp;lr"));
>             NameAddr
> regProxy("sip:reg-proxy.example.org:15060;transport=tcp;lr");
>             sipMsg->header(h_Routes).clear(); // remove ourselves
>             sipMsg->header(h_Routes).push_front(regProxy);
>             mStack.send(*sipMsg, this);
>          }
>          else if(sipMsg->isResponse() && sipMsg->header(h_CSeq).method()
> == REGISTER)
>          {
>             StackLog(<<"Handling a REGISTER response");
>             sipMsg->header(h_Vias).front().remove(p_rport);  // FIXME?
>             mStack.send(*sipMsg, this);
>          }
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20161202/f47781d1/attachment.htm>


More information about the resiprocate-devel mailing list