/**
* Transmit handle to the plugin.
*/
-static struct GNUNET_CONNECTION_TransmitHandle *plugin_transmit_handle;
+static struct GNUNET_SERVER_TransmitHandle *plugin_transmit_handle;
/**
* Head of DLL for client messages
* @param client the TokenizedMessageContext which contains message information
* @param message the actual message
*/
-void
+int
tokenized_message_handler (void *cls, void *client,
const struct GNUNET_MessageHeader *message)
{
send_to_plugin (ctx->peer, message, ntohs (message->size),
&ctx->distant->identity, ctx->distant->cost);
}
+ return GNUNET_OK;
}
#if DELAY_FORWARDS
{
send_message (&msg_ctx->dest, &msg_ctx->sender, NULL, msg_ctx->message,
msg_ctx->message_size, default_dv_priority, msg_ctx->uid,
- GNUNET_TIME_relative_get_forever ());
+ GNUNET_TIME_UNIT_FOREVER_REL);
GNUNET_free (msg_ctx->message);
GNUNET_free (msg_ctx);
}
* Get distance information from 'atsi'.
*
* @param atsi performance data
+ * @param atsi_count number of entries in atsi
* @return connected transport distance
*/
static uint32_t
-get_atsi_distance (const struct GNUNET_ATS_Information *atsi)
+get_atsi_distance (const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count)
{
- while ((ntohl (atsi->type) != GNUNET_ATS_ARRAY_TERMINATOR) &&
- (ntohl (atsi->type) != GNUNET_ATS_QUALITY_NET_DISTANCE))
- atsi++;
- if (ntohl (atsi->type) == GNUNET_ATS_ARRAY_TERMINATOR)
- {
- GNUNET_break (0);
- /* FIXME: we do not have distance data? Assume direct neighbor. */
- return DIRECT_NEIGHBOR_COST;
- }
- return ntohl (atsi->value);
+ unsigned int i;
+
+ for (i = 0; i < atsi_count; i++)
+ if (ntohl (atsi[i].type) == GNUNET_ATS_QUALITY_NET_DISTANCE)
+ return ntohl (atsi->value);
+ /* FIXME: we do not have distance data? Assume direct neighbor. */
+ return DIRECT_NEIGHBOR_COST;
}
/**
* Find latency information in 'atsi'.
*
* @param atsi performance data
+ * @param atsi_count number of entries in atsi
* @return connection latency
*/
static struct GNUNET_TIME_Relative
-get_atsi_latency (const struct GNUNET_ATS_Information *atsi)
+get_atsi_latency (const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count)
{
- while ((ntohl (atsi->type) != GNUNET_ATS_ARRAY_TERMINATOR) &&
- (ntohl (atsi->type) != GNUNET_ATS_QUALITY_NET_DELAY))
- atsi++;
- if (ntohl (atsi->type) == GNUNET_ATS_ARRAY_TERMINATOR)
- {
- GNUNET_break (0);
- /* how can we not have latency data? */
- return GNUNET_TIME_UNIT_SECONDS;
- }
- /* FIXME: Multiply by GNUNET_TIME_UNIT_MILLISECONDS (1) to get as a GNUNET_TIME_Relative */
- return GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS,
- ntohl (atsi->value));
+ unsigned int i;
+
+ for (i = 0; i < atsi_count; i++)
+ if (ntohl (atsi[i].type) == GNUNET_ATS_QUALITY_NET_DELAY)
+ return GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS,
+ ntohl (atsi->value));
+ GNUNET_break (0);
+ /* how can we not have latency data? */
+ return GNUNET_TIME_UNIT_SECONDS;
}
/**
* @param peer peer which sent the message (immediate sender)
* @param message the message
* @param atsi transport ATS information (latency, distance, etc.)
+ * @param atsi_count number of entries in atsi
*/
static int
handle_dv_data_message (void *cls, const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_MessageHeader *message,
- const struct GNUNET_ATS_Information *atsi)
+ const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count)
{
const p2p_dv_MESSAGE_Data *incoming = (const p2p_dv_MESSAGE_Data *) message;
const struct GNUNET_MessageHeader *packed_message;
}
/* Iterate over ATS_Information to get distance and latency */
- latency = get_atsi_latency (atsi);
- distance = get_atsi_distance (atsi);
+ latency = get_atsi_latency (atsi, atsi_count);
+ distance = get_atsi_distance (atsi, atsi_count);
dn = GNUNET_CONTAINER_multihashmap_get (direct_neighbors, &peer->hashPubKey);
if (dn == NULL)
return GNUNET_OK;
send_message (destination, original_sender, NULL, packed_message,
packed_message_size, default_dv_priority,
ntohl (incoming->uid),
- GNUNET_TIME_relative_get_forever ());
+ GNUNET_TIME_UNIT_FOREVER_REL);
}
if (ret != GNUNET_SYSERR)
return GNUNET_OK;
sizeof (p2p_dv_MESSAGE_NeighborInfo));
pending_message->msg = (struct GNUNET_MessageHeader *) &pending_message[1];
pending_message->importance = default_dv_priority;
- pending_message->timeout = GNUNET_TIME_relative_get_forever ();
+ pending_message->timeout = GNUNET_TIME_UNIT_FOREVER_REL;
memcpy (&pending_message->recipient, &to->identity,
sizeof (struct GNUNET_PeerIdentity));
pending_message->msg_size = sizeof (p2p_dv_MESSAGE_NeighborInfo);
GNUNET_SCHEDULER_add_now (try_core_send, NULL);
/*if (core_transmit_handle == NULL)
- * core_transmit_handle = GNUNET_CORE_notify_transmit_ready(coreAPI, GNUNET_YES, default_dv_priority, GNUNET_TIME_relative_get_forever(), &to->identity, sizeof(p2p_dv_MESSAGE_NeighborInfo), &core_transmit_notify, NULL); */
+ * core_transmit_handle = GNUNET_CORE_notify_transmit_ready(coreAPI, GNUNET_YES, default_dv_priority, GNUNET_TIME_UNIT_FOREVER_REL, &to->identity, sizeof(p2p_dv_MESSAGE_NeighborInfo), &core_transmit_notify, NULL); */
}
static int
handle_dv_gossip_message (void *cls, const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_MessageHeader *message,
- const struct GNUNET_ATS_Information *atsi);
+ const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count);
static int
handle_dv_disconnect_message (void *cls, const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_MessageHeader *message,
- const struct GNUNET_ATS_Information
- *atsi);
+ const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count);
/** End forward declarations **/
sizeof (p2p_dv_MESSAGE_Disconnect));
pending_message->msg = (struct GNUNET_MessageHeader *) &pending_message[1];
pending_message->importance = default_dv_priority;
- pending_message->timeout = GNUNET_TIME_relative_get_forever ();
+ pending_message->timeout = GNUNET_TIME_UNIT_FOREVER_REL;
memcpy (&pending_message->recipient, ¬ify->identity,
sizeof (struct GNUNET_PeerIdentity));
pending_message->msg_size = sizeof (p2p_dv_MESSAGE_Disconnect);
GNUNET_SCHEDULER_add_now (try_core_send, NULL);
/*if (core_transmit_handle == NULL)
- * core_transmit_handle = GNUNET_CORE_notify_transmit_ready(coreAPI, GNUNET_YES, default_dv_priority, GNUNET_TIME_relative_get_forever(), ¬ify->identity, sizeof(p2p_dv_MESSAGE_Disconnect), &core_transmit_notify, NULL); */
+ * core_transmit_handle = GNUNET_CORE_notify_transmit_ready(coreAPI, GNUNET_YES, default_dv_priority, GNUNET_TIME_UNIT_FOREVER_REL, ¬ify->identity, sizeof(p2p_dv_MESSAGE_Disconnect), &core_transmit_notify, NULL); */
return GNUNET_YES;
}
generate_hello_address (void *cls, size_t max, void *buf)
{
struct HelloContext *hello_context = cls;
+ struct GNUNET_HELLO_Address hello_address;
char *addr_buffer;
size_t offset;
size_t size;
/* Copy the direct peer identity to buffer */
memcpy (&addr_buffer[offset], hello_context->direct_peer,
sizeof (struct GNUNET_PeerIdentity));
+ memset (&hello_address.peer, 0, sizeof (struct GNUNET_PeerIdentity));
+ hello_address.address = addr_buffer;
+ hello_address.transport_name = "dv";
+ hello_address.address_length = size;
ret =
- GNUNET_HELLO_add_address ("dv",
+ GNUNET_HELLO_add_address (&hello_address,
GNUNET_TIME_relative_to_absolute
- (GNUNET_TIME_UNIT_HOURS), addr_buffer, size,
- buf, max);
+ (GNUNET_TIME_UNIT_HOURS), buf, max);
hello_context->addresses_to_add--;
"%s: learned about peer %llu from which we have a previous unknown message, processing!\n",
my_short_id, referrer_peer_id);
#endif
- struct GNUNET_ATS_Information atsi[3];
+ struct GNUNET_ATS_Information atsi[2];
atsi[0].type = htonl (GNUNET_ATS_QUALITY_NET_DISTANCE);
atsi[0].value = htonl (referrer->pending_messages[i].distance);
atsi[1].value =
htonl ((uint32_t) referrer->pending_messages[i].
latency.rel_value);
- atsi[2].type = htonl (GNUNET_ATS_ARRAY_TERMINATOR);
- atsi[2].value = htonl (0);
handle_dv_data_message (NULL, &referrer->pending_messages[i].sender,
- referrer->pending_messages[i].message,
- (const struct GNUNET_ATS_Information
- *) &atsi);
+ referrer->pending_messages[i].message, atsi,
+ 2);
GNUNET_free (referrer->pending_messages[i].message);
referrer->pending_messages[i].sender_id = 0;
}
* @param peer peer which sent the message (immediate sender)
* @param message the message
* @param atsi performance data
+ * @param atsi_count number of entries in atsi
*/
static int
handle_dv_disconnect_message (void *cls, const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_MessageHeader *message,
- const struct GNUNET_ATS_Information
- *atsi)
+ const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count)
{
struct DirectNeighbor *referrer;
struct DistantNeighbor *distant;
* @param peer peer which sent the message (immediate sender)
* @param message the message
* @param atsi performance data
+ * @param atsi_count number of entries in atsi
*/
static int
handle_dv_gossip_message (void *cls, const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_MessageHeader *message,
- const struct GNUNET_ATS_Information *atsi)
+ const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count)
{
struct DirectNeighbor *referrer;
p2p_dv_MESSAGE_NeighborInfo *enc_message =
* @param cls closure
* @param peer peer identity this notification is about
* @param atsi performance data
+ * @param atsi_count number of entries in atsi
*/
static void
handle_core_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
- const struct GNUNET_ATS_Information *atsi)
+ const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count)
{
struct DirectNeighbor *neighbor;
struct DistantNeighbor *about;
if (0 == memcmp (&my_identity, peer, sizeof (struct GNUNET_PeerIdentity)))
return;
- distance = get_atsi_distance (atsi);
+ distance = get_atsi_distance (atsi, atsi_count);
if ((distance == DIRECT_NEIGHBOR_COST) &&
(GNUNET_CONTAINER_multihashmap_get (direct_neighbors, &peer->hashPubKey)
== NULL))
GNUNET_CONTAINER_multihashmap_create (max_table_size * 3);
GNUNET_SERVER_add_handlers (server, plugin_handlers);
- coreAPI = GNUNET_CORE_connect (cfg, 1, NULL, /* FIXME: anything we want to pass around? */
+ coreAPI = GNUNET_CORE_connect (cfg, NULL, /* FIXME: anything we want to pass around? */
&core_init, &handle_core_connect,
- &handle_core_disconnect, NULL, GNUNET_NO,
- NULL, GNUNET_NO, core_handlers);
+ &handle_core_disconnect, NULL, GNUNET_NO, NULL,
+ GNUNET_NO, core_handlers);
if (coreAPI == NULL)
return;