+/* mutual recursion with handle_copy_lazy */
+static struct GNUNET_SET_Handle *
+create_internal (const struct GNUNET_CONFIGURATION_Handle *cfg,
+ enum GNUNET_SET_OperationType op,
+ const uint32_t *cookie);
+
+
+/**
+ * Handle element for iteration over the set. Notifies the
+ * iterator and sends an acknowledgement to the service.
+ *
+ * @param cls the `struct GNUNET_SET_Handle *`
+ * @param msg the message
+ */
+static void
+handle_copy_lazy (void *cls,
+ const struct GNUNET_SET_CopyLazyResponseMessage *msg)
+{
+ struct GNUNET_SET_Handle *set = cls;
+ struct SetCopyRequest *req;
+ struct GNUNET_SET_Handle *new_set;
+
+ req = set->copy_req_head;
+ if (NULL == req)
+ {
+ /* Service sent us unsolicited lazy copy response */
+ GNUNET_break (0);
+ return;
+ }
+
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Handling response to lazy copy\n");
+ GNUNET_CONTAINER_DLL_remove (set->copy_req_head,
+ set->copy_req_tail,
+ req);
+ // We pass none as operation here, since it doesn't matter when
+ // cloning.
+ new_set = create_internal (set->cfg,
+ GNUNET_SET_OPERATION_NONE,
+ &msg->cookie);
+ req->cb (req->cls, new_set);
+ GNUNET_free (req);
+}
+
+
+/**
+ * Check that the given @a msg is well-formed.
+ *
+ * @param cls closure
+ * @param msg message to check
+ * @return #GNUNET_OK if message is well-formed
+ */
+static int
+check_iter_element (void *cls,
+ const struct GNUNET_SET_IterResponseMessage *msg)
+{
+ /* minimum size was already checked, everything else is OK! */
+ return GNUNET_OK;
+}
+
+