From cb11932b64344bc9bde5f5163eefdfc059946c9a Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Thu, 11 Aug 2011 22:04:27 +0000 Subject: cb wrapper for connecting peers --- src/transport/test_transport_testing.c | 21 ++++------- src/transport/transport-testing.c | 66 +++++++++++++++++++++++++++++++++- src/transport/transport-testing.h | 12 ++++++- 3 files changed, 83 insertions(+), 16 deletions(-) (limited to 'src/transport') diff --git a/src/transport/test_transport_testing.c b/src/transport/test_transport_testing.c index 1a176c129..c67d1b27e 100644 --- a/src/transport/test_transport_testing.c +++ b/src/transport/test_transport_testing.c @@ -84,31 +84,24 @@ run (void *cls, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting peer\n"); - p = GNUNET_TRANSPORT_TESTING_start_peer("test_quota_compliance_tcp_peer1.conf"); + p = GNUNET_TRANSPORT_TESTING_start_peer("test_quota_compliance_tcp_peer1.conf", + ¬ify_receive, + ¬ify_connect, + ¬ify_disconnect, + NULL); if (p != NULL) GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer was successfully started\n"); else GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer was not started successfully\n"); GNUNET_assert (p != NULL); - - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tConnecting to transport service\n"); - GNUNET_assert (p->th == NULL); - p->th = GNUNET_TRANSPORT_connect(p->cfg, NULL, - NULL, - ¬ify_receive, - ¬ify_connect, - ¬ify_disconnect); GNUNET_assert (p->th != NULL); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tDisconnecting to transport service\n"); - GNUNET_TRANSPORT_disconnect(p->th); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peer\n"); + GNUNET_TRANSPORT_TESTING_stop_peer(p); - GNUNET_free (p); + } int diff --git a/src/transport/transport-testing.c b/src/transport/transport-testing.c index 24cf8a829..910d9a6d8 100644 --- a/src/transport/transport-testing.c +++ b/src/transport/transport-testing.c @@ -34,6 +34,51 @@ struct ConnectingContext GNUNET_SCHEDULER_TaskIdentifier tct; }; +static void +notify_connect (void *cls, + const struct GNUNET_PeerIdentity *peer, + const struct GNUNET_TRANSPORT_ATS_Information *ats, + uint32_t ats_count) +{ + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%s' connected \n", + GNUNET_i2s (peer)); + + struct PeerContext * p = cls; + if (p == NULL) + return; + if (p->nc != NULL) + p->nc (p->cb_cls, peer, ats, ats_count); +} + +static void +notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) +{ + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%s' disconnected \n", + GNUNET_i2s (peer)); + + struct PeerContext * p = cls; + if (p == NULL) + return; + if (p->nd != NULL) + p->nd (p->cb_cls, peer); +} + +static void +notify_receive (void *cls, + const struct GNUNET_PeerIdentity *peer, + const struct GNUNET_MessageHeader *message, + const struct GNUNET_TRANSPORT_ATS_Information *ats, + uint32_t ats_count) +{ + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Receiving\n"); + + struct PeerContext * p = cls; + if (p == NULL) + return; + if (p->rec != NULL) + p->rec (p->cb_cls, peer, message, ats, ats_count); +} + static void exchange_hello_last (void *cls, @@ -95,7 +140,11 @@ try_connect (void *cls, } struct PeerContext * -GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname) +GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname, + GNUNET_TRANSPORT_ReceiveCallback rec, + GNUNET_TRANSPORT_NotifyConnect nc, + GNUNET_TRANSPORT_NotifyDisconnect nd, + void * cb_cls) { struct PeerContext * p = GNUNET_malloc (sizeof (struct PeerContext)); @@ -109,12 +158,26 @@ GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname) p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", "gnunet-service-arm", "-c", cfgname, NULL); + p->nc = nc; + p->nd = nd; + p->rec = rec; + p->cb_cls = cb_cls; + + p->th = GNUNET_TRANSPORT_connect(p->cfg, NULL, + p, + ¬ify_receive, + ¬ify_connect, + ¬ify_disconnect); + GNUNET_assert (p->th != NULL); return p; } void GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * p) { + if (p->th != NULL) + GNUNET_TRANSPORT_disconnect(p->th); + if (NULL != p->arm_proc) { if (0 != GNUNET_OS_process_kill (p->arm_proc, SIGTERM)) @@ -129,6 +192,7 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * p) GNUNET_DISK_directory_remove (p->servicehome); GNUNET_free(p->servicehome); } + GNUNET_free (p); } void diff --git a/src/transport/transport-testing.h b/src/transport/transport-testing.h index 2c45ca67c..8e67944ba 100644 --- a/src/transport/transport-testing.h +++ b/src/transport/transport-testing.h @@ -41,13 +41,23 @@ struct PeerContext struct GNUNET_TRANSPORT_Handle *th; struct GNUNET_PeerIdentity id; struct GNUNET_OS_Process *arm_proc; + + GNUNET_TRANSPORT_ReceiveCallback rec; + GNUNET_TRANSPORT_NotifyConnect nc; + GNUNET_TRANSPORT_NotifyDisconnect nd; + void * cb_cls; + char * servicehome; }; typedef void (*GNUNET_TRANSPORT_TESTING_connect_cb) (struct PeerContext * p1, struct PeerContext * p2, void *cls); struct PeerContext * -GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname); +GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname, + GNUNET_TRANSPORT_ReceiveCallback rec, + GNUNET_TRANSPORT_NotifyConnect nc, + GNUNET_TRANSPORT_NotifyDisconnect nd, + void * cb_cls); void GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * pc); -- cgit v1.2.3