}
my_client = client;
GNUNET_SERVER_notification_context_add (nc, client);
- GNUNET_SERVER_client_keep (client);
return GNUNET_OK;
}
if (my_client != client)
return;
GAS_addresses_destroy_all ();
- GNUNET_SERVER_client_drop (client);
my_client = NULL;
}
sizeof (struct AddressSuggestionMessage) +
atsi_count * sizeof (struct GNUNET_ATS_Information) + plugin_addr_len +
plugin_name_length;
- char buf[msize];
+ char buf[msize] GNUNET_ALIGN;
struct GNUNET_ATS_Information *atsp;
char *addrp;
addrp = (char *) &atsp[atsi_count];
memcpy (addrp, plugin_addr, plugin_addr_len);
strcpy (&addrp[plugin_addr_len], plugin_name);
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "ATS sends quota for peer `%s': (in/out) %u/%u\n",
+ GNUNET_i2s (peer), ntohl (bandwidth_in.value__),
+ ntohl (bandwidth_out.value__));
+
GNUNET_SERVER_notification_context_unicast (nc, my_client, &msg->header,
GNUNET_YES);
}
}
+/**
+ * Handle 'request address' messages from clients.
+ *
+ * @param cls unused, NULL
+ * @param client client that sent the request
+ * @param message the request message
+ */
+void
+GAS_handle_request_address_cancel (void *cls,
+ struct GNUNET_SERVER_Client *client,
+ const struct GNUNET_MessageHeader *message)
+{
+ const struct RequestAddressMessage *msg =
+ (const struct RequestAddressMessage *) message;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n",
+ "REQUEST_ADDRESS_CANCEL");
+ GNUNET_break (0 == ntohl (msg->reserved));
+
+ /* TODO */
+
+ GNUNET_SERVER_receive_done (client, GNUNET_OK);
+}
+
+/**
+ * Handle 'reset backoff' messages from clients.
+ *
+ * @param cls unused, NULL
+ * @param client client that sent the request
+ * @param message the request message
+ */
+void
+GAS_handle_reset_backoff (void *cls,
+ struct GNUNET_SERVER_Client *client,
+ const struct GNUNET_MessageHeader *message)
+{
+ const struct ResetBackoffMessage *msg =
+ (const struct ResetBackoffMessage *) message;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n",
+ "RESET_BACKOFF");
+ GNUNET_STATISTICS_update (GSA_stats, "# backoff reset requests received", 1,
+ GNUNET_NO);
+ GNUNET_break (0 == ntohl (msg->reserved));
+ GAS_addresses_handle_backoff_reset (&msg->peer);
+ GNUNET_SERVER_receive_done (client, GNUNET_OK);
+}
+
+
/**
* Handle 'address update' messages from clients.
*
plugin_name = &address[address_length];
else
plugin_name = "";
+
if ((address_length + plugin_name_length +
ats_count * sizeof (struct GNUNET_ATS_Information) +
sizeof (struct AddressUpdateMessage) != ntohs (message->size)) ||
(ats_count >
- GNUNET_SERVER_MAX_MESSAGE_SIZE / sizeof (struct GNUNET_ATS_Information))
- || (plugin_name[plugin_name_length - 1] != '\0'))
+ GNUNET_SERVER_MAX_MESSAGE_SIZE / sizeof (struct GNUNET_ATS_Information)) ||
+ ((plugin_name_length > 0) && (plugin_name[plugin_name_length - 1] != '\0')))
{
GNUNET_break (0);
GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
const struct AddressUseMessage *m;
const char *address;
const char *plugin_name;
+ int res;
uint16_t address_length;
uint16_t plugin_name_length;
uint16_t size;
+ uint16_t in_use;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n",
- "ADDRESS_IN_USE");
size = ntohs (message->size);
if (size < sizeof (struct AddressUseMessage))
{
if ((address_length + plugin_name_length +
sizeof (struct AddressUseMessage) != ntohs (message->size)) ||
- (plugin_name[plugin_name_length - 1] != '\0'))
+ ((plugin_name_length > 0) &&
+ (plugin_name[plugin_name_length - 1] != '\0')))
{
GNUNET_break (0);
GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
return;
}
+ in_use = ntohs (m->in_use);
+ res = GAS_addresses_in_use (&m->peer,
+ plugin_name,
+ address,
+ address_length,
+ ntohl (m->session_id),
+ in_use);
+
+ if (res == GNUNET_OK)
+ GNUNET_SERVER_receive_done (client, GNUNET_OK);
+ else
+ {
+ GNUNET_break (0);
+ GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+ }
-/*
- GAS_addresses_update (&m->peer,
- plugin_name,
- address,
- address_length,
- ntohl (m->session_id),
- atsi,
- ats_count);
-*/
- GNUNET_SERVER_receive_done (client, GNUNET_OK);
}
/**
GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
return;
}
- if ((plugin_name_length != 0) &&
+ if ((plugin_name_length == 0) ||
(plugin_name[plugin_name_length - 1] != '\0'))
{
GNUNET_break (0);
void
GAS_scheduling_done ()
{
+ if (NULL != my_client)
+ {
+ my_client = NULL;
+ }
GNUNET_SERVER_notification_context_destroy (nc);
nc = NULL;
+
}