gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r20204 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r20204 - gnunet/src/transport
Date: Fri, 2 Mar 2012 15:45:55 +0100

Author: wachs
Date: 2012-03-02 15:45:55 +0100 (Fri, 02 Mar 2012)
New Revision: 20204

Modified:
   gnunet/src/transport/plugin_transport_tcp.c
Log:
- fix for mantis 2189


Modified: gnunet/src/transport/plugin_transport_tcp.c
===================================================================
--- gnunet/src/transport/plugin_transport_tcp.c 2012-03-02 14:04:21 UTC (rev 
20203)
+++ gnunet/src/transport/plugin_transport_tcp.c 2012-03-02 14:45:55 UTC (rev 
20204)
@@ -901,13 +901,7 @@
 
   GNUNET_assert (plugin != NULL);
   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, GNUNET_NO);
   /* create new message entry */
   pm = GNUNET_malloc (sizeof (struct PendingMessage) + msgbuf_size);
   pm->msg = (const char *) &pm[1];
@@ -917,16 +911,51 @@
   pm->transmit_cont = cont;
   pm->transmit_cont_cls = cont_cls;
 
-  /* append pm to pending_messages list */
-  GNUNET_CONTAINER_DLL_insert_tail (session->pending_messages_head,
-                                    session->pending_messages_tail, pm);
 
   GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp",
                    "Asked to transmit %u bytes to `%s', added message to 
list.\n",
                    msgbuf_size, GNUNET_i2s (&session->target));
 
-  process_pending_messages (session);
-  return msgbuf_size;
+  if (GNUNET_YES == 
GNUNET_CONTAINER_multihashmap_contains_value(plugin->sessionmap, 
&session->target.hashPubKey, session))
+  {
+    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, GNUNET_NO);
+
+    /* append pm to pending_messages list */
+    GNUNET_CONTAINER_DLL_insert_tail (session->pending_messages_head,
+                                      session->pending_messages_tail, pm);
+
+    process_pending_messages (session);
+    return msgbuf_size;
+  }
+  else if (GNUNET_YES == 
GNUNET_CONTAINER_multihashmap_contains_value(plugin->nat_wait_conns, 
&session->target.hashPubKey, session))
+  {
+    GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp",
+                     "This NAT WAIT session for peer `%s' is not yet ready!\n",
+                     GNUNET_i2s (&session->target));
+
+    GNUNET_STATISTICS_update (plugin->env->stats,
+                              gettext_noop ("# bytes currently in TCP 
buffers"),
+                              msgbuf_size, GNUNET_NO);
+
+    /* append pm to pending_messages list */
+    GNUNET_CONTAINER_DLL_insert_tail (session->pending_messages_head,
+                                      session->pending_messages_tail, pm);
+    return msgbuf_size;
+  }
+  else
+  {
+    if (cont != NULL)
+      cont (cont_cls, &session->target, GNUNET_SYSERR);
+    GNUNET_break (0);
+    GNUNET_free (pm);
+    return GNUNET_SYSERR; /* session does not exist here */
+  }
 }
 
 struct SessionItCtx
@@ -1133,7 +1162,6 @@
       return session;
     else
     {
-      /* This is necessary for disconnect_session() to work */
       GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp",
                        "Running NAT client for `%4s' at `%s' failed\n",
                        GNUNET_i2s (&session->target), GNUNET_a2s (sb, sbs));




reply via email to

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