diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/message.c | 152 | ||||
| -rw-r--r-- | src/core/message.h | 16 |
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 *); |
