[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