-stream testing hooks and options
authorSree Harsha Totakura <totakura@in.tum.de>
Sat, 16 Jun 2012 19:27:15 +0000 (19:27 +0000)
committerSree Harsha Totakura <totakura@in.tum.de>
Sat, 16 Jun 2012 19:27:15 +0000 (19:27 +0000)
src/include/gnunet_stream_lib.h
src/stream/stream_api.c
src/stream/test_stream_2peers.c
src/stream/test_stream_api.c
src/stream/test_stream_big.c
src/stream/test_stream_local.c

index e09c264d6aa44ef4c248f6a4769a6cbe1ba286f4..f348780e3d0ae900be8d814e4433654784a9936f 100644 (file)
@@ -103,7 +103,13 @@ enum GNUNET_STREAM_Option
      * of '0' means to use the round-trip time (plus a tiny grace period);
      * this is also the default.
      */
-    GNUNET_STREAM_OPTION_INITIAL_RETRANSMIT_TIMEOUT
+    GNUNET_STREAM_OPTION_INITIAL_RETRANSMIT_TIMEOUT,
+
+    /**
+     * Option to set the write sequence number. Takes a uint32_t as parameter
+     * to set the value of the write sequence number
+     */
+    GNUNET_STREAM_OPTION_TESTING_SET_WRITE_SEQUENCE_NUMBER
   };
 
 
@@ -211,13 +217,15 @@ struct GNUNET_STREAM_ListenSocket;
  * @param listen_cb this function will be called when a peer tries to establish
  *            a stream with us
  * @param listen_cb_cls closure for listen_cb
+ * @param ... options to the stream, terminated by GNUNET_STREAM_OPTION_END
  * @return listen socket, NULL for any error
  */
 struct GNUNET_STREAM_ListenSocket *
 GNUNET_STREAM_listen (const struct GNUNET_CONFIGURATION_Handle *cfg,
                       GNUNET_MESH_ApplicationType app_port,
                       GNUNET_STREAM_ListenCallback listen_cb,
-                      void *listen_cb_cls);
+                      void *listen_cb_cls,
+                      ...);
 
 
 /**
index 1dc1ba80e6c7ee959587aa9d2370ab238c4c0a4b..8c25965f17ccb5b97429b579d2760f5954052b36 100644 (file)
@@ -300,6 +300,16 @@ struct GNUNET_STREAM_Socket
    */
   GNUNET_MESH_ApplicationType app_port;
 
+  /**
+   * Whether testing mode is active or not
+   */
+  int testing_active;
+
+  /**
+   * The write sequence number to be set incase of testing
+   */
+  uint32_t testing_set_write_sequence_number_value;
+
   /**
    * The session id associated with this stream connection
    * FIXME: Not used currently, may be removed
@@ -374,6 +384,21 @@ struct GNUNET_STREAM_ListenSocket
    * FIXME: Remove if not required!
    */
   GNUNET_MESH_ApplicationType port;
+
+  /**
+   * The retransmit timeout
+   */
+  struct GNUNET_TIME_Relative retransmit_timeout;
+  
+  /**
+   * Whether testing mode is active or not
+   */
+  int testing_active;
+
+  /**
+   * The write sequence number to be set incase of testing
+   */
+  uint32_t testing_set_write_sequence_number_value;
 };
 
 
@@ -2666,7 +2691,11 @@ new_tunnel_notify (void *cls,
   socket->session_id = 0;       /* FIXME */
   socket->state = STATE_INIT;
   socket->lsocket = lsocket;
-  
+  socket->retransmit_timeout = lsocket->retransmit_timeout;
+  socket->testing_active = lsocket->testing_active;
+  socket->testing_set_write_sequence_number_value =
+    lsocket->testing_set_write_sequence_number_value;
+    
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "%s: Peer %s initiated tunnel to us\n", 
        GNUNET_i2s (&socket->other_peer),
@@ -2777,6 +2806,7 @@ GNUNET_STREAM_open (const struct GNUNET_CONFIGURATION_Handle *cfg,
   /* Set defaults */
   socket->retransmit_timeout = 
     GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, default_timeout);
+  socket->testing_active = GNUNET_NO;
   va_start (vargs, open_cb_cls); /* Parse variable args */
   do {
     option = va_arg (vargs, enum GNUNET_STREAM_Option);
@@ -2787,6 +2817,11 @@ GNUNET_STREAM_open (const struct GNUNET_CONFIGURATION_Handle *cfg,
       socket->retransmit_timeout = va_arg (vargs,
                                            struct GNUNET_TIME_Relative);
       break;
+    case GNUNET_STREAM_OPTION_TESTING_SET_WRITE_SEQUENCE_NUMBER:
+      socket->testing_active = GNUNET_YES;
+      socket->testing_set_write_sequence_number_value = va_arg (vargs,
+                                                                uint32_t);
+      break;
     case GNUNET_STREAM_OPTION_END:
       break;
     }
@@ -3018,19 +3053,46 @@ GNUNET_STREAM_close (struct GNUNET_STREAM_Socket *socket)
  * @param listen_cb this function will be called when a peer tries to establish
  *            a stream with us
  * @param listen_cb_cls closure for listen_cb
+ * @param ... options to the stream, terminated by GNUNET_STREAM_OPTION_END
  * @return listen socket, NULL for any error
  */
 struct GNUNET_STREAM_ListenSocket *
 GNUNET_STREAM_listen (const struct GNUNET_CONFIGURATION_Handle *cfg,
                       GNUNET_MESH_ApplicationType app_port,
                       GNUNET_STREAM_ListenCallback listen_cb,
-                      void *listen_cb_cls)
+                      void *listen_cb_cls,
+                      ...)
 {
   /* FIXME: Add variable args for passing configration options? */
   struct GNUNET_STREAM_ListenSocket *lsocket;
   GNUNET_MESH_ApplicationType ports[] = {app_port, 0};
+  enum GNUNET_STREAM_Option option;
+  va_list vargs;
 
   lsocket = GNUNET_malloc (sizeof (struct GNUNET_STREAM_ListenSocket));
+  /* Set defaults */
+  lsocket->retransmit_timeout = 
+    GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, default_timeout);
+  lsocket->testing_active = GNUNET_NO;
+  va_start (vargs, listen_cb_cls);
+  do {
+    option = va_arg (vargs, enum GNUNET_STREAM_Option);
+    switch (option)
+    {
+    case GNUNET_STREAM_OPTION_INITIAL_RETRANSMIT_TIMEOUT:
+      lsocket->retransmit_timeout = va_arg (vargs,
+                                            struct GNUNET_TIME_Relative);
+      break;
+    case GNUNET_STREAM_OPTION_TESTING_SET_WRITE_SEQUENCE_NUMBER:
+      lsocket->testing_active = GNUNET_YES;
+      lsocket->testing_set_write_sequence_number_value = va_arg (vargs,
+                                                                 uint32_t);
+      break;
+    case GNUNET_STREAM_OPTION_END:
+      break;
+    }
+  } while (GNUNET_STREAM_OPTION_END != option);
+  va_end (vargs);
   lsocket->port = app_port;
   lsocket->listen_cb = listen_cb;
   lsocket->listen_cb_cls = listen_cb_cls;
index 1fdc0ee19f7f900ea07fe772dff909bd243ca21b..6a61022e047fbbc0d5d803724ae0f377532ed3e3 100644 (file)
@@ -474,7 +474,8 @@ peergroup_ready (void *cls, const char *emsg)
   peer2_listen_socket = GNUNET_STREAM_listen (d2->cfg,
                                               10, /* App port */
                                               &stream_listen_cb,
-                                              NULL);
+                                              NULL,
+                                              GNUNET_STREAM_OPTION_END);
   GNUNET_assert (NULL != peer2_listen_socket);
 
   /* Connect to stream library */
index 84c4867637c9968ff9e222c9c08e6e5ea9e1c50e..20581f9b6f62f31a6765d9a8ea76b5d2a5ee1614 100644 (file)
@@ -348,7 +348,8 @@ test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   peer2_listen_socket = GNUNET_STREAM_listen (config,
                                               10, /* App port */
                                               &stream_listen_cb,
-                                              NULL);
+                                              NULL,
+                                              GNUNET_STREAM_OPTION_END);
   GNUNET_assert (NULL != peer2_listen_socket);
 
   /* Connect to stream library */
@@ -356,7 +357,8 @@ test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
                                      &self,         /* Null for local peer? */
                                      10,           /* App port */
                                      &stream_open_cb,
-                                     (void *) &peer1);
+                                     (void *) &peer1,
+                                     GNUNET_STREAM_OPTION_END);
   GNUNET_assert (NULL != peer1.socket);                  
 }
 
index d645f66a741e9a064b5f8c163bdab66621d6325c..58ad4427c6d9d021f598be0d80d394915154ce26 100644 (file)
@@ -345,7 +345,8 @@ test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   peer2_listen_socket = GNUNET_STREAM_listen (config,
                                               10, /* App port */
                                               &stream_listen_cb,
-                                              NULL);
+                                              NULL,
+                                              GNUNET_STREAM_OPTION_END);
   GNUNET_assert (NULL != peer2_listen_socket);
 
   /* Connect to stream library */
@@ -353,7 +354,8 @@ test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
                                      &self,         /* Null for local peer? */
                                      10,           /* App port */
                                      &stream_open_cb,
-                                     (void *) &peer1);
+                                     (void *) &peer1,
+                                     GNUNET_STREAM_OPTION_END);
   GNUNET_assert (NULL != peer1.socket);                  
 }
 
index c9fab84066e7b3bc12acae051b09e079f5c8c96f..fc2a8f842ef85728ccbefc5737cba27072016cf5 100644 (file)
@@ -373,7 +373,8 @@ test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   peer2_listen_socket = GNUNET_STREAM_listen (config_peer2,
                                               10, /* App port */
                                               &stream_listen_cb,
-                                              &peer2);
+                                              &peer2,
+                                              GNUNET_STREAM_OPTION_END);
   GNUNET_assert (NULL != peer2_listen_socket);
 
   /* Connect to stream library */