[reSIProcate] Forcing use particular Transport

Scott Godin sgodin at sipspectrum.com
Thu Nov 4 15:13:15 CDT 2010


On Thu, Nov 4, 2010 at 12:58 AM, Kennard White
<kennard_white at logitech.com>wrote:

> Hi Scott,
>
> This Via technique you pointed out doesn't seem to work for TCP. The reason
> is that transmit() first uses findTransportByDest(), and if TCP it will try
> findConnection(). It will then re-use that connection (and its Transport)
> rather than the Transport I requested in the Via header. UDP does have this
> problem because there is no cache of active connections (well, unless there
> is a flow key, but that isn't my problem today :-).
>

Interesting.  : )


> As an additional issue, it doesn't "fix" the Via header to indicate the
> actual Transport that it picked.
>

Right - if the application populates the header, then the stack will not
touch it.  You could use a message decorator to "fixup" the Via before
sending on the wire.


> I notice that the Tuple "target" argument to transmit() has a transport
> member. Where does this "target" originate, what is its lifetime? Perhaps
> more importantly, can I arrange to somehow set target.transport? I doubt it
> especially if a DNS lookup is involved, but thought it worth asking.
>

Not sure offhand - I would have to dig through the code to answer that.  : )


> Thanks,
> Kennard
>
>
> On Fri, Oct 29, 2010 at 6:04 PM, Kennard White <kennard_white at logitech.com
> > wrote:
>
>> Thanks! I tried it out and it worked just fine.
>>
>> Kennard
>>
>>
>> On Fri, Oct 29, 2010 at 5:11 PM, Scott Godin <sgodin at sipspectrum.com>wrote:
>>
>>> There is an existing way to do this.  Instead of passing a empty Via
>>> header down to the stack and letting it populate it after the transport is
>>> selected, you can pre-set it to the IP address of the interface that you
>>> would like the request to be routed out.  This is what DUM uses when use the
>>> Profile setting setFixedTransportInterface and setFixedTransportPort.
>>>
>>>       ///If set dum will provide a port in the via for requests sent down
>>> to the stack.  This
>>>       ///will tell the transport selector to only look at those
>>> transports using this port.
>>>       ///Default is 0 (Disabled).
>>>       ///WARNING:  Setting this can cause undesirable behaviour in the
>>> case when you want
>>>       ///          DNS entries to decided your transport and you are
>>> supporting TLS.
>>>       ///          For example: if you add UDP:5060, TCP:5060 and
>>> TLS:5061 and setFixedTransportPort
>>>       ///          to 5060 - then the TLS transport cannot be used.
>>>       virtual void setFixedTransportPort(int fixedTransportPort);
>>>       virtual int getFixedTransportPort() const;
>>>       virtual void unsetFixedTransportPort();
>>>
>>>       ///If set dum will provide a interface in the via for requests sent
>>> down to the stack.  This
>>>       ///will tell the transport selector to only look at those
>>> transports using this interface.
>>>       ///Default is Data::Empty (Disabled).
>>>       virtual void setFixedTransportInterface(const Data&
>>> fixedTransportInterface);
>>>       virtual const Data& getFixedTransportInterface() const;
>>>       virtual void unsetFixedTransportInterface();
>>>
>>> Scott
>>>
>>> On Fri, Oct 29, 2010 at 4:55 PM, Kennard White <
>>> kennard_white at logitech.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I'm opening up multiple Transports within one stack to enable a test
>>>> scenario. I'd like to route particular SipMessage over to a particular
>>>> Transport, as decided by app. I've made patch that allows app to call
>>>> msg->setForceTransport() to control this. This is analgous to the existing
>>>> forceTarget() call.
>>>>
>>>> Is this a reasonable approach? Is there a better (existing) mechanism?
>>>>
>>>> I've attached the patch.
>>>>
>>>> Thanks,
>>>> Kennard
>>>>
>>>> _______________________________________________
>>>> resiprocate-devel mailing list
>>>> resiprocate-devel at resiprocate.org
>>>> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>>>>
>>>
>>>
>>
>
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel at resiprocate.org
> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20101104/6d5eb220/attachment.htm>


More information about the resiprocate-devel mailing list