}
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;
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.
const struct AddressUseMessage *m;
const char *address;
const char *plugin_name;
+ int res;
uint16_t address_length;
uint16_t plugin_name_length;
}
in_use = ntohs (m->in_use);
- GAS_addresses_in_use (&m->peer, plugin_name, address, address_length,
- ntohl (m->session_id), 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);
+ }
- GNUNET_SERVER_receive_done (client, GNUNET_OK);
}
/**
void
GAS_scheduling_done ()
{
+ if (NULL != my_client)
+ {
+ my_client = NULL;
+ }
GNUNET_SERVER_notification_context_destroy (nc);
nc = NULL;
+
}