From 1d76284dee8e9b0735a26ee98a3edcd9f5208f09 Mon Sep 17 00:00:00 2001 From: Martin Lucina Date: Sun, 20 May 2012 07:40:11 +0200 Subject: 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 --- tests/libzmq21.cpp | 10 ++++++---- tests/wireformat.cpp | 19 +++++++++++++------ 2 files changed, 19 insertions(+), 10 deletions(-) (limited to 'tests') 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); -- cgit v1.2.3