#include "dv.h"
#include "gnunet_transport_plugin.h"
+#define LOG(kind,...) GNUNET_log_from (kind, "dv-api",__VA_ARGS__)
+
/**
* Store ready to send messages
*/
* Target of the message.
*/
struct GNUNET_PeerIdentity target;
+
+ /**
+ * Payload size in bytes
+ */
+ size_t payload_size;
+
+ /**
+ * DV message size
+ */
+ size_t msg_size;
};
/**
* @param hash set to uid (extended with zeros)
*/
static void
-hash_from_uid (uint32_t uid, GNUNET_HashCode * hash)
+hash_from_uid (uint32_t uid, struct GNUNET_HashCode * hash)
{
- memset (hash, 0, sizeof (GNUNET_HashCode));
+ memset (hash, 0, sizeof (struct GNUNET_HashCode));
*((uint32_t *) hash) = uid;
}
if (ret->client != NULL)
return GNUNET_YES;
#if DEBUG_DV_MESSAGES
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- _("Failed to connect to the dv service!\n"));
+ LOG (GNUNET_ERROR_TYPE_DEBUG, _("Failed to connect to the dv service!\n"));
#endif
return GNUNET_NO;
}
#if DEBUG_DV
if (handle->current != NULL)
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "DV API: Transmit pending called with message type %d\n",
- ntohs (handle->current->msg->header.type));
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "DV API: Transmit pending called with message type %d\n",
+ ntohs (handle->current->msg->header.type));
#endif
if (buf == NULL)
{
#if DEBUG_DV
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "DV API: Transmit pending FAILED!\n\n\n");
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "DV API: Transmit pending FAILED!\n\n\n");
#endif
finish (handle, GNUNET_SYSERR);
return 0;
{
memcpy (buf, handle->current->msg, tsize);
#if DEBUG_DV
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "DV API: Copied %d bytes into buffer!\n\n\n", tsize);
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "DV API: Copied %d bytes into buffer!\n\n\n", tsize);
#endif
finish (handle, GNUNET_OK);
return tsize;
handle)))
{
#if DEBUG_DV
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Failed to transmit request to dv service.\n");
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Failed to transmit request to dv service.\n");
#endif
finish (handle, GNUNET_SYSERR);
}
char *sender_address;
char *packed_msg;
char *packed_msg_start;
- GNUNET_HashCode uidhash;
+ struct GNUNET_HashCode uidhash;
struct SendCallbackContext *send_ctx;
if (msg == NULL)
{
#if DEBUG_DV_MESSAGES
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "DV_API receive: connection closed\n");
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "DV_API receive: connection closed\n");
#endif
return; /* Connection closed? */
}
memcpy (packed_msg, &packed_msg_start[sender_address_len], packed_msg_len);
#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));
+ 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);
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "DV_API receive: message sender reported as %s\n",
+ GNUNET_i2s (&received_msg->sender));
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "DV_API receive: distance is %u\n",
+ ntohl (received_msg->distance));
#endif
handle->receive_handler (handle->receive_cls, &received_msg->sender,
{
if (ntohl (send_result_msg->result) == 0)
{
- send_ctx->cont (send_ctx->cont_cls, &send_ctx->target, GNUNET_OK);
+ send_ctx->cont (send_ctx->cont_cls, &send_ctx->target, GNUNET_OK,
+ send_ctx->payload_size, send_ctx->msg_size);
}
else
{
- send_ctx->cont (send_ctx->cont_cls, &send_ctx->target, GNUNET_SYSERR);
+ send_ctx->cont (send_ctx->cont_cls, &send_ctx->target, GNUNET_SYSERR,
+ send_ctx->payload_size, 0);
}
}
GNUNET_free_non_null (send_ctx);
struct GNUNET_DV_SendMessage *msg;
struct SendCallbackContext *send_ctx;
char *end_of_message;
- GNUNET_HashCode uidhash;
+ struct GNUNET_HashCode uidhash;
int msize;
#if DEBUG_DV_MESSAGES
memcpy (end_of_message, msgbuf, msgbuf_size);
add_pending (dv_handle, msg);
send_ctx = GNUNET_malloc (sizeof (struct SendCallbackContext));
+ send_ctx->payload_size = msgbuf_size;
+ send_ctx->msg_size = msize;
send_ctx->cont = cont;
send_ctx->cont_cls = cont_cls;
memcpy (&send_ctx->target, target, sizeof (struct GNUNET_PeerIdentity));
size_t tsize;
#if DEBUG_DV
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "DV API: sending start request to service\n");
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "DV API: sending start request to service\n");
#endif
if (buf == NULL)
{
GNUNET_YES, &transmit_start,
start_context);
- handle->send_callbacks = GNUNET_CONTAINER_multihashmap_create (100);
+ handle->send_callbacks = GNUNET_CONTAINER_multihashmap_create (100, GNUNET_NO);
return handle;
}
}
if (handle->client != NULL) /* Finally, disconnect from the service */
{
- GNUNET_CLIENT_disconnect (handle->client, GNUNET_NO);
+ GNUNET_CLIENT_disconnect (handle->client);
handle->client = NULL;
}