}
-/**
- * Clean up after a client has disconnected
- *
- * @param cls closure, unused
- * @param client the client to clean up after
- * @param internal_cls our client-specific internal data structure
- */
-static void
-client_disconnect_cb (void *cls,
- struct GNUNET_SERVICE_Client *client,
- void *internal_cls)
-{
- struct Listener *listener;
- struct Set *set;
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "client disconnected, cleaning up\n");
- set = set_get (client);
- if (NULL != set)
- {
- set->client = NULL;
- set_destroy (set);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Client's set destroyed\n");
- }
- listener = listener_get (client);
- if (NULL != listener)
- {
- listener->client = NULL;
- listener_destroy (listener);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Client's listener destroyed\n");
- }
-}
-
-
/**
* Destroy an incoming request from a remote peer
*
}
+/**
+ * Clean up after a client has disconnected
+ *
+ * @param cls closure, unused
+ * @param client the client to clean up after
+ * @param internal_cls our client-specific internal data structure
+ */
+static void
+client_disconnect_cb (void *cls,
+ struct GNUNET_SERVICE_Client *client,
+ void *internal_cls)
+{
+ struct Set *set;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "client disconnected, cleaning up\n");
+ set = set_get (client);
+ if (NULL != set)
+ {
+ set->client = NULL;
+ set_destroy (set);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Client's set destroyed\n");
+ }
+ struct Listener *listener = listener_get (client);
+ struct Operation *op = incoming_head;
+ if (NULL != listener)
+ {
+ /* destroy all incoming operations whose client just
+ * got destroyed */
+ while (NULL != op)
+ {
+ struct Operation *curr = op;
+ op = op->next;
+ if ( (GNUNET_YES == curr->is_incoming) &&
+ (curr->listener == listener) )
+ incoming_destroy (curr);
+ }
+ listener->client = NULL;
+ listener_destroy (listener);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Client's listener destroyed\n");
+ }
+}
+
+
/**
* Suggest the given request to the listener. The listening client can
* then accept or reject the remote request.
static int force_delta;
static int force_full;
+static unsigned int element_length = 32;
+
/**
* Handle to the statistics service.
*/
void *value)
{
struct GNUNET_SET_Handle *set = cls;
- struct GNUNET_SET_Element *el;
-
- el = GNUNET_malloc (sizeof (struct GNUNET_SET_Element) +
- sizeof (struct GNUNET_HashCode));
- el->element_type = 0;
- GNUNET_memcpy (&el[1], key, sizeof *key);
- el->data = &el[1];
- el->size = sizeof *key;
- GNUNET_SET_add_element (set, el, NULL, NULL);
+ struct GNUNET_SET_Element el;
+
+ GNUNET_assert (element_length > 0);
+ char payload[element_length];
+
+ GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, payload, element_length);
+
+ el.element_type = 0;
+ el.data = payload;
+ el.size = element_length;
+ GNUNET_SET_add_element (set, &el, NULL, NULL);
GNUNET_free (el);
return GNUNET_YES;
}
{ 'f', "force-full", NULL,
gettext_noop ("force sending full set"),
GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_full },
+ { 'l', "element-length", NULL,
+ gettext_noop ("element length in byte"),
+ GNUNET_NO, &GNUNET_GETOPT_set_uint, &element_length },
{ 'd', "force-delta", NULL,
gettext_noop ("number delta operation"),
GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_delta },