rbczmq 1.7.1 → 1.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitmodules +1 -1
- data/CHANGELOG.rdoc +4 -0
- data/Gemfile.lock +1 -1
- data/README.rdoc +5 -4
- data/ext/czmq/.gitignore +5 -0
- data/ext/czmq/.travis.yml +10 -1
- data/ext/czmq/AUTHORS +2 -0
- data/ext/czmq/COPYING.LESSER +3 -0
- data/ext/czmq/Makefile.am +13 -3
- data/ext/czmq/NEWS +132 -0
- data/ext/czmq/README.md +1553 -615
- data/ext/czmq/README.txt +188 -72
- data/ext/czmq/addons/Makefile.am +9 -0
- data/ext/czmq/addons/makecert.c +72 -0
- data/ext/czmq/builds/mingw32/Makefile.mingw32 +11 -3
- data/ext/czmq/builds/msvc/.gitignore +4 -1
- data/ext/czmq/builds/msvc/czmq.vcproj +4 -0
- data/ext/czmq/builds/msvc/czmq.vcxproj +6 -1
- data/ext/czmq/builds/msvc/czmq.vcxproj.filters +4 -1
- data/ext/{zeromq/cmake/Modules/zmq_version.cpp → czmq/builds/msvc/platform.h} +10 -9
- data/ext/czmq/configure.ac +64 -5
- data/ext/czmq/doc/Makefile.am +8 -1
- data/ext/czmq/doc/mkmans +17 -0
- data/ext/czmq/doc/zauth.txt +191 -0
- data/ext/czmq/doc/zbeacon.txt +13 -22
- data/ext/czmq/doc/zcert.txt +122 -0
- data/ext/czmq/doc/zcertstore.txt +107 -0
- data/ext/czmq/doc/zchunk.txt +77 -0
- data/ext/czmq/doc/zclock.txt +8 -0
- data/ext/czmq/doc/zconfig.txt +9 -63
- data/ext/czmq/doc/zctx.txt +26 -7
- data/ext/czmq/doc/zdir.txt +83 -0
- data/ext/czmq/doc/zfile.txt +130 -35
- data/ext/czmq/doc/zframe.txt +6 -39
- data/ext/czmq/doc/zhash.txt +55 -10
- data/ext/czmq/doc/zlist.txt +2 -4
- data/ext/czmq/doc/zloop.txt +7 -1
- data/ext/czmq/doc/zmsg.txt +75 -32
- data/ext/czmq/doc/zpoller.txt +88 -0
- data/ext/czmq/doc/zsocket.txt +50 -1
- data/ext/czmq/doc/zsockopt.txt +185 -251
- data/ext/czmq/doc/zstr.txt +14 -3
- data/ext/czmq/doc/zsys.txt +89 -1
- data/ext/czmq/doc/ztree.txt +21 -11
- data/ext/czmq/examples/security/LICENSE +18 -0
- data/ext/czmq/examples/security/README.txt +9 -0
- data/ext/czmq/examples/security/grasslands.c +29 -0
- data/ext/czmq/examples/security/hello.c +10 -0
- data/ext/czmq/examples/security/ironhouse.c +55 -0
- data/ext/czmq/examples/security/ironhouse2.c +103 -0
- data/ext/czmq/examples/security/stonehouse.c +51 -0
- data/ext/czmq/examples/security/strawhouse.c +44 -0
- data/ext/czmq/examples/security/woodhouse.c +40 -0
- data/ext/czmq/images/README_1.png +0 -0
- data/ext/czmq/images/README_2.png +0 -0
- data/ext/czmq/include/czmq.h +10 -4
- data/ext/czmq/include/czmq_prelude.h +42 -42
- data/ext/czmq/include/zauth.h +97 -0
- data/ext/czmq/include/zbeacon.h +0 -5
- data/ext/czmq/include/zcert.h +118 -0
- data/ext/czmq/include/zcertstore.h +78 -0
- data/ext/czmq/include/zchunk.h +87 -0
- data/ext/czmq/include/zclock.h +4 -0
- data/ext/czmq/include/zconfig.h +21 -12
- data/ext/czmq/include/zctx.h +34 -11
- data/ext/czmq/include/zdir.h +90 -0
- data/ext/czmq/include/zfile.h +104 -25
- data/ext/czmq/include/zframe.h +7 -20
- data/ext/czmq/include/zhash.h +13 -0
- data/ext/czmq/include/zlist.h +0 -4
- data/ext/czmq/include/zloop.h +5 -5
- data/ext/czmq/include/zmsg.h +59 -29
- data/ext/czmq/include/zmutex.h +5 -0
- data/ext/czmq/include/zpoller.h +72 -0
- data/ext/czmq/include/zsocket.h +12 -15
- data/ext/czmq/include/zsockopt.h +124 -121
- data/ext/czmq/include/zstr.h +12 -9
- data/ext/czmq/include/zsys.h +50 -2
- data/ext/czmq/mkdoc +1 -1
- data/ext/czmq/model/sockopts.xml +101 -21
- data/ext/czmq/scripts/sockopts.gsl +95 -41
- data/ext/czmq/src/Makefile.am +13 -0
- data/ext/czmq/src/czmq_selftest.c +16 -10
- data/ext/czmq/src/selftest +2 -2
- data/ext/czmq/src/zauth.c +714 -0
- data/ext/czmq/src/zbeacon.c +27 -35
- data/ext/czmq/src/zcert.c +463 -0
- data/ext/czmq/src/zcertstore.c +265 -0
- data/ext/czmq/src/zchunk.c +207 -0
- data/ext/czmq/src/zclock.c +18 -0
- data/ext/czmq/src/zconfig.c +116 -99
- data/ext/czmq/src/zctx.c +103 -18
- data/ext/czmq/src/zdir.c +409 -0
- data/ext/czmq/src/zfile.c +421 -130
- data/ext/czmq/src/zframe.c +28 -127
- data/ext/czmq/src/zhash.c +255 -139
- data/ext/czmq/src/zlist.c +2 -8
- data/ext/czmq/src/zloop.c +40 -13
- data/ext/czmq/src/zmsg.c +109 -141
- data/ext/czmq/src/zmutex.c +27 -1
- data/ext/czmq/src/zpoller.c +218 -0
- data/ext/czmq/src/zsocket.c +53 -66
- data/ext/czmq/src/zsockopt.c +2337 -682
- data/ext/czmq/src/zstr.c +48 -118
- data/ext/czmq/src/zsys.c +270 -3
- data/ext/czmq/src/zthread.c +2 -2
- data/ext/czmq/src/ztree.c +179 -180
- data/ext/rbczmq/beacon.c +1 -1
- data/ext/rbczmq/context.c +12 -3
- data/ext/rbczmq/context.h +7 -0
- data/ext/rbczmq/extconf.rb +13 -4
- data/ext/rbczmq/pollitem.c +1 -1
- data/ext/rbczmq/socket.c +34 -24
- data/ext/rbczmq/socket.h +3 -2
- data/ext/zeromq/AUTHORS +17 -3
- data/ext/zeromq/CMakeLists.txt +742 -339
- data/ext/zeromq/COPYING.LESSER +2 -0
- data/ext/zeromq/Makefile.am +3 -3
- data/ext/zeromq/NEWS +130 -1
- data/ext/zeromq/{README → README.md} +8 -9
- data/ext/zeromq/builds/cmake/Modules/FindAsciiDoc.cmake +24 -0
- data/ext/zeromq/builds/cmake/Modules/TestZMQVersion.cmake +18 -0
- data/ext/zeromq/builds/cmake/Modules/ZMQSourceRunChecks.cmake +129 -0
- data/ext/zeromq/{cmake → builds/cmake}/NSIS.template32.in +1 -1
- data/ext/zeromq/{cmake → builds/cmake}/NSIS.template64.in +1 -1
- data/ext/zeromq/builds/cmake/platform.hpp.in +88 -0
- data/ext/zeromq/builds/mingw32/Makefile.mingw32 +47 -0
- data/ext/zeromq/{src/i_msg_sink.hpp → builds/mingw32/platform.hpp} +10 -21
- data/ext/zeromq/builds/msvc/Makefile.am +5 -2
- data/ext/zeromq/builds/msvc/c_local_lat/c_local_lat.vcxproj +1 -1
- data/ext/zeromq/builds/msvc/c_local_lat/c_local_lat11.vcxproj +91 -0
- data/ext/zeromq/builds/msvc/c_local_thr/c_local_thr.vcproj +2 -0
- data/ext/zeromq/builds/msvc/c_local_thr/c_local_thr.vcxproj +21 -1
- data/ext/zeromq/builds/msvc/c_local_thr/c_local_thr11.vcxproj +111 -0
- data/ext/zeromq/builds/msvc/c_remote_lat/c_remote_lat.vcxproj +1 -1
- data/ext/zeromq/builds/msvc/c_remote_lat/c_remote_lat11.vcxproj +91 -0
- data/ext/zeromq/builds/msvc/c_remote_thr/c_remote_thr.vcproj +2 -0
- data/ext/zeromq/builds/msvc/c_remote_thr/c_remote_thr.vcxproj +21 -1
- data/ext/zeromq/builds/msvc/c_remote_thr/c_remote_thr11.vcxproj +111 -0
- data/ext/zeromq/builds/msvc/errno.cpp +1 -1
- data/ext/zeromq/builds/msvc/errno.hpp +1 -1
- data/ext/zeromq/builds/msvc/inproc_lat/inproc_lat.vcproj +176 -174
- data/ext/zeromq/builds/msvc/inproc_lat/inproc_lat.vcxproj +21 -1
- data/ext/zeromq/builds/msvc/inproc_lat/inproc_lat11.vcxproj +110 -0
- data/ext/zeromq/builds/msvc/inproc_thr/inproc_thr.vcproj +176 -174
- data/ext/zeromq/builds/msvc/inproc_thr/inproc_thr.vcxproj +21 -1
- data/ext/zeromq/builds/msvc/inproc_thr/inproc_thr11.vcxproj +110 -0
- data/ext/zeromq/builds/msvc/libzmq/libzmq.vcproj +997 -804
- data/ext/zeromq/builds/msvc/libzmq/libzmq.vcxproj +78 -2
- data/ext/zeromq/builds/msvc/libzmq/libzmq.vcxproj.filters +42 -6
- data/ext/zeromq/builds/msvc/libzmq/libzmq11.vcxproj +362 -0
- data/ext/zeromq/builds/msvc/msvc.sln +6 -0
- data/ext/zeromq/builds/msvc/msvc10.sln +36 -2
- data/ext/zeromq/builds/msvc/msvc11.sln +150 -0
- data/ext/zeromq/builds/msvc/properties/Static.props +15 -0
- data/ext/zeromq/builds/msvc/properties/ZeroMQ.props +0 -1
- data/ext/zeromq/builds/msvc/properties/ZeroMQ_Static.props +23 -0
- data/ext/zeromq/builds/redhat/zeromq.spec.in +2 -1
- data/ext/zeromq/{configure.in → configure.ac} +74 -15
- data/ext/zeromq/doc/Makefile.am +6 -4
- data/ext/zeromq/doc/zmq.txt +30 -3
- data/ext/zeromq/doc/zmq_bind.txt +2 -2
- data/ext/zeromq/doc/zmq_close.txt +2 -2
- data/ext/zeromq/doc/zmq_connect.txt +9 -7
- data/ext/zeromq/doc/zmq_ctx_destroy.txt +4 -3
- data/ext/zeromq/doc/zmq_ctx_get.txt +8 -3
- data/ext/zeromq/doc/zmq_ctx_new.txt +3 -2
- data/ext/zeromq/doc/zmq_ctx_set.txt +13 -1
- data/ext/zeromq/doc/zmq_ctx_shutdown.txt +52 -0
- data/ext/zeromq/doc/zmq_ctx_term.txt +67 -0
- data/ext/zeromq/doc/zmq_curve.txt +92 -0
- data/ext/zeromq/doc/zmq_curve_keypair.txt +56 -0
- data/ext/zeromq/doc/zmq_disconnect.txt +2 -2
- data/ext/zeromq/doc/zmq_epgm.txt +5 -4
- data/ext/zeromq/doc/zmq_errno.txt +2 -2
- data/ext/zeromq/doc/zmq_getsockopt.txt +149 -24
- data/ext/zeromq/doc/zmq_init.txt +2 -2
- data/ext/zeromq/doc/zmq_inproc.txt +2 -2
- data/ext/zeromq/doc/zmq_ipc.txt +10 -5
- data/ext/zeromq/doc/zmq_msg_close.txt +4 -3
- data/ext/zeromq/doc/zmq_msg_copy.txt +2 -2
- data/ext/zeromq/doc/zmq_msg_data.txt +2 -2
- data/ext/zeromq/doc/zmq_msg_get.txt +3 -3
- data/ext/zeromq/doc/zmq_msg_init.txt +2 -2
- data/ext/zeromq/doc/zmq_msg_init_data.txt +2 -2
- data/ext/zeromq/doc/zmq_msg_init_size.txt +2 -2
- data/ext/zeromq/doc/zmq_msg_more.txt +6 -4
- data/ext/zeromq/doc/zmq_msg_move.txt +2 -2
- data/ext/zeromq/doc/zmq_msg_recv.txt +3 -4
- data/ext/zeromq/doc/zmq_msg_send.txt +10 -7
- data/ext/zeromq/doc/zmq_msg_set.txt +2 -1
- data/ext/zeromq/doc/zmq_msg_size.txt +2 -2
- data/ext/zeromq/doc/zmq_null.txt +27 -0
- data/ext/zeromq/doc/zmq_pgm.txt +5 -4
- data/ext/zeromq/doc/zmq_plain.txt +37 -0
- data/ext/zeromq/doc/zmq_poll.txt +2 -6
- data/ext/zeromq/doc/zmq_proxy.txt +2 -1
- data/ext/zeromq/doc/zmq_recv.txt +2 -5
- data/ext/zeromq/doc/zmq_recvmsg.txt +3 -5
- data/ext/zeromq/doc/zmq_send.txt +9 -7
- data/ext/zeromq/doc/zmq_send_const.txt +103 -0
- data/ext/zeromq/doc/zmq_sendmsg.txt +8 -8
- data/ext/zeromq/doc/zmq_setsockopt.txt +291 -37
- data/ext/zeromq/doc/zmq_socket.txt +92 -21
- data/ext/zeromq/doc/zmq_socket_monitor.txt +102 -131
- data/ext/zeromq/doc/zmq_strerror.txt +3 -2
- data/ext/zeromq/doc/zmq_tcp.txt +4 -2
- data/ext/zeromq/doc/zmq_term.txt +3 -3
- data/ext/zeromq/doc/zmq_unbind.txt +2 -2
- data/ext/zeromq/doc/zmq_version.txt +3 -2
- data/ext/zeromq/doc/zmq_z85_decode.txt +50 -0
- data/ext/zeromq/doc/zmq_z85_encode.txt +57 -0
- data/ext/zeromq/foreign/openpgm/libpgm-5.2.122~dfsg.tar.gz +0 -0
- data/ext/zeromq/include/zmq.h +179 -136
- data/ext/zeromq/include/zmq_utils.h +44 -3
- data/ext/zeromq/perf/inproc_lat.cpp +2 -4
- data/ext/zeromq/perf/inproc_thr.cpp +1 -1
- data/ext/zeromq/perf/local_lat.cpp +1 -3
- data/ext/zeromq/perf/local_thr.cpp +1 -3
- data/ext/zeromq/perf/remote_lat.cpp +1 -3
- data/ext/zeromq/perf/remote_thr.cpp +1 -8
- data/ext/zeromq/src/Makefile.am +26 -7
- data/ext/zeromq/src/address.cpp +7 -8
- data/ext/zeromq/src/address.hpp +1 -2
- data/ext/zeromq/src/array.hpp +1 -3
- data/ext/zeromq/src/atomic_counter.hpp +11 -3
- data/ext/zeromq/src/atomic_ptr.hpp +9 -3
- data/ext/zeromq/src/blob.hpp +2 -2
- data/ext/zeromq/src/clock.cpp +3 -4
- data/ext/zeromq/src/clock.hpp +1 -2
- data/ext/zeromq/src/command.hpp +2 -3
- data/ext/zeromq/src/config.hpp +1 -3
- data/ext/zeromq/src/ctx.cpp +154 -15
- data/ext/zeromq/src/ctx.hpp +34 -3
- data/ext/zeromq/src/curve_client.cpp +410 -0
- data/ext/zeromq/src/curve_client.hpp +109 -0
- data/ext/zeromq/src/curve_server.cpp +629 -0
- data/ext/zeromq/src/curve_server.hpp +120 -0
- data/ext/zeromq/src/dbuffer.hpp +134 -0
- data/ext/zeromq/src/dealer.cpp +52 -60
- data/ext/zeromq/src/dealer.hpp +12 -26
- data/ext/zeromq/src/decoder.hpp +27 -102
- data/ext/zeromq/src/devpoll.cpp +1 -3
- data/ext/zeromq/src/devpoll.hpp +1 -3
- data/ext/zeromq/src/dist.cpp +17 -15
- data/ext/zeromq/src/dist.hpp +5 -6
- data/ext/zeromq/src/encoder.hpp +32 -52
- data/ext/zeromq/src/epoll.cpp +1 -3
- data/ext/zeromq/src/epoll.hpp +1 -3
- data/ext/zeromq/src/err.cpp +2 -4
- data/ext/zeromq/src/err.hpp +7 -4
- data/ext/zeromq/src/fd.hpp +1 -2
- data/ext/zeromq/src/fq.cpp +2 -5
- data/ext/zeromq/src/fq.hpp +2 -4
- data/ext/zeromq/src/i_decoder.hpp +11 -9
- data/ext/zeromq/src/i_encoder.hpp +7 -11
- data/ext/zeromq/src/i_engine.hpp +3 -3
- data/ext/zeromq/src/i_poll_events.hpp +1 -3
- data/ext/zeromq/src/io_object.cpp +1 -3
- data/ext/zeromq/src/io_object.hpp +1 -3
- data/ext/zeromq/src/io_thread.cpp +1 -3
- data/ext/zeromq/src/io_thread.hpp +1 -3
- data/ext/zeromq/src/ip.cpp +46 -5
- data/ext/zeromq/src/ip.hpp +7 -4
- data/ext/zeromq/src/ipc_address.cpp +13 -2
- data/ext/zeromq/src/ipc_address.hpp +1 -2
- data/ext/zeromq/src/ipc_connecter.cpp +3 -3
- data/ext/zeromq/src/ipc_connecter.hpp +1 -2
- data/ext/zeromq/src/ipc_listener.cpp +15 -10
- data/ext/zeromq/src/ipc_listener.hpp +1 -2
- data/ext/zeromq/src/kqueue.cpp +11 -3
- data/ext/zeromq/src/kqueue.hpp +7 -3
- data/ext/zeromq/src/lb.cpp +13 -11
- data/ext/zeromq/src/lb.hpp +10 -5
- data/ext/zeromq/src/libzmq.pc.cmake.in +10 -0
- data/ext/zeromq/src/likely.hpp +1 -2
- data/ext/zeromq/src/mailbox.cpp +1 -4
- data/ext/zeromq/src/mailbox.hpp +8 -3
- data/ext/zeromq/src/mechanism.cpp +163 -0
- data/ext/zeromq/src/mechanism.hpp +101 -0
- data/ext/zeromq/src/msg.cpp +38 -18
- data/ext/zeromq/src/msg.hpp +19 -7
- data/ext/zeromq/src/mtrie.cpp +16 -14
- data/ext/zeromq/src/mtrie.hpp +1 -3
- data/ext/zeromq/src/mutex.hpp +42 -3
- data/ext/zeromq/src/null_mechanism.cpp +282 -0
- data/ext/zeromq/src/null_mechanism.hpp +65 -0
- data/ext/zeromq/src/object.cpp +29 -3
- data/ext/zeromq/src/object.hpp +8 -5
- data/ext/zeromq/src/options.cpp +557 -485
- data/ext/zeromq/src/options.hpp +38 -24
- data/ext/zeromq/src/own.cpp +1 -2
- data/ext/zeromq/src/own.hpp +1 -2
- data/ext/zeromq/src/pair.cpp +8 -25
- data/ext/zeromq/src/pair.hpp +5 -22
- data/ext/zeromq/src/pgm_receiver.cpp +80 -67
- data/ext/zeromq/src/pgm_receiver.hpp +11 -10
- data/ext/zeromq/src/pgm_sender.cpp +37 -16
- data/ext/zeromq/src/pgm_sender.hpp +12 -6
- data/ext/zeromq/src/pgm_socket.cpp +8 -8
- data/ext/zeromq/src/pgm_socket.hpp +1 -4
- data/ext/zeromq/src/pipe.cpp +110 -72
- data/ext/zeromq/src/pipe.hpp +36 -27
- data/ext/zeromq/src/plain_mechanism.cpp +482 -0
- data/ext/zeromq/src/plain_mechanism.hpp +88 -0
- data/ext/zeromq/src/poll.cpp +1 -3
- data/ext/zeromq/src/poll.hpp +1 -3
- data/ext/zeromq/src/poller.hpp +1 -3
- data/ext/zeromq/src/poller_base.cpp +3 -3
- data/ext/zeromq/src/poller_base.hpp +1 -2
- data/ext/zeromq/src/precompiled.cpp +1 -2
- data/ext/zeromq/src/precompiled.hpp +1 -2
- data/ext/zeromq/src/proxy.cpp +1 -2
- data/ext/zeromq/src/proxy.hpp +1 -2
- data/ext/zeromq/src/pub.cpp +2 -16
- data/ext/zeromq/src/pub.hpp +2 -19
- data/ext/zeromq/src/pull.cpp +7 -24
- data/ext/zeromq/src/pull.hpp +4 -21
- data/ext/zeromq/src/push.cpp +8 -22
- data/ext/zeromq/src/push.hpp +4 -21
- data/ext/zeromq/src/random.cpp +1 -2
- data/ext/zeromq/src/random.hpp +1 -2
- data/ext/zeromq/src/raw_decoder.cpp +63 -0
- data/ext/zeromq/src/raw_decoder.hpp +66 -0
- data/ext/zeromq/src/raw_encoder.cpp +40 -0
- data/ext/zeromq/src/raw_encoder.hpp +60 -0
- data/ext/zeromq/src/reaper.cpp +12 -2
- data/ext/zeromq/src/reaper.hpp +6 -2
- data/ext/zeromq/src/rep.cpp +7 -21
- data/ext/zeromq/src/rep.hpp +3 -20
- data/ext/zeromq/src/req.cpp +132 -38
- data/ext/zeromq/src/req.hpp +27 -8
- data/ext/zeromq/src/router.cpp +109 -65
- data/ext/zeromq/src/router.hpp +9 -23
- data/ext/zeromq/src/select.cpp +1 -3
- data/ext/zeromq/src/select.hpp +1 -3
- data/ext/zeromq/src/session_base.cpp +164 -118
- data/ext/zeromq/src/session_base.hpp +29 -22
- data/ext/zeromq/src/signaler.cpp +127 -19
- data/ext/zeromq/src/signaler.hpp +20 -3
- data/ext/zeromq/src/socket_base.cpp +167 -134
- data/ext/zeromq/src/socket_base.hpp +18 -20
- data/ext/zeromq/src/stdint.hpp +1 -2
- data/ext/zeromq/src/stream.cpp +257 -0
- data/ext/zeromq/src/stream.hpp +97 -0
- data/ext/zeromq/src/stream_engine.cpp +405 -157
- data/ext/zeromq/src/stream_engine.hpp +72 -23
- data/ext/zeromq/src/sub.cpp +5 -18
- data/ext/zeromq/src/sub.hpp +2 -19
- data/ext/zeromq/src/tcp.cpp +23 -3
- data/ext/zeromq/src/tcp.hpp +7 -3
- data/ext/zeromq/src/tcp_address.cpp +35 -46
- data/ext/zeromq/src/tcp_address.hpp +7 -12
- data/ext/zeromq/src/tcp_connecter.cpp +10 -5
- data/ext/zeromq/src/tcp_connecter.hpp +1 -3
- data/ext/zeromq/src/tcp_listener.cpp +19 -8
- data/ext/zeromq/src/tcp_listener.hpp +1 -3
- data/ext/zeromq/src/thread.cpp +2 -4
- data/ext/zeromq/src/thread.hpp +1 -3
- data/ext/zeromq/src/trie.cpp +122 -125
- data/ext/zeromq/src/trie.hpp +1 -4
- data/ext/zeromq/src/v1_decoder.cpp +77 -91
- data/ext/zeromq/src/v1_decoder.hpp +10 -21
- data/ext/zeromq/src/v1_encoder.cpp +24 -62
- data/ext/zeromq/src/v1_encoder.hpp +7 -18
- data/ext/zeromq/src/v2_decoder.cpp +142 -0
- data/ext/zeromq/src/v2_decoder.hpp +57 -0
- data/ext/zeromq/src/v2_encoder.cpp +67 -0
- data/ext/zeromq/src/{i_msg_source.hpp → v2_encoder.hpp} +20 -15
- data/ext/zeromq/src/{v1_protocol.hpp → v2_protocol.hpp} +7 -11
- data/ext/zeromq/src/windows.hpp +2 -4
- data/ext/zeromq/src/wire.hpp +5 -6
- data/ext/zeromq/src/xpub.cpp +37 -46
- data/ext/zeromq/src/xpub.hpp +7 -23
- data/ext/zeromq/src/xsub.cpp +26 -40
- data/ext/zeromq/src/xsub.hpp +5 -21
- data/ext/zeromq/src/ypipe.hpp +3 -4
- data/ext/zeromq/src/ypipe_base.hpp +44 -0
- data/ext/zeromq/src/ypipe_conflate.hpp +127 -0
- data/ext/zeromq/src/yqueue.hpp +3 -7
- data/ext/zeromq/src/zmq.cpp +76 -96
- data/ext/zeromq/src/zmq_utils.cpp +146 -8
- data/ext/zeromq/tests/Makefile.am +56 -8
- data/ext/zeromq/tests/test_abstract_ipc.cpp +57 -0
- data/ext/zeromq/tests/test_conflate.cpp +75 -0
- data/ext/zeromq/tests/test_connect_resolve.cpp +14 -15
- data/ext/zeromq/tests/test_ctx_destroy.cpp +90 -0
- data/ext/zeromq/tests/test_ctx_options.cpp +52 -0
- data/ext/zeromq/tests/test_disconnect_inproc.cpp +35 -30
- data/ext/zeromq/tests/test_fork.cpp +81 -0
- data/ext/zeromq/tests/test_hwm.cpp +251 -35
- data/ext/zeromq/tests/test_immediate.cpp +229 -0
- data/ext/zeromq/tests/test_inproc_connect.cpp +339 -0
- data/ext/zeromq/tests/test_invalid_rep.cpp +9 -13
- data/ext/zeromq/tests/test_iov.cpp +106 -0
- data/ext/zeromq/tests/test_issue_566.cpp +85 -0
- data/ext/zeromq/tests/test_last_endpoint.cpp +14 -18
- data/ext/zeromq/tests/test_linger.cpp +93 -0
- data/ext/zeromq/tests/test_monitor.cpp +112 -129
- data/ext/zeromq/tests/test_msg_flags.cpp +17 -16
- data/ext/zeromq/tests/test_pair_inproc.cpp +25 -7
- data/ext/zeromq/tests/test_pair_ipc.cpp +4 -7
- data/ext/zeromq/tests/test_pair_tcp.cpp +4 -8
- data/ext/zeromq/tests/test_probe_router.cpp +72 -0
- data/ext/zeromq/tests/test_req_correlate.cpp +177 -0
- data/ext/zeromq/tests/test_req_relaxed.cpp +116 -0
- data/ext/zeromq/tests/test_reqrep_device.cpp +9 -17
- data/ext/zeromq/tests/test_reqrep_inproc.cpp +4 -7
- data/ext/zeromq/tests/test_reqrep_ipc.cpp +4 -7
- data/ext/zeromq/tests/test_reqrep_tcp.cpp +4 -8
- data/ext/zeromq/tests/test_router_mandatory.cpp +41 -22
- data/ext/zeromq/tests/test_security_curve.cpp +212 -0
- data/ext/zeromq/tests/test_security_null.cpp +148 -0
- data/ext/zeromq/tests/test_security_plain.cpp +150 -0
- data/ext/zeromq/tests/test_shutdown_stress.cpp +10 -23
- data/ext/zeromq/tests/test_spec_dealer.cpp +254 -0
- data/ext/zeromq/tests/test_spec_pushpull.cpp +293 -0
- data/ext/zeromq/tests/test_spec_rep.cpp +155 -0
- data/ext/zeromq/tests/test_spec_req.cpp +253 -0
- data/ext/zeromq/tests/test_spec_router.cpp +204 -0
- data/ext/zeromq/tests/test_stream.cpp +228 -0
- data/ext/zeromq/tests/test_sub_forward.cpp +14 -22
- data/ext/zeromq/tests/test_system.cpp +82 -0
- data/ext/zeromq/tests/test_term_endpoint.cpp +17 -31
- data/ext/zeromq/tests/test_timeo.cpp +34 -78
- data/ext/zeromq/tests/testutil.hpp +211 -26
- data/ext/zeromq/tools/Makefile.am +9 -0
- data/ext/zeromq/tools/curve_keygen.c +58 -0
- data/lib/zmq/version.rb +1 -1
- data/test/test_socket.rb +4 -3
- metadata +114 -15
- data/ext/zeromq/cmake/Modules/TestZMQVersion.cmake +0 -35
- data/ext/zeromq/foreign/openpgm/libpgm-5.1.118~dfsg.tar.gz +0 -0
- data/ext/zeromq/src/decoder.cpp +0 -166
- data/ext/zeromq/src/encoder.cpp +0 -102
- data/ext/zeromq/tests/test_connect_delay.cpp +0 -260
data/ext/czmq/src/zlist.c
CHANGED
@@ -29,6 +29,8 @@
|
|
29
29
|
can use this to construct multi-dimensional lists, and other structures
|
30
30
|
together with other generic containers like zhash.
|
31
31
|
@discuss
|
32
|
+
To iterate through a list, use zlist_first to get the first item, then
|
33
|
+
loop while not null, and do zlist_next at the end of each iteration.
|
32
34
|
@end
|
33
35
|
*/
|
34
36
|
|
@@ -292,14 +294,6 @@ zlist_dup (zlist_t *self)
|
|
292
294
|
return copy;
|
293
295
|
}
|
294
296
|
|
295
|
-
// Deprecated interface
|
296
|
-
|
297
|
-
zlist_t *
|
298
|
-
zlist_copy (zlist_t *self)
|
299
|
-
{
|
300
|
-
return zlist_dup (self);
|
301
|
-
}
|
302
|
-
|
303
297
|
|
304
298
|
// --------------------------------------------------------------------------
|
305
299
|
// Return the number of items in the list
|
data/ext/czmq/src/zloop.c
CHANGED
@@ -55,16 +55,16 @@ struct _zloop_t {
|
|
55
55
|
struct _s_poller_t {
|
56
56
|
zmq_pollitem_t item;
|
57
57
|
zloop_fn *handler;
|
58
|
-
void *arg;
|
59
|
-
bool ignore_errors;
|
58
|
+
void *arg; // Application argument to poll item
|
60
59
|
int errors; // If too many errors, kill poller
|
60
|
+
bool tolerant; // Unless configured as tolerant
|
61
61
|
};
|
62
62
|
|
63
63
|
struct _s_timer_t {
|
64
64
|
size_t delay;
|
65
65
|
size_t times;
|
66
66
|
zloop_fn *handler;
|
67
|
-
void *arg;
|
67
|
+
void *arg; // Application argument to timer
|
68
68
|
int64_t when; // Clock time when alarm goes off
|
69
69
|
};
|
70
70
|
|
@@ -73,10 +73,10 @@ s_poller_new (zmq_pollitem_t *item, zloop_fn handler, void *arg)
|
|
73
73
|
{
|
74
74
|
s_poller_t *poller = (s_poller_t *) zmalloc (sizeof (s_poller_t));
|
75
75
|
if (poller) {
|
76
|
-
poller->ignore_errors = (item->events & ZMQ_IGNERR) != 0;
|
77
76
|
poller->item = *item;
|
78
77
|
poller->handler = handler;
|
79
78
|
poller->arg = arg;
|
79
|
+
poller->tolerant = false; // By default, errors are bad
|
80
80
|
}
|
81
81
|
return poller;
|
82
82
|
}
|
@@ -273,6 +273,28 @@ zloop_poller_end (zloop_t *self, zmq_pollitem_t *item)
|
|
273
273
|
}
|
274
274
|
|
275
275
|
|
276
|
+
// --------------------------------------------------------------------------
|
277
|
+
// Configure a registered pollitem to ignore errors. If you do not set this,
|
278
|
+
// then pollitems that have errors are removed from the reactor silently.
|
279
|
+
|
280
|
+
void
|
281
|
+
zloop_set_tolerant (zloop_t *self, zmq_pollitem_t *item)
|
282
|
+
{
|
283
|
+
assert (self);
|
284
|
+
assert (item->socket || item->fd);
|
285
|
+
|
286
|
+
// Find matching poller(s) and mark as tolerant
|
287
|
+
s_poller_t *poller = (s_poller_t *) zlist_first (self->pollers);
|
288
|
+
while (poller) {
|
289
|
+
if ((item->socket && item->socket == poller->item.socket)
|
290
|
+
|| (item->fd && item->fd == poller->item.fd))
|
291
|
+
poller->tolerant = true;
|
292
|
+
|
293
|
+
poller = (s_poller_t *) zlist_next (self->pollers);
|
294
|
+
}
|
295
|
+
}
|
296
|
+
|
297
|
+
|
276
298
|
// --------------------------------------------------------------------------
|
277
299
|
// Register a timer that expires after some delay and repeats some number of
|
278
300
|
// times. At each expiry, will call the handler, passing the arg. To
|
@@ -318,6 +340,7 @@ zloop_timer_end (zloop_t *self, void *arg)
|
|
318
340
|
|
319
341
|
// --------------------------------------------------------------------------
|
320
342
|
// Set verbose tracing of reactor on/off
|
343
|
+
|
321
344
|
void
|
322
345
|
zloop_set_verbose (zloop_t *self, bool verbose)
|
323
346
|
{
|
@@ -329,8 +352,8 @@ zloop_set_verbose (zloop_t *self, bool verbose)
|
|
329
352
|
// Start the reactor. Takes control of the thread and returns when the 0MQ
|
330
353
|
// context is terminated or the process is interrupted, or any event handler
|
331
354
|
// returns -1. Event handlers may register new sockets and timers, and
|
332
|
-
// cancel sockets. Returns 0 if interrupted, -1 if canceled by a
|
333
|
-
//
|
355
|
+
// cancel sockets. Returns 0 if interrupted, -1 if canceled by a handler,
|
356
|
+
// positive on internal error
|
334
357
|
|
335
358
|
int
|
336
359
|
zloop_start (zloop_t *self)
|
@@ -357,7 +380,8 @@ zloop_start (zloop_t *self)
|
|
357
380
|
s_tickless_timer (self) * ZMQ_POLL_MSEC);
|
358
381
|
if (rc == -1 || zctx_interrupted) {
|
359
382
|
if (self->verbose)
|
360
|
-
zclock_log ("I: zloop: interrupted (%d) - %s", rc,
|
383
|
+
zclock_log ("I: zloop: interrupted (%d) - %s", rc,
|
384
|
+
zmq_strerror (zmq_errno ()));
|
361
385
|
rc = 0;
|
362
386
|
break; // Context has been shut down
|
363
387
|
}
|
@@ -386,13 +410,13 @@ zloop_start (zloop_t *self)
|
|
386
410
|
assert (self->pollset [item_nbr].socket == poller->item.socket);
|
387
411
|
|
388
412
|
if ((self->pollset [item_nbr].revents & ZMQ_POLLERR)
|
389
|
-
&& !poller->
|
413
|
+
&& !poller->tolerant) {
|
390
414
|
if (self->verbose)
|
391
|
-
zclock_log ("
|
415
|
+
zclock_log ("W: zloop: can't poll %s socket (%p, %d): %s",
|
392
416
|
poller->item.socket?
|
393
417
|
zsocket_type_str (poller->item.socket): "FD",
|
394
418
|
poller->item.socket, poller->item.fd,
|
395
|
-
|
419
|
+
zmq_strerror (zmq_errno ()));
|
396
420
|
// Give handler one chance to handle error, then kill
|
397
421
|
// poller because it'll disrupt the reactor otherwise.
|
398
422
|
if (poller->errors++) {
|
@@ -412,8 +436,10 @@ zloop_start (zloop_t *self)
|
|
412
436
|
rc = poller->handler (self, &self->pollset [item_nbr], poller->arg);
|
413
437
|
if (rc == -1)
|
414
438
|
break; // Poller handler signaled break
|
415
|
-
|
416
|
-
//
|
439
|
+
|
440
|
+
// If the poller handler calls zloop_poller_end on a poller
|
441
|
+
// other than itself, we need to force rebuild in order to
|
442
|
+
// avoid reading from freed memory in the handler.
|
417
443
|
if (self->dirty) {
|
418
444
|
if (self->verbose)
|
419
445
|
zclock_log ("I: zloop: pollers canceled, forcing rebuild");
|
@@ -483,8 +509,9 @@ zloop_test (bool verbose)
|
|
483
509
|
|
484
510
|
// When we get the ping message, end the reactor
|
485
511
|
zmq_pollitem_t poll_input = { input, 0, ZMQ_POLLIN };
|
486
|
-
rc = zloop_poller (loop, &poll_input, s_socket_event, NULL);
|
512
|
+
rc = zloop_poller (loop, &poll_input, s_socket_event, NULL);
|
487
513
|
assert (rc == 0);
|
514
|
+
zloop_set_tolerant (loop, &poll_input);
|
488
515
|
zloop_start (loop);
|
489
516
|
|
490
517
|
zloop_destroy (&loop);
|
data/ext/czmq/src/zmsg.c
CHANGED
@@ -97,17 +97,17 @@ zmsg_recv (void *zocket)
|
|
97
97
|
if (!self)
|
98
98
|
return NULL;
|
99
99
|
|
100
|
-
while (
|
100
|
+
while (true) {
|
101
101
|
zframe_t *frame = zframe_recv (zocket);
|
102
102
|
if (!frame) {
|
103
103
|
zmsg_destroy (&self);
|
104
104
|
break; // Interrupted or terminated
|
105
105
|
}
|
106
|
-
if (
|
106
|
+
if (zmsg_append (self, &frame)) {
|
107
107
|
zmsg_destroy (&self);
|
108
108
|
break;
|
109
109
|
}
|
110
|
-
if (!
|
110
|
+
if (!zsocket_rcvmore (zocket))
|
111
111
|
break; // Last message frame
|
112
112
|
}
|
113
113
|
return self;
|
@@ -127,11 +127,14 @@ zmsg_send (zmsg_t **self_p, void *zocket)
|
|
127
127
|
zmsg_t *self = *self_p;
|
128
128
|
|
129
129
|
int rc = 0;
|
130
|
+
if (zlist_size (self->frames) == 0)
|
131
|
+
return -1;
|
132
|
+
else
|
130
133
|
if (self) {
|
131
134
|
zframe_t *frame = (zframe_t *) zlist_pop (self->frames);
|
132
135
|
while (frame) {
|
133
136
|
rc = zframe_send (&frame, zocket,
|
134
|
-
|
137
|
+
zlist_size (self->frames)? ZFRAME_MORE: 0);
|
135
138
|
if (rc != 0)
|
136
139
|
break;
|
137
140
|
frame = (zframe_t *) zlist_pop (self->frames);
|
@@ -154,7 +157,7 @@ zmsg_size (zmsg_t *self)
|
|
154
157
|
|
155
158
|
|
156
159
|
// --------------------------------------------------------------------------
|
157
|
-
// Return size of
|
160
|
+
// Return total size of all frames in message.
|
158
161
|
|
159
162
|
size_t
|
160
163
|
zmsg_content_size (zmsg_t *self)
|
@@ -197,7 +200,24 @@ zmsg_pop (zmsg_t *self)
|
|
197
200
|
// --------------------------------------------------------------------------
|
198
201
|
// Add frame to the end of the message, i.e. after all other frames.
|
199
202
|
// Message takes ownership of frame, will destroy it when message is sent.
|
200
|
-
// Returns 0 on success
|
203
|
+
// Returns 0 on success. Nullifies caller's reference to frame.
|
204
|
+
|
205
|
+
int
|
206
|
+
zmsg_append (zmsg_t *self, zframe_t **frame_p)
|
207
|
+
{
|
208
|
+
assert (self);
|
209
|
+
assert (frame_p);
|
210
|
+
zframe_t *frame = *frame_p;
|
211
|
+
*frame_p = NULL; // We now own frame
|
212
|
+
self->content_size += zframe_size (frame);
|
213
|
+
return zlist_append (self->frames, frame);
|
214
|
+
}
|
215
|
+
|
216
|
+
|
217
|
+
// --------------------------------------------------------------------------
|
218
|
+
// Add frame to the end of the message, i.e. after all other frames.
|
219
|
+
// Message takes ownership of frame, will destroy it when message is sent.
|
220
|
+
// Returns 0 on success. Deprecated by zmsg_append ().
|
201
221
|
|
202
222
|
int
|
203
223
|
zmsg_add (zmsg_t *self, zframe_t *frame)
|
@@ -228,6 +248,7 @@ zmsg_pushmem (zmsg_t *self, const void *src, size_t size)
|
|
228
248
|
|
229
249
|
// --------------------------------------------------------------------------
|
230
250
|
// Add block of memory to the end of the message, as a new frame.
|
251
|
+
// Returns 0 on success, -1 on error.
|
231
252
|
|
232
253
|
int
|
233
254
|
zmsg_addmem (zmsg_t *self, const void *src, size_t size)
|
@@ -242,32 +263,10 @@ zmsg_addmem (zmsg_t *self, const void *src, size_t size)
|
|
242
263
|
return -1;
|
243
264
|
}
|
244
265
|
|
245
|
-
// --------------------------------------------------------------------------
|
246
|
-
// Add block of memory to the end of the message, as a new frame.
|
247
|
-
// The new frame is zero-copy-constructed (see zframe_new_zero_copy(...)
|
248
|
-
// for detailed description)
|
249
|
-
// NOTE: this method is DEPRECATED and is slated for removal. These are the
|
250
|
-
// problems with the method:
|
251
|
-
// - premature optimization: do we really need this? It makes the API more
|
252
|
-
// complex; high-performance applications would not use zmsg in any case,
|
253
|
-
// they would work directly with zmq_msg objects.
|
254
|
-
// (PH, 2013/05/18)
|
255
|
-
|
256
|
-
int
|
257
|
-
zmsg_addmem_zero_copy (zmsg_t *self, void *src, size_t size, zframe_free_fn *free_fn, void *arg)
|
258
|
-
{
|
259
|
-
assert (self);
|
260
|
-
zframe_t *frame = zframe_new_zero_copy (src, size, free_fn, arg);
|
261
|
-
if (frame) {
|
262
|
-
self->content_size += size;
|
263
|
-
return zlist_append (self->frames, frame);
|
264
|
-
}
|
265
|
-
else
|
266
|
-
return -1;
|
267
|
-
}
|
268
266
|
|
269
267
|
// --------------------------------------------------------------------------
|
270
|
-
// Push string as new frame to front of message
|
268
|
+
// Push string as new frame to front of message, returns 0 if OK, -1 on
|
269
|
+
// error. The string is formatted using sprintf.
|
271
270
|
|
272
271
|
int
|
273
272
|
zmsg_pushstr (zmsg_t *self, const char *format, ...)
|
@@ -275,38 +274,14 @@ zmsg_pushstr (zmsg_t *self, const char *format, ...)
|
|
275
274
|
assert (self);
|
276
275
|
assert (format);
|
277
276
|
|
278
|
-
// Format string into buffer
|
279
|
-
int size = 255 + 1;
|
280
|
-
char stackbuffer[255+1];
|
281
|
-
char *string = stackbuffer;
|
282
277
|
va_list argptr;
|
283
278
|
va_start (argptr, format);
|
284
|
-
|
279
|
+
char *string = zsys_vprintf (format, argptr);
|
285
280
|
va_end (argptr);
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
va_end (argptr);
|
291
|
-
}
|
292
|
-
#endif
|
293
|
-
if (required >= size) {
|
294
|
-
size = required + 1;
|
295
|
-
string = (char *) malloc (size);
|
296
|
-
if (!string) {
|
297
|
-
return -1;
|
298
|
-
}
|
299
|
-
va_start (argptr, format);
|
300
|
-
size = vsnprintf (string, size, format, argptr);
|
301
|
-
va_end (argptr);
|
302
|
-
}
|
303
|
-
else
|
304
|
-
size = required;
|
305
|
-
|
306
|
-
self->content_size += size;
|
307
|
-
zlist_push (self->frames, zframe_new (string, size));
|
308
|
-
if (string!=stackbuffer)
|
309
|
-
free (string);
|
281
|
+
|
282
|
+
self->content_size += strlen (string);
|
283
|
+
zlist_push (self->frames, zframe_new (string, strlen (string)));
|
284
|
+
free (string);
|
310
285
|
return 0;
|
311
286
|
}
|
312
287
|
|
@@ -319,44 +294,21 @@ zmsg_addstr (zmsg_t *self, const char *format, ...)
|
|
319
294
|
{
|
320
295
|
assert (self);
|
321
296
|
assert (format);
|
322
|
-
|
323
|
-
int size = 255 + 1;
|
324
|
-
char stackbuffer[255+1];
|
325
|
-
char *string = stackbuffer;
|
297
|
+
|
326
298
|
va_list argptr;
|
327
299
|
va_start (argptr, format);
|
328
|
-
|
300
|
+
char *string = zsys_vprintf (format, argptr);
|
329
301
|
va_end (argptr);
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
va_end (argptr);
|
335
|
-
}
|
336
|
-
#endif
|
337
|
-
if (required >= size) {
|
338
|
-
size = required + 1;
|
339
|
-
string = (char *) malloc (size);
|
340
|
-
if (!string) {
|
341
|
-
return -1;
|
342
|
-
}
|
343
|
-
va_start (argptr, format);
|
344
|
-
size = vsnprintf (string, size, format, argptr);
|
345
|
-
va_end (argptr);
|
346
|
-
}
|
347
|
-
else
|
348
|
-
size = required;
|
349
|
-
|
350
|
-
self->content_size += size;
|
351
|
-
zlist_append (self->frames, zframe_new (string, size));
|
352
|
-
if (string!=stackbuffer)
|
353
|
-
free (string);
|
302
|
+
|
303
|
+
self->content_size += strlen (string);
|
304
|
+
zlist_append (self->frames, zframe_new (string, strlen (string)));
|
305
|
+
free (string);
|
354
306
|
return 0;
|
355
307
|
}
|
356
308
|
|
357
|
-
|
358
309
|
// --------------------------------------------------------------------------
|
359
|
-
// Pop frame off front of message, return as fresh string
|
310
|
+
// Pop frame off front of message, return as fresh string. If there were
|
311
|
+
// no more frames in the message, returns NULL.
|
360
312
|
|
361
313
|
char *
|
362
314
|
zmsg_popstr (zmsg_t *self)
|
@@ -397,7 +349,7 @@ zmsg_unwrap (zmsg_t *self)
|
|
397
349
|
assert (self);
|
398
350
|
zframe_t *frame = zmsg_pop (self);
|
399
351
|
zframe_t *empty = zmsg_first (self);
|
400
|
-
if (zframe_size (empty) == 0) {
|
352
|
+
if (empty && zframe_size (empty) == 0) {
|
401
353
|
empty = zmsg_pop (self);
|
402
354
|
zframe_destroy (&empty);
|
403
355
|
}
|
@@ -418,7 +370,8 @@ zmsg_remove (zmsg_t *self, zframe_t *frame)
|
|
418
370
|
|
419
371
|
|
420
372
|
// --------------------------------------------------------------------------
|
421
|
-
// Set cursor to first frame in message. Returns frame, or NULL
|
373
|
+
// Set cursor to first frame in message. Returns frame, or NULL, if the
|
374
|
+
// message is empty. Use this to navigate the frames as a list.
|
422
375
|
|
423
376
|
zframe_t *
|
424
377
|
zmsg_first (zmsg_t *self)
|
@@ -452,7 +405,12 @@ zmsg_last (zmsg_t *self)
|
|
452
405
|
|
453
406
|
|
454
407
|
// --------------------------------------------------------------------------
|
455
|
-
// Save message to an open file, return 0 if OK, else -1.
|
408
|
+
// Save message to an open file, return 0 if OK, else -1. The message is
|
409
|
+
// saved as a series of frames, each with length and data. Note that the
|
410
|
+
// file is NOT guaranteed to be portable between operating systems, not
|
411
|
+
// versions of CZMQ. The file format is at present undocumented and liable
|
412
|
+
// to arbitrary change.
|
413
|
+
|
456
414
|
int
|
457
415
|
zmsg_save (zmsg_t *self, FILE *file)
|
458
416
|
{
|
@@ -492,27 +450,33 @@ zmsg_load (zmsg_t *self, FILE *file)
|
|
492
450
|
if (rc == 1) {
|
493
451
|
zframe_t *frame = zframe_new (NULL, frame_size);
|
494
452
|
rc = fread (zframe_data (frame), frame_size, 1, file);
|
495
|
-
if (frame_size > 0 && rc != 1)
|
453
|
+
if (frame_size > 0 && rc != 1) {
|
454
|
+
zframe_destroy (&frame);
|
496
455
|
break; // Unable to read properly, quit
|
497
|
-
|
456
|
+
}
|
457
|
+
zmsg_append (self, &frame);
|
498
458
|
}
|
499
459
|
else
|
500
460
|
break; // Unable to read properly, quit
|
501
461
|
}
|
462
|
+
if (!zmsg_size (self)) {
|
463
|
+
zmsg_destroy (&self);
|
464
|
+
self = NULL;
|
465
|
+
}
|
502
466
|
return self;
|
503
467
|
}
|
504
468
|
|
505
469
|
|
506
470
|
// --------------------------------------------------------------------------
|
507
|
-
//
|
471
|
+
// Serialize multipart message to a single buffer. Use this method to send
|
472
|
+
// structured messages across transports that do not support multipart data.
|
473
|
+
// Allocates and returns a new buffer containing the serialized message.
|
474
|
+
// To decode a serialized message buffer, use zmsg_decode ().
|
508
475
|
|
509
|
-
// Frame lengths are encoded as 1, 1+2, or 1+4 bytes
|
510
|
-
// 0..253 bytes octet + data
|
511
|
-
// 254..64k-1 bytes 0xFE + 2octet + data
|
512
|
-
// 64k..4Gb-1 bytes 0xFF + 4octet + data
|
513
476
|
|
514
|
-
|
515
|
-
|
477
|
+
// Frame lengths are encoded as 1 or 1+4 bytes
|
478
|
+
// 0..254 bytes octet + data
|
479
|
+
// 255..4Gb-1 bytes 0xFF + 4octet + data
|
516
480
|
|
517
481
|
size_t
|
518
482
|
zmsg_encode (zmsg_t *self, byte **buffer)
|
@@ -524,13 +488,10 @@ zmsg_encode (zmsg_t *self, byte **buffer)
|
|
524
488
|
zframe_t *frame = zmsg_first (self);
|
525
489
|
while (frame) {
|
526
490
|
size_t frame_size = zframe_size (frame);
|
527
|
-
if (frame_size <
|
491
|
+
if (frame_size < 255)
|
528
492
|
buffer_size += frame_size + 1;
|
529
493
|
else
|
530
|
-
|
531
|
-
buffer_size += frame_size + 3;
|
532
|
-
else
|
533
|
-
buffer_size += frame_size + 5;
|
494
|
+
buffer_size += frame_size + 1 + 4;
|
534
495
|
frame = zmsg_next (self);
|
535
496
|
}
|
536
497
|
*buffer = (byte *) malloc (buffer_size);
|
@@ -540,21 +501,13 @@ zmsg_encode (zmsg_t *self, byte **buffer)
|
|
540
501
|
frame = zmsg_first (self);
|
541
502
|
while (frame) {
|
542
503
|
size_t frame_size = zframe_size (frame);
|
543
|
-
if (frame_size <
|
504
|
+
if (frame_size < 255) {
|
544
505
|
*dest++ = (byte) frame_size;
|
545
506
|
memcpy (dest, zframe_data (frame), frame_size);
|
546
507
|
dest += frame_size;
|
547
508
|
}
|
548
|
-
else
|
549
|
-
if (frame_size < 0x10000) {
|
550
|
-
*dest++ = ZMSG_SHORT_LEN;
|
551
|
-
*dest++ = (frame_size >> 8) & 255;
|
552
|
-
*dest++ = frame_size & 255;
|
553
|
-
memcpy (dest, zframe_data (frame), frame_size);
|
554
|
-
dest += frame_size;
|
555
|
-
}
|
556
509
|
else {
|
557
|
-
*dest++ =
|
510
|
+
*dest++ = 0xFF;
|
558
511
|
*dest++ = (frame_size >> 24) & 255;
|
559
512
|
*dest++ = (frame_size >> 16) & 255;
|
560
513
|
*dest++ = (frame_size >> 8) & 255;
|
@@ -570,8 +523,9 @@ zmsg_encode (zmsg_t *self, byte **buffer)
|
|
570
523
|
|
571
524
|
|
572
525
|
// --------------------------------------------------------------------------
|
573
|
-
//
|
574
|
-
//
|
526
|
+
// Decodes a serialized message buffer created by zmsg_encode () and returns
|
527
|
+
// a new zmsg_t object. Returns NULL if the buffer was badly formatted or
|
528
|
+
// there was insufficient memory to work.
|
575
529
|
|
576
530
|
zmsg_t *
|
577
531
|
zmsg_decode (byte *buffer, size_t buffer_size)
|
@@ -584,16 +538,7 @@ zmsg_decode (byte *buffer, size_t buffer_size)
|
|
584
538
|
byte *limit = buffer + buffer_size;
|
585
539
|
while (source < limit) {
|
586
540
|
size_t frame_size = *source++;
|
587
|
-
if (frame_size ==
|
588
|
-
if (source > limit - 2) {
|
589
|
-
zmsg_destroy (&self);
|
590
|
-
break;
|
591
|
-
}
|
592
|
-
frame_size = (source [0] << 8) + source [1];
|
593
|
-
source += 2;
|
594
|
-
}
|
595
|
-
else
|
596
|
-
if (frame_size == ZMSG_LONG_LEN) {
|
541
|
+
if (frame_size == 255) {
|
597
542
|
if (source > limit - 4) {
|
598
543
|
zmsg_destroy (&self);
|
599
544
|
break;
|
@@ -610,7 +555,7 @@ zmsg_decode (byte *buffer, size_t buffer_size)
|
|
610
555
|
}
|
611
556
|
zframe_t *frame = zframe_new (source, frame_size);
|
612
557
|
if (frame) {
|
613
|
-
if (
|
558
|
+
if (zmsg_append (self, &frame)) {
|
614
559
|
zmsg_destroy (&self);
|
615
560
|
break;
|
616
561
|
}
|
@@ -626,7 +571,8 @@ zmsg_decode (byte *buffer, size_t buffer_size)
|
|
626
571
|
|
627
572
|
|
628
573
|
// --------------------------------------------------------------------------
|
629
|
-
// Create copy of message, as new message object
|
574
|
+
// Create copy of message, as new message object. Returns a fresh zmsg_t
|
575
|
+
// object, or NULL if there was not enough heap memory.
|
630
576
|
|
631
577
|
zmsg_t *
|
632
578
|
zmsg_dup (zmsg_t *self)
|
@@ -652,23 +598,33 @@ zmsg_dup (zmsg_t *self)
|
|
652
598
|
|
653
599
|
|
654
600
|
// --------------------------------------------------------------------------
|
655
|
-
// Dump message to stderr, for debugging and tracing
|
656
|
-
//
|
657
|
-
// when debugging larger and more complex messages. Perhaps a way to hide
|
658
|
-
// repeated lines instead?
|
601
|
+
// Dump message to stderr, for debugging and tracing.
|
602
|
+
// See zmsg_dump_to_stream() for details
|
659
603
|
|
660
604
|
void
|
661
605
|
zmsg_dump (zmsg_t *self)
|
662
606
|
{
|
663
|
-
|
607
|
+
zmsg_dump_to_stream (self, stderr);
|
608
|
+
}
|
609
|
+
|
610
|
+
|
611
|
+
// --------------------------------------------------------------------------
|
612
|
+
// Dump message to FILE stream, for debugging and tracing.
|
613
|
+
// Truncates to first 10 frames, for readability; this may be unfortunate
|
614
|
+
// when debugging larger and more complex messages.
|
615
|
+
|
616
|
+
void
|
617
|
+
zmsg_dump_to_stream (zmsg_t *self, FILE *file)
|
618
|
+
{
|
619
|
+
fprintf (file, "--------------------------------------\n");
|
664
620
|
if (!self) {
|
665
|
-
fprintf (
|
621
|
+
fprintf (file, "NULL");
|
666
622
|
return;
|
667
623
|
}
|
668
624
|
zframe_t *frame = zmsg_first (self);
|
669
625
|
int frame_nbr = 0;
|
670
626
|
while (frame && frame_nbr++ < 10) {
|
671
|
-
|
627
|
+
zframe_print_to_stream(frame, NULL, file);
|
672
628
|
frame = zmsg_next (self);
|
673
629
|
}
|
674
630
|
}
|
@@ -752,12 +708,21 @@ zmsg_test (bool verbose)
|
|
752
708
|
assert (msg);
|
753
709
|
assert (zmsg_size (msg) == 10);
|
754
710
|
assert (zmsg_content_size (msg) == 60);
|
755
|
-
if (verbose)
|
756
|
-
zmsg_dump (msg);
|
757
711
|
|
758
|
-
//
|
712
|
+
// create empty file for null test
|
759
713
|
FILE *file = fopen ("zmsg.test", "w");
|
760
714
|
assert (file);
|
715
|
+
fclose (file);
|
716
|
+
|
717
|
+
file = fopen ("zmsg.test", "r");
|
718
|
+
zmsg_t *null_msg = zmsg_load (NULL, file);
|
719
|
+
assert (null_msg == NULL);
|
720
|
+
fclose (file);
|
721
|
+
remove ("zmsg.test");
|
722
|
+
|
723
|
+
// Save to a file, read back
|
724
|
+
file = fopen ("zmsg.test", "w");
|
725
|
+
assert (file);
|
761
726
|
rc = zmsg_save (msg, file);
|
762
727
|
assert (rc == 0);
|
763
728
|
fclose (file);
|
@@ -841,10 +806,13 @@ zmsg_test (bool verbose)
|
|
841
806
|
msg = zmsg_new ();
|
842
807
|
assert (msg);
|
843
808
|
assert (zmsg_size (msg) == 0);
|
809
|
+
assert (zmsg_unwrap (msg) == NULL);
|
844
810
|
assert (zmsg_first (msg) == NULL);
|
845
811
|
assert (zmsg_last (msg) == NULL);
|
846
812
|
assert (zmsg_next (msg) == NULL);
|
847
813
|
assert (zmsg_pop (msg) == NULL);
|
814
|
+
assert (zmsg_send (&msg, output) == -1);
|
815
|
+
assert (msg != NULL);
|
848
816
|
zmsg_destroy (&msg);
|
849
817
|
|
850
818
|
zctx_destroy (&ctx);
|