r3477 - in trunk/libmsip: . source source/transports
mikma at minisip.org
mikma at minisip.org
Sun Nov 18 00:11:51 CET 2007
Author: mikma
Date: 2007-11-18 00:11:51 +0100 (Sun, 18 Nov 2007)
New Revision: 3477
Added:
trunk/libmsip/source/transports/SipTransportTcp.cxx
trunk/libmsip/source/transports/SipTransportTcp.h
Modified:
trunk/libmsip/Makefile.am
trunk/libmsip/source/SipLayerTransport.cxx
trunk/libmsip/source/SipLayerTransport.h
trunk/libmsip/source/transports/SipTransport.cxx
Log:
Define SipTransportTcp based on SipTransportUdp.
Move createTcpServer to SipTransportTcp from SipLayerTransport.
Modified: trunk/libmsip/Makefile.am
===================================================================
--- trunk/libmsip/Makefile.am 2007-11-17 22:59:49 UTC (rev 3476)
+++ trunk/libmsip/Makefile.am 2007-11-17 23:11:51 UTC (rev 3477)
@@ -60,6 +60,8 @@
source/transports/SipTransport.cxx \
source/transports/SipTransportUdp.h \
source/transports/SipTransportUdp.cxx \
+ source/transports/SipTransportTcp.h \
+ source/transports/SipTransportTcp.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 22:59:49 UTC (rev 3476)
+++ trunk/libmsip/source/SipLayerTransport.cxx 2007-11-17 23:11:51 UTC (rev 3477)
@@ -1204,35 +1204,6 @@
}
-MRef<SipSocketServer *> SipLayerTransport::createTcpServer( bool ipv6, const string &ipString, int32_t prefPort)
-{
- MRef<ServerSocket *> sock;
- MRef<SipSocketServer *> server;
- int32_t port = prefPort;
- bool fail;
- int triesLeft=10;
-
- do {
- fail=false;
- try {
-
- sock = ServerSocket::create( port, ipv6 );
- server = new StreamSocketServer( this, sock );
- server->setExternalIp( ipString );
-
- } catch ( const BindFailed &bf ){
- fail=true;
- triesLeft--;
- if (!triesLeft)
- throw;
- }
- } while ( fail );
-
- contactTcpPort = port;
-
- return server;
-}
-
MRef<SipSocketServer *> SipLayerTransport::createTlsServer( bool ipv6, const string &ipString, int32_t prefPort, MRef<CertificateChain *> certChain, MRef<CertificateSet *> cert_db)
{
MRef<ServerSocket *> sock;
@@ -1296,14 +1267,17 @@
void SipLayerTransport::startTcpServer( const string & ipString, const string & ip6String, int32_t prefPort)
{
MRef<SipSocketServer *> server;
+ MRef<SipTransport*> tcp =
+ SipTransportRegistry::getInstance()->findTransport("tcp");
- server = createTcpServer( false, /*config->localIpString*/ ipString, prefPort);
- dispatcher->getLayerTransport()->addServer( server );
+ server = tcp->createServer( this, false, ipString, prefPort);
+ addServer( server );
+ contactTcpPort = server->getExternalPort();
if( /*config->localIp6String*/ ip6String != "" ){
MRef<SipSocketServer *> server6;
- server6 = createTcpServer( true, /*config->localIp6String*/ ip6String, prefPort );
+ server6 = tcp->createServer( this, true, ip6String, prefPort );
addServer( server6 );
}
}
Modified: trunk/libmsip/source/SipLayerTransport.h
===================================================================
--- trunk/libmsip/source/SipLayerTransport.h 2007-11-17 22:59:49 UTC (rev 3476)
+++ trunk/libmsip/source/SipLayerTransport.h 2007-11-17 23:11:51 UTC (rev 3477)
@@ -146,7 +146,6 @@
int contactUdpPort;
int contactTcpPort;
int contactTlsPort;
- MRef<SipSocketServer *> createTcpServer( bool ipv6, const std::string &ipString, int32_t prefPort );
MRef<SipSocketServer *> createTlsServer( bool ipv6, const std::string &ipString, int32_t prefPort, MRef<CertificateChain *> certChain, MRef<CertificateSet *> cert_db );
Mutex serversLock;
Modified: trunk/libmsip/source/transports/SipTransport.cxx
===================================================================
--- trunk/libmsip/source/transports/SipTransport.cxx 2007-11-17 22:59:49 UTC (rev 3476)
+++ trunk/libmsip/source/transports/SipTransport.cxx 2007-11-17 23:11:51 UTC (rev 3477)
@@ -24,6 +24,7 @@
#include"SipTransport.h"
#include"SipTransportUdp.h"
+#include"SipTransportTcp.h"
using namespace std;
@@ -35,6 +36,7 @@
SipTransportRegistry::SipTransportRegistry(){
registerPlugin( new SipTransportUdp( NULL ) );
+ registerPlugin( new SipTransportTcp( NULL ) );
}
MRef<SipTransport*> SipTransportRegistry::findTransport( string protocol, bool secure ) const{
Copied: trunk/libmsip/source/transports/SipTransportTcp.cxx (from rev 3476, trunk/libmsip/source/transports/SipTransportUdp.cxx)
===================================================================
--- trunk/libmsip/source/transports/SipTransportTcp.cxx (rev 0)
+++ trunk/libmsip/source/transports/SipTransportTcp.cxx 2007-11-17 23:11:51 UTC (rev 3477)
@@ -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<libmnetutil/TCPSocket.h>
+#include"SipTransportTcp.h"
+
+static std::list<std::string> pluginList;
+static int initialized;
+
+using namespace std;
+
+extern "C" LIBMSIP_API
+std::list<std::string> *mtcp_LTX_listPlugins( MRef<Library*> lib ){
+ if( !initialized ){
+ pluginList.push_back("getPlugin");
+ initialized = true;
+ }
+
+ return &pluginList;
+}
+
+extern "C" LIBMSIP_API
+MPlugin * mtcp_LTX_getPlugin( MRef<Library*> lib ){
+ return new SipTransportTcp( lib );
+}
+
+
+SipTransportTcp::SipTransportTcp( MRef<Library*> lib ) : SipTransport( lib ){
+}
+
+SipTransportTcp::~SipTransportTcp(){
+}
+
+
+
+MRef<SipSocketServer *> SipTransportTcp::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 = ServerSocket::create( port, ipv6 );
+ server = new StreamSocketServer( receiver, sock );
+ server->setExternalIp( ipString );
+
+ } catch ( const BindFailed &bf ){
+ fail=true;
+ triesLeft--;
+ if (!triesLeft)
+ throw;
+ }
+ } while ( fail );
+
+ return server;
+}
+
+uint32_t SipTransportTcp::getVersion() const{
+ return 0x00000001;
+}
Copied: trunk/libmsip/source/transports/SipTransportTcp.h (from rev 3476, trunk/libmsip/source/transports/SipTransportUdp.h)
===================================================================
--- trunk/libmsip/source/transports/SipTransportTcp.h (rev 0)
+++ trunk/libmsip/source/transports/SipTransportTcp.h 2007-11-17 23:11:51 UTC (rev 3477)
@@ -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_TCP_H
+#define SIP_TRANSPORT_TCP_H
+
+#include<libmsip/libmsip_config.h>
+
+#include<string>
+#include"SipTransport.h"
+
+class SipTransportTcp: public SipTransport{
+ public:
+ SipTransportTcp( MRef<Library *> lib );
+ virtual ~SipTransportTcp();
+
+ // SipTransportTcp
+ virtual bool isSecure() const { return false; }
+
+ 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 "TCP"; }
+
+ virtual uint32_t getVersion() const;
+
+ virtual std::string getDescription() const { return "SIP Transport TCP"; };
+
+ // MObject
+ virtual std::string getMemObjectType() const { return getName(); }
+};
+
+#endif
More information about the Minisip-devel
mailing list