r3480 - in trunk/libmsip/source: . transports

mikma at minisip.org mikma at minisip.org
Sun Nov 18 10:27:06 CET 2007


Author: mikma
Date: 2007-11-18 10:27:05 +0100 (Sun, 18 Nov 2007)
New Revision: 3480

Modified:
   trunk/libmsip/source/SipLayerTransport.cxx
   trunk/libmsip/source/transports/SipTransport.cxx
   trunk/libmsip/source/transports/SipTransport.h
   trunk/libmsip/source/transports/SipTransportTcp.cxx
   trunk/libmsip/source/transports/SipTransportTcp.h
   trunk/libmsip/source/transports/SipTransportTls.cxx
   trunk/libmsip/source/transports/SipTransportTls.h
Log:
Declare SipTransport::connect, implemented by connection-oriented
transport i.e. TCP and TLS in libmsip.


Modified: trunk/libmsip/source/SipLayerTransport.cxx
===================================================================
--- trunk/libmsip/source/SipLayerTransport.cxx	2007-11-18 09:19:38 UTC (rev 3479)
+++ trunk/libmsip/source/SipLayerTransport.cxx	2007-11-18 09:27:05 UTC (rev 3480)
@@ -43,12 +43,8 @@
 #include<libmsip/SipHeaderContact.h>
 #include<libmsip/SipHeaderTo.h>
 
-#include<libmcrypto/TlsServerSocket.h>
-#include<libmnetutil/ServerSocket.h>
 #include<libmnetutil/NetworkException.h>
 #include<libmnetutil/NetworkFunctions.h>
-#include<libmnetutil/UDPSocket.h>
-#include<libmcrypto/TlsSocket.h>
 #include<libmnetutil/NetworkException.h>
 #include<libmutil/Timestamp.h>
 #include<libmutil/MemObject.h>
@@ -750,15 +746,19 @@
 			/* No existing StreamSocket to that host,
 			 * create one */
 			cerr << "SipLayerTransport: sendMessage: creating new socket" << endl;
-			if( transport == "TLS" ){
-				ssocket = TLSSocket::connect( destAddr, 
-							port, getMyCertificate(),
-							cert_db );
+
+			// TODO cleanup
+			bool secure = false;
+			string protocol = transport;
+			if( protocol == "TLS" || protocol == "tls" ){
+				protocol = "TCP";
+				secure = true;
 			}
-			else{ /* TCP */
-				ssocket = new TCPSocket( destAddr, port );
-			}
 
+			MRef<SipTransport*> plugin =
+				SipTransportRegistry::getInstance()->findTransport( protocol, secure );
+			ssocket = plugin->connect( destAddr, port,
+						   cert_db, getCertificateChain() );
 			addSocket( ssocket );
 		} else cerr << "SipLayerTransport: sendMessage: reusing old socket" << endl;
 		socket = *ssocket;

Modified: trunk/libmsip/source/transports/SipTransport.cxx
===================================================================
--- trunk/libmsip/source/transports/SipTransport.cxx	2007-11-18 09:19:38 UTC (rev 3479)
+++ trunk/libmsip/source/transports/SipTransport.cxx	2007-11-18 09:27:05 UTC (rev 3480)
@@ -35,6 +35,11 @@
 SipTransport::SipTransport( MRef<Library *> lib ): MPlugin( lib ){
 }
 
+MRef<StreamSocket *> SipTransport::connect( const IPAddress &addr, uint16_t port, MRef<CertificateSet *> cert_db, MRef<CertificateChain *> certChain ){
+	throw Exception("Connection less transport");
+}
+
+
 SipTransportRegistry::SipTransportRegistry(){
 	registerPlugin( new SipTransportUdp( NULL ) );
 	registerPlugin( new SipTransportTcp( NULL ) );
@@ -42,9 +47,13 @@
 }
 
 MRef<SipTransport*> SipTransportRegistry::findTransport( string protocol, bool secure ) const{
+	string lcProt = protocol;
 	list< MRef<MPlugin*> >::const_iterator iter;
 	list< MRef<MPlugin*> >::const_iterator stop = plugins.end();
 
+	transform( lcProt.begin(), lcProt.end(),
+		   lcProt.begin(), (int(*)(int))tolower );
+
 	for( iter = plugins.begin(); iter != stop; iter++ ){
 		MRef<MPlugin*> plugin = *iter;
 
@@ -58,8 +67,8 @@
 			continue;
 
 		if( transport->isSecure() == secure &&
-		    transport->getProtocol() == protocol ){
-			mdbg << "SipTransport: tranport found!!! =  " << protocol << endl;
+		    transport->getProtocol() == lcProt ){
+			mdbg << "SipTransport: tranport found!!! =  " << lcProt << endl;
 			return transport;
 		}
 	}

Modified: trunk/libmsip/source/transports/SipTransport.h
===================================================================
--- trunk/libmsip/source/transports/SipTransport.h	2007-11-18 09:19:38 UTC (rev 3479)
+++ trunk/libmsip/source/transports/SipTransport.h	2007-11-18 09:27:05 UTC (rev 3480)
@@ -47,7 +47,13 @@
 		/** @return transport protocol id in lower case, such as udp */
 		virtual std::string getProtocol() const=0;
 
+		/** Setup a new listening socket */
 		virtual MRef<SipSocketServer *> createServer( MRef<SipLayerTransport*> receiver, bool ipv6, const std::string &ipString, int32_t prefPort, MRef<CertificateSet *> cert_db = NULL, MRef<CertificateChain *> certChain = NULL ) = 0;
+		/**
+		 * Setup a new connection, implemented by
+		 * connection-oriented transports only
+		 */
+		virtual MRef<StreamSocket *> connect( const IPAddress &addr, uint16_t port, MRef<CertificateSet *> cert_db = NULL, MRef<CertificateChain *> certChain = NULL );
 
 		// MPlugin
 		std::string getPluginType() const { return "SipTransport"; }

Modified: trunk/libmsip/source/transports/SipTransportTcp.cxx
===================================================================
--- trunk/libmsip/source/transports/SipTransportTcp.cxx	2007-11-18 09:19:38 UTC (rev 3479)
+++ trunk/libmsip/source/transports/SipTransportTcp.cxx	2007-11-18 09:27:05 UTC (rev 3480)
@@ -84,6 +84,10 @@
 	return server;
 }
 
+MRef<StreamSocket *> SipTransportTcp::connect( const IPAddress &addr, uint16_t port, MRef<CertificateSet *> cert_db, MRef<CertificateChain *> certChain ){
+	return new TCPSocket( addr, port );
+}
+
 uint32_t SipTransportTcp::getVersion() const{
 	return 0x00000001;
 }

Modified: trunk/libmsip/source/transports/SipTransportTcp.h
===================================================================
--- trunk/libmsip/source/transports/SipTransportTcp.h	2007-11-18 09:19:38 UTC (rev 3479)
+++ trunk/libmsip/source/transports/SipTransportTcp.h	2007-11-18 09:27:05 UTC (rev 3480)
@@ -40,6 +40,8 @@
 
 		virtual MRef<SipSocketServer *> createServer( MRef<SipLayerTransport*> receiver, bool ipv6, const std::string &ipString, int32_t prefPort, MRef<CertificateSet *> cert_db = NULL, MRef<CertificateChain *> certChain = NULL );
 
+		virtual MRef<StreamSocket *> connect( const IPAddress &addr, uint16_t port, MRef<CertificateSet *> cert_db = NULL, MRef<CertificateChain *> certChain = NULL );
+
 		// MPlugin
 		virtual std::string getName() const { return "TCP"; }
 

Modified: trunk/libmsip/source/transports/SipTransportTls.cxx
===================================================================
--- trunk/libmsip/source/transports/SipTransportTls.cxx	2007-11-18 09:19:38 UTC (rev 3479)
+++ trunk/libmsip/source/transports/SipTransportTls.cxx	2007-11-18 09:27:05 UTC (rev 3480)
@@ -25,6 +25,7 @@
 
 #include<config.h>
 #include<libmnetutil/NetworkException.h>
+#include<libmcrypto/TlsSocket.h>
 #include<libmcrypto/TlsServerSocket.h>
 #include"SipTransportTls.h"
 
@@ -84,6 +85,11 @@
 	return server;
 }
 
+MRef<StreamSocket *> SipTransportTls::connect( const IPAddress &addr, uint16_t port, MRef<CertificateSet *> cert_db, MRef<CertificateChain *> certChain ){
+	return TLSSocket::connect( addr, port,
+				   certChain->getFirst(), cert_db );
+}
+
 uint32_t SipTransportTls::getVersion() const{
 	return 0x00000001;
 }

Modified: trunk/libmsip/source/transports/SipTransportTls.h
===================================================================
--- trunk/libmsip/source/transports/SipTransportTls.h	2007-11-18 09:19:38 UTC (rev 3479)
+++ trunk/libmsip/source/transports/SipTransportTls.h	2007-11-18 09:27:05 UTC (rev 3480)
@@ -40,6 +40,8 @@
 
 		virtual MRef<SipSocketServer *> createServer( MRef<SipLayerTransport*> receiver, bool ipv6, const std::string &ipString, int32_t prefPort, MRef<CertificateSet *> cert_db = NULL, MRef<CertificateChain *> certChain = NULL );
 
+		virtual MRef<StreamSocket *> connect( const IPAddress &addr, uint16_t port, MRef<CertificateSet *> cert_db = NULL, MRef<CertificateChain *> certChain = NULL );
+
 		// MPlugin
 		virtual std::string getName() const { return "TLS"; }
 



More information about the Minisip-devel mailing list