r3478 - in trunk/libmsip: . source source/transports

mikma at minisip.org mikma at minisip.org
Sun Nov 18 00:32:05 CET 2007


Author: mikma
Date: 2007-11-18 00:32:05 +0100 (Sun, 18 Nov 2007)
New Revision: 3478

Added:
   trunk/libmsip/source/transports/SipTransportTls.cxx
   trunk/libmsip/source/transports/SipTransportTls.h
Modified:
   trunk/libmsip/Makefile.am
   trunk/libmsip/source/SipLayerTransport.cxx
   trunk/libmsip/source/SipLayerTransport.h
   trunk/libmsip/source/transports/SipTransport.cxx
   trunk/libmsip/source/transports/SipTransportTcp.h
   trunk/libmsip/source/transports/SipTransportUdp.h
Log:
Define SipTransportTls based on SipTransportTcp.
Move createTlsServer to SipTransportTls from SipLayerTransport.


Modified: trunk/libmsip/Makefile.am
===================================================================
--- trunk/libmsip/Makefile.am	2007-11-17 23:11:51 UTC (rev 3477)
+++ trunk/libmsip/Makefile.am	2007-11-17 23:32:05 UTC (rev 3478)
@@ -62,6 +62,8 @@
 		     source/transports/SipTransportUdp.cxx \
 		     source/transports/SipTransportTcp.h \
 		     source/transports/SipTransportTcp.cxx \
+		     source/transports/SipTransportTls.h \
+		     source/transports/SipTransportTls.cxx \
                      source/dialogs/SipTransitionUtils.cxx \
 		     source/dialogs/SipDialog.cxx \
 		     source/dialogs/SipDialogRegister.cxx \

Modified: trunk/libmsip/source/SipLayerTransport.cxx
===================================================================
--- trunk/libmsip/source/SipLayerTransport.cxx	2007-11-17 23:11:51 UTC (rev 3477)
+++ trunk/libmsip/source/SipLayerTransport.cxx	2007-11-17 23:32:05 UTC (rev 3478)
@@ -1204,35 +1204,6 @@
 }
 
 
-MRef<SipSocketServer *> SipLayerTransport::createTlsServer( bool ipv6, const string &ipString, int32_t prefPort, MRef<CertificateChain *> certChain, MRef<CertificateSet *> cert_db)
-{
-	MRef<ServerSocket *> sock;
-	MRef<SipSocketServer *> server;
-	int32_t port = prefPort;
-	bool fail;
-	int triesLeft=10;
-
-	do {
-		fail=false;
-		try{
-			sock = TLSServerSocket::create( ipv6, port, /*config->cert*/certChain->getFirst(),
-					/*config->*/cert_db );
-			server = new StreamSocketServer( this, sock );
-			server->setExternalIp( ipString );
-		} catch (const BindFailed &bf){
-			fail=true;
-			triesLeft--;
-			if (!triesLeft)
-				throw;
-		}
-
-	} while (fail);
-
-	contactTlsPort = port;
-
-	return server;
-}
-
 void SipLayerTransport::startUdpServer(const string &ipString, const string &ip6String, int32_t localUdpPort, int32_t externalContactUdpPort)
 {
 	MRef<SipSocketServer *> server;
@@ -1293,13 +1264,17 @@
 		return;
 	}
 
-	server = createTlsServer( false, /*config->localIpString*/ ipString, prefPort, certChain, cert_db);
+	MRef<SipTransport*> tls =
+		SipTransportRegistry::getInstance()->findTransport( "tcp", true );
+
+	server = tls->createServer( this, false, ipString, prefPort, cert_db, certChain );
 	addServer( server );
+	contactTlsPort = server->getExternalPort();
 
 	if( /*config->localIp6String*/ ip6String != "" ){
 		MRef<SipSocketServer *> server6;
 
-		server6 = createTlsServer( true, /*config->localIp6String*/ ip6String, prefPort, certChain, cert_db );
+		server6 = tls->createServer( this, true, ip6String, prefPort, cert_db, certChain );
 		dispatcher->getLayerTransport()->addServer( server6 );
 	}
 }

Modified: trunk/libmsip/source/SipLayerTransport.h
===================================================================
--- trunk/libmsip/source/SipLayerTransport.h	2007-11-17 23:11:51 UTC (rev 3477)
+++ trunk/libmsip/source/SipLayerTransport.h	2007-11-17 23:32:05 UTC (rev 3478)
@@ -146,7 +146,6 @@
 		int contactUdpPort;
 		int contactTcpPort;
 		int contactTlsPort;
-		MRef<SipSocketServer *> createTlsServer( bool ipv6, const std::string &ipString, int32_t prefPort, MRef<CertificateChain *> certChain, MRef<CertificateSet *> cert_db  );
 
 		Mutex serversLock;
 		std::list<MRef<SipSocketServer *> > servers;

Modified: trunk/libmsip/source/transports/SipTransport.cxx
===================================================================
--- trunk/libmsip/source/transports/SipTransport.cxx	2007-11-17 23:11:51 UTC (rev 3477)
+++ trunk/libmsip/source/transports/SipTransport.cxx	2007-11-17 23:32:05 UTC (rev 3478)
@@ -25,6 +25,7 @@
 #include"SipTransport.h"
 #include"SipTransportUdp.h"
 #include"SipTransportTcp.h"
+#include"SipTransportTls.h"
 
 using namespace std;
 
@@ -37,6 +38,7 @@
 SipTransportRegistry::SipTransportRegistry(){
 	registerPlugin( new SipTransportUdp( NULL ) );
 	registerPlugin( new SipTransportTcp( NULL ) );
+	registerPlugin( new SipTransportTls( NULL ) );
 }
 
 MRef<SipTransport*> SipTransportRegistry::findTransport( string protocol, bool secure ) const{

Modified: trunk/libmsip/source/transports/SipTransportTcp.h
===================================================================
--- trunk/libmsip/source/transports/SipTransportTcp.h	2007-11-17 23:11:51 UTC (rev 3477)
+++ trunk/libmsip/source/transports/SipTransportTcp.h	2007-11-17 23:32:05 UTC (rev 3478)
@@ -33,7 +33,7 @@
 		SipTransportTcp( MRef<Library *> lib );
 		virtual ~SipTransportTcp();
 
-		// SipTransportTcp
+		// SipTransport
 		virtual bool isSecure() const { return false; }
 
 		virtual std::string getProtocol() const { return "tcp"; }

Copied: trunk/libmsip/source/transports/SipTransportTls.cxx (from rev 3477, trunk/libmsip/source/transports/SipTransportTcp.cxx)
===================================================================
--- trunk/libmsip/source/transports/SipTransportTls.cxx	                        (rev 0)
+++ trunk/libmsip/source/transports/SipTransportTls.cxx	2007-11-17 23:32:05 UTC (rev 3478)
@@ -0,0 +1,89 @@
+/*
+  Copyright (C) 2005, 2004 Erik Eliasson, Johan Bilien
+  Copyright (C) 2005-2007  Mikael Magnusson
+  
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+/*
+ * Authors: Erik Eliasson <eliasson at it.kth.se>
+ *          Johan Bilien <jobi at via.ecp.fr>
+ *          Mikael Magnusson <mikma at users.sourceforge.net>
+*/
+
+#include<config.h>
+#include<libmnetutil/NetworkException.h>
+#include<libmcrypto/TlsServerSocket.h>
+#include"SipTransportTls.h"
+
+static std::list<std::string> pluginList;
+static int initialized;
+
+using namespace std;
+
+extern "C" LIBMSIP_API
+std::list<std::string> *mtls_LTX_listPlugins( MRef<Library*> lib ){
+	if( !initialized ){
+		pluginList.push_back("getPlugin");
+		initialized = true;
+	}
+
+	return &pluginList;
+}
+
+extern "C" LIBMSIP_API
+MPlugin * mtls_LTX_getPlugin( MRef<Library*> lib ){
+	return new SipTransportTls( lib );
+}
+
+
+SipTransportTls::SipTransportTls( MRef<Library*> lib ) : SipTransport( lib ){
+}
+
+SipTransportTls::~SipTransportTls(){
+}
+
+
+
+MRef<SipSocketServer *> SipTransportTls::createServer( MRef<SipLayerTransport*> receiver, bool ipv6, const string &ipString, int32_t prefPort, MRef<CertificateSet *> cert_db, MRef<CertificateChain *> certChain )
+{
+	MRef<ServerSocket *> sock;
+	MRef<SipSocketServer *> server;
+	int32_t port = prefPort;
+	bool fail;
+	int triesLeft=10;
+
+	do {
+		fail=false;
+		try{
+			sock = TLSServerSocket::create( ipv6, port, /*config->cert*/certChain->getFirst(),
+					/*config->*/cert_db );
+			server = new StreamSocketServer( receiver, sock );
+			server->setExternalIp( ipString );
+		} catch (const BindFailed &bf){
+			fail=true;
+			triesLeft--;
+			if (!triesLeft)
+				throw;
+		}
+
+	} while (fail);
+
+	return server;
+}
+
+uint32_t SipTransportTls::getVersion() const{
+	return 0x00000001;
+}

Copied: trunk/libmsip/source/transports/SipTransportTls.h (from rev 3477, trunk/libmsip/source/transports/SipTransportTcp.h)
===================================================================
--- trunk/libmsip/source/transports/SipTransportTls.h	                        (rev 0)
+++ trunk/libmsip/source/transports/SipTransportTls.h	2007-11-17 23:32:05 UTC (rev 3478)
@@ -0,0 +1,54 @@
+/*
+  Copyright (C) 2006-2007 Mikael Magnusson
+  
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+/*
+ * Authors: Mikael Magnusson <mikma at users.sourceforge.net>
+*/
+
+#ifndef SIP_TRANSPORT_TLS_H
+#define SIP_TRANSPORT_TLS_H
+
+#include<libmsip/libmsip_config.h>
+
+#include<string>
+#include"SipTransport.h"
+
+class SipTransportTls: public SipTransport{
+	public:
+		SipTransportTls( MRef<Library *> lib );
+		virtual ~SipTransportTls();
+
+		// SipTransport
+		virtual bool isSecure() const { return true; }
+
+		virtual std::string getProtocol() const { return "tcp"; }
+
+		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 );
+
+		// MPlugin
+		virtual std::string getName() const { return "TLS"; }
+
+		virtual uint32_t getVersion() const;
+
+		virtual std::string getDescription() const { return "SIP Transport TLS"; };
+
+		// MObject
+		virtual std::string getMemObjectType() const { return getName(); }
+};
+
+#endif

Modified: trunk/libmsip/source/transports/SipTransportUdp.h
===================================================================
--- trunk/libmsip/source/transports/SipTransportUdp.h	2007-11-17 23:11:51 UTC (rev 3477)
+++ trunk/libmsip/source/transports/SipTransportUdp.h	2007-11-17 23:32:05 UTC (rev 3478)
@@ -33,7 +33,7 @@
 		SipTransportUdp( MRef<Library *> lib );
 		virtual ~SipTransportUdp();
 
-		// SipTransportUdp
+		// SipTransport
 		virtual bool isSecure() const { return false; }
 
 		virtual std::string getProtocol() const { return "udp"; }



More information about the Minisip-devel mailing list