myserver-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myserver-commit] [SCM] GNU MyServer branch, master, updated. 0_9_1-69-g


From: Giuseppe Scrivano
Subject: [myserver-commit] [SCM] GNU MyServer branch, master, updated. 0_9_1-69-g9287fdf
Date: Fri, 12 Feb 2010 19:54:45 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU MyServer".

The branch, master has been updated
       via  9287fdf621aff6e4577d1e84aadf4072b2046637 (commit)
       via  5345982311f624066a23a655c24ef8c233e3d0b5 (commit)
       via  5b63d762e026186b1dcfc941dd833f79f4803d7b (commit)
       via  edede90cc9f76b1992ebd135f96676c408bcf673 (commit)
       via  267d591bec470c6bfed07147d5ffa46781f97a8a (commit)
       via  c0020d0f554fa509407e22a72940d252973dae44 (commit)
       via  ceebd4fa089f48852069da8d7e2ccfc334281ee8 (commit)
       via  7cf87777d70d0ba8298f29eff5e00918b2692c69 (commit)
      from  2148d400ca19fc5db7f71ddc3876cbe9b5a80774 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------


commit 9287fdf621aff6e4577d1e84aadf4072b2046637
Author: Giuseppe Scrivano <address@hidden>
Date:   Fri Feb 12 20:55:27 2010 +0100

    FD_TO_SOCKET/SOCKET_TO_FD are defined only on WIN32

diff --git a/myserver/src/base/socket/ssl_socket.cpp 
b/myserver/src/base/socket/ssl_socket.cpp
index de6a3e5..3c4aba0 100644
--- a/myserver/src/base/socket/ssl_socket.cpp
+++ b/myserver/src/base/socket/ssl_socket.cpp
@@ -25,16 +25,16 @@ extern "C"
 {
 #include <string.h>
 #include <stdio.h>
-# include <sys/types.h>
-# include <sys/socket.h>
-# include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
 #ifdef WIN32
 # include <w32sock.h>
 #else
-# include <netdb.h>
-# include <unistd.h>
-# include <netinet/in.h>
-# include <arpa/inet.h>
+#include <netdb.h>
+#include <unistd.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
 #endif
 }
 
@@ -146,7 +146,13 @@ int SslSocket::connect (MYSERVER_SOCKADDR* sa, int na)
       sslContext = 0;
       return -1;
     }
+
+#ifdef WIN32
   SSL_set_fd (sslConnection, FD_TO_SOCKET (fd));
+#else
+  SSL_set_fd (sslConnection, fd);
+#endif
+
   if (SSL_connect (sslConnection) < 0)
     {
       SSL_CTX_free (sslContext);
@@ -217,7 +223,11 @@ int SslSocket::sslAccept ()
       return -1;
     }
 
+#ifdef WIN32
   if (SSL_set_fd (sslConnection, FD_TO_SOCKET (fd)) == 0)
+#else
+  if (SSL_set_fd (sslConnection, fd) == 0)
+#endif
     {
       shutdown (2);
       freeSSL ();
diff --git a/myserver/src/connections_scheduler/connections_scheduler.cpp 
b/myserver/src/connections_scheduler/connections_scheduler.cpp
index 0d7f821..0805f4f 100644
--- a/myserver/src/connections_scheduler/connections_scheduler.cpp
+++ b/myserver/src/connections_scheduler/connections_scheduler.cpp
@@ -19,7 +19,12 @@
 
 #undef remove
 
-#include <w32sock.h>
+#ifdef WIN32
+extern "C"
+{
+# include <w32sock.h>
+}
+#endif
 
 #include <include/connections_scheduler/connections_scheduler.h>
 #include <include/server/server.h>
@@ -125,8 +130,14 @@ static void eventLoopHandler (int fd, short event, void 
*arg)
               da->socketPair.read ((char*) &handle, sizeof (SocketHandle), 
&nbr);
               da->socketPair.read ((char*) &c, sizeof (ConnectionPtr), &nbr);
               da->socketPair.read ((char*) &tv, sizeof (timeval), &nbr);
-              event_once (FD_TO_SOCKET (handle), EV_READ | EV_TIMEOUT,
-                          newDataHandler, da, &tv);
+
+              event_once (
+#ifdef WIN32
+              FD_TO_SOCKET (handle), 
+#else
+              handle,
+#endif
+              EV_READ | EV_TIMEOUT, newDataHandler, da, &tv);
               break;
 
             case 'l':
@@ -185,8 +196,13 @@ void ConnectionsScheduler::listener 
(ConnectionsScheduler::ListenerArg *la)
 {
   ConnectionsScheduler::ListenerArg *arg = new 
ConnectionsScheduler::ListenerArg (la);
 
-  event_set (&(arg->ev), FD_TO_SOCKET (la->serverSocket->getHandle ()),
-             EV_READ | EV_TIMEOUT, listenerHandler, arg);
+    event_set (&(arg->ev),
+#ifdef WIN32
+              FD_TO_SOCKET (la->serverSocket->getHandle ()),
+#else
+              la->serverSocket->getHandle (),
+#endif
+              EV_READ | EV_TIMEOUT, listenerHandler, arg);
 
   arg->terminate = &dispatcherArg.terminate;
   arg->scheduler = this;
@@ -301,7 +317,11 @@ void ConnectionsScheduler::initialize ()
   dispatcherArg.socketPairWrite.setHandle 
(dispatcherArg.socketPair.getSecondHandle ());
 
   event_set (&(dispatcherArg.loopEvent),
+#ifdef WIN32
              FD_TO_SOCKET (dispatcherArg.socketPair.getFirstHandle ()),
+#else
+             dispatcherArg.socketPair.getFirstHandle (),
+#endif
              EV_READ | EV_TIMEOUT, eventLoopHandler, &dispatcherArg);
 
   event_add (&(dispatcherArg.loopEvent), NULL);
@@ -396,7 +416,12 @@ void ConnectionsScheduler::addWaitingConnectionImpl 
(ConnectionPtr c, int lock)
 {
   static timeval tv = {10, 0};
   int handle = c->socket->getHandle ();
-  SocketHandle socketHandle = FD_TO_SOCKET (handle);
+  SocketHandle socketHandle;
+#ifdef WIN32
+  socketHandle = FD_TO_SOCKET (handle);
+#else
+  socketHandle = handle;
+#endif
 
   if (server)
     tv.tv_sec = server->getTimeout () / 1000;
@@ -431,7 +456,13 @@ void ConnectionsScheduler::addWaitingConnectionImpl 
(ConnectionPtr c, int lock)
       eventsSocketMutex.unlock ();
     }
   else
-    event_once (FD_TO_SOCKET (handle), EV_READ | EV_TIMEOUT, newDataHandler,
+    event_once (
+#ifdef WIN32
+                FD_TO_SOCKET (handle),
+#else
+                handle,
+#endif
+                EV_READ | EV_TIMEOUT, newDataHandler,
                 &dispatcherArg, &tv);
 }
 



commit 5345982311f624066a23a655c24ef8c233e3d0b5
Author: Giuseppe Scrivano <address@hidden>
Date:   Fri Feb 12 19:58:31 2010 +0100

    Adjust includes

diff --git a/myserver/src/base/socket/socket.cpp 
b/myserver/src/base/socket/socket.cpp
index 63257cd..a64207c 100644
--- a/myserver/src/base/socket/socket.cpp
+++ b/myserver/src/base/socket/socket.cpp
@@ -24,9 +24,8 @@ along with this program.  If not, see 
<http://www.gnu.org/licenses/>.
 
 extern "C"
 {
-#include <sys/types.h>
-#include <sys/socket.h>
 #include <sys/ioctl.h>
+#include <errno.h>
 
 #ifndef WIN32
 # include <unistd.h>
@@ -34,9 +33,6 @@ extern "C"
 # include <netinet/in.h>
 # include <arpa/inet.h>
 #endif
-
-#include <sys/select.h>
-#include <errno.h>
 }
 
 #include <sstream>
@@ -535,7 +531,12 @@ int Socket::connect (MYSERVER_SOCKADDR* sa, int na)
  */
 int Socket::recv (char* buffer, int len, int flags, u_long timeout)
 {
-  if (dataOnRead (timeout / 1000, timeout % 1000))
+  int ret = dataOnRead (timeout / 1000, timeout % 1000);
+
+  if (ret < 0)
+    return ret;
+
+  if (ret)
     return recv (buffer, len, flags);
 
   return 0;
@@ -661,7 +662,6 @@ int Socket::dataOnRead (int sec, int usec)
   FD_SET (fd, &readfds);
 
   ret = ::select (fd + 1, &readfds, NULL, NULL, &tv);
-
   if (ret <= 0)
     return 0;
 
diff --git a/myserver/src/base/thread/thread.cpp 
b/myserver/src/base/thread/thread.cpp
index 92dc491..f77e38e 100644
--- a/myserver/src/base/thread/thread.cpp
+++ b/myserver/src/base/thread/thread.cpp
@@ -76,11 +76,10 @@ int Thread::create (ThreadID*  ID, void * 
(*startRoutine)(void *),
 {
 #ifdef WIN32
   *ID = _beginthreadex (NULL, 0, startRoutine, arg, 0, NULL);
-
   return !(*ID);
 #endif
 #ifdef HAVE_PTHREAD
-  return pthread_create ((pthread_t*)ID, NULL, startRoutine, (void *)(arg));
+  return pthread_create ((pthread_t*) ID, NULL, startRoutine, (void *)(arg));
 #endif
 }
 



commit 5b63d762e026186b1dcfc941dd833f79f4803d7b
Author: Giuseppe Scrivano <address@hidden>
Date:   Fri Feb 12 19:45:00 2010 +0100

    Use the socket handle when calling gnutls functions.

diff --git a/myserver/src/base/socket/ssl_socket.cpp 
b/myserver/src/base/socket/ssl_socket.cpp
index 75f95d8..de6a3e5 100644
--- a/myserver/src/base/socket/ssl_socket.cpp
+++ b/myserver/src/base/socket/ssl_socket.cpp
@@ -28,7 +28,9 @@ extern "C"
 # include <sys/types.h>
 # include <sys/socket.h>
 # include <sys/ioctl.h>
-#ifndef WIN32
+#ifdef WIN32
+# include <w32sock.h>
+#else
 # include <netdb.h>
 # include <unistd.h>
 # include <netinet/in.h>
@@ -46,6 +48,7 @@ using namespace std;
 SslSocket::SslSocket (Socket* sock) : Socket (sock)
 {
   this->sock = sock;
+  this->fd = sock->getHandle ();
   sslConnection = 0;
   sslContext = 0;
   clientCert = 0;
@@ -56,6 +59,7 @@ SslSocket::SslSocket (Socket* sock) : Socket (sock)
 SslSocket::SslSocket ()
 {
   this->sock = NULL;
+  this->fd = -1;
   sslConnection = 0;
   sslContext = 0;
   clientCert = 0;
@@ -100,8 +104,8 @@ int SslSocket::rawSend (const char* buffer, int len, int 
flags)
     {
       err = SSL_write (sslConnection, buffer, len);
     }while ((err <= 0) &&
-            (SSL_get_error (sslConnection,err) == SSL_ERROR_WANT_WRITE
-             || SSL_get_error (sslConnection,err) == SSL_ERROR_WANT_READ));
+            (SSL_get_error (sslConnection, err) == SSL_ERROR_WANT_WRITE
+             || SSL_get_error (sslConnection, err) == SSL_ERROR_WANT_READ));
   if (err <= 0)
     return -1;
   else
@@ -142,7 +146,7 @@ int SslSocket::connect (MYSERVER_SOCKADDR* sa, int na)
       sslContext = 0;
       return -1;
     }
-  SSL_set_fd (sslConnection, fd);
+  SSL_set_fd (sslConnection, FD_TO_SOCKET (fd));
   if (SSL_connect (sslConnection) < 0)
     {
       SSL_CTX_free (sslContext);
@@ -194,16 +198,18 @@ SSL* SslSocket::getSSLConnection ()
 }
 
 /*!
- *SSL handshake procedure.
- *Return nonzero on errors.
+ * SSL handshake procedure.
+ * Return nonzero on errors.
  */
 int SslSocket::sslAccept ()
 {
   int sslAccept;
   if (sslContext == 0)
     return -1;
+
   if (sslConnection)
     freeSSL ();
+
   sslConnection = SSL_new (sslContext);
   if (sslConnection == 0)
     {
@@ -211,7 +217,7 @@ int SslSocket::sslAccept ()
       return -1;
     }
 
-  if (SSL_set_fd (sslConnection, fd) == 0)
+  if (SSL_set_fd (sslConnection, FD_TO_SOCKET (fd)) == 0)
     {
       shutdown (2);
       freeSSL ();
@@ -221,10 +227,11 @@ int SslSocket::sslAccept ()
   do
     {
       sslAccept = SSL_accept (sslConnection);
-    }while (sslAccept != 1
-            && SSL_get_error (sslConnection, sslAccept) == 
SSL_ERROR_WANT_READ);
+    }
+  while (sslAccept != 1
+         && SSL_get_error (sslConnection, sslAccept) == SSL_ERROR_WANT_READ);
 
-  if (sslAccept != 1 )
+  if (sslAccept != 1)
     {
       shutdown (2);
       freeSSL ();



commit edede90cc9f76b1992ebd135f96676c408bcf673
Author: Giuseppe Scrivano <address@hidden>
Date:   Fri Feb 12 19:44:04 2010 +0100

    Use the socket handler as key for the connections map, not the fd.

diff --git a/myserver/src/connections_scheduler/connections_scheduler.cpp 
b/myserver/src/connections_scheduler/connections_scheduler.cpp
index d360185..0d7f821 100644
--- a/myserver/src/connections_scheduler/connections_scheduler.cpp
+++ b/myserver/src/connections_scheduler/connections_scheduler.cpp
@@ -19,6 +19,8 @@
 
 #undef remove
 
+#include <w32sock.h>
+
 #include <include/connections_scheduler/connections_scheduler.h>
 #include <include/server/server.h>
 
@@ -62,7 +64,8 @@ static DEFINE_THREAD (dispatcher, p)
 
 static void newDataHandler (int fd, short event, void *param)
 {
-  ConnectionsScheduler::DispatcherArg* arg = 
(ConnectionsScheduler::DispatcherArg*) param;
+  ConnectionsScheduler::DispatcherArg* arg
+    = (ConnectionsScheduler::DispatcherArg*) param;
 
   if (!arg->terminate && arg->scheduler)
     arg->scheduler->newData (event, fd);
@@ -74,7 +77,7 @@ void ConnectionsScheduler::newData (short event, SocketHandle 
handle)
   ConnectionPtr connection = NULL;
 
   connectionsMutex.lock ();
-  connection = connections.get (handle);
+  connection = connections.get ((int) handle);
   connectionsMutex.unlock ();
 
   if (connection == NULL || server == NULL)
@@ -95,7 +98,8 @@ void ConnectionsScheduler::newData (short event, SocketHandle 
handle)
 
 static void eventLoopHandler (int fd, short event, void *arg)
 {
-  ConnectionsScheduler::DispatcherArg *da = 
(ConnectionsScheduler::DispatcherArg*)arg;
+  ConnectionsScheduler::DispatcherArg *da
+    = (ConnectionsScheduler::DispatcherArg*) arg;
   u_long nbr;
   timeval tv = {10, 0};
 
@@ -118,15 +122,16 @@ static void eventLoopHandler (int fd, short event, void 
*arg)
               SocketHandle handle;
               ConnectionPtr c;
 
-              da->socketPair.read ((char*)&handle, sizeof (SocketHandle), 
&nbr);
-              da->socketPair.read ((char*)&c, sizeof (ConnectionPtr), &nbr);
-              da->socketPair.read ((char*)&tv, sizeof (timeval), &nbr);
-              event_once (handle, EV_READ | EV_TIMEOUT, newDataHandler, da, 
&tv);
+              da->socketPair.read ((char*) &handle, sizeof (SocketHandle), 
&nbr);
+              da->socketPair.read ((char*) &c, sizeof (ConnectionPtr), &nbr);
+              da->socketPair.read ((char*) &tv, sizeof (timeval), &nbr);
+              event_once (FD_TO_SOCKET (handle), EV_READ | EV_TIMEOUT,
+                          newDataHandler, da, &tv);
               break;
 
             case 'l':
               ConnectionsScheduler::ListenerArg *arg;
-              da->socketPair.read ((char*)&arg, sizeof (arg), &nbr);
+              da->socketPair.read ((char*) &arg, sizeof (arg), &nbr);
               event_add (&(arg->ev), &tv);
               break;
 
@@ -145,7 +150,8 @@ static void eventLoopHandler (int fd, short event, void 
*arg)
 static void listenerHandler (int fd, short event, void *arg)
 {
   static timeval tv = {5, 0};
-  ConnectionsScheduler::ListenerArg* s = 
(ConnectionsScheduler::ListenerArg*)arg;
+  ConnectionsScheduler::ListenerArg* s
+    = (ConnectionsScheduler::ListenerArg*) arg;
 
   if (event == EV_READ)
     {
@@ -179,8 +185,8 @@ void ConnectionsScheduler::listener 
(ConnectionsScheduler::ListenerArg *la)
 {
   ConnectionsScheduler::ListenerArg *arg = new 
ConnectionsScheduler::ListenerArg (la);
 
-  event_set (&(arg->ev), (int) la->serverSocket->getHandle (), EV_READ | 
EV_TIMEOUT,
-             listenerHandler, arg);
+  event_set (&(arg->ev), FD_TO_SOCKET (la->serverSocket->getHandle ()),
+             EV_READ | EV_TIMEOUT, listenerHandler, arg);
 
   arg->terminate = &dispatcherArg.terminate;
   arg->scheduler = this;
@@ -193,7 +199,7 @@ void ConnectionsScheduler::listener 
(ConnectionsScheduler::ListenerArg *la)
   eventsSocketMutex.lock ();
   u_long nbw;
   dispatcherArg.socketPairWrite.write ("l", 1, &nbw);
-  dispatcherArg.socketPairWrite.write ((const char*)&arg, sizeof (arg), &nbw);
+  dispatcherArg.socketPairWrite.write ((const char*) &arg, sizeof (arg), &nbw);
   eventsSocketMutex.unlock ();
 }
 
@@ -294,7 +300,8 @@ void ConnectionsScheduler::initialize ()
 
   dispatcherArg.socketPairWrite.setHandle 
(dispatcherArg.socketPair.getSecondHandle ());
 
-  event_set (&(dispatcherArg.loopEvent), 
dispatcherArg.socketPair.getFirstHandle (),
+  event_set (&(dispatcherArg.loopEvent),
+             FD_TO_SOCKET (dispatcherArg.socketPair.getFirstHandle ()),
              EV_READ | EV_TIMEOUT, eventLoopHandler, &dispatcherArg);
 
   event_add (&(dispatcherArg.loopEvent), NULL);
@@ -388,7 +395,8 @@ void ConnectionsScheduler::addWaitingConnection 
(ConnectionPtr c)
 void ConnectionsScheduler::addWaitingConnectionImpl (ConnectionPtr c, int lock)
 {
   static timeval tv = {10, 0};
-  SocketHandle handle = c->socket ? (SocketHandle) c->socket->getHandle () : 
NULL;
+  int handle = c->socket->getHandle ();
+  SocketHandle socketHandle = FD_TO_SOCKET (handle);
 
   if (server)
     tv.tv_sec = server->getTimeout () / 1000;
@@ -398,7 +406,7 @@ void ConnectionsScheduler::addWaitingConnectionImpl 
(ConnectionPtr c, int lock)
   c->setScheduled (0);
 
   connectionsMutex.lock ();
-  connections.put (handle, c);
+  connections.put (socketHandle, c);
   connectionsMutex.unlock ();
 
   /*
@@ -413,17 +421,17 @@ void ConnectionsScheduler::addWaitingConnectionImpl 
(ConnectionPtr c, int lock)
       eventsSocketMutex.lock ();
 
       dispatcherArg.socketPairWrite.write ("c", 1, &nbw);
-      dispatcherArg.socketPairWrite.write ((const char*)&handle,
+      dispatcherArg.socketPairWrite.write ((const char*) &handle,
                                            sizeof (SocketHandle), &nbw);
-      dispatcherArg.socketPairWrite.write ((const char*)&c,
+      dispatcherArg.socketPairWrite.write ((const char*) &c,
                                            sizeof (ConnectionPtr), &nbw);
-      dispatcherArg.socketPairWrite.write ((const char*)&tv,
+      dispatcherArg.socketPairWrite.write ((const char*) &tv,
                                            sizeof (timeval), &nbw);
 
       eventsSocketMutex.unlock ();
     }
   else
-    event_once ((int)handle, EV_READ | EV_TIMEOUT, newDataHandler,
+    event_once (FD_TO_SOCKET (handle), EV_READ | EV_TIMEOUT, newDataHandler,
                 &dispatcherArg, &tv);
 }
 



commit 267d591bec470c6bfed07147d5ffa46781f97a8a
Author: Giuseppe Scrivano <address@hidden>
Date:   Fri Feb 12 19:42:15 2010 +0100

    Include <sys/select.h>

diff --git a/myserver/include/base/socket/socket.h 
b/myserver/include/base/socket/socket.h
index 34dde60..b571a40 100644
--- a/myserver/include/base/socket/socket.h
+++ b/myserver/include/base/socket/socket.h
@@ -27,6 +27,7 @@
 extern "C"
 {
 # include <sys/types.h>
+# include <sys/select.h>
 # include <sys/socket.h>
 }
 



commit c0020d0f554fa509407e22a72940d252973dae44
Author: Giuseppe Scrivano <address@hidden>
Date:   Fri Feb 12 19:41:28 2010 +0100

    Avoid exceptions in threads but report them to the caller.

diff --git a/myserver/tests/test_socket.cpp b/myserver/tests/test_socket.cpp
index fd5266f..c71ad70 100644
--- a/myserver/tests/test_socket.cpp
+++ b/myserver/tests/test_socket.cpp
@@ -40,6 +40,15 @@ using namespace std;
 
 static DEFINE_THREAD (testRecvClient, pParam);
 
+struct ThreadArg
+{
+  int port;
+  bool success;
+
+  /* This is valid only if !success.  */
+  exception reason;
+};
+
 class TestSocket : public CppUnit::TestFixture
 {
   Socket *obj;
@@ -80,27 +89,28 @@ public:
   {
     ThreadID tid;
     int optvalReuseAddr = 1;
-    int port = 6543;
+    ThreadArg arg;
+    arg.port = 6543;
     MYSERVER_SOCKADDRIN sockIn = { 0 };
     int status;
 
     ((sockaddr_in*) (&sockIn))->sin_family = AF_INET;
     ((sockaddr_in*) (&sockIn))->sin_addr.s_addr = inet_addr ("127.0.0.1");
-    ((sockaddr_in*) (&sockIn))->sin_port = htons (port);
+    ((sockaddr_in*) (&sockIn))->sin_port = htons (arg.port);
 
     socklen_t sockInLen = sizeof (sockaddr_in);
 
     CPPUNIT_ASSERT (obj->socket (AF_INET, SOCK_STREAM, 0) != -1);
 
     CPPUNIT_ASSERT (obj->setsockopt (SOL_SOCKET, SO_REUSEADDR,
-                                      (const char*) &optvalReuseAddr,
-                                      sizeof (optvalReuseAddr)) != -1);
+                                     (const char*) &optvalReuseAddr,
+                                     sizeof (optvalReuseAddr)) != -1);
 
     /* If the port is used by another program, try a few others.  */
     if ((status = obj->bind (&sockIn, sockInLen)) != 0)
-      while (++port < 28000)
+      while (++arg.port < 28000)
         {
-          ((sockaddr_in*) (&sockIn))->sin_port = htons (port);
+          ((sockaddr_in*) (&sockIn))->sin_port = htons (arg.port);
           if ((status = obj->bind (&sockIn, sockInLen)) == 0)
             break;
         }
@@ -109,18 +119,16 @@ public:
 
     CPPUNIT_ASSERT (obj->listen (1) != -1);
 
-    CPPUNIT_ASSERT_EQUAL (Thread::create (&tid, testRecvClient, &port), 0);
-
-    Thread::wait (MYSERVER_SEC (1));
+    CPPUNIT_ASSERT_EQUAL (Thread::create (&tid, testRecvClient, &arg), 0);
 
     CPPUNIT_ASSERT (obj->dataOnRead (5));
 
     Socket s = obj->accept (&sockIn, &sockInLen);
 
-    status = int (s.getHandle ());
+    status = (int) s.getHandle ();
 
     if (status < 0)
-      CPPUNIT_ASSERT (status != -1);
+      CPPUNIT_ASSERT (status);
 
     CPPUNIT_ASSERT (s.bytesToRead () >= 0);
 
@@ -133,9 +141,11 @@ public:
     s.send ("a", 1, 0);
 
     CPPUNIT_ASSERT (!strcmp (buf, "ehlo"));
-    CPPUNIT_ASSERT (status >= 0 || status == -2);
+    CPPUNIT_ASSERT (status >= 0);
 
     Thread::join (tid);
+    if (!arg.success)
+      throw arg.reason;
 
     CPPUNIT_ASSERT (obj->close () != -1);
   }
@@ -162,29 +172,48 @@ CPPUNIT_TEST_SUITE_REGISTRATION (TestSocket);
 
 static DEFINE_THREAD (testRecvClient, pParam)
 {
-  Socket *obj2 = new Socket;
-  char host[] = "localhost";
-  int port = *((int*)pParam);
-
-  CPPUNIT_ASSERT (obj2->socket (AF_INET, SOCK_STREAM, 0) != -1);
-
-  CPPUNIT_ASSERT (obj2->connect (host, port) != -1);
-
-  int bufLen = 8;
-  char buf[bufLen];
-  memset (buf, 0, bufLen);
-  strcpy (buf, "ehlo");
-
-  CPPUNIT_ASSERT (obj2->send (buf, strlen (buf), 0) != -1);
-
-  /* To sync.  */
-  CPPUNIT_ASSERT (obj2->recv (buf, bufLen, 0, MYSERVER_SEC (5)) != -1);
-
-  CPPUNIT_ASSERT (obj2->shutdown (SHUT_RDWR) != -1);
-
-  CPPUNIT_ASSERT (obj2->close () != -1);
-
-  delete obj2;
-  obj2 = NULL;
-  return 0;
+  ThreadArg *arg = (ThreadArg *) pParam;
+  arg->success = true;
+  try
+    {
+      int ret;
+      Socket *obj2 = new Socket;
+      char host[] = "localhost";
+
+      ret = obj2->socket (AF_INET, SOCK_STREAM, 0);
+      CPPUNIT_ASSERT (ret != -1);
+
+      ret = obj2->connect (host, arg->port);
+      CPPUNIT_ASSERT (ret != -1);
+
+      int bufLen = 8;
+      char buf[bufLen];
+      memset (buf, 0, bufLen);
+      strcpy (buf, "ehlo");
+
+      ret = obj2->send (buf, strlen (buf), 0);
+      CPPUNIT_ASSERT (ret != -1);
+
+      /* To sync.  */
+      ret = obj2->recv (buf, bufLen, 0, MYSERVER_SEC (5));
+      CPPUNIT_ASSERT (ret != -1);
+
+      ret = obj2->shutdown (SHUT_RDWR);
+      CPPUNIT_ASSERT (ret != -1);
+
+      ret = obj2->close ();
+      CPPUNIT_ASSERT (ret != -1);
+
+      delete obj2;
+      obj2 = NULL;
+      return 0;
+    }
+  catch (exception& e)
+    {
+      arg->success = false;
+      arg->reason = e;
+    }
+  catch (...)
+    {
+    }
 }
diff --git a/myserver/tests/test_ssl_socket.cpp 
b/myserver/tests/test_ssl_socket.cpp
index 85e15c3..5a1ba0a 100644
--- a/myserver/tests/test_ssl_socket.cpp
+++ b/myserver/tests/test_ssl_socket.cpp
@@ -29,6 +29,7 @@
 #include "../include/base/file/file.h"
 #include "../include/base/file/files_utility.h"
 #include "../include/base/thread/thread.h"
+#include "../include/base/utility.h"
 
 extern "C"
 {
@@ -39,6 +40,7 @@ extern "C"
 #endif
 }
 
+#include <string>
 #include <iostream>
 using namespace std;
 
@@ -91,6 +93,15 @@ 
FX3J22wtVUi4Ve/XftYt6RJKd764o5WTdh/Z+RUbtusXnj3ygpI/G7fTzuPUj9uF\n\
 
 static DEFINE_THREAD (testSslRecvClient, pParam);
 
+struct SslThreadArg
+{
+  int port;
+  bool success;
+
+  /* This is valid only if !success.  */
+  exception reason;
+};
+
 class TestSslSocket : public CppUnit::TestFixture
 {
   CPPUNIT_TEST_SUITE (TestSslSocket);
@@ -170,14 +181,18 @@ public:
 
     CPPUNIT_ASSERT (obj->listen (1) != -1);
 
-    CPPUNIT_ASSERT_EQUAL (Thread::create (&tid, testSslRecvClient, &port), 0);
+    SslThreadArg arg;
+    arg.port = port;
+    CPPUNIT_ASSERT_EQUAL (Thread::create (&tid, testSslRecvClient, &arg), 0);
+
+    Thread::wait (MYSERVER_SEC (1));
+
     Socket s = obj->accept (&sockIn, &sockInLen);
 
     sslObj = new SslSocket (&s);
     sslObj->setSSLContext (ctx);
 
     int ret = sslObj->sslAccept ();
-
     if (ret < 0)
     {
       delete obj;
@@ -200,6 +215,10 @@ public:
 
     SSL_CTX_free (ctx);
 
+    Thread::join (tid);
+    if (!arg.success)
+      throw arg.reason;
+
     delete obj;
     delete sslObj;
   }
@@ -210,28 +229,45 @@ CPPUNIT_TEST_SUITE_REGISTRATION (TestSslSocket);
 static DEFINE_THREAD (testSslRecvClient, pParam)
 {
   SslSocket *sslClient = NULL;
-  int port = *((int*)pParam);
+  int err;
+  SslThreadArg *arg = (SslThreadArg *) pParam;
   MYSERVER_SOCKADDRIN sockIn = { 0 };
 
   ((sockaddr_in*) (&sockIn))->sin_family = AF_INET;
   ((sockaddr_in*) (&sockIn))->sin_addr.s_addr = inet_addr ("127.0.0.1");
-  ((sockaddr_in*) (&sockIn))->sin_port = htons (port);
+  ((sockaddr_in*) (&sockIn))->sin_port = htons (arg->port);
 
   int sockInLen = sizeof (struct sockaddr_in);
 
+  arg->success = true;
+
   sslClient = new SslSocket ();
 
-  CPPUNIT_ASSERT (sslClient->socket (AF_INET, SOCK_STREAM, 0) != -1);
+  try
+    {
+      err = sslClient->socket (AF_INET, SOCK_STREAM, 0);
+      CPPUNIT_ASSERT (err != -1);
+
+      err = sslClient->connect (&sockIn, sockInLen);
+      CPPUNIT_ASSERT (err != -1);
 
-  CPPUNIT_ASSERT (sslClient->connect (&sockIn, sockInLen) != -1);
+      char buf[] = "Works?\n";
 
-  char buf[] = "Works?\n";
+      err = sslClient->send (buf, strlen (buf), 0);
+      sslClient->recv (buf, 1, 0);
 
-  int ret = sslClient->send (buf, strlen (buf), 0);
-  sslClient->recv (buf, 1, 0);
+      CPPUNIT_ASSERT (err != -1);
+      CPPUNIT_ASSERT (sslClient->close () != -1);
+      delete sslClient;
+    }
+  catch (exception& e)
+    {
+      arg->success = false;
+      arg->reason = e;
+    }
+  catch (...)
+    {
+    }
 
-  CPPUNIT_ASSERT (ret != -1);
-  CPPUNIT_ASSERT (sslClient->close () != -1);
-  delete sslClient;
   return 0;
 }
diff --git a/myserver/tests/test_thread.cpp b/myserver/tests/test_thread.cpp
index 8841163..b74b6eb 100644
--- a/myserver/tests/test_thread.cpp
+++ b/myserver/tests/test_thread.cpp
@@ -45,7 +45,7 @@ static DEFINE_THREAD (test_terminate_thread, pParam)
 
   Thread::terminate ();
 
-  //Should never be here.
+  /* Should never be here.  */
   *arg = 1;
 
   return NULL;



commit ceebd4fa089f48852069da8d7e2ccfc334281ee8
Author: Giuseppe Scrivano <address@hidden>
Date:   Fri Feb 12 19:39:55 2010 +0100

    Use the mutex class when pthread is not available.

diff --git a/myserver/src/base/ssl/ssl.cpp b/myserver/src/base/ssl/ssl.cpp
index 674deeb..0a6dd3b 100644
--- a/myserver/src/base/ssl/ssl.cpp
+++ b/myserver/src/base/ssl/ssl.cpp
@@ -19,6 +19,7 @@
 
 #include <include/base/ssl/ssl.h>
 #include <include/base/file/files_utility.h>
+#include <include/base/sync/mutex.h>
 
 #include <string.h>
 
@@ -100,6 +101,42 @@ int SslContext::free ()
   return ret;
 }
 
+#if !HAVE_LIBGCRYPT || !HAVE_PTHREAD
+
+static int gcry_lock (void **mutex)
+{
+  return ((Mutex *) *mutex)->lock ();
+}
+
+static int gcry_unlock (void **mutex)
+{
+  return ((Mutex *) *mutex)->unlock ();
+}
+
+static int gcry_init (void **mutex)
+{
+  *mutex = new Mutex ();
+  return 0;
+}
+
+static int gcry_destroy (void **mutex)
+{
+  delete (Mutex *) *mutex;
+  return 0;
+}
+
+static struct gcry_thread_cbs myserver_gcry_cbs =
+  {
+    GCRY_THREAD_OPTION_USER,
+    NULL,
+    gcry_init,
+    gcry_destroy,
+    gcry_lock,
+    gcry_unlock
+  };
+
+#endif
+
 void initializeSSL ()
 {
   static bool initialized = false;
@@ -109,6 +146,9 @@ void initializeSSL ()
 #if HAVE_LIBGCRYPT && HAVE_PTHREAD
       gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
       gcry_control (GCRYCTL_INITIALIZATION_FINISHED);
+#else
+      gcry_control (GCRYCTL_SET_THREAD_CBS, &myserver_gcry_cbs);
+      gcry_control (GCRYCTL_INITIALIZATION_FINISHED);
 #endif
       gnutls_global_init ();
       initialized = true;



commit 7cf87777d70d0ba8298f29eff5e00918b2692c69
Author: Giuseppe Scrivano <address@hidden>
Date:   Fri Feb 12 19:39:01 2010 +0100

    Use gnulib select

diff --git a/myserver/lib/Makefile.am b/myserver/lib/Makefile.am
index 4063aae..60c4d0d 100644
--- a/myserver/lib/Makefile.am
+++ b/myserver/lib/Makefile.am
@@ -26,6 +26,7 @@ GNULIB_GETSOCKOPT=1
 GNULIB_LISTEN=1
 GNULIB_RECV=1
 GNULIB_SEND=1
+GNULIB_SELECT=1
 GNULIB_RECVFROM=1
 GNULIB_SENDTO=1
 GNULIB_SETSOCKOPT=1

-----------------------------------------------------------------------

Summary of changes:
 myserver/include/base/socket/socket.h              |    1 +
 myserver/lib/Makefile.am                           |    1 +
 myserver/src/base/socket/socket.cpp                |   14 ++--
 myserver/src/base/socket/ssl_socket.cpp            |   47 ++++++---
 myserver/src/base/ssl/ssl.cpp                      |   40 ++++++++
 myserver/src/base/thread/thread.cpp                |    3 +-
 .../connections_scheduler.cpp                      |   77 +++++++++++----
 myserver/tests/test_socket.cpp                     |  103 +++++++++++++-------
 myserver/tests/test_ssl_socket.cpp                 |   60 +++++++++---
 myserver/tests/test_thread.cpp                     |    2 +-
 10 files changed, 255 insertions(+), 93 deletions(-)


hooks/post-receive
-- 
GNU MyServer




reply via email to

[Prev in Thread] Current Thread [Next in Thread]