+/**
+ * Initialize client subsystem.
+ *
+ * @param server the initialized server
+ */
+static void
+GDS_CLIENTS_init ()
+{
+ forward_map
+ = GNUNET_CONTAINER_multihashmap_create (1024,
+ GNUNET_YES);
+ retry_heap
+ = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
+}
+
+
+/**
+ * Shutdown client subsystem.
+ */
+static void
+GDS_CLIENTS_stop ()
+{
+ if (NULL != retry_task)
+ {
+ GNUNET_SCHEDULER_cancel (retry_task);
+ retry_task = NULL;
+ }
+}
+
+
+/**
+ * Define "main" method using service macro.
+ *
+ * @param name name of the service, i.e. "dht" or "xdht"
+ * @param run name of the initializaton method for the service
+ */
+#define GDS_DHT_SERVICE_INIT(name,run) \
+ GNUNET_SERVICE_MAIN \
+ (name, \
+ GNUNET_SERVICE_OPTION_NONE, \
+ run, \
+ &client_connect_cb, \
+ &client_disconnect_cb, \
+ NULL, \
+ GNUNET_MQ_hd_var_size (dht_local_put, \
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_PUT, \
+ struct GNUNET_DHT_ClientPutMessage, \
+ NULL), \
+ GNUNET_MQ_hd_var_size (dht_local_get, \
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET, \
+ struct GNUNET_DHT_ClientGetMessage, \
+ NULL), \
+ GNUNET_MQ_hd_fixed_size (dht_local_get_stop, \
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET_STOP, \
+ struct GNUNET_DHT_ClientGetStopMessage, \
+ NULL), \
+ GNUNET_MQ_hd_fixed_size (dht_local_monitor, \
+ GNUNET_MESSAGE_TYPE_DHT_MONITOR_START, \
+ struct GNUNET_DHT_MonitorStartStopMessage, \
+ NULL), \
+ GNUNET_MQ_hd_fixed_size (dht_local_monitor_stop, \
+ GNUNET_MESSAGE_TYPE_DHT_MONITOR_STOP, \
+ struct GNUNET_DHT_MonitorStartStopMessage, \
+ NULL), \
+ GNUNET_MQ_hd_var_size (dht_local_get_result_seen, \
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET_RESULTS_KNOWN, \
+ struct GNUNET_DHT_ClientGetResultSeenMessage , \
+ NULL), \
+ GNUNET_MQ_handler_end ())
+
+
+/**
+ * MINIMIZE heap size (way below 128k) since this process doesn't need much.
+ */
+void __attribute__ ((destructor))
+GDS_CLIENTS_done ()
+{
+ if (NULL != retry_heap)
+ {
+ GNUNET_assert (0 == GNUNET_CONTAINER_heap_get_size (retry_heap));
+ GNUNET_CONTAINER_heap_destroy (retry_heap);
+ retry_heap = NULL;
+ }
+ if (NULL != forward_map)
+ {
+ GNUNET_assert (0 == GNUNET_CONTAINER_multihashmap_size (forward_map));
+ GNUNET_CONTAINER_multihashmap_destroy (forward_map);
+ forward_map = NULL;
+ }
+}
+
+/* end of gnunet-service-dht_clients.c */