diff options
author | Martin Lucina <martin@lucina.net> | 2012-05-20 07:40:11 +0200 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2012-05-25 14:02:16 +0200 |
commit | a34ea4d80609395150742259fd8c9caa4409e961 (patch) | |
tree | aa5c1793e7e5e276e4ded626adbe042e75740ff6 /tests | |
parent | 6b7089891bdb3a4c55b43d0854787c96fae3bf2b (diff) |
Implement SP wire protocol
Implements the SP wire protocol, and infrastructure for legacy wire
protocol support.
Also added an XS_SERVICE_ID socket option to set the service id and renamed
the XS_PROTOCOL option to XS_PATTERN_VERSION.
The following pattern versions are supported:
PAIR: v3
PUBSUB: v1 (legacy), v4
REQREP: v2
PIPELINE: v3
SURVEY: v2
Note that all existing pattern versions have been bumped by 1 to allow for
use of legacy protocols (otherwise there would be no way to distinguish
between e.g. PUBSUB v3 and PUBSUB v3 using SP).
Signed-off-by: Martin Lucina <martin@lucina.net>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/libzmq21.cpp | 10 | ||||
-rw-r--r-- | tests/wireformat.cpp | 19 |
2 files changed, 19 insertions, 10 deletions
diff --git a/tests/libzmq21.cpp b/tests/libzmq21.cpp index ecf271b..3323ef0 100644 --- a/tests/libzmq21.cpp +++ b/tests/libzmq21.cpp @@ -53,8 +53,9 @@ int XS_TEST_MAIN () assert (ctx); void *pub = xs_socket (ctx, XS_PUB); assert (pub); - int protocol = 1; - int rc = xs_setsockopt (pub, XS_PROTOCOL, &protocol, sizeof (protocol)); + int pattern_version = 1; + int rc = xs_setsockopt (pub, XS_PATTERN_VERSION, &pattern_version, + sizeof (pattern_version)); assert (rc == 0); rc = xs_bind (pub, "tcp://127.0.0.1:5560"); assert (rc != -1); @@ -99,8 +100,9 @@ int XS_TEST_MAIN () assert (ctx); void *sub = xs_socket (ctx, XS_SUB); assert (sub); - protocol = 1; - rc = xs_setsockopt (sub, XS_PROTOCOL, &protocol, sizeof (protocol)); + pattern_version = 1; + rc = xs_setsockopt (sub, XS_PATTERN_VERSION, &pattern_version, + sizeof (pattern_version)); assert (rc == 0); rc = xs_setsockopt (sub, XS_SUBSCRIBE, "", 0); assert (rc == 0); diff --git a/tests/wireformat.cpp b/tests/wireformat.cpp index f3e0f96..f12f5aa 100644 --- a/tests/wireformat.cpp +++ b/tests/wireformat.cpp @@ -49,7 +49,11 @@ int XS_TEST_MAIN () assert (push); // Bind the peer and get the message. - int rc = xs_bind (pull, "tcp://127.0.0.1:5560"); + int service_id = 0x1234; + int rc = xs_setsockopt (pull, XS_SERVICE_ID, &service_id, + sizeof service_id); + assert (rc == 0); + rc = xs_bind (pull, "tcp://127.0.0.1:5560"); assert (rc != -1); rc = xs_bind (push, "tcp://127.0.0.1:5561"); assert (rc != -1); @@ -71,10 +75,10 @@ int XS_TEST_MAIN () assert (rc == 0); // Let's send some data and check if it arrived - rc = send (rpush, "\x04\0abc", 5, 0); - assert (rc == 5); + rc = send (rpush, "\0SP\0\x12\x34\x04\x31\x04\0abc", 13, 0); + assert (rc == 13); unsigned char buf [3]; - unsigned char buf2 [3]; + unsigned char buf2 [8]; rc = xs_recv (pull, buf, sizeof (buf), 0); assert (rc == 3); assert (!memcmp (buf, "abc", 3)); @@ -83,8 +87,11 @@ int XS_TEST_MAIN () rc = xs_send (push, buf, sizeof (buf), 0); assert (rc == 3); rc = recv (rpull, (char*) buf2, sizeof (buf2), 0); - assert (rc == 3); - assert (!memcmp (buf2, "\x04\0abc", 3)); + assert (rc == 8); + assert (!memcmp (buf2, "\0SP\0\0\0\x04\x31", 8)); + rc = recv (rpull, (char*) buf2, 5, 0); + assert (rc == 5); + assert (!memcmp (buf2, "\x04\0abc", 5)); #if defined XS_HAVE_WINDOWS rc = closesocket (rpush); |