aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/message.c152
-rw-r--r--src/core/message.h16
2 files changed, 122 insertions, 46 deletions
diff --git a/src/core/message.c b/src/core/message.c
index f17240a4..f3151230 100644
--- a/src/core/message.c
+++ b/src/core/message.c
@@ -286,6 +286,42 @@ nni_chunk_insert(nni_chunk *ch, const void *data, size_t len)
}
static int
+nni_chunk_insert_u16(nni_chunk *ch, uint16_t val)
+{
+ unsigned char buf[sizeof(uint16_t)];
+ NNI_PUT16(buf, val);
+ return (nni_chunk_insert(ch, buf, sizeof(buf)));
+}
+
+static int
+nni_chunk_append_u16(nni_chunk *ch, uint16_t val)
+{
+ unsigned char buf[sizeof(uint16_t)];
+ NNI_PUT16(buf, val);
+ return (nni_chunk_append(ch, buf, sizeof(buf)));
+}
+
+static uint16_t
+nni_chunk_trim_u16(nni_chunk *ch)
+{
+ uint16_t v;
+ NNI_ASSERT(ch->ch_len >= sizeof(v));
+ NNI_GET16(ch->ch_ptr, v);
+ nni_chunk_trim(ch, sizeof(v));
+ return (v);
+}
+
+static uint16_t
+nni_chunk_chop_u16(nni_chunk *ch)
+{
+ uint16_t v;
+ NNI_ASSERT(ch->ch_len >= sizeof(v));
+ NNI_GET16(ch->ch_ptr + ch->ch_len - sizeof(v), v);
+ nni_chunk_chop(ch, sizeof(v));
+ return (v);
+}
+
+static int
nni_chunk_insert_u32(nni_chunk *ch, uint32_t val)
{
unsigned char buf[sizeof(uint32_t)];
@@ -321,6 +357,42 @@ nni_chunk_chop_u32(nni_chunk *ch)
return (v);
}
+static int
+nni_chunk_insert_u64(nni_chunk *ch, uint64_t val)
+{
+ unsigned char buf[sizeof(uint64_t)];
+ NNI_PUT64(buf, val);
+ return (nni_chunk_insert(ch, buf, sizeof(buf)));
+}
+
+static int
+nni_chunk_append_u64(nni_chunk *ch, uint64_t val)
+{
+ unsigned char buf[sizeof(uint64_t)];
+ NNI_PUT64(buf, val);
+ return (nni_chunk_append(ch, buf, sizeof(buf)));
+}
+
+static uint64_t
+nni_chunk_trim_u64(nni_chunk *ch)
+{
+ uint64_t v;
+ NNI_ASSERT(ch->ch_len >= sizeof(v));
+ NNI_GET64(ch->ch_ptr, v);
+ nni_chunk_trim(ch, sizeof(v));
+ return (v);
+}
+
+static uint64_t
+nni_chunk_chop_u64(nni_chunk *ch)
+{
+ uint64_t v;
+ NNI_ASSERT(ch->ch_len >= sizeof(v));
+ NNI_GET64(ch->ch_ptr + ch->ch_len - sizeof(v), v);
+ nni_chunk_chop(ch, sizeof(v));
+ return (v);
+}
+
int
nni_msg_alloc(nni_msg **mp, size_t sz)
{
@@ -558,52 +630,40 @@ nni_msg_header_chop(nni_msg *m, size_t len)
return (nni_chunk_chop(&m->m_header, len));
}
-int
-nni_msg_append_u32(nni_msg *m, uint32_t val)
-{
- return (nni_chunk_append_u32(&m->m_body, val));
-}
-
-int
-nni_msg_insert_u32(nni_msg *m, uint32_t val)
-{
- return (nni_chunk_insert_u32(&m->m_body, val));
-}
-
-int
-nni_msg_header_append_u32(nni_msg *m, uint32_t val)
-{
- return (nni_chunk_append_u32(&m->m_header, val));
-}
-
-int
-nni_msg_header_insert_u32(nni_msg *m, uint32_t val)
-{
- return (nni_chunk_insert_u32(&m->m_header, val));
-}
-
-uint32_t
-nni_msg_chop_u32(nni_msg *m)
-{
- return (nni_chunk_chop_u32(&m->m_body));
-}
-
-uint32_t
-nni_msg_trim_u32(nni_msg *m)
-{
- return (nni_chunk_trim_u32(&m->m_body));
-}
-
-uint32_t
-nni_msg_header_chop_u32(nni_msg *m)
-{
- return (nni_chunk_chop_u32(&m->m_header));
-}
-uint32_t
-nni_msg_header_trim_u32(nni_msg *m)
-{
- return (nni_chunk_trim_u32(&m->m_header));
-}
+#define DEF_MSG_ADD_N(z, x) \
+ int nni_msg_##z##_u##x(nni_msg *m, uint##x##_t v) \
+ { \
+ return (nni_chunk_##z##_u##x(&m->m_body, v)); \
+ } \
+ int nni_msg_header_##z##_u##x(nni_msg *m, uint##x##_t v) \
+ { \
+ return (nni_chunk_##z##_u##x(&m->m_header, v)); \
+ }
+
+#define DEF_MSG_REM_N(z, x) \
+ uint##x##_t nni_msg_##z##_u##x(nni_msg *m) \
+ { \
+ return (nni_chunk_##z##_u##x(&m->m_body)); \
+ } \
+ uint##x##_t nni_msg_header_##z##_u##x(nni_msg *m) \
+ { \
+ return (nni_chunk_##z##_u##x(&m->m_header)); \
+ }
+
+#define DEF_MSG_ADD(op) \
+ DEF_MSG_ADD_N(op, 16) DEF_MSG_ADD_N(op, 32) DEF_MSG_ADD_N(op, 64)
+#define DEF_MSG_REM(op) \
+ DEF_MSG_REM_N(op, 16) DEF_MSG_REM_N(op, 32) DEF_MSG_REM_N(op, 64)
+
+DEF_MSG_ADD(append)
+DEF_MSG_ADD(insert)
+DEF_MSG_REM(chop)
+DEF_MSG_REM(trim)
+
+#undef DEF_MSG_ADD_N
+#undef DEF_MSG_REM_N
+#undef DEF_MSG_ADD
+#undef DEF_MSG_REM
void
nni_msg_clear(nni_msg *m)
diff --git a/src/core/message.h b/src/core/message.h
index 00d31436..5ec1d9a1 100644
--- a/src/core/message.h
+++ b/src/core/message.h
@@ -35,14 +35,30 @@ extern int nni_msg_header_chop(nni_msg *, size_t);
extern int nni_msg_setopt(nni_msg *, int, const void *, size_t);
extern int nni_msg_getopt(nni_msg *, int, void *, size_t *);
extern void nni_msg_dump(const char *, const nni_msg *);
+extern int nni_msg_append_u16(nni_msg *, uint16_t);
extern int nni_msg_append_u32(nni_msg *, uint32_t);
+extern int nni_msg_append_u64(nni_msg *, uint64_t);
+extern int nni_msg_insert_u16(nni_msg *, uint16_t);
extern int nni_msg_insert_u32(nni_msg *, uint32_t);
+extern int nni_msg_insert_u64(nni_msg *, uint64_t);
+extern int nni_msg_header_append_u16(nni_msg *, uint16_t);
extern int nni_msg_header_append_u32(nni_msg *, uint32_t);
+extern int nni_msg_header_append_u64(nni_msg *, uint64_t);
+extern int nni_msg_header_insert_u16(nni_msg *, uint16_t);
extern int nni_msg_header_insert_u32(nni_msg *, uint32_t);
+extern int nni_msg_header_insert_u64(nni_msg *, uint64_t);
+extern uint16_t nni_msg_trim_u16(nni_msg *);
extern uint32_t nni_msg_trim_u32(nni_msg *);
+extern uint64_t nni_msg_trim_u64(nni_msg *);
+extern uint16_t nni_msg_chop_u16(nni_msg *);
extern uint32_t nni_msg_chop_u32(nni_msg *);
+extern uint64_t nni_msg_chop_u64(nni_msg *);
+extern uint16_t nni_msg_header_trim_u16(nni_msg *);
extern uint32_t nni_msg_header_trim_u32(nni_msg *);
+extern uint64_t nni_msg_header_trim_u64(nni_msg *);
+extern uint16_t nni_msg_header_chop_u16(nni_msg *);
extern uint32_t nni_msg_header_chop_u32(nni_msg *);
+extern uint64_t nni_msg_header_chop_u64(nni_msg *);
extern void nni_msg_set_pipe(nni_msg *, uint32_t);
extern uint32_t nni_msg_get_pipe(const nni_msg *);