aboutsummaryrefslogtreecommitdiff
path: root/src/transport
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/transport
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/transport')
-rw-r--r--src/transport/inproc/inproc.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/transport/inproc/inproc.c b/src/transport/inproc/inproc.c
index ff0e9a2e..530e7ccf 100644
--- a/src/transport/inproc/inproc.c
+++ b/src/transport/inproc/inproc.c
@@ -132,7 +132,17 @@ static int
nni_inproc_pipe_send(void *arg, nni_msg *msg)
{
nni_inproc_pipe *pipe = arg;
-
+ char *h;
+ size_t l;
+
+ // We need to move any header data to the body, because the other
+ // side won't know what to do otherwise.
+ h = nni_msg_header(msg, &l);
+ if (nni_msg_prepend(msg, h, l) != 0) {
+ nni_msg_free(msg);
+ return (0); // Pretend we sent it.
+ }
+ nni_msg_trim_header(msg, l);
return (nni_msgq_put(pipe->wq, msg));
}