2632 Commits

Author SHA1 Message Date
Luca Boccassi
edb4ca1023 Problem: zmq_connect fails after disconnect due to RECONNECT_IVL == -1
Solution: when a connection breaks and ZMQ_RECONNECT_IVL is set to -1,
which means a reconnection will not be attempted, send a message from
the I/O thread to the application thread to make the socket call
term_endpoint, which is the equivalent of manually calling
zmq_disconnect.
This way subsequent zmq_connect call to the same endpoint will attempt
again to do a connection.
Otherwise, for some socket types like SUBs, those new connects will
fail as the endpoint is recorded, despite the connection having been
permanently closed.

Add test cases to exercise this corner case with TCP and IPC.
2017-09-19 14:05:43 +01:00
sigiesec
e546f9296e Problem: duplicated code & inconsistent behaviour between
mechanisms

Solution: uniformly require a ZAP domain to be set to activate ZAP
handling, clarify comment on Stonehouse pattern
2017-09-18 17:01:38 +02:00
sigiesec
a5f94cb610 Problem: tests without ZAP handler are failing
Solution: emit events as expected by tests, and refuse connections when
ZAP is required but no handler started

Addresses #2711 partially
2017-09-18 12:58:09 +02:00
Luca Boccassi
5de2a82be8 Merge pull request #2744 from msune/refactor_poller_wait
Problem: duplicated socket_poller::wait() code
2017-09-13 00:48:26 +02:00
Marc Sune
5b92989540 Problem: duplicated socket_poller::wait() code
zmq::socket_poller_t::wait() had an important set of common lines
between POLL and SELECT variant.

Solution: refactor zmq::socket_poller_t::wait() and add the
following methods:

zmq::socket_poller_t::zero_trail_events()
zmq::socket_poller_t::check_events()
zmq::socket_poller_t::adjust_timeout()

Signed-off-by: Marc Sune <mardevel@gmail.com>
2017-09-12 21:47:57 +02:00
Doron Somech
af03241dcb Revert "Problem: term "identity" is confusing" 2017-09-07 15:47:43 +03:00
sigiesec
deae59dca9 Problem: Message metadata properties still refer to "identity"
Solution: Renamed, but support querying the property by its old name
2017-09-07 10:33:25 +02:00
sigiesec
ae2ea1a655 Problem: Usage of "rid" in server_t
Solution: Replaced by "routing_id"
2017-09-07 10:33:25 +02:00
sigiesec
e00131dd43 Problem: inconsistent naming related to routing ids
Solution: renamed routing_id fields in pipe_t, renamed ZMQ_CONNECT_RID to ZMQ_CONNECT_ROUTING_ID
2017-09-07 10:33:13 +02:00
sigiesec
1daf83079a Problem: term "identity" is confusing
Solution: replace by "routing id"
2017-09-06 17:45:56 +02:00
Luca Boccassi
4fac78ec31 Problem: proxy stat 5th multipart message treated as 1st
Solution: fix it
2017-09-06 08:27:29 +01:00
Luca Boccassi
d7da31ed25 Problem: typo in comment in proxy.cpp
Solution: fix it
2017-09-06 08:27:17 +01:00
Luca Boccassi
b8695a47b5 Problem: proxy_steerable STATISTICS returns conflated buffers
Solution: split each stat into its own frame, to make it simpler and
easier to use it, especially from high level bindings
2017-09-06 01:28:28 +01:00
Luca Boccassi
78c4d33600 Problem: new STATISTICS proxy_steerable not behind DRAFT
Solution: ifdef it until it's declared stable
2017-09-05 17:37:52 +01:00
f18m
4be9513443 Add "STATISTICS" command to zmq_proxy_steerable() (#2737)
* Issue #2736: Add STATISTICS command to zmq_proxy_steerable()
2017-09-05 17:05:04 +01:00
Luca Boccassi
f4b32aa792 Merge pull request #2734 from pavel-pimenov/fix-v1001
Variable is assigned but is not used until the end of the function
2017-09-04 15:25:43 +01:00
pavel.pimenov
0e8bf3520c V728 An excessive check 'options.mechanism == 0' can be simplified.
The '||' operator is surrounded by opposite expressions. session_base.cpp 377
2017-09-04 15:25:31 +03:00
pavel.pimenov
51ac7d28c5 V1001 The 'ptr' variable is assigned but is not used until the end of the function. 2017-09-04 15:15:35 +03:00
Luca Boccassi
8feed48bb9 Problem: switch statements without breaks
Solution: add /* FALLTHROUGH */ comments so that nagging compilers
don't nag
2017-09-01 20:01:15 +01:00
Luca Boccassi
31089326fb Problem: unused variables warnings in get_peer_state
Solution: wrap arguments with LIBZMQ_UNUSED
2017-09-01 19:57:00 +01:00
Luca Boccassi
31e3977ab9 Merge pull request #2731 from sigiesec/fix-issue-2723
Problem: assertion in src\select.cpp:111 on Windows or hang on zmq_ctx_destroy
2017-09-01 19:51:39 +01:00
sigiesec
79e28af4ce Problem: new function zmq_socket_get_peer_state not in zmq_draft.h
Solution: added function to zmq_draft.h
2017-09-01 17:15:23 +02:00
sigiesec
48a1e637b6 Problem: zmq_socket_get_peer_state is not implemented
Solution: add initial implementation
2017-09-01 16:28:58 +02:00
sigiesec
f4d139bd16 Problem: duplicated code in socket-related functions
Solution: extract as_socket_base_t function
2017-09-01 16:28:58 +02:00
sigiesec
efa86fe629 Problem: no test case using the proposed zmq_socket_get_peer_state function
Solution: added test case (with dummy implementation of zmq_socket_get_peer_state)
2017-09-01 16:28:58 +02:00
sigiesec
23e018f37a Problem: termination is requested from a session's owner when already in
pending termination while processing an error

Solution: terminate pipe instead

Fixes #2723
2017-09-01 11:55:31 +02:00
sigiesec
eb8105cde1 Problem: assertion failure in select.cpp:111 under Windows
Solution: handle case when get_fd_family fails
2017-09-01 11:55:31 +02:00
bjovke
91e0d689bb Problem: Inconsistent size_t/int usage. Solution: types corrected. 2017-08-28 15:03:46 +02:00
Jim Klimov
40a3b0746f Problem: cosmetic setThreadName() can be fatal
Solution: do not assert() the values returned; if we failed to set the thread name - we just have harder debugging, not flawed production conditions.
Closes github issue #2679

Signed-off-by: Jim Klimov <EvgenyKlimov@eaton.com>
2017-08-25 15:30:03 +02:00
sigiesec
6147e45a07 Problem: missing tests for zmq_timers_* corner cases, missing handling of such corner cases, code duplication, missing assertions in test code
Solution: add tests, add checks to timers_t, add match_by_id functor, add assertions
2017-08-23 09:41:34 +02:00
sigiesec
f685a3ffd2 Solution: unreachable code paths in socket_poller_t
Problem: replaced by assertions resp. removed
2017-08-22 21:23:09 +02:00
sigiesec
a71f7b0405 Problem: zmq_poller_* uses ETIMEDOUT (instead of the usual EAGAIN) to indicate timeouts
Solution: replace ETIMEDOUT within socket_poller_t and all client code by EAGAIN

Fixes #2713
2017-08-22 20:00:29 +02:00
sigiesec
6a3c053a3e Problem: EFAULT is returned for bad file descriptors passed to zmq_poller_*_fd
Solution: Return EBADF instead
2017-08-22 19:43:56 +02:00
sigiesec
74303b08e6 Problem: calling zmq_poller_wait* with NULL events causes an assertion, as opposed to other NULL arguments, which return an error
Solution: return EFAULT when such an operation is attempted
2017-08-22 19:43:56 +02:00
sigiesec
c1a4cfdd9f Problem: waiting on an empty poller with infinite timeout waits forever
Solution: return EFAULT when such an operation is attempted
2017-08-22 19:43:56 +02:00
sigiesec
2e4fc4faf0 Problem: zmq_poller_*_fd functions do not check for invalid fd
Solution: add checks, added test cases
2017-08-22 19:28:07 +02:00
sigiesec
c3c2515542 Problem: code duplication within zmq::select_t::rm_fd
Solution: extract find_fd_entry_by_handle from rm_fd
2017-08-21 14:36:50 +02:00
sigiesec
bd0675b93f Problem: no tests for client-side events for successful handshake and authentication failure in handshake
Solution: added tests for CURVE, add emitting of client-side event in curve_client_t; add ZAP code 300/500 tests for all mechanisms; suppress sending an error message for ZAP code 300
2017-08-20 22:45:14 +02:00
Luca Boccassi
f6ce019fff Problem: incompatible parameter passed to send_zap_request
Solution: cast from void* to uint8_t* to match new definition
2017-08-19 17:40:15 +01:00
Luca Boccassi
7c85bf2f88 Problem: uninitialised variables in gssapi_server constructor
Solution: initialise session and peer_address
2017-08-19 17:40:15 +01:00
Luca Boccassi
2ba0149ee4 Problem: gssapi_mechanism_base_t initialisation misses one param
Solution: pass the session as well as the options
2017-08-19 17:40:15 +01:00
Luca Boccassi
83c9c0b55f Problem: gssapi_client does not have a peer_address param
Solution: remove it from the gssapi_mechanism_base initialiser
2017-08-19 17:40:15 +01:00
Luca Boccassi
24b2f61b1b Problem: gssapi_server out of date with zap_client
Solution: remove local unused zap_client variable
2017-08-19 17:40:15 +01:00
Luca Boccassi
c8097af884 Problem: DRAFT GSSAPI socket options in wrong section cause duplication
Solution: move them together with the other DRAFT socket options, and
change value of DRAFT ZMQ_BINDTODEVICE from 90 to 92 to avoid clash
2017-08-19 17:40:15 +01:00
Luca Boccassi
6f49e40e36 Problem: gssapi_mechanism_base does not include mechanism_base
Solution: include mechanism_base.hpp instead of mechanism.hpp
2017-08-19 17:40:15 +01:00
Luca Boccassi
e2ffa2a77b Problem: produce_ready in gssapi_mechanism_base not deduped
Solution: call make_command_with_basic_properties
2017-08-19 17:40:15 +01:00
Luca Boccassi
90b6c102bb Problem: various unused variables warnings
Solution: use LIBZMQ_UNUSED where necessary
2017-08-19 12:18:51 +01:00
Luca Boccassi
7be3efc936 Problem: TODO in gssapi mechanism
Solution: remove it.
Looking at the code:

https://github.com/krb5/krb5/blob/master/src/lib/gssapi/mechglue/g_unseal.c#L55

gss_unwrap as the very first thing checks that plaintext is not a
null pointer, which in our case it's true given it's on the stack,
and then initialises its members to 0 length and null ptr.

https://github.com/krb5/krb5/blob/master/src/lib/gssapi/mechglue/g_rel_buffer.c#L36

So it should be safe to release it in all cases, and the release API
seems to check again if it's not a null pointer and then if the
members are 0 length and null pointer it's a no-op.
2017-08-18 15:58:35 +01:00
Luca Boccassi
77444e206c Problem: free on stack variable in GSSAPI mechanism
Solution: free wrapper.value instead of wrapper.
2017-08-18 15:57:51 +01:00
sigiesec
898691e2eb Problem: gssapi_mechanism_base_t aborts the application when it receives a message it cannot decode
Solution: emit an ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL event instead of using zmq_assert
2017-08-18 12:29:37 +02:00