* POSSIBILITY OF SUCH DAMAGE.
*/
+#include "s_assert.h"
+
#ifndef CHARYBDIS__MSGBUF_H
#define CHARYBDIS__MSGBUF_H
struct MsgTag tags[MAXPARA]; /* the tags themselves, upto MAXPARA tags available */
const char *origin; /* the origin of the message (or NULL) */
- const char *cmd; /* the cmd/verb of the message (also para[0]) */
+ const char *target; /* the target of the message (either NULL, or custom defined) */
+ const char *cmd; /* the cmd/verb of the message (either NULL, or para[0]) */
size_t parselen; /* the length of the message */
- size_t n_para; /* the number of parameters (always at least 1) */
+ size_t n_para; /* the number of parameters (always at least 1 if a full message) */
const char *para[MAXPARA]; /* parameters vector (starting with cmd as para[0]) */
};
* cmd may not be NULL.
* returns 0 on success, 1 on error.
*/
-int msgbuf_unparse(char *buf, struct MsgBuf *msgbuf, unsigned int capmask);
+int msgbuf_unparse(char *buf, size_t buflen, struct MsgBuf *msgbuf, unsigned int capmask);
/*
* unparse a MsgBuf header plus payload into a buffer.
* cmd may not be NULL.
* returns 0 on success, 1 on error.
*/
-int msgbuf_unparse_fmt(char *buf, struct MsgBuf *head, unsigned int capmask, const char *fmt, ...) AFP(4, 5);
-int msgbuf_vunparse_fmt(char *buf, struct MsgBuf *head, unsigned int capmask, const char *fmt, va_list va);
+int msgbuf_unparse_fmt(char *buf, size_t buflen, struct MsgBuf *head, unsigned int capmask, const char *fmt, ...) AFP(5, 6);
+int msgbuf_vunparse_fmt(char *buf, size_t buflen, struct MsgBuf *head, unsigned int capmask, const char *fmt, va_list va);
+
+void msgbuf_unparse_prefix(char *buf, size_t buflen, struct MsgBuf *msgbuf, unsigned int capmask);
static inline void
msgbuf_init(struct MsgBuf *msgbuf)
}
static inline void
-msgbuf_append_tag(struct MsgBuf *msgbuf, const char *key, const char *value)
+msgbuf_append_tag(struct MsgBuf *msgbuf, const char *key, const char *value, unsigned int capmask)
{
s_assert(msgbuf->n_tags < MAXPARA);
msgbuf->tags[msgbuf->n_tags].key = key;
msgbuf->tags[msgbuf->n_tags].value = value;
+ msgbuf->tags[msgbuf->n_tags].capmask = capmask;
msgbuf->n_tags++;
}