+ if (NULL != iter)
+ iter (set->iterator_cls,
+ NULL);
+}
+
+
+/**
+ * FIXME.
+ */
+static struct GNUNET_SET_Handle *
+create_internal (const struct GNUNET_CONFIGURATION_Handle *cfg,
+ enum GNUNET_SET_OperationType op,
+ const uint32_t *cookie)
+{
+ struct GNUNET_SET_Handle *set = GNUNET_new (struct GNUNET_SET_Handle);
+ struct GNUNET_MQ_MessageHandler mq_handlers[] = {
+ GNUNET_MQ_hd_var_size (result,
+ GNUNET_MESSAGE_TYPE_SET_RESULT,
+ struct GNUNET_SET_ResultMessage,
+ set),
+ GNUNET_MQ_hd_var_size (iter_element,
+ GNUNET_MESSAGE_TYPE_SET_ITER_ELEMENT,
+ struct GNUNET_SET_IterResponseMessage,
+ set),
+ GNUNET_MQ_hd_fixed_size (iter_done,
+ GNUNET_MESSAGE_TYPE_SET_ITER_DONE,
+ struct GNUNET_MessageHeader,
+ set),
+ GNUNET_MQ_hd_fixed_size (copy_lazy,
+ GNUNET_MESSAGE_TYPE_SET_COPY_LAZY_RESPONSE,
+ struct GNUNET_SET_CopyLazyResponseMessage,
+ set),
+ GNUNET_MQ_handler_end ()
+ };
+ struct GNUNET_MQ_Envelope *mqm;
+ struct GNUNET_SET_CreateMessage *create_msg;
+ struct GNUNET_SET_CopyLazyConnectMessage *copy_msg;
+
+ set->cfg = cfg;
+ set->mq = GNUNET_CLIENT_connect (cfg,
+ "set",
+ mq_handlers,
+ &handle_client_set_error,
+ set);
+ if (NULL == set->mq)
+ {
+ GNUNET_free (set);
+ return NULL;
+ }
+ if (NULL == cookie)
+ {
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Creating new set (operation %u)\n",
+ op);
+ mqm = GNUNET_MQ_msg (create_msg,
+ GNUNET_MESSAGE_TYPE_SET_CREATE);
+ create_msg->operation = htonl (op);
+ }
+ else
+ {
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Creating new set (lazy copy)\n",
+ op);
+ mqm = GNUNET_MQ_msg (copy_msg,
+ GNUNET_MESSAGE_TYPE_SET_COPY_LAZY_CONNECT);
+ copy_msg->cookie = *cookie;
+ }
+ GNUNET_MQ_send (set->mq,
+ mqm);
+ return set;