diff options
| author | Garrett D'Amore <garrett@damore.org> | 2017-08-11 10:03:00 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2017-08-11 10:03:00 -0700 |
| commit | 77cf6e2d9d0d81694bbe1233b0ba27748fae642f (patch) | |
| tree | 43a2d0c9a85afb34ee2e321305edd7e61bb96dff | |
| parent | 24f54b976eb5835f24c03c792bceaaa723cef948 (diff) | |
| download | nng-77cf6e2d9d0d81694bbe1233b0ba27748fae642f.tar.gz nng-77cf6e2d9d0d81694bbe1233b0ba27748fae642f.tar.bz2 nng-77cf6e2d9d0d81694bbe1233b0ba27748fae642f.zip | |
Add 32-bit accessors for messages, and tests for them.
| -rw-r--r-- | src/nng.c | 64 | ||||
| -rw-r--r-- | src/nng.h | 17 | ||||
| -rw-r--r-- | tests/message.c | 63 |
3 files changed, 140 insertions, 4 deletions
@@ -493,6 +493,70 @@ nng_msg_header_append(nng_msg *msg, const void *data, size_t sz) } int +nng_msg_header_append_u32(nng_msg *msg, uint32_t val) +{ + return (nni_msg_header_append_u32(msg, val)); +} + +int +nng_msg_header_insert_u32(nng_msg *msg, uint32_t val) +{ + return (nni_msg_header_insert_u32(msg, val)); +} + +int +nng_msg_header_chop_u32(nng_msg *msg, uint32_t *valp) +{ + if (nni_msg_header_len(msg) < sizeof(uint32_t)) { + return (NNG_EINVAL); + } + *valp = nni_msg_header_chop_u32(msg); + return (0); +} + +int +nng_msg_header_trim_u32(nng_msg *msg, uint32_t *valp) +{ + if (nni_msg_header_len(msg) < sizeof(uint32_t)) { + return (NNG_EINVAL); + } + *valp = nni_msg_header_trim_u32(msg); + return (0); +} + +int +nng_msg_append_u32(nng_msg *msg, uint32_t val) +{ + return (nni_msg_append_u32(msg, val)); +} + +int +nng_msg_insert_u32(nng_msg *msg, uint32_t val) +{ + return (nni_msg_insert_u32(msg, val)); +} + +int +nng_msg_chop_u32(nng_msg *msg, uint32_t *valp) +{ + if (nni_msg_len(msg) < sizeof(uint32_t)) { + return (NNG_EINVAL); + } + *valp = nni_msg_chop_u32(msg); + return (0); +} + +int +nng_msg_trim_u32(nng_msg *msg, uint32_t *valp) +{ + if (nni_msg_len(msg) < sizeof(uint32_t)) { + return (NNG_EINVAL); + } + *valp = nni_msg_trim_u32(msg); + return (0); +} + +int nng_msg_header_insert(nng_msg *msg, const void *data, size_t sz) { return (nni_msg_header_insert(msg, data, sz)); @@ -263,10 +263,19 @@ NNG_DECL int nng_msg_header_append(nng_msg *, const void *, size_t); NNG_DECL int nng_msg_header_insert(nng_msg *, const void *, size_t); NNG_DECL int nng_msg_header_trim(nng_msg *, size_t); NNG_DECL int nng_msg_header_chop(nng_msg *, size_t); -NNG_DECL int nng_msg_dup(nng_msg **, const nng_msg *); -NNG_DECL void nng_msg_clear(nng_msg *); -NNG_DECL void nng_msg_header_clear(nng_msg *); -NNG_DECL void nng_msg_set_pipe(nng_msg *, nng_pipe); +NNG_DECL int nng_msg_header_append_u32(nng_msg *, uint32_t); +NNG_DECL int nng_msg_header_insert_u32(nng_msg *, uint32_t); +NNG_DECL int nng_msg_header_chop_u32(nng_msg *, uint32_t *); +NNG_DECL int nng_msg_header_trim_u32(nng_msg *, uint32_t *); +NNG_DECL int nng_msg_append_u32(nng_msg *, uint32_t); +NNG_DECL int nng_msg_insert_u32(nng_msg *, uint32_t); +NNG_DECL int nng_msg_chop_u32(nng_msg *, uint32_t *); +NNG_DECL int nng_msg_trim_u32(nng_msg *, uint32_t *); + +NNG_DECL int nng_msg_dup(nng_msg **, const nng_msg *); +NNG_DECL void nng_msg_clear(nng_msg *); +NNG_DECL void nng_msg_header_clear(nng_msg *); +NNG_DECL void nng_msg_set_pipe(nng_msg *, nng_pipe); NNG_DECL nng_pipe nng_msg_get_pipe(const nng_msg *); NNG_DECL int nng_msg_getopt(nng_msg *, int, void *, size_t *); diff --git a/tests/message.c b/tests/message.c index 2fc119f5..95954dc0 100644 --- a/tests/message.c +++ b/tests/message.c @@ -12,6 +12,7 @@ #include "nng.h" #include <string.h> +static uint8_t dat123[] = { 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3 }; TestMain("Message Tests", { int rv; @@ -182,5 +183,67 @@ TestMain("Message Tests", { size_t sz = sizeof(buf); So(nng_msg_getopt(msg, 4545, buf, &sz) == NNG_ENOENT); }); + + Convey("Uint32 body operations work", { + uint32_t v; + So(nng_msg_append_u32(msg, 2) == 0); + So(nng_msg_insert_u32(msg, 1) == 0); + So(nng_msg_append_u32(msg, 3) == 0); + So(nng_msg_insert_u32(msg, 0) == 0); + So(nng_msg_trim_u32(msg, &v) == 0); + So(v == 0); + So(nng_msg_len(msg) == sizeof(dat123)); + So(memcmp(nng_msg_body(msg), dat123, sizeof(dat123)) == + 0); + So(nng_msg_trim_u32(msg, &v) == 0); + So(v == 1); + So(nng_msg_chop_u32(msg, &v) == 0); + So(v == 3); + So(nng_msg_trim_u32(msg, &v) == 0); + So(v == 2); + So(nng_msg_trim_u32(msg, &v) == NNG_EINVAL); + So(nng_msg_trim_u32(msg, &v) == NNG_EINVAL); + + Convey("Single byte is inadequate", { + nng_msg_clear(msg); + So(nng_msg_append(msg, &v, 1) == 0); + So(nng_msg_trim_u32(msg, &v) == NNG_EINVAL); + So(nng_msg_trim_u32(msg, &v) == NNG_EINVAL); + }); + + }); + + Convey("Uint32 header operations work", { + uint32_t v; + So(nng_msg_header_append_u32(msg, 2) == 0); + So(nng_msg_header_insert_u32(msg, 1) == 0); + So(nng_msg_header_append_u32(msg, 3) == 0); + So(nng_msg_header_insert_u32(msg, 0) == 0); + So(nng_msg_header_trim_u32(msg, &v) == 0); + So(v == 0); + So(nng_msg_header_len(msg) == sizeof(dat123)); + So(nng_msg_len(msg) == 0); + So(memcmp(nng_msg_header(msg), dat123, + sizeof(dat123)) == 0); + So(nng_msg_header_trim_u32(msg, &v) == 0); + So(v == 1); + So(nng_msg_header_chop_u32(msg, &v) == 0); + So(v == 3); + So(nng_msg_header_trim_u32(msg, &v) == 0); + So(v == 2); + So(nng_msg_header_trim_u32(msg, &v) == NNG_EINVAL); + So(nng_msg_header_trim_u32(msg, &v) == NNG_EINVAL); + + Convey("Single byte is inadequate", { + nng_msg_header_clear(msg); + So(nng_msg_header_append(msg, &v, 1) == 0); + So(nng_msg_header_trim_u32(msg, &v) == + NNG_EINVAL); + So(nng_msg_header_trim_u32(msg, &v) == + NNG_EINVAL); + }); + + }); + }); }); |
