X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdv%2Fdv_api.c;h=d954d718b30b45ba9da651e67d45f7f2710916ba;hb=19377520016cc644070d207af34ae3e76618fdc8;hp=8b92a703f47f35975cf376b8a00afda1e6bdc92f;hpb=76259023a5566d42229a4a284616fa8bac93b6a5;p=oweals%2Fgnunet.git diff --git a/src/dv/dv_api.c b/src/dv/dv_api.c index 8b92a703f..d954d718b 100644 --- a/src/dv/dv_api.c +++ b/src/dv/dv_api.c @@ -4,7 +4,7 @@ GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your + by the Free Software Foundation; either version 3, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but @@ -36,7 +36,7 @@ #include "gnunet_time_lib.h" #include "gnunet_dv_service.h" #include "dv.h" -#include "../transport/plugin_transport.h" +#include "gnunet_transport_plugin.h" /** * Store ready to send messages @@ -65,10 +65,6 @@ struct PendingMessages */ struct GNUNET_DV_Handle { - /** - * Our scheduler. - */ - struct GNUNET_SCHEDULER_Handle *sched; /** * Configuration to use. @@ -175,10 +171,10 @@ try_connect (struct GNUNET_DV_Handle *ret) { if (ret->client != NULL) return GNUNET_OK; - ret->client = GNUNET_CLIENT_connect (ret->sched, "dv", ret->cfg); + ret->client = GNUNET_CLIENT_connect ("dv", ret->cfg); if (ret->client != NULL) return GNUNET_YES; -#if DEBUG_STATISTICS +#if DEBUG_DV_MESSAGES GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, _("Failed to connect to the dv service!\n")); #endif @@ -209,7 +205,7 @@ finish (struct GNUNET_DV_Handle *handle, int code) * * @param cls handle to the dv service (struct GNUNET_DV_Handle) * @param size how many bytes can we send - * @buf where to copy the message to send + * @param buf where to copy the message to send * * @return how many bytes we copied to buf */ @@ -351,6 +347,9 @@ void handle_message_receipt (void *cls, if (msg == NULL) { +#if DEBUG_DV_MESSAGES + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "DV_API receive: connection closed\n"); +#endif return; /* Connection closed? */ } @@ -364,16 +363,15 @@ void handle_message_receipt (void *cls, received_msg = (struct GNUNET_DV_MessageReceived *)msg; packed_msg_len = ntohl(received_msg->msg_len); - sender_address_len = ntohl(received_msg->sender_address_len); - - GNUNET_assert(ntohs(msg->size) == (sizeof(struct GNUNET_DV_MessageReceived) + packed_msg_len + sender_address_len)); + sender_address_len = ntohs(msg->size) - packed_msg_len - sizeof(struct GNUNET_DV_MessageReceived); + GNUNET_assert(sender_address_len > 0); sender_address = GNUNET_malloc(sender_address_len); memcpy(sender_address, &received_msg[1], sender_address_len); packed_msg_start = (char *)&received_msg[1]; packed_msg = GNUNET_malloc(packed_msg_len); memcpy(packed_msg, &packed_msg_start[sender_address_len], packed_msg_len); -#if DEBUG_DV +#if DEBUG_DV_MESSAGES GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "DV_API receive: packed message type: %d or %d\n", ntohs(((struct GNUNET_MessageHeader *)packed_msg)->type), ((struct GNUNET_MessageHeader *)packed_msg)->type); GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "DV_API receive: message sender reported as %s\n", GNUNET_i2s(&received_msg->sender)); GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "DV_API receive: distance is %u\n", ntohl(received_msg->distance)); @@ -496,7 +494,9 @@ transmit_start (void *cls, size_t size, void *buf) struct StartContext *start_context = cls; struct GNUNET_DV_Handle *handle = start_context->handle; size_t tsize; - +#if DEBUG_DV + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "DV API: sending start request to service\n"); +#endif if (buf == NULL) { GNUNET_free(start_context->message); @@ -511,6 +511,11 @@ transmit_start (void *cls, size_t size, void *buf) memcpy(buf, start_context->message, tsize); GNUNET_free(start_context->message); GNUNET_free(start_context); + GNUNET_CLIENT_receive (handle->client, + &handle_message_receipt, + handle, GNUNET_TIME_UNIT_FOREVER_REL); + + return tsize; } @@ -520,7 +525,6 @@ transmit_start (void *cls, size_t size, void *buf) /** * Connect to the DV service * - * @param sched the scheduler to use * @param cfg the configuration to use * @param receive_handler method call when on receipt from the service * @param receive_handler_cls closure for receive_handler @@ -528,8 +532,7 @@ transmit_start (void *cls, size_t size, void *buf) * @return handle to the DV service */ struct GNUNET_DV_Handle * -GNUNET_DV_connect (struct GNUNET_SCHEDULER_Handle *sched, - const struct GNUNET_CONFIGURATION_Handle *cfg, +GNUNET_DV_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_DV_MessageReceivedHandler receive_handler, void *receive_handler_cls) { @@ -539,11 +542,10 @@ GNUNET_DV_connect (struct GNUNET_SCHEDULER_Handle *sched, handle = GNUNET_malloc(sizeof(struct GNUNET_DV_Handle)); handle->cfg = cfg; - handle->sched = sched; handle->pending_list = NULL; handle->current = NULL; handle->th = NULL; - handle->client = GNUNET_CLIENT_connect(sched, "dv", cfg); + handle->client = GNUNET_CLIENT_connect("dv", cfg); handle->receive_handler = receive_handler; handle->receive_cls = receive_handler_cls; @@ -568,10 +570,6 @@ GNUNET_DV_connect (struct GNUNET_SCHEDULER_Handle *sched, handle->send_callbacks = GNUNET_CONTAINER_multihashmap_create(100); - GNUNET_CLIENT_receive (handle->client, - &handle_message_receipt, - handle, GNUNET_TIME_UNIT_FOREVER_REL); - return handle; }