aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-08-11 10:03:00 -0700
committerGarrett D'Amore <garrett@damore.org>2017-08-11 10:03:00 -0700
commit77cf6e2d9d0d81694bbe1233b0ba27748fae642f (patch)
tree43a2d0c9a85afb34ee2e321305edd7e61bb96dff
parent24f54b976eb5835f24c03c792bceaaa723cef948 (diff)
downloadnng-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.c64
-rw-r--r--src/nng.h17
-rw-r--r--tests/message.c63
3 files changed, 140 insertions, 4 deletions
diff --git a/src/nng.c b/src/nng.c
index 7bf5bc9c..61aaa9c4 100644
--- a/src/nng.c
+++ b/src/nng.c
@@ -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));
diff --git a/src/nng.h b/src/nng.h
index 18912b4c..880614ea 100644
--- a/src/nng.h
+++ b/src/nng.h
@@ -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);
+ });
+
+ });
+
});
});