tolerate additional IPv4 address now available for gnunet.org
[oweals/gnunet.git] / src / util / test_service.c
index d2136b42f0a8881a89a175e506e79e26ec6eda7b..72bd1f3713b075701f2a74e9934353fb29453cb0 100644 (file)
@@ -2,20 +2,20 @@
      This file is part of GNUnet.
      Copyright (C) 2009, 2013, 2016 GNUnet e.V.
 
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
 
      GNUnet 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
-     General Public License for more details.
+     Affero General Public License for more details.
+    
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-     Boston, MA 02110-1301, USA.
+     SPDX-License-Identifier: AGPL3.0-or-later
 */
 /**
  * @file util/test_service.c
  */
 #define MY_TYPE 256
 
+#define TIMEOUT GNUNET_TIME_UNIT_SECONDS
+
 static int global_ret = 1;
 
 static struct GNUNET_MQ_Handle *mq;
 
+/**
+ * Timeout task.
+ */
+static struct GNUNET_SCHEDULER_Task *tt;
+
 
 static void
 handle_recv (void *cls,
@@ -45,8 +52,11 @@ handle_recv (void *cls,
              "Received client message...\n");
   GNUNET_SERVICE_client_continue (client);
   global_ret = 2;
-  GNUNET_MQ_destroy (mq);
-  mq = NULL;
+  if (NULL != mq)
+  {
+    GNUNET_MQ_destroy (mq);
+    mq = NULL;
+  }
 }
 
 
@@ -86,10 +96,29 @@ disconnect_cb (void *cls,
   {
     GNUNET_SCHEDULER_shutdown ();
     global_ret = 0;
+    if (NULL != tt)
+    {
+      GNUNET_SCHEDULER_cancel (tt);
+      tt = NULL;
+    }
   }
 }
 
 
+static void
+timeout_task (void *cls)
+{
+  tt = NULL;
+  if (NULL != mq)
+  {
+    GNUNET_MQ_destroy (mq);
+    mq = NULL;
+  }
+  global_ret = 33;
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
 /**
  * Initialization function of the service.  Starts
  * a client to connect to the service.
@@ -106,7 +135,11 @@ service_init (void *cls,
   const char *service_name = cls;
   struct GNUNET_MQ_Envelope *env;
   struct GNUNET_MessageHeader *msg;
-  
+
+  GNUNET_assert (NULL == tt);
+  tt = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                    &timeout_task,
+                                    NULL);
   mq = GNUNET_CLIENT_connect (cfg,
                               service_name,
                               NULL,
@@ -148,7 +181,7 @@ check (const char *sname)
              sname);
   global_ret = 1;
   GNUNET_assert (0 ==
-                 GNUNET_SERVICE_ruN_ (3,
+                 GNUNET_SERVICE_run_ (3,
                                      argv,
                                      sname,
                                      GNUNET_SERVICE_OPTION_NONE,