aboutsummaryrefslogtreecommitdiff
path: root/src/protocol/reqrep
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-01-02 17:35:49 -0800
committerGarrett D'Amore <garrett@damore.org>2017-01-02 17:35:49 -0800
commit13e380343c0eec96a723e7407d59fb7f5d20aba0 (patch)
treef50fdea3117c64d460fc82ce7978b6b4253250cf /src/protocol/reqrep
parentec2b1275153487fda661942d9b98aab2567b612e (diff)
downloadnng-13e380343c0eec96a723e7407d59fb7f5d20aba0.tar.gz
nng-13e380343c0eec96a723e7407d59fb7f5d20aba0.tar.bz2
nng-13e380343c0eec96a723e7407d59fb7f5d20aba0.zip
Fixes to enable REQ/REP to operate.
This uncovered a few problems - inproc was not moving the headers to the body on transmit, and the message chunk allocator had a serious bug leading to memory corruption. I've also added a message dumper, which turns out to be incredibly useful during debugging.
Diffstat (limited to 'src/protocol/reqrep')
-rw-r--r--src/protocol/reqrep/rep.c3
-rw-r--r--src/protocol/reqrep/req.c3
2 files changed, 3 insertions, 3 deletions
diff --git a/src/protocol/reqrep/rep.c b/src/protocol/reqrep/rep.c
index 60346390..96413523 100644
--- a/src/protocol/reqrep/rep.c
+++ b/src/protocol/reqrep/rep.c
@@ -263,7 +263,7 @@ nni_rep_pipe_recv(void *arg)
for (;;) {
size_t len;
- char *body;
+ uint8_t *body;
int hops;
again:
@@ -299,6 +299,7 @@ again:
goto again;
}
nni_msg_trim(msg, 4);
+ body = nni_msg_body(msg, &len);
if (end) {
break;
}
diff --git a/src/protocol/reqrep/req.c b/src/protocol/reqrep/req.c
index b8401107..9cfc6f54 100644
--- a/src/protocol/reqrep/req.c
+++ b/src/protocol/reqrep/req.c
@@ -308,7 +308,6 @@ nni_req_sendfilter(void *arg, nni_msg *msg)
{
nni_req_sock *req = arg;
uint32_t id;
- uint8_t buf[4];
nni_mtx_lock(&req->mx);
if (req->raw) {
@@ -329,7 +328,7 @@ nni_req_sendfilter(void *arg, nni_msg *msg)
req->reqid[2] = (uint8_t) (id >> 8);
req->reqid[3] = (uint8_t) (id);
- if (nni_msg_append_header(msg, buf, 4) != 0) {
+ if (nni_msg_append_header(msg, req->reqid, 4) != 0) {
// Should be ENOMEM.
nni_mtx_unlock(&req->mx);
nni_msg_free(msg);