r3485 - in trunk/libmsip/source: . transports
mikma at minisip.org
mikma at minisip.org
Sun Nov 18 11:56:47 CET 2007
Author: mikma
Date: 2007-11-18 11:56:46 +0100 (Sun, 18 Nov 2007)
New Revision: 3485
Modified:
trunk/libmsip/source/SipLayerTransport.cxx
trunk/libmsip/source/transports/SipTransport.cxx
trunk/libmsip/source/transports/SipTransport.h
Log:
Implement SipTransport::getUriScheme and
SipTransportRegistry::findTransport by socket type,
use in getSocketTransport in SipLayerTransport.
Modified: trunk/libmsip/source/SipLayerTransport.cxx
===================================================================
--- trunk/libmsip/source/SipLayerTransport.cxx 2007-11-18 10:40:45 UTC (rev 3484)
+++ trunk/libmsip/source/SipLayerTransport.cxx 2007-11-18 10:56:46 UTC (rev 3485)
@@ -447,23 +447,18 @@
}
-string getSocketTransport( MRef<Socket*> socket )
+MRef<SipTransport*> getSocketTransport( MRef<Socket*> socket )
{
- switch( socket->getType() ){
- case SOCKET_TYPE_TLS:
- return "TLS";
+ MRef<SipTransport*> transport =
+ SipTransportRegistry::getInstance()->findTransport( socket->getType() );
- case SOCKET_TYPE_TCP:
- return "TCP";
-
- case SOCKET_TYPE_UDP:
- return "UDP";
-
- default:
- mdbg("signaling/sip") << "SipLayerTransport: Unknown transport protocol " + socket->getType() <<endl;
- // TODO more describing exception and message
- throw NetworkException();
+ if( !transport ){
+ mdbg("signaling/sip") << "SipLayerTransport: Unknown transport protocol " + socket->getType() <<endl;
+ // TODO more describing exception and message
+ throw NetworkException();
}
+
+ return transport;
}
void getIpPort( MRef<SipSocketServer*> server, MRef<Socket*> socket,
@@ -484,7 +479,7 @@
MRef<SipSocketServer *> server,
MRef<Socket *> socket,
string branch ){
- string transport;
+ MRef<SipTransport*> transport;
uint16_t port;
string ip;
@@ -501,7 +496,7 @@
getIpPort( server, socket, ip, port );
MRef<SipHeaderValue*> hdrVal =
- new SipHeaderValueVia(transport, ip, port);
+ new SipHeaderValueVia(transport->getViaProtocol(), ip, port);
// Add rport parameter, defined in RFC 3581
hdrVal->addParameter(new SipHeaderParameter("rport", "", false));
@@ -792,7 +787,7 @@
MRef<SipHeaderValueContact*> contactp = pack->getHeaderValueContact();
uint16_t port;
string ip;
- string transport;
+ MRef<SipTransport*> transport;
if( !contactp )
return;
@@ -810,8 +805,9 @@
transport = getSocketTransport( socket );
getIpPort( server, socket, ip, port );
+ contactUri.setProtocolId( transport->getUriScheme() );
contactUri.setIp( ip );
- contactUri.setTransport( transport );
+ contactUri.setTransport( transport->getProtocol() );
if(ipv6 || socket->getType() != SOCKET_TYPE_UDP){
Modified: trunk/libmsip/source/transports/SipTransport.cxx
===================================================================
--- trunk/libmsip/source/transports/SipTransport.cxx 2007-11-18 10:40:45 UTC (rev 3484)
+++ trunk/libmsip/source/transports/SipTransport.cxx 2007-11-18 10:56:46 UTC (rev 3485)
@@ -35,12 +35,16 @@
SipTransport::SipTransport( MRef<Library *> lib ): MPlugin( lib ){
}
+string SipTransport::getUriScheme() const{
+ return isSecure() ? "sips" : "sip";
+}
+
int32_t SipTransport::getDefaultPort() const{
return isSecure() ? 5061 : 5060;
}
string SipTransport::getSrv() const{
- string service = isSecure() ? "sips" : "sip";
+ const string &service = getUriScheme();
const string &proto = getProtocol();
return "_" + service + "._" + proto;
@@ -115,3 +119,28 @@
return NULL;
}
+
+MRef<SipTransport*> SipTransportRegistry::findTransport( int32_t socketType ) const{
+ list< MRef<MPlugin*> >::const_iterator iter;
+ list< MRef<MPlugin*> >::const_iterator stop = plugins.end();
+
+ for( iter = plugins.begin(); iter != stop; iter++ ){
+ MRef<MPlugin*> plugin = *iter;
+
+ if( !plugin )
+ continue;
+
+ MRef<SipTransport*> transport =
+ dynamic_cast<SipTransport*>( *plugin );
+
+ if( !transport )
+ continue;
+
+ if( transport->getSocketType() == socketType ){
+ mdbg << "SipTransport: Socket type found!!! = " << socketType << endl;
+ return transport;
+ }
+ }
+
+ return NULL;
+}
Modified: trunk/libmsip/source/transports/SipTransport.h
===================================================================
--- trunk/libmsip/source/transports/SipTransport.h 2007-11-18 10:40:45 UTC (rev 3484)
+++ trunk/libmsip/source/transports/SipTransport.h 2007-11-18 10:56:46 UTC (rev 3485)
@@ -41,6 +41,9 @@
*/
class LIBMSIP_API SipTransport: public MPlugin{
public:
+ /** @return scheme of SIP(S) URI:s */
+ virtual std::string getUriScheme() const;
+
/** @return true if it is a encrypted SIPS transport */
virtual bool isSecure() const=0;
@@ -91,6 +94,9 @@
MRef<SipTransport*> findViaTransport( const std::string &protocol ) const;
+ /** Search for transport by socket type. */
+ MRef<SipTransport*> findTransport( int32_t socketType ) const;
+
protected:
SipTransportRegistry();
More information about the Minisip-devel
mailing list