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

[reSIProcate] Creating a DUM with automatic port?


Hi All

I've found something in reSIP that confuses me.

I have a SIP client using the DialogUsageManager. I am trying to use 
addTransport() to specify that it should connect via UDP and/or TCP and I 
don't particularly care what port it should connect from (of course, I 
would prefer an ephemeral port). The prototype for 
SipStack::addTransport() implies I should be able to omit the port and use 
a default of 0, however the implementation of this function immediately 
asserts that the port should be greater than 0. From what I have seen, 
reSIP just calls bind() with a normal sockaddr structure.

>From this I would assume I can allow it to select a port for me, using a 
port of 0, although the assertion implies I should not. I would prefer not 
to select my own ephemeral port so I do not have to handle any collisions 
with in-use ports.

 Am I using the DUM correctly by trying to add the desired transport with 
a default port of 0?
Is there any reason I should NOT specify port 0?

The relevant code snippets are below

Thanks

Brad


My client:

    dum.addTransport(resip::UDP, 12345, resip::V4); 
        // always uses local/client port of 12345 (BAD!)

    dum.addTransport(resip::UDP, 0, resip::V4); 
        // assertion failure (port > 0)

    dum.addTransport(resip::UDP);
        // assertion failure (port > 0)


resip/stack/SipStack.hxx:

      Transport* addTransport( TransportType protocol,
                         int port=0,.
                         IpVersion version=V4,
                         StunSetting stun=StunDisabled,
                         const Data& ipInterface = Data::Empty,.
                         const Data& sipDomainname = Data::Empty, // only 
used
                                                                  // for 
TLS
                                                                  // based 
stuff.
                         const Data& privateKeyPassPhrase = Data::Empty,
                         SecurityTypes::SSLType sslType = 
SecurityTypes::TLSv1);


resip/stackSipStack.cxx:

SipStack::addTransport( TransportType protocol,
                        int port,.
                        IpVersion version,
                        StunSetting stun,
                        const Data& ipInterface,.
                        const Data& sipDomainname,
                        const Data& privateKeyPassPhrase,
                        SecurityTypes::SSLType sslType)
{
   assert(!mShuttingDown);
   assert( port >  0 );
   ...
}