r3232 - in trunk: libmnetutil/include/libmnetutil
libmnetutil/source libmsip/include/libmsip libmsip/source
erik at minisip.org
erik at minisip.org
Wed Mar 7 22:34:41 CET 2007
Author: erik
Date: 2007-03-07 22:34:40 +0100 (Wed, 07 Mar 2007)
New Revision: 3232
Modified:
trunk/libmnetutil/include/libmnetutil/SocketServer.h
trunk/libmnetutil/source/SocketServer.cxx
trunk/libmsip/include/libmsip/SipSocketServer.h
trunk/libmsip/source/SipLayerTransport.cxx
trunk/libmsip/source/SipSocketServer.cxx
Log:
* libmsip:
- I think there might be a reference loop involving the
SipSocketServer. I added a setReceiver method to
SipSocketServer to make it easier to break this loop.
- SipSocketServer::inputReady can be made pure virtual
(the implementation did nothing) since it is implemented
in the sub-classes.
- Close stream sockets when doing stop() on the transport
layer. This makes the following code not complain about
the server port being used on the second loop:
for (int i=0; i<2; i++){
MRef<SipStackConfig*> config = new SipStackConfig;
config->localTcpPort=5000;
MRef<SipStack*> s = new SipStack( config);
s->startTcpServer();
s->stopRunning();
}
* libmnetutil:
- SocketServer: Added method to close all sockets the server
contains.
This could be done automatically when the server is stopped,
but it could be useful to be able to start and stop a
server without having to create new sockets.
Modified: trunk/libmnetutil/include/libmnetutil/SocketServer.h
===================================================================
--- trunk/libmnetutil/include/libmnetutil/SocketServer.h 2007-03-07 19:53:09 UTC (rev 3231)
+++ trunk/libmnetutil/include/libmnetutil/SocketServer.h 2007-03-07 21:34:40 UTC (rev 3232)
@@ -47,8 +47,29 @@
SocketServer();
virtual ~SocketServer();
+ /**
+ * Closes all sockets this server references.
+ */
+ void closeSockets();
+
+ /**
+ * Creates a thread that runs the "run" method that
+ * listens to all sockets registred to the object.
+ */
void start();
+
+ /**
+ *
+ * Signals the method running the "run" method to stop.
+ * This will not close the sockets.
+ *
+ */
void stop();
+
+ /**
+ * Waits until the thread created by "start" that runs the
+ * "run" method has stopped.
+ */
void join();
void addSocket( MRef<Socket*> socket, MRef<InputReadyHandler*> handler );
Modified: trunk/libmnetutil/source/SocketServer.cxx
===================================================================
--- trunk/libmnetutil/source/SocketServer.cxx 2007-03-07 19:53:09 UTC (rev 3231)
+++ trunk/libmnetutil/source/SocketServer.cxx 2007-03-07 21:34:40 UTC (rev 3232)
@@ -274,6 +274,14 @@
}
#endif // WIN32
+void SocketServer::closeSockets(){
+ Sockets::const_iterator i;
+ for( i = sockets.begin(); i != sockets.end(); i++ ){
+ MRef<Socket*> socket = i->first;
+ socket->close();
+ }
+}
+
void SocketServer::run()
{
struct timeval timeout;
@@ -338,3 +346,4 @@
// csMutex.unlock();
}
+
Modified: trunk/libmsip/include/libmsip/SipSocketServer.h
===================================================================
--- trunk/libmsip/include/libmsip/SipSocketServer.h 2007-03-07 19:53:09 UTC (rev 3231)
+++ trunk/libmsip/include/libmsip/SipSocketServer.h 2007-03-07 21:34:40 UTC (rev 3232)
@@ -49,6 +49,7 @@
MRef<Socket *> getSocket() const;
MRef<SipLayerTransport *> getReceiver() const;
+ void setReceiver(MRef<SipLayerTransport *> r);
bool isIpv6() const;
int32_t getType() const;
@@ -60,7 +61,7 @@
void setExternalPort(int32_t port) { externalPort = port; }
int32_t getExternalPort() const { return externalPort; }
- virtual void inputReady();
+ virtual void inputReady()=0;
protected:
virtual void inputReady( MRef<Socket*> socket );
Modified: trunk/libmsip/source/SipLayerTransport.cxx
===================================================================
--- trunk/libmsip/source/SipLayerTransport.cxx 2007-03-07 19:53:09 UTC (rev 3231)
+++ trunk/libmsip/source/SipLayerTransport.cxx 2007-03-07 21:34:40 UTC (rev 3232)
@@ -389,6 +389,8 @@
for( i=servers.begin(); i != servers.end(); i++ ){
MRef<SipSocketServer *> server = *i;
server->join();
+ server->closeSockets();
+ server->setReceiver(NULL);
*i=NULL;
}
@@ -831,7 +833,7 @@
}
void SipLayerTransport::sendMessage(MRef<SipMessage*> pack,
- /* IPAddress &*/ const string &ip_addr,
+ const string &ip_addr,
int32_t port,
string branch,
string preferredTransport,
Modified: trunk/libmsip/source/SipSocketServer.cxx
===================================================================
--- trunk/libmsip/source/SipSocketServer.cxx 2007-03-07 19:53:09 UTC (rev 3231)
+++ trunk/libmsip/source/SipSocketServer.cxx 2007-03-07 21:34:40 UTC (rev 3232)
@@ -63,20 +63,21 @@
return receiver;
}
-void SipSocketServer::inputReady( MRef<Socket*> socket ){
- inputReady();
+void SipSocketServer::setReceiver(MRef<SipLayerTransport*> r){
+ receiver=r;
}
-void SipSocketServer::inputReady(){
-}
-
-//
+//
// StreamSocketServer
-//
+//
StreamSocketServer::StreamSocketServer(MRef<SipLayerTransport*> r, MRef<ServerSocket*> sock): SipSocketServer(r, *sock){
}
+void SipSocketServer::inputReady( MRef<Socket*> socket ){
+ inputReady();
+}
+
void StreamSocketServer::inputReady(){
MRef<SipLayerTransport *> r = getReceiver();
MRef<Socket *> sock = getSocket();
@@ -114,3 +115,4 @@
transport->datagramSocketRead(dsock);
}
}
+
More information about the Minisip-devel
mailing list