From 1744330ca7033f849bf486188bf125a2b3818498 Mon Sep 17 00:00:00 2001 From: Sree Harsha Totakura Date: Wed, 5 Sep 2012 11:44:56 +0000 Subject: [PATCH] service connect callback instead of operation completion callback --- src/include/gnunet_testbed_service.h | 21 ++++++++++++++++++++- src/testbed/test_testbed_api.c | 19 +++++++++++++------ src/testbed/testbed_api_services.c | 6 +++--- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/include/gnunet_testbed_service.h b/src/include/gnunet_testbed_service.h index 249b40752..92a7beb40 100644 --- a/src/include/gnunet_testbed_service.h +++ b/src/include/gnunet_testbed_service.h @@ -1040,6 +1040,25 @@ typedef void (*GNUNET_TESTBED_DisconnectAdapter)(void *cls, void *op_result); +/** + * Callback to be called when a service connect operation is completed + * + * @param cls the callback closure from functions generating an operation + * @param op the operation that has been finished + * @param ca_result the service handle returned from GNUNET_TESTBED_ConnectAdapter() + * @param emsg error message in case the operation has failed; will be NULL if + * operation has executed successfully. + */ +typedef void (*GNUNET_TESTBED_ServiceConnectCompletionCallback) (void *cls, + struct + GNUNET_TESTBED_Operation + *op, + void + *ca_result, + const char + *emsg ); + + /** * Connect to a service offered by the given peer. Will ensure that * the request is queued to not overwhelm our ability to create and @@ -1065,7 +1084,7 @@ struct GNUNET_TESTBED_Operation * GNUNET_TESTBED_service_connect (void *op_cls, struct GNUNET_TESTBED_Peer *peer, const char *service_name, - GNUNET_TESTBED_OperationCompletionCallback cb, + GNUNET_TESTBED_ServiceConnectCompletionCallback cb, void *cb_cls, GNUNET_TESTBED_ConnectAdapter ca, GNUNET_TESTBED_DisconnectAdapter da, diff --git a/src/testbed/test_testbed_api.c b/src/testbed/test_testbed_api.c index 529072cee..b2a07650a 100644 --- a/src/testbed/test_testbed_api.c +++ b/src/testbed/test_testbed_api.c @@ -198,8 +198,10 @@ dht_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) static void dht_disconnect_adapter (void *cls, void *op_result) { - if (NULL != op_result) - GNUNET_DHT_disconnect (op_result); + GNUNET_assert (NULL != op_result); + GNUNET_assert (op_result == dht_handle); + GNUNET_DHT_disconnect (dht_handle); + dht_handle = NULL; GNUNET_assert (PEER_SERVICE_CONNECT == sub_test); GNUNET_assert (NULL != operation); operation = GNUNET_TESTBED_peer_stop (peer); @@ -208,15 +210,17 @@ dht_disconnect_adapter (void *cls, void *op_result) /** - * Callback to be called when an operation is completed + * Callback to be called when a service connect operation is completed * * @param cls the callback closure from functions generating an operation * @param op the operation that has been finished + * @param ca_result the service handle returned from GNUNET_TESTBED_ConnectAdapter() * @param emsg error message in case the operation has failed; will be NULL if * operation has executed successfully. */ static void -op_comp_cb (void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg) +service_connect_comp_cb (void *cls, struct GNUNET_TESTBED_Operation *op, + void *ca_result, const char *emsg) { switch (sub_test) { @@ -224,8 +228,9 @@ op_comp_cb (void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg) GNUNET_assert (operation == op); GNUNET_assert (NULL == emsg); GNUNET_assert (NULL == cls); + GNUNET_assert (ca_result == dht_handle); GNUNET_TESTBED_operation_done (operation); /* This results in call to - * disconnect adapter */ + * disconnect adapter */ break; default: GNUNET_assert (0); @@ -233,6 +238,7 @@ op_comp_cb (void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg) } + /** * Callback to be called when the requested peer information is available * @@ -307,7 +313,8 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) GNUNET_assert (OTHER == sub_test); GNUNET_TESTBED_operation_done (operation); operation = - GNUNET_TESTBED_service_connect (NULL, peer, "dht", &op_comp_cb, NULL, + GNUNET_TESTBED_service_connect (NULL, peer, "dht", + &service_connect_comp_cb, NULL, &dht_connect_adapter, &dht_disconnect_adapter, NULL); GNUNET_assert (NULL != operation); diff --git a/src/testbed/testbed_api_services.c b/src/testbed/testbed_api_services.c index 3e8484022..861b35917 100644 --- a/src/testbed/testbed_api_services.c +++ b/src/testbed/testbed_api_services.c @@ -110,7 +110,7 @@ struct ServiceConnectData /** * The operation completion callback */ - GNUNET_TESTBED_OperationCompletionCallback cb; + GNUNET_TESTBED_ServiceConnectCompletionCallback cb; /** * The closure for operation completion callback @@ -161,7 +161,7 @@ configuration_receiver (void *cls, const struct GNUNET_MessageHeader *msg) (NULL != c->cc)) c->cc (c->cc_cls, &info); if (NULL != data->cb) - data->cb (data->cb_cls, data->operation, NULL); + data->cb (data->cb_cls, data->operation, data->op_result, NULL); } @@ -247,7 +247,7 @@ struct GNUNET_TESTBED_Operation * GNUNET_TESTBED_service_connect (void *op_cls, struct GNUNET_TESTBED_Peer *peer, const char *service_name, - GNUNET_TESTBED_OperationCompletionCallback cb, + GNUNET_TESTBED_ServiceConnectCompletionCallback cb, void *cb_cls, GNUNET_TESTBED_ConnectAdapter ca, GNUNET_TESTBED_DisconnectAdapter da, -- 2.25.1