* The allocated message will already have the type and size field set.
*
* @param mvar variable to store the allocated message in;
- * must have a header field
+ * must have a header field;
+ * can be NULL
* @param esize extra space to allocate after the message
* @param type type of the message
* @return the MQ message
* The contained message will already have the type and size field set.
*
* @param mvar variable to store the allocated message in;
- * must have a header field
+ * must have a header field;
+ * can be NULL
* @param type type of the message
* @return the allocated envelope
*/
* @param mh message header to extract nested message header from
* @param base_size size of the message before the nested message's header appears
* @return pointer to the nested message, does not copy the message
+ * OR NULL in case of a malformed message.
*/
const struct GNUNET_MessageHeader *
GNUNET_MQ_extract_nested_mh_ (const struct GNUNET_MessageHeader *mh,
*/
struct GNUNET_MQ_Envelope *
GNUNET_MQ_msg_ (struct GNUNET_MessageHeader **mhp,
+
uint16_t size,
uint16_t type);
*
* @param ev message to call the notify callback for
* @param cb the notify callback
- * @param cls closure for the callback
+ * @param cb_cls closure for the callback
*/
void
GNUNET_MQ_notify_sent (struct GNUNET_MQ_Envelope *ev,
GNUNET_MQ_NotifyCallback cb,
- void *cls);
+ void *cb_cls);
/**
/**
* Call the send implementation for the next queued message, if any.
+ * Calls the send notification for the current message unless
+ * #GNUNET_MQ_impl_send_in_flight was called for this envelope.
+ *
* Only useful for implementing message queues, results in undefined
* behavior if not used carefully.
*
/**
- * Get the message that should currently be sent. The returned
- * message is only valid until #GNUNET_MQ_impl_send_continue is
- * called. Fails if there is no current message. Only useful for
- * implementing message queues, results in undefined behavior if not
- * used carefully.
+ * Call the send notification for the current message, but do not
+ * try to send the next message until #gnunet_mq_impl_send_continue
+ * is called.
*
- * @param mq message queue with the current message, only valid
- * until #GNUNET_MQ_impl_send_continue() is called
- * @return message to send, never NULL
+ * only useful for implementing message queues, results in undefined
+ * behavior if not used carefully.
+ *
+ * @param mq message queue to send the next message with
*/
-const struct GNUNET_MessageHeader *
-GNUNET_MQ_impl_current (struct GNUNET_MQ_Handle *mq);
+void
+GNUNET_MQ_impl_send_in_flight (struct GNUNET_MQ_Handle *mq);
/**
GNUNET_MQ_impl_state (struct GNUNET_MQ_Handle *mq);
+/**
+ * Get the message that should currently be sent.
+ * Fails if there is no current message.
+ * Only useful for implementing message queues,
+ * results in undefined behavior if not used carefully.
+ *
+ * @param mq message queue with the current message
+ * @return message to send, never NULL
+ */
+const struct GNUNET_MessageHeader *
+GNUNET_MQ_impl_current (struct GNUNET_MQ_Handle *mq);
+
+
#endif
/** @} */ /* end of group mq */