gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r3336 - GNUnet/src/server


From: grothoff
Subject: [GNUnet-SVN] r3336 - GNUnet/src/server
Date: Sun, 27 Aug 2006 14:37:30 -0700 (PDT)

Author: grothoff
Date: 2006-08-27 14:37:28 -0700 (Sun, 27 Aug 2006)
New Revision: 3336

Modified:
   GNUnet/src/server/core.c
   GNUnet/src/server/gnunetd.c
   GNUnet/src/server/tcpserver.c
Log:
bugfixes

Modified: GNUnet/src/server/core.c
===================================================================
--- GNUnet/src/server/core.c    2006-08-27 21:22:11 UTC (rev 3335)
+++ GNUnet/src/server/core.c    2006-08-27 21:37:28 UTC (rev 3336)
@@ -538,8 +538,11 @@
   identity->getPeerIdentity(identity->getPublicPrivateKey(),
                            &myIdentity);
   applicationCore.myIdentity = &myIdentity; /* core.c */
-  initTCPServer(ectx,
-               cfg);
+  if (initTCPServer(ectx,
+                   cfg) != OK) {
+    releaseService(identity);
+    return SYSERR;
+  }
   initHandler(ectx);
   return OK;
 }

Modified: GNUnet/src/server/gnunetd.c
===================================================================
--- GNUnet/src/server/gnunetd.c 2006-08-27 21:22:11 UTC (rev 3335)
+++ GNUnet/src/server/gnunetd.c 2006-08-27 21:37:28 UTC (rev 3336)
@@ -98,17 +98,32 @@
     return SYSERR;
   mon = os_network_monitor_create(ectx,
                                  cfg);
-  GE_ASSERT(ectx,
-           mon != NULL);
+  if (mon == NULL) {
+   if (NO == debug_flag)
+     os_terminal_detach_complete(ectx,
+                               filedes,
+                                NO);
+   return SYSERR;
+  }
   cron = cron_create(ectx);
   GE_ASSERT(ectx,
            cron != NULL);
   shc_hup = signal_handler_install(SIGHUP, &reread_config);
-  GE_ASSERT(ectx,
-           OK == initCore(ectx,
-                          cfg,
-                          cron,
-                          mon));
+  if (OK != initCore(ectx,
+                    cfg,
+                    cron,
+                    mon)) {
+    cron_destroy(cron);
+    os_network_monitor_destroy(mon);
+    signal_handler_uninstall(SIGHUP, 
+                            &reread_config,
+                            shc_hup);
+    if (NO == debug_flag)
+      os_terminal_detach_complete(ectx,
+                                 filedes,
+                                 NO);
+    return SYSERR;
+  }
   initConnection(ectx, cfg, mon, cron); 
   loadApplicationModules();
   writePIDFile(ectx, cfg);

Modified: GNUnet/src/server/tcpserver.c
===================================================================
--- GNUnet/src/server/tcpserver.c       2006-08-27 21:22:11 UTC (rev 3335)
+++ GNUnet/src/server/tcpserver.c       2006-08-27 21:37:28 UTC (rev 3336)
@@ -1,4 +1,4 @@
-+/*
+/*
      This file is part of GNUnet
      (C) 2001, 2002, 2003, 2004, 2006 Christian Grothoff (and other 
contributing authors)
 
@@ -258,7 +258,7 @@
   unsigned long long port;
 
   if (-1 == GC_get_configuration_value_number(cfg,
-                                             "TCP",
+                                             "NETWORK",
                                              "PORT",
                                              1,
                                              65535,
@@ -268,48 +268,12 @@
   return (unsigned short) port;
 }
 
-/**
- * Initialize the TCP port and listen for incoming client connections.
- */
-int initTCPServer(struct GE_Context * e,
-                 struct GC_Configuration * c) {
+static int startTCPServer() {
   int listenerFD;
   int listenerPort;
   struct sockaddr_in serverAddr;
   const int on = 1;
-  char * ch;
 
-  cfg = c;
-  ectx = e;
-  if (YES == GC_get_configuration_value_yesno(cfg,
-                                             "TCPSERVER",
-                                             "DISABLE",
-                                             NO))
-    return OK;
-
-  /* move to reload-configuration method! */
-  ch = NULL;
-  if (-1 == GC_get_configuration_value_string(cfg,
-                                             "NETWORK",
-                                             "TRUSTED",
-                                             "127.0.0.0/8;",
-                                             &ch)) 
-    return SYSERR;
-  GE_ASSERT(ectx, ch != NULL);
-  trustedNetworks_ = parse_ipv4_network_specification(ectx,
-                                                     ch);
-  if (trustedNetworks_ == NULL) {
-    GE_LOG(ectx,
-          GE_FATAL | GE_USER | GE_ADMIN | GE_IMMEDIATE,
-          _("Malformed network specification in the configuration in section 
`%s' for entry `%s': %s\n"),
-          "NETWORK",
-          "TRUSTED",
-          ch);    
-    FREE(ch);
-    return SYSERR;
-  }
-  FREE(ch);
-
   listenerPort = getGNUnetPort();
   if (listenerPort == 0)
     return SYSERR;
@@ -354,8 +318,7 @@
           listenerPort);
     return SYSERR;
   }
-  handlerlock = MUTEX_CREATE(YES);
-  selector = select_create(e,
+  selector = select_create(ectx,
                           NULL,
                           listenerFD,
                           sizeof(struct sockaddr_in),
@@ -367,36 +330,21 @@
                           &select_close_handler,
                           NULL,
                           0 /* no memory quota */);
-  if (selector == NULL) 
+  if (selector == NULL) {
+    CLOSE(listenerFD);
     return SYSERR;  
-  registerCSHandler(CS_PROTO_SHUTDOWN_REQUEST,
-                   &shutdownHandler);
+  }
   return OK;
 }
 
-/**
- * Shutdown the module.
- */
-int stopTCPServer() {
-  if (YES == GC_get_configuration_value_yesno(cfg,
-                                             "TCPSERVER",
-                                             "DISABLE",
-                                             NO))
-    return OK;
-  unregisterCSHandler(CS_PROTO_SHUTDOWN_REQUEST,
-                     &shutdownHandler);
-  GE_ASSERT(ectx, selector != NULL);
-  select_destroy(selector);
-  selector = NULL;
-  return OK;
-}
-
 int doneTCPServer() {
   if (selector != NULL)
     stopTCPServer(); /* just to be sure; used mostly
                        for the benefit of gnunet-update
                        and other gnunet-tools that are
                        not gnunetd */
+  unregisterCSHandler(CS_PROTO_SHUTDOWN_REQUEST,
+                     &shutdownHandler);
   MUTEX_DESTROY(handlerlock);
   handlerlock = NULL;
   GROW(handlers,
@@ -410,6 +358,64 @@
 }
 
 /**
+ * Initialize the TCP port and listen for incoming client connections.
+ */
+int initTCPServer(struct GE_Context * e,
+                 struct GC_Configuration * c) {
+  char * ch;
+
+  cfg = c;
+  ectx = e;
+
+  /* move to reload-configuration method! */
+  ch = NULL;
+  if (-1 == GC_get_configuration_value_string(cfg,
+                                             "NETWORK",
+                                             "TRUSTED",
+                                             "127.0.0.0/8;",
+                                             &ch)) 
+    return SYSERR;
+  GE_ASSERT(ectx, ch != NULL);
+  trustedNetworks_ = parse_ipv4_network_specification(ectx,
+                                                     ch);
+  if (trustedNetworks_ == NULL) {
+    GE_LOG(ectx,
+          GE_FATAL | GE_USER | GE_ADMIN | GE_IMMEDIATE,
+          _("Malformed network specification in the configuration in section 
`%s' for entry `%s': %s\n"),
+          "NETWORK",
+          "TRUSTED",
+          ch);    
+    FREE(ch);
+    return SYSERR;
+  }
+  FREE(ch);
+  handlerlock = MUTEX_CREATE(YES);
+
+  registerCSHandler(CS_PROTO_SHUTDOWN_REQUEST,
+                   &shutdownHandler);
+  if ( (NO == GC_get_configuration_value_yesno(cfg,
+                                              "TCPSERVER",
+                                              "DISABLE",
+                                              NO)) &&
+       (OK != startTCPServer()) ) {
+    doneTCPServer();
+    return SYSERR;
+  }
+  return OK;
+}
+
+/**
+ * Shutdown the module.
+ */
+int stopTCPServer() {
+  if (selector != NULL) {
+    select_destroy(selector);
+    selector = NULL;
+  }
+  return OK;
+}
+
+/**
  * Register a method as a handler for specific message
  * types.
  * @param type the message type





reply via email to

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