commit 220cf75b15b4877944119762549a8e1f45dc88e0
parent 19b2aa3faf0205fd880b0ce0d3a0988b9ae7ee59
Author: Bart Polot <bart@net.in.tum.de>
Date: Thu, 13 Mar 2014 15:01:43 +0000
- use pointers in struct itself
Diffstat:
1 file changed, 35 insertions(+), 25 deletions(-)
diff --git a/src/mesh/mesh_profiler.c b/src/mesh/mesh_profiler.c
@@ -87,7 +87,8 @@ struct MeshPeer
*/
int data_received;
- unsigned int dest;
+ struct MeshPeer *dest;
+ struct MeshPeer *incoming;
GNUNET_SCHEDULER_TaskIdentifier ping_task;
};
@@ -405,6 +406,30 @@ data_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
/**
+ * @brief Send data to destination
+ *
+ * @param cls Closure (peer).
+ * @param tc Task context.
+ */
+static void
+ping (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ struct MeshPeer *peer = (struct MeshPeer *) cls;
+
+ peer->ping_task = GNUNET_SCHEDULER_NO_TASK;
+ if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
+ return;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%u -> %u\n",
+ get_index (peer), get_index (peer->dest));
+
+ GNUNET_MESH_notify_transmit_ready (peer->ch, GNUNET_NO,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ size_payload, &tmt_rdy, peer);
+}
+
+
+/**
* Transmit ready callback
*
* @param cls Closure (peer).
@@ -451,6 +476,9 @@ tmt_rdy (void *cls, size_t size, void *buf)
}
}
+ peers->ping_task = GNUNET_SCHEDULER_add_delayed (delay_ms_rnd (60 * 1000),
+ &ping, peer);
+
return size_payload;
}
@@ -572,25 +600,6 @@ channel_cleaner (void *cls, const struct GNUNET_MESH_Channel *channel,
/**
- * @brief Send data to destination
- *
- * @param cls Closure (peer).
- * @param tc Task context.
- */
-static void
-ping (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
- struct MeshPeer *peer = (struct MeshPeer *) cls;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%u -> %u\n",
- get_index (peer), peer->dest);
-
- GNUNET_MESH_notify_transmit_ready (peer->ch, GNUNET_NO,
- GNUNET_TIME_UNIT_FOREVER_REL,
- size_payload, &tmt_rdy, (void *) 1L);
-}
-
-
-/**
* START THE TESTCASE ITSELF, AS WE ARE CONNECTED TO THE MESH SERVICES.
*
* Testcase continues when the root receives confirmation of connected peers,
@@ -619,13 +628,14 @@ do_test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
flags = GNUNET_MESH_OPTION_DEFAULT;
for (i = 0; i < TOTAL_PEERS; i++)
{
- peers[i].dest = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
- TOTAL_PEERS);
+ unsigned int r;
+ r = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, TOTAL_PEERS);
+ peers[i].dest = &peers[r];
peers[i].ch = GNUNET_MESH_channel_create (peers[i].mesh, NULL,
- &peers[peers[i].dest].id,
+ &peers[i].dest->id,
1, flags);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%u => %u\n", i, peers[i].dest);
- peers[i].ping_task = GNUNET_SCHEDULER_add_delayed (delay_ms_rnd(2000),
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%u => %u\n", i, r);
+ peers[i].ping_task = GNUNET_SCHEDULER_add_delayed (delay_ms_rnd (2000),
&ping, &peers[i]);
}
}