add GNUNET_MQ_send_copy
authorChristian Grothoff <christian@grothoff.org>
Sat, 25 Jun 2016 17:39:44 +0000 (17:39 +0000)
committerChristian Grothoff <christian@grothoff.org>
Sat, 25 Jun 2016 17:39:44 +0000 (17:39 +0000)
src/include/gnunet_mq_lib.h
src/util/mq.c

index 7bcaa7efcaa2b89d550636c676ebeecf8b30228b..0d201d36d9414889d6e0fbac6d6709cedc72c5c0 100644 (file)
@@ -444,6 +444,18 @@ GNUNET_MQ_send (struct GNUNET_MQ_Handle *mq,
                struct GNUNET_MQ_Envelope *ev);
 
 
+/**
+ * Send a copy of a message with the give message queue.
+ * Can be called repeatedly on the same envelope.
+ *
+ * @param mq message queue
+ * @param ev the envelope with the message to send.
+ */
+void
+GNUNET_MQ_send_copy (struct GNUNET_MQ_Handle *mq,
+                     const struct GNUNET_MQ_Envelope *ev);
+
+
 /**
  * Cancel sending the message. Message must have been sent with
  * #GNUNET_MQ_send before.  May not be called after the notify sent
index fb679c18d467c2b894dbeec5c8bcca490119012d..b84db002ad6b57dff51472379afe06223e3ba522 100644 (file)
@@ -309,6 +309,35 @@ GNUNET_MQ_send (struct GNUNET_MQ_Handle *mq,
 }
 
 
+/**
+ * Send a copy of a message with the give message queue.
+ * Can be called repeatedly on the same envelope.
+ *
+ * @param mq message queue
+ * @param ev the envelope with the message to send.
+ */
+void
+GNUNET_MQ_send_copy (struct GNUNET_MQ_Handle *mq,
+                     const struct GNUNET_MQ_Envelope *ev)
+{
+  struct GNUNET_MQ_Envelope *env;
+  uint16_t msize;
+
+  msize = ntohs (ev->mh->size);
+  env = GNUNET_malloc (sizeof (struct GNUNET_MQ_Envelope) +
+                       msize);
+  env->mh = (struct GNUNET_MessageHeader *) &env[1];
+  env->sent_cb = ev->sent_cb;
+  env->sent_cls = ev->sent_cls;
+  memcpy (&env[1],
+          ev->mh,
+          msize);
+  GNUNET_MQ_send (mq,
+                  env);
+}
+
+
+
 /**
  * Task run to call the send implementation for the next queued
  * message, if any.  Only useful for implementing message queues,