stuff
[oweals/gnunet.git] / src / transport / plugin_transport_tcp.c
index 41f8fb911d14c9237f05857340e546c850168c0f..e796dacf4ffe20cce4c1a2427ca7ca744153bda0 100644 (file)
@@ -24,6 +24,7 @@
  */
 #include "platform.h"
 #include "gnunet_hello_lib.h"
+#include "gnunet_constants.h"
 #include "gnunet_connection_lib.h"
 #include "gnunet_container_lib.h"
 #include "gnunet_nat_lib.h"
@@ -42,7 +43,6 @@
 
 #define DEBUG_TCP_NAT GNUNET_NO
 
-
 /**
  * Initial handshake message for a session.
  */
@@ -868,18 +868,20 @@ disconnect_session (struct Session *session)
        GNUNET_SERVER_receive_done (session->client,
                                    GNUNET_SYSERR);     
     }
-  else if (session->client != NULL)
-    GNUNET_SERVER_client_drop (session->client);
+  if (session->client != NULL)
+    {
+      GNUNET_SERVER_client_drop (session->client);
+      session->client = NULL;
+    }
   GNUNET_STATISTICS_update (session->plugin->env->stats,
                            gettext_noop ("# TCP sessions active"),
                            -1,
                            GNUNET_NO);
   GNUNET_free_non_null (session->connect_addr);
-
   session->plugin->env->session_end (session->plugin->env->cls,
                                      &session->target,
                                      session);
-
+  GNUNET_assert (NULL == session->transmit_handle);
   GNUNET_free (session);
 }
 
@@ -1111,6 +1113,7 @@ tcp_plugin_send (void *cls,
                                     target,
                                     NULL, 
                                    GNUNET_YES);
+          GNUNET_assert (session != NULL);
 
           /* create new message entry */
           pm = GNUNET_malloc (sizeof (struct PendingMessage) + msgbuf_size);
@@ -1187,8 +1190,23 @@ tcp_plugin_send (void *cls,
              addrlen);
       session->connect_alen = addrlen;
     }
+  else  /* session != NULL */
+    {
+      /* check if session is valid */
+      struct Session * ses = plugin->sessions;
+      while ((ses != NULL) && (ses != session))
+        ses = ses->next;
+      if (ses == NULL)
+       {
+         GNUNET_break (0);
+         return -1;
+       }
+    }
   GNUNET_assert (session != NULL);
   GNUNET_assert (session->client != NULL);
+
+
+  GNUNET_SERVER_client_set_timeout(session->client, GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT);
   GNUNET_STATISTICS_update (plugin->env->stats,
                            gettext_noop ("# bytes currently in TCP buffers"),
                            msgbuf_size,
@@ -1737,6 +1755,7 @@ handle_tcp_welcome (void *cls,
     }
   session->last_activity = GNUNET_TIME_absolute_get ();
   session->expecting_welcome = GNUNET_NO;
+  GNUNET_SERVER_client_set_timeout(client, GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT);
   GNUNET_SERVER_receive_done (client, GNUNET_OK);
 }