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