gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r3332 - in GNUnet: . src/include src/server src/util/networ


From: grothoff
Subject: [GNUnet-SVN] r3332 - in GNUnet: . src/include src/server src/util/network_client
Date: Sun, 27 Aug 2006 13:45:57 -0700 (PDT)

Author: grothoff
Date: 2006-08-27 13:45:51 -0700 (Sun, 27 Aug 2006)
New Revision: 3332

Added:
   GNUnet/src/util/network_client/check.conf
Modified:
   GNUnet/src/include/gnunet_util_network_client.h
   GNUnet/src/server/tcpserver.c
   GNUnet/src/util/network_client/Makefile.am
   GNUnet/src/util/network_client/tcpiotest.c
   GNUnet/todo
Log:
fixing network-client testcase -- or rather, what is left of it

Modified: GNUnet/src/include/gnunet_util_network_client.h
===================================================================
--- GNUnet/src/include/gnunet_util_network_client.h     2006-08-27 05:09:14 UTC 
(rev 3331)
+++ GNUnet/src/include/gnunet_util_network_client.h     2006-08-27 20:45:51 UTC 
(rev 3332)
@@ -105,7 +105,6 @@
  * @param sock the socket to write to
  * @param buffer the buffer to write
  * @return OK if the write was sucessful, 
- *         NO if it would block and isBlocking was NO,
  *         SYSERR if the write failed (error will be logged)
  */
 int connection_write(struct ClientServerConnection * sock,

Modified: GNUnet/src/server/tcpserver.c
===================================================================
--- GNUnet/src/server/tcpserver.c       2006-08-27 05:09:14 UTC (rev 3331)
+++ GNUnet/src/server/tcpserver.c       2006-08-27 20:45:51 UTC (rev 3332)
@@ -1,4 +1,4 @@
-/*
++/*
      This file is part of GNUnet
      (C) 2001, 2002, 2003, 2004, 2006 Christian Grothoff (and other 
contributing authors)
 

Modified: GNUnet/src/util/network_client/Makefile.am
===================================================================
--- GNUnet/src/util/network_client/Makefile.am  2006-08-27 05:09:14 UTC (rev 
3331)
+++ GNUnet/src/util/network_client/Makefile.am  2006-08-27 20:45:51 UTC (rev 
3332)
@@ -20,5 +20,8 @@
  tcpiotest.c
 tcpiotest_LDADD = \
  $(top_builddir)/src/util/libgnunetutil.la \
+ $(top_builddir)/src/util/config_impl/libgnunetutil_config.la \
  $(top_builddir)/src/util/network_client/libgnunetutil_network_client.la 
 
+
+EXTRA_DIST = check.conf
\ No newline at end of file

Copied: GNUnet/src/util/network_client/check.conf (from rev 3322, 
GNUnet/src/util/check.conf)

Modified: GNUnet/src/util/network_client/tcpiotest.c
===================================================================
--- GNUnet/src/util/network_client/tcpiotest.c  2006-08-27 05:09:14 UTC (rev 
3331)
+++ GNUnet/src/util/network_client/tcpiotest.c  2006-08-27 20:45:51 UTC (rev 
3332)
@@ -24,8 +24,30 @@
 
 #include "gnunet_util.h"
 #include "gnunet_util_network_client.h"
+#include "gnunet_util_config_impl.h"
 #include "platform.h"
 
+static struct GC_Configuration * cfg;
+
+/**
+ * Get the GNUnet UDP port from the configuration,
+ * or from /etc/services if it is not specified in
+ * the config file.
+ */
+static unsigned short getGNUnetPort() {
+  unsigned long long port;
+
+  if (-1 == GC_get_configuration_value_number(cfg,
+                                             "TCP",
+                                             "PORT",
+                                             1,
+                                             65535,
+                                             2087,
+                                             &port)) 
+    port = 0; 
+  return (unsigned short) port;
+}
+
 static int openServerSocket() {
   int listenerFD;
   int listenerPort;
@@ -34,14 +56,12 @@
 
   listenerPort = getGNUnetPort();
   /* create the socket */
-  while ( (listenerFD = SOCKET(PF_INET, SOCK_STREAM, 0)) < 0) {
-    GE_LOG(NULL,
-          GE_ERROR | GE_BULK | GE_USER,
-          "ERROR opening socket (%s).  "
-          "No client service started.  "
-          "Trying again in 30 seconds.\n",
-          STRERROR(errno));
-    sleep(30);
+  listenerFD = SOCKET(PF_INET, SOCK_STREAM, 0);
+  if (listenerFD < 0) {
+    GE_LOG_STRERROR(NULL,
+                   GE_BULK | GE_ERROR | GE_USER,
+                   "socket");
+    return -1;
   }
 
   /* fill in the inet address structure */
@@ -55,28 +75,31 @@
   if ( SETSOCKOPT(listenerFD,
                  SOL_SOCKET,
                  SO_REUSEADDR,
-                 &on, sizeof(on)) < 0 )
-    perror("setsockopt");
+                 &on, sizeof(on)) < 0 ) {
+    GE_LOG_STRERROR(NULL,
+                   GE_BULK | GE_ERROR | GE_USER,
+                   "setsockopt");
+    CLOSE(listenerFD);
+    return -1;
+  }
 
   /* bind the socket */
   if (BIND (listenerFD,
           (struct sockaddr *) &serverAddr,
            sizeof(serverAddr)) < 0) {
-    GE_LOG(NULL,
-          GE_ERROR | GE_BULK | GE_USER,
-          "ERROR (%s) binding the TCP listener to port %d. "
-          "Test failed.  Is gnunetd running?\n",
-          STRERROR(errno),
-          listenerPort);
+    GE_LOG_STRERROR(NULL, 
+                   GE_BULK | GE_ERROR | GE_USER,
+                   "bind");
+    CLOSE(listenerFD);
     return -1;
   }
 
   /* start listening for new connections */
   if (0 != LISTEN(listenerFD, 5)) {
-    GE_LOG(NULL,
-          GE_ERROR | GE_BULK | GE_USER,
-          " listen failed: %s\n",
-          STRERROR(errno));
+    GE_LOG_STRERROR(NULL, 
+                   GE_BULK | GE_ERROR | GE_USER,
+                   "listen");
+    CLOSE(listenerFD);
     return -1;
   }
   return listenerFD;
@@ -84,7 +107,7 @@
 
 static int doAccept(int serverSocket) {
   int incomingFD;
-  int lenOfIncomingAddr;
+  socklen_t lenOfIncomingAddr;
   struct sockaddr_in clientAddr;
 
   incomingFD = -1;
@@ -94,10 +117,9 @@
                        (struct sockaddr *)&clientAddr,
                        &lenOfIncomingAddr);
     if (incomingFD < 0) {
-      GE_LOG(NULL,
-            GE_ERROR | GE_BULK | GE_USER,
-            "ERROR accepting new connection (%s).\n",
-            STRERROR(errno));
+      GE_LOG_STRERROR(NULL, 
+                     GE_BULK | GE_ERROR | GE_USER,
+                     "accept");
       continue;
     }
   }
@@ -105,11 +127,13 @@
 }
 
 static int testTransmission(struct ClientServerConnection * a,
-                           struct ClientServerConnection * b) {
+                           struct SocketHandle * b) {
   MESSAGE_HEADER * hdr;
   MESSAGE_HEADER * buf;
   int i;
   int j;
+  size_t rd;
+  size_t pos;
 
   hdr = MALLOC(1024);
   for (i=0;i<1024-sizeof(MESSAGE_HEADER);i+=7) {
@@ -122,11 +146,25 @@
       FREE(hdr);
       return 1;
     }
-    buf = NULL;
-    if (OK != connection_read(b, &buf)) {
-      FREE(hdr);
-      return 2;
+    buf = MALLOC(2048);
+    pos = 0;
+    while (pos < i + sizeof(MESSAGE_HEADER)) {
+      rd = 0;
+      if (SYSERR == socket_recv(b,
+                               NC_Nonblocking,
+                               &buf[pos],
+                               2048 - pos,
+                               &rd)) {
+       FREE(hdr);
+       FREE(buf);
+       return 2;
+      }
+      pos += rd;
     }
+    if (pos != i + sizeof(MESSAGE_HEADER)) {
+      FREE(buf);
+      return 3;
+    }
     if (0 != memcmp(buf, hdr, i+sizeof(MESSAGE_HEADER))) {
       FREE(buf);
       FREE(hdr);
@@ -138,105 +176,47 @@
   return 0;
 }
 
-static int testNonblocking(struct ClientServerConnection * a,
-                          struct ClientServerConnection * b) {
-  MESSAGE_HEADER * hdr;
-  MESSAGE_HEADER * buf;
-  int i;
-  int cnt;
-
-  hdr = MALLOC(1024);
-  for (i=0;i<1024-sizeof(MESSAGE_HEADER);i+=11)
-    ((char*)&hdr[1])[i] = (char)i;
-  hdr->size = htons(64+sizeof(MESSAGE_HEADER));
-  hdr->type = 0;
-  while (OK == connection_writeNonBlocking(a,
-                                       hdr))
-    hdr->type++;
-  i = 0;
-  cnt = hdr->type;
-  /* printf("Reading %u messages.\n", cnt); */
-  if (cnt < 2)
-    return 8; /* could not write ANY data non-blocking!? */
-  for (i=0;i<cnt;i++) {
-    hdr->type = i;
-    buf = NULL;
-    if (OK != connection_read(b, &buf)) {
-      FREE(hdr);
-      return 16;
-    }
-    if (0 != memcmp(buf, hdr, 64+sizeof(MESSAGE_HEADER))) {
-      printf("Failure in message %u.  Headers: %d ? %d\n",
-            i,
-            buf->type,
-            hdr->type);
-      FREE(buf);
-      FREE(hdr);
-      return 32;
-    }
-    FREE(buf);
-    if (i == cnt - 2) {
-      /* printf("Blocking write to flush last non-blocking message.\n"); */
-      hdr->type = cnt;
-      if (OK != connection_write(a,
-                             hdr)) {
-       FREE(hdr);
-       return 64;
-      }
-    }
-  }
-  hdr->type = i;
-  buf = NULL;
-  if (OK != connection_read(b, &buf)) {
-    FREE(hdr);
-    return 128;
-  }
-  if (0 != memcmp(buf, hdr, 64+sizeof(MESSAGE_HEADER))) {
-    FREE(buf);
-    FREE(hdr);
-    return 256;
-  }
-  FREE(buf);
-  FREE(hdr);
-  return 0;
-}
-
 int main(int argc, char * argv[]){
   int i;
   int ret;
   int serverSocket;
   struct ClientServerConnection * clientSocket;
-  struct ClientServerConnection acceptSocket;
+  int acceptSocket;
+  struct SocketHandle * sh;
 
-  ret = 0;
-  serverSocket = openServerSocket();
-  clientSocket = getClientSocket();
-  if (serverSocket == -1) {
-    connection_destroy(clientSocket);
-    return 1;
+  cfg = GC_create_C_impl();
+  if (-1 == GC_parse_configuration(cfg,
+                                  "check.conf")) {
+    GC_free(cfg);
+    return -1;  
   }
+  serverSocket = openServerSocket();
+  if (serverSocket == -1) 
+    return 1;  
+  clientSocket = client_connection_create(NULL,
+                                         cfg);
+  ret = 0;
   for (i=0;i<2;i++) {
-    if (OK == checkSocket(clientSocket)) {
-      if (OK == initGNUnetServerSocket(doAccept(serverSocket),
-                                      &acceptSocket)) {
-       ret = ret | testTransmission(clientSocket, &acceptSocket);
-       ret = ret | testTransmission(&acceptSocket, clientSocket);
-       ret = ret | testNonblocking(clientSocket, &acceptSocket);
-       ret = ret | testNonblocking(&acceptSocket, clientSocket);
-       closeSocketTemporarily(clientSocket);
-       destroySocket(&acceptSocket);
-       fprintf(stderr, "\n");
-      } else {
-       fprintf(stderr, "initGNUnetServerSocket failed.\n");
-       ret = -1;
-      }
-    } else {
-      fprintf(stderr, "checkSocket faild.\n");
-      ret = -1;
+    if (OK != connection_ensure_connected(clientSocket)) {
+      ret = 42;
+      break;
     }
+    acceptSocket = doAccept(serverSocket);
+    if (acceptSocket == -1) {
+      ret = 43;
+      break;
+    }
+    sh = socket_create(NULL, NULL, acceptSocket);
+    ret = ret | testTransmission(clientSocket, sh);
+    connection_close_temporarily(clientSocket);
+    socket_destroy(sh);
   }
   connection_destroy(clientSocket);
+  CLOSE(serverSocket);
   if (ret > 0)
-    fprintf(stderr, "Error %d\n", ret);
+    fprintf(stderr, 
+           "Error %d\n", 
+           ret);
+  GC_free(cfg);
   return ret;
 }

Modified: GNUnet/todo
===================================================================
--- GNUnet/todo 2006-08-27 05:09:14 UTC (rev 3331)
+++ GNUnet/todo 2006-08-27 20:45:51 UTC (rev 3332)
@@ -19,7 +19,6 @@
     + loggers: SMTP logger
     + use new loggers in for CS error reporting
   * make testcases compile & pass again:
-    + util/network_client/ 
     + fs/lib -- compiles, but fails!
     + session -- compiles, but fails!
     + kvstore_sqlite -- compiles, but fails!





reply via email to

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