gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r17372 - gnunet/src/core


From: gnunet
Subject: [GNUnet-SVN] r17372 - gnunet/src/core
Date: Tue, 11 Oct 2011 14:57:14 +0200

Author: grothoff
Date: 2011-10-11 14:57:14 +0200 (Tue, 11 Oct 2011)
New Revision: 17372

Modified:
   gnunet/src/core/gnunet-service-core_clients.c
   gnunet/src/core/gnunet-service-core_kx.c
   gnunet/src/core/gnunet-service-core_sessions.c
Log:
also allow deferral of encrypted messages

Modified: gnunet/src/core/gnunet-service-core_clients.c
===================================================================
--- gnunet/src/core/gnunet-service-core_clients.c       2011-10-11 12:33:07 UTC 
(rev 17371)
+++ gnunet/src/core/gnunet-service-core_clients.c       2011-10-11 12:57:14 UTC 
(rev 17372)
@@ -344,6 +344,10 @@
                                                       
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST));
     car->client_handle = c;
   }
+  else
+  {
+    GSC_SESSIONS_dequeue_request (car);
+  }
   car->target = req->peer;
   car->deadline = GNUNET_TIME_absolute_ntoh (req->deadline);
   car->priority = ntohl (req->priority);

Modified: gnunet/src/core/gnunet-service-core_kx.c
===================================================================
--- gnunet/src/core/gnunet-service-core_kx.c    2011-10-11 12:33:07 UTC (rev 
17371)
+++ gnunet/src/core/gnunet-service-core_kx.c    2011-10-11 12:57:14 UTC (rev 
17372)
@@ -294,6 +294,12 @@
   struct PongMessage *pong_received;
 
   /**
+   * Encrypted message we received from the other peer and
+   * did not process yet (or NULL).
+   */
+  struct EncryptedMessage *emsg_received;
+
+  /**
    * Non-NULL if we are currently looking up HELLOs for this peer.
    * for this peer.
    */
@@ -697,6 +703,7 @@
   GNUNET_free_non_null (kx->skm_received);
   GNUNET_free_non_null (kx->ping_received);
   GNUNET_free_non_null (kx->pong_received);
+  GNUNET_free_non_null (kx->emsg_received);
   GNUNET_free_non_null (kx->public_key);
   GNUNET_free (kx);
 }
@@ -1062,6 +1069,7 @@
 {
   const struct PongMessage *m;
   struct PongMessage t;
+  struct EncryptedMessage *emsg;
   struct GNUNET_CRYPTO_AesInitializationVector iv;
   uint16_t msize;
 
@@ -1142,6 +1150,13 @@
     GNUNET_SCHEDULER_cancel (kx->retry_set_key_task);
     kx->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK;
     GNUNET_assert (kx->keep_alive_task == GNUNET_SCHEDULER_NO_TASK);
+    if (kx->emsg_received != NULL)
+    {
+      emsg = kx->emsg_received;
+      kx->emsg_received = NULL;
+      GSC_KX_handle_encrypted_message (kx, &emsg->header, NULL, 0 /* FIXME: 
ATSI */);
+      GNUNET_free (emsg);
+    }
     update_timeout (kx);
     break;
   case KX_STATE_UP:
@@ -1342,6 +1357,13 @@
                              1, GNUNET_NO);
     return;
   }
+  if (kx->status == KX_STATE_KEY_RECEIVED)
+  {
+    /* defer */
+    GNUNET_free_non_null (kx->ping_received);
+    kx->emsg_received = (struct EncryptedMessage*) GNUNET_copy_message (msg);
+    return;
+  }
   /* validate hash */
   derive_auth_key (&auth_key, &kx->decrypt_key, m->iv_seed,
                    kx->decrypt_key_created);

Modified: gnunet/src/core/gnunet-service-core_sessions.c
===================================================================
--- gnunet/src/core/gnunet-service-core_sessions.c      2011-10-11 12:33:07 UTC 
(rev 17371)
+++ gnunet/src/core/gnunet-service-core_sessions.c      2011-10-11 12:57:14 UTC 
(rev 17372)
@@ -715,6 +715,11 @@
   if (NULL == nmap)
     return; /* malformed */
   session = find_session (peer);
+  if (NULL == session)
+  {
+    GNUNET_break (0);
+    return;
+  }
   GSC_CLIENTS_notify_clients_about_neighbour (peer,
                                              NULL, 0, /* FIXME: ATS */
                                              session->tmap,




reply via email to

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