[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r17671 - gnunet/src/core
From: |
gnunet |
Subject: |
[GNUnet-SVN] r17671 - gnunet/src/core |
Date: |
Sat, 22 Oct 2011 23:05:05 +0200 |
Author: grothoff
Date: 2011-10-22 23:05:05 +0200 (Sat, 22 Oct 2011)
New Revision: 17671
Modified:
gnunet/src/core/gnunet-service-core_sessions.c
gnunet/src/core/gnunet-service-core_typemap.c
Log:
add typemap retransmission code
Modified: gnunet/src/core/gnunet-service-core_sessions.c
===================================================================
--- gnunet/src/core/gnunet-service-core_sessions.c 2011-10-22 20:56:05 UTC
(rev 17670)
+++ gnunet/src/core/gnunet-service-core_sessions.c 2011-10-22 21:05:05 UTC
(rev 17671)
@@ -33,6 +33,12 @@
#include "gnunet_constants.h"
/**
+ * How often do we transmit our typemap?
+ */
+#define TYPEMAP_FREQUENCY GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_MINUTES, 5)
+
+
+/**
* Message ready for encryption. This struct is followed by the
* actual content of the message.
*/
@@ -121,6 +127,11 @@
GNUNET_SCHEDULER_TaskIdentifier cork_task;
/**
+ * Task to transmit our type map.
+ */
+ GNUNET_SCHEDULER_TaskIdentifier typemap_task;
+
+ /**
* Is the neighbour queue empty and thus ready for us
* to transmit an encrypted message?
*/
@@ -181,6 +192,7 @@
car);
GSC_CLIENTS_reject_request (car);
}
+ GNUNET_SCHEDULER_cancel (session->typemap_task);
GNUNET_assert (GNUNET_YES ==
GNUNET_CONTAINER_multihashmap_remove (sessions,
&session->peer.hashPubKey, session));
@@ -198,6 +210,36 @@
/**
+ * Transmit our current typemap message to the other peer.
+ * (Done periodically in case an update got lost).
+ *
+ * @param cls the 'struct Session*'
+ * @param tc unused
+ */
+static void
+transmit_typemap_task (void *cls,
+ const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ struct Session *session = cls;
+ struct GNUNET_MessageHeader *hdr;
+ struct GNUNET_TIME_Relative delay;
+
+ delay = TYPEMAP_FREQUENCY;
+ /* randomize a bit to avoid spont. sync */
+ delay.rel_value += GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
+ 1000);
+ session->typemap_task = GNUNET_SCHEDULER_add_delayed (delay,
+ &transmit_typemap_task,
+ session);
+ hdr = GSC_TYPEMAP_compute_type_map_message ();
+ GSC_KX_encrypt_and_transmit (session->kxinfo,
+ hdr,
+ ntohs (hdr->size));
+ GNUNET_free (hdr);
+}
+
+
+/**
* Create a session, a key exchange was just completed.
*
* @param peer peer that is now connected
@@ -207,7 +249,6 @@
GSC_SESSIONS_create (const struct GNUNET_PeerIdentity *peer,
struct GSC_KeyExchangeInfo *kx)
{
- struct GNUNET_MessageHeader *hdr;
struct Session *session;
#if DEBUG_CORE
@@ -218,6 +259,8 @@
session->peer = *peer;
session->kxinfo = kx;
session->time_established = GNUNET_TIME_absolute_get ();
+ session->typemap_task = GNUNET_SCHEDULER_add_now (&transmit_typemap_task,
+ session);
GNUNET_assert (GNUNET_OK ==
GNUNET_CONTAINER_multihashmap_put (sessions,
&peer->hashPubKey, session,
@@ -226,13 +269,6 @@
gettext_noop ("# entries in session map"),
GNUNET_CONTAINER_multihashmap_size (sessions),
GNUNET_NO);
- /* FIXME: we should probably do this periodically (in case
- type map message is lost...) */
- hdr = GSC_TYPEMAP_compute_type_map_message ();
- GSC_KX_encrypt_and_transmit (kx,
- hdr,
- ntohs (hdr->size));
- GNUNET_free (hdr);
}
Modified: gnunet/src/core/gnunet-service-core_typemap.c
===================================================================
--- gnunet/src/core/gnunet-service-core_typemap.c 2011-10-22 20:56:05 UTC
(rev 17670)
+++ gnunet/src/core/gnunet-service-core_typemap.c 2011-10-22 21:05:05 UTC
(rev 17671)
@@ -107,6 +107,10 @@
switch (ntohs (msg->type))
{
case GNUNET_MESSAGE_TYPE_CORE_BINARY_TYPE_MAP:
+ GNUNET_STATISTICS_update (GSC_stats,
+ gettext_noop ("# type maps received"),
+ 1,
+ GNUNET_NO);
if (size != sizeof (struct GSC_TypeMap))
{
GNUNET_break_op (0);
@@ -116,6 +120,10 @@
memcpy (ret, &msg[1], sizeof (struct GSC_TypeMap));
return ret;
case GNUNET_MESSAGE_TYPE_CORE_COMPRESSED_TYPE_MAP:
+ GNUNET_STATISTICS_update (GSC_stats,
+ gettext_noop ("# type maps received"),
+ 1,
+ GNUNET_NO);
ret = GNUNET_malloc (sizeof (struct GSC_TypeMap));
dlen = sizeof (struct GSC_TypeMap);
if ( (Z_OK !=
@@ -144,6 +152,10 @@
struct GNUNET_MessageHeader *hdr;
hdr = GSC_TYPEMAP_compute_type_map_message ();
+ GNUNET_STATISTICS_update (GSC_stats,
+ gettext_noop ("# updates to my type map"),
+ 1,
+ GNUNET_NO);
GSC_SESSIONS_broadcast (hdr);
GNUNET_free (hdr);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r17671 - gnunet/src/core,
gnunet <=