3122 Commits

Author SHA1 Message Date
Luca Boccassi
ada6f0c058
Merge pull request #3871 from somdoron/DISCONNECT_MSG
problem: router doesn't know when peer disconnected
2020-04-18 10:49:50 +01:00
Gudmundur Adalsteinsson
9c6738bb45 Problem: No support to query poller size
Solution: Add zmq_poller_size that queries the number
of objects registered, allowing safer usages of poller
to avoid livelock situations.
2020-04-17 18:37:01 +00:00
Doron Somech
81444136d5 problem: router doesn't know when peer disconnected
ZMQ_ROUTER_NOTIFY doesn't have a context and doesn't play nice with protocols. with ZMQ_DISCONNECT_MSG we can set it to a protocol message, like DISCONNECT in majordomo. Router will send it when a peer is disconnected. Another advantage of ZMQ_DISCONNECT_MSG is that it also works on inproc.

Together with ZMQ_HEARTBEAT it allows to build very reliable protocols, and much simpler as well.
2020-04-17 18:04:28 +03:00
Doron Somech
93da6763b0 problem: ZMQ_HEARTBEAT is not useful without sending an hello message
When using ZMQ_HEARTBEAT one still needs to implement application-level heartbeat in order to know when to send a hello message.
For example, with the majordomo protocol, the worker needs to send a READY message when connecting to a broker. If the connection to the broker drops, and the heartbeat recognizes it the worker won't know about it and won't send the READY msg.
To solve that, the majordomo worker still has to implement heartbeat. With this new option, whenever the connection drops and reconnects the hello message will be sent, greatly simplify the majordomo protocol, as now READY and HEARTBEAT can be handled by zeromq.
2020-04-17 14:54:58 +03:00
grmt
718ad8ab96
add wss transport and fix tipc tests when building using cmake on linux (#3857)
* Allow CMAKE to generate ws and wss transports
I guess there is little use of just ws transport, so by default
GnuTLS (and libsodium) are enabled

* cmake libzmq including wss transport (ubuntu 19.10 and ubuntu 19.10 + wsl 1.0)
test_security_fails (libsodium assert !?)

* updated relicense

* make external libs gnutls nss sodium optional

* #ifdef WSS classes and functions, build test*ws* only if correct libs are included, warning if libs not present

* make libsodium optional

* cmake fix tests TIPC transport

* clang-format pointed out a wrongly placed #ifdef

* GnuTLS before 3.6.7 is not safe

* msvc doesn't agree with strlen in array declaration, test_socks now at least compiles on windows

* windows: libsodium build fails, missing include dirs set by env var

* ws transport test only works when GnuTLS is found

* Fixed condition to use NSS / built in SHA1, so that test_ws_transport should now pass, also when GnuTLS is not found
2020-04-13 23:03:19 +01:00
Luca Boccassi
7276b6809a
Merge pull request #3868 from gummif/gfa/poller-sleep
Problem: poller sleeps forever if no events
2020-04-13 22:52:46 +01:00
Gudmundur Adalsteinsson
458d805eb6 Problem: poller sleeps forever if no events
Solution: Fail with error if no events are active and timeout is infinite
2020-04-13 21:18:12 +00:00
Gudmundur Adalsteinsson
a468ac782a Problem: poller item fd uninitialized
Solution: Set to zero for socket events
2020-04-13 20:08:08 +00:00
Gudmundur Adalsteinsson
7b1fef28f9
Problem: boilerplate when init msg from data copy (#3860)
* Problem: boilerplate when init msg from data copy

Solution: Add zmq_msg_init_buffer to construct
a message by copying memory from buffer.
2020-04-09 23:59:43 +01:00
JaeSang Yoo
38fd1fdc8e Problem: some cond. compile may cause problem
Some ifdefs in condition checking may cause problem in some compiler or
static analyzers. When PGM and NORM both are disabled, some condition
will be derived as false || false.

Solution: Splitted condition checking for every ifdef conditions
2020-03-14 22:20:54 +09:00
JaeSang Yoo
4f436ce00f Problem: some conditional compile was not applied
Conditinoal compile for OPENPGM and NORM is mixed.
Also found few codes which needs conditional compile but not applied.

Solution: Apply conditional compile preprocessors
2020-03-14 19:55:54 +09:00
JaeSang Yoo
ebd22ecf85 Problem: literals protocol names still remains
Solution: replace into named constants
2020-03-14 19:55:54 +09:00
Luca Boccassi
f9417dab4d Problem: msg_t functions do not respect coding style
Solution: fix them
2020-03-07 13:25:18 +00:00
Rickard Hallerbäck
2206cb37e0
ip_resolver_t: Silencing C++-warning -Wnon-virtual-dtor (#3837)
* ip_resolver_t: adding virtual descructor to silence C++-warning -Wnon-virtual-dtor

* adding my relicense
2020-02-28 16:49:12 +00:00
Luca Boccassi
4f45ac135a Problem: formatting not up to date
Solution: run make clang-format-diff
2020-02-23 18:25:20 +00:00
Bill Torpey
debbe08fb8
add option to stop trying to reconnect on ECONNREFUSED (#3831)
* add option to stop trying to reconnect on ECONNREFUSED
2020-02-23 17:17:22 +00:00
Luca Boccassi
52044b38f7
Merge pull request #3823 from somdoron/ZMQ_PEER
problem: zeromq doesn't has a thread-safe peer to peer socket
2020-02-09 21:53:18 +00:00
Doron Somech
70bc7dd925 problem: zeromq doesn't has a thread-safe peer to peer socket
Solution: a new socket type, called PEER. Very similar to SERVER, but can only connect to other PEERs. Also a new zmq_connect_peer method, that connect and return a routing-id in thread-safe and atomic operation
2020-02-09 23:20:14 +02:00
Luca Boccassi
821685f249
Merge pull request #3822 from somdoron/GROUPMAXLENGTH
problem: maximum size of group doesn't match the RFC maximum size
2020-02-09 13:10:47 +00:00
Doron Somech
05194eb549 problem: maximum size of group doesn't match the RFC maximum size 2020-02-09 14:46:23 +02:00
Simon Giesecke
f17a794d59
Merge pull request #3814 from bluca/sub_cancel_decoder
Implement ZMTP 3.1 subscribe/cancel via commands
2020-02-07 09:26:21 +01:00
Luca Boccassi
a7bb41ef77
Merge pull request #3820 from somdoron/WSENCODING
websocket problems
2020-02-06 16:39:38 +00:00
Doron Somech
652834296b problem: ws_transport is missing the path the endpoint name 2020-02-06 17:22:28 +02:00
Doron Somech
071ec1a9bb problem:Fallback to localhost in ws_address has no effect
Solution: return after the fallback

fixes #3809
2020-02-06 17:22:11 +02:00
Doron Somech
7bfd9512e6 problem: ws_encoder allocate a new msg for masking
solution: if msg is not shared or constant, mask the message in place
2020-02-06 09:34:22 +02:00
Luca Boccassi
38b6888c3e Problem: libzmq does not advertise ZMTP 3.1
Solution: bump minor version number in the engine as all 3.1 features
are now implemented
2020-02-05 17:03:39 +00:00
Luca Boccassi
253e9dd27b Problem: libzmq does not send ZMTP 3.1 sub/cancel commands
Solution: if all peers of a socket are >= 3.1 use sub/cancel commands
instead of the old 0/1 messages.
For backward compatibility, move the handling of 0/1 or sub/cancel
command strings to the encoders, so that the right thing can be done
depending on the protocol version.
Do not set the command flag until the encoder, so that we can handle
the inproc case (which skips the encoder).
2020-02-05 17:03:39 +00:00
Cameron Smith
49ecde8d80 support compiling with IBM XL 16.1 w/ clang front end 2020-02-05 11:00:34 -05:00
Simon Giesecke
495fb00b7e Problem: pointee types are unnecessarily non-const
Solution: add const where possible
2020-02-04 18:34:19 +01:00
Simon Giesecke
db8f4fba21 Problem: redundant inline/ZMQ_FINAL declarations
Solution: remove them
2020-02-04 18:34:13 +01:00
Simon Giesecke
dfcca75d0b Problem: curve_encoding_t build fails with old libsodium versions
Solution: add version check and fall back to old implementation for old versions
2020-02-04 10:04:40 +01:00
Simon Giesecke
4177bf7445 Problem: curve_encoding_t involves unnecesary heap allocations and copying of message data
Solution: use crypto_box_easy_afternm and crypto_box_open_easy_afternm
in-place
2020-02-03 22:33:15 +01:00
Simon Giesecke
4ad239acbc Problem: curve encoding and decoding are not easily testable
Solution: extract into separate class curve_encoding_t
2020-02-03 17:07:15 +01:00
Simon Giesecke
3e394fddb4 Problem: naming convention violated by curve_mechanism_base
Solution: change to conform with naming convention
2020-02-03 11:44:10 +01:00
Simon Giesecke
406c423c9a Problem: C-style casts used
Solution: use static_cast instead
2020-01-27 10:38:00 +01:00
Simon Giesecke
78961eeab7 Problem: non-modifying member functions not marked as const/static
Solution: add const/static
2020-01-27 10:38:00 +01:00
Simon Giesecke
41e3f14d6a Problem: ptr/ref parameters and local variables are non-const but never modified
Solution: add const
2020-01-27 10:38:00 +01:00
Simon Giesecke
759fed8e7e Problem: meaningless inline specified on function declarations
Solution: remove them
2020-01-27 10:38:00 +01:00
Simon Giesecke
f8f7913737 Problem: irregular loop conditions
Solution: use standard loop constructs and optimize some loops
2020-01-27 10:38:00 +01:00
Simon Giesecke
628adf1cb7 Problem: inconsistent polymorphic inheritance
Solution: consistently use virtual, override and final
2020-01-27 08:46:55 +01:00
Simon Giesecke
36a8df2f8c Problem: sockets can be created after calling zmq_ctx_shutdown
Solution: fix handling of _starting and _terminate flags

Add tests for this situation.

Clarify documentation of zmq_ctx_shutdown and zmq_socket.

Fixes #3792
2020-01-26 18:06:14 +01:00
Denis Collette
64fc106123 Problem: preious commit contains tabs
Solution: replace tabs with spaces
2020-01-22 20:15:50 -04:00
Denis Collette
1450681fb4 Problem: Issue #3766 states that strtok is not thread safe and should be replaced
Solution: Replaced calls to strtok with strtok_r (strtok_s for windows)
in ws_engine.cpp
2020-01-22 19:40:26 -04:00
Luca Boccassi
ddae567f16 Problem: ZMQ_WSS socket options not defined in src/zmq_draft.h
Solution: add them
2020-01-19 14:39:29 +00:00
Matthias Loy
c357c378d8 fix: websocket url without path
websocket urls without a path caused crash!
2020-01-18 23:04:16 +01:00
Doron Somech
60ef14f80b problem: ws_engine don't support WS RFC close control msg
Solution: when peer send a close msg, close the connection
2020-01-18 19:30:23 +02:00
Doron Somech
b120ec33a9 problem: ws_engine don't support WS RFC ping-pong
Solution: implement both PONG response and producing pings
2020-01-18 18:28:00 +02:00
Christoph Kahl
c5dab4f48f mingw: add missing namespace 2020-01-09 21:44:53 +01:00
Simon Giesecke
73eb1eac05
Merge pull request #3767 from bluca/libbsd
Problems: reimplementation of strlcpy, CMake does not use pkg-config for NSS, wrong pc generated by autoconf with GNUTLS
2020-01-06 11:46:38 +01:00
xqcool
382c6d7186 Update array.hpp (#3769)
* Update array.hpp

Problem:Calling back on an empty container causes undefined behavior.
Solution:Check with the function empty()

* Create xqcool.mq

Adds relicensing grant
2020-01-01 10:37:51 +01:00