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