0
0
mirror of https://github.com/zeromq/libzmq.git synced 2025-01-21 06:59:38 +08:00

2109 Commits

Author SHA1 Message Date
Martin Hurton
5a497d7d0c Code cleanup 2014-09-11 16:01:56 +02:00
Jonathan Reams
d1881acbdc Clean up after using randombytes from libsodium
When Curve authentication is used, libsodium opens a file
descriptor to /dev/urandom to generate random bytes. When
the ZMQ context terminates, it should ensure that file gets
closed.
2014-08-31 13:30:44 -04:00
Pieter Hintjens
f15146b5d2 Problem: nodrop code is ugly
It's bad practice to start by testing all exceptional conditions
and then dropping through to the 'normal' condition. Apart from
being inefficient, it's deceptive to the user. Conditional code
should always try to show the natural expectation of the code,
with exceptional cases coming last.

Solution: clean up this code.
2014-08-27 13:51:25 +02:00
Pieter Hintjens
35040aaf18 Problem: issues with nodrop property
- not initialized before use
- name is nasty (boolean variables should not have negative names)

Solution: rename to 'lossy' and initialize to 'true'.
2014-08-27 12:06:54 +02:00
Martin Hurton
f550d66ae3 Code cleanup 2014-08-14 08:58:01 +02:00
Kapp Arnaud
fbdc5aa22d Add const qualifier to source parameters in zmq_z85_decode and zmq_z85_encode 2014-08-14 00:00:00 +02:00
Martin Hurton
a54d8d7b0c Reset metadata for outbound messages 2014-08-13 08:53:54 +02:00
Pieter Hintjens
75d4f50be3 Problem: ZMQ_CURVE_SECRETKEY reads beyond end of Z85 data
Solution: change setsockopts on printable keys to expect 41, nor 40
bytes. Code still accepts 40 bytes for compatibility, and copies the
key to a well-terminated string before using it.

Fixes #1148
2014-08-12 12:37:49 +02:00
Martin Hurton
214553972d Return -1 when failed to publish message 2014-08-12 10:51:37 +02:00
Martin Hurton
228426ac44 Code cleanup 2014-08-12 09:31:19 +02:00
kreuzberger
f042ea9e26 better naming of flags and variables to real functionality: nodrop 2014-08-08 19:45:41 +02:00
kreuzberger
d9a3cc48d4 do not silently drop messages in publisher if hwm is reached 2014-08-08 19:36:00 +02:00
Thomas Rodgers
03f097a541 Update zmq_msg_get(ZMQ_SHARED) to return true for type_cmsg messages 2014-07-29 13:43:38 -05:00
KIU Shueng Chuan
6bcced7537 use enum retired_fd instead of -1 2014-07-29 04:16:44 +08:00
Ewen McNeill
501666d07e z/OS: Skip pthread_{get,set}schedparam
Updated:
    src/thread.cpp: On older z/OS UNIX System Services,
        pthread_{get,set}schedparam is not present (searching the
        Internet suggests it may be present in later version than
        the one being used for z/OS UNIX System Services porting).

        Make zmq::thread_t::setSchedulingParameters() a no-op on
        z/OS UNIX System Services.

    NOTE: pthread_{get,set}schedparam appear to have been introduced
    by POSIX.1-2001 or IEEE 1003.1-2004 so may not be universally
    available, and thus more platforms may need this "no-op" treatment.
2014-07-24 13:54:21 +12:00
Ewen McNeill
217e0ae9c6 Remove "const" from std::map key
Updated:
    src/metdata.hpp: Remove explicit "const" from key of std::map<>
       because the key is implicitly const already (see
       http://en.cppreference.com/w/cpp/container/map and
       http://www.cplusplus.com/reference/map/map/).

On some platforms (such as z/OS UNIX System Services) explicitly
declaring the map key as "const" causes template expansion errors
as it tries to create separate allocators for "const const std::string"
and "const std::string" only to find that they clash.  (Presumably
some compilers collapse these into one earlier.)

There are no template expansion errors if the map key is left to be
implicitly const.
2014-07-24 12:26:13 +12:00
Ewen McNeill
0af693c496 z/OS: Loop on EAGAIN on close() in ~signaler
Updated:
    src/signaler.cpp: Add close_wait_ms() static function to loop
       when receiving EAGAIN in response to close(), with ms long
       sleeps, up to a maximum limit (default 2000ms == 2 seconds);
       used in signaler_t::~signaler_t() destructor.
2014-07-23 14:01:43 +12:00
Pieter Hintjens
d4d65da20d Merge pull request #1131 from rodgert/master
Added ZMQ_SHARED message option to zmq_msg_get()
2014-07-12 16:06:26 +02:00
Thomas Rodgers
3497244c41 Added ZMQ_SHARED message option to zmq_msg_get() 2014-07-12 09:01:27 -05:00
Martin Hurton
816299f11c Code cleanup 2014-07-09 14:07:32 +02:00
Martin Hurton
54e0fde1cc Resolve issue #949 2014-07-09 10:02:53 +02:00
Tom Whittock
993cb32e96 Windows: if WSA error number is held, use directly.
It must be done this way, as WSAGetLastError returns 0 in these circumstances
2014-07-07 16:33:53 +01:00
Martin Hurton
ccfbaea397 Don't delay reception of signal
- new code may help undersdtand issue #1108
  (https://github.com/zeromq/libzmq/issues/1108)
- code cleanups
2014-07-06 22:27:45 +02:00
Rodrigo Mosconi
3a16b0b108 Merge remote-tracking branch 'upstream/master' 2014-07-02 21:22:51 -03:00
Rodrigo Mosconi
51b3fad8ab Fix to build on OpenBSD 2014-07-02 21:06:33 -03:00
Joel Lauener
219310b4f0 Thread scheduling parameters: Use ZMQ context options instead of
environment variables.
2014-07-02 14:41:21 +02:00
Martin Hurton
079ff8b759 Code cleanup 2014-07-01 09:17:19 +02:00
Franco Fichtner
f1207e6af1 socks: fix build on FreeBSD
The fix should be sane on all UNIX-like systems, so there's
no ZMQ_HAVE_FREEBSD involved.  It's likely that other BSDs
stumble across this problem too.
2014-06-27 20:15:08 +02:00
Pieter Hintjens
dd05a64462 Problem: zmq_msg_gets did not set errno on unknown properties
Solution: set errno to EINVAL when a property does not exist.

Also fixed test_metadata.cpp to test this case.
2014-06-25 17:28:36 +02:00
Pieter Hintjens
6e91330a0c Added clarifying comment 2014-06-25 14:37:54 +02:00
Pieter Hintjens
58c067ff0e Revert "Problem: tcp_address.cpp allowed [ and ] around address"
This reverts commit 78a7b469a1993b681031f513d0c750c3a8454bb8.
2014-06-25 14:36:55 +02:00
Pieter Hintjens
ce8fbb26cb Problem: zmq_connect doesn't return EINVAL on invalid endpoint
Solution: set errno to EINVAL when tcp:// endpoint is invalid (was just
leaving errno to previous value).
2014-06-25 12:48:26 +02:00
Pieter Hintjens
2524e26893 Code cleanups 2014-06-25 12:47:39 +02:00
Joel Lauener
112ef6f172 Allow change of pthread priority
Rationale: In a real-time environment it is sometime mandatory to tune
threads priority and scheduling policy. This is required by our users
who mixes real-time and server threads within
the same process. It's not planned to support this on non-pthread
platforms (e.g. Windows).
2014-06-25 09:51:10 +02:00
Pieter Hintjens
78a7b469a1 Problem: tcp_address.cpp allowed [ and ] around address
This syntax is undocumented and has no known meaning. It was in libzmq
since 3.x.

Solution: remove this code.
2014-06-24 14:36:21 +02:00
Pieter Hintjens
deaad00ad9 Problem: zmq_connect() does not validate TCP addresses
Since https://github.com/zeromq/libzmq/commit/350a1a, TCP addresses
get resolved asynchronously, so zmq_connect no longer returned an
error on incorrect addresses.

This is troublesome since we rely on some error checking to catch
blatant errors.

Solution add some upfront syntax checking that catches at least the
obvious kinds of errors (invalid characters, wrong or missing port
number).
2014-06-24 14:33:38 +02:00
Pieter Hintjens
1f063dc30a Merge pull request #1103 from ricnewton/master
Fix windows build
2014-06-23 20:23:20 +02:00
Richard Newton
82be399527 Merge pull request #1097 from hintjens/master
Added capabilities API
2014-06-23 13:23:20 +01:00
Richard Newton
369725ab8f Fix windows build 2014-06-23 13:10:43 +01:00
Martin Hurton
b73d1c8fed Fix memory leak in socks connecter 2014-06-23 00:02:15 +02:00
Pieter Hintjens
79d578ef0b Merge pull request #1100 from hurtonm/master
Add support for SOCKS proxies
2014-06-22 23:42:23 +02:00
Martin Hurton
f06ca69ae9 Add support for SOCKS proxies
This is still raw and experimental.
To connect through a SOCKS proxy, set ZMQ_SOCKS_PROXY socket option on
socket before issuing a connect call, e.g.:

    zmq_setsockopt (s, ZMQ_SOCKS_PROXY,
        "127.0.0.1:22222", strlen ("127.0.0.1:22222"));
    zmq_connect (s, "tcp://127.0.0.1:5555");

Known limitations:
- only SOCKS version 5 supported
- authentication not supported
- new option is still undocumented
2014-06-22 23:19:33 +02:00
chrox
bdf6427a00 Fixed build with arm-linux-androideabi toolchain 2014-06-22 18:13:05 +08:00
Pieter Hintjens
f11d673ba9 Problem: need way to probe library capabilities
As libzmq is compiled with optional transports and security mechanisms,
there is no clean way for applications to determine what capabilities
are actually available in a given libzmq instance.

Solution: provide an API specifically for capability reporting. The
zmq_has () method is meant to be open ended. It accepts a string so
that we can add arbitrary capabilities without breaking existing
applications.

zmq.h also defines ZMQ_HAS_CAPABILITIES when this method is provided.
2014-06-18 15:19:07 +02:00
Pieter Hintjens
27547bc9bc Problem: when libgssapi isn't available, GSSAPI options 'seem' to work
Solution: use same approach as for libsodium/CURVE, i.e. return EINVAL
if the library isn't present when libzmq builds, and the application
still tries to use these options in zmq_getsockopt/setsockopt.
2014-06-17 16:32:47 +02:00
Pieter Hintjens
1beb54cef0 Added militant API checking on zmq_getsockopt 2014-06-17 16:24:56 +02:00
Pieter Hintjens
d0667461f0 Fixed build: malformed only defined when needed. 2014-06-17 16:14:19 +02:00
Pieter Hintjens
b4ed3f5506 Problem: API violations are treated as recoverable errors
The example is applications passing invalid arguments to a socket option
and then failing to check the return code. The results can be very hard
to diagnose. Here are some threads that show the pain this causes:

* https://github.com/zeromq/zyre/issues/179
* http://lists.zeromq.org/pipermail/zeromq-dev/2014-June/026388.html

One common argument is that a library should never assert, and should
pass errors back to the calling application. The counter argument is
that when an application is broken enough to pass garbage to libzmq,
it cannot be trusted to handle the resulting errors properly. Empirical
evidence from CZMQ, where we systematically assert on bad arguments, is
that this militant approach makes applications more, not less, robust.

I don't see any valid use cases for returning errors on bad arguments,
with one exception: zmq_setsockopt can be used to probe whether libzmq
was e.g. built with CURVE security. I'd argue that it's nasty to use a
side effect like this. If apps need to probe how libzmq was built, this
should be done explicitly, and for ALL build options, not just CURVE.

There are/were no libzmq test cases that check the return code for an
invalid option.

For now I've enabled militant assertions using --with-militant at
configure time. However I'd like to make this the default setting.
2014-06-17 16:00:55 +02:00
Richard Newton
1d236d81c8 Merge pull request #1090 from hintjens/master
Problem: zmq_ctx_get (ZMQ_MAX_SOCKETS) returns gibberish
2014-06-16 08:45:37 +01:00
Martin Hurton
b62d1c7d5f Code cleanup 2014-06-15 19:45:09 +02:00
Pieter Hintjens
39455c2114 Problem: zmq_ctx_get (ZMQ_MAX_SOCKETS) returns gibberish
Well, not gibberish, but 2^31 on Linux, which is useless. The code
should probably use getrlimit on Linux and other calls depending on
the system. For now I've set the ceiling at 64K.
2014-06-11 18:24:39 +02:00
Jan Kryl
cc4c37dc62 program dumps core when getpeername() returns EINVAL (#1085) 2014-06-10 16:11:00 -04:00
Olaf Mandel
ab5775fb00 Fix failed assertion for WSAENOTSOCK
In de9eef306, the error number assigned to WSAENOTSOCK was EFAULT, but
zmq.cpp:919 expects an ENOTSOCK in this case.
2014-06-10 14:45:04 +02:00
Martin Hurton
706eb4da8d Code cleanup 2014-06-07 23:05:45 +02:00
Matthias Kluwe
fa95d0b5e8 removed whitespace
(accidentially used my preferred style)
2014-06-05 19:39:15 +02:00
Matthias Kluwe
5154c544ff handle WSAEADDRINUSE in tcp_connecter_t::connect
As mentioned on the mailing list, Windows may return WSAEADDRINUSE when binding
(reconnecting) to a port. Added this to the handled error codes as Pieter
suggested.
2014-06-05 19:29:42 +02:00
Olaf Mandel
de9eef3063 Extend zmq::wsa_error_to_errno()
The list of error codes is taken from zmq::wsa_error_no(). Most of the
new WSA error codes result in EFAULT, but some return a more specific
value (even EAGAIN).

Fixes #1071
2014-06-04 17:28:01 +02:00
Richard Newton
c9e86acf61 Set up hwm's before we connect the other end of the pipe in ctx_t::connect_inproc_sockets 2014-06-04 12:13:15 +01:00
Martin Hurton
f447386936 Style fixes 2014-06-03 10:42:29 +02:00
Martin Hurton
dd2be381ad Add const qualifier to register_endpoint param 2014-05-23 12:27:01 +02:00
Martin Hurton
3901d94b27 Fix race condition in connecting inproc sockets 2014-05-22 09:09:45 +02:00
Martin Hurton
414fc86b22 Code cleanup
- limit visibility of pending_connection_t
- add const qualifiers
2014-05-21 13:08:15 +02:00
Martin Hurton
5f4145e7cb Small code cleanup
- add const modifier to address parameter of event generating functions
2014-05-20 21:48:59 +02:00
Martin Hurton
32b3daad7e PLAIN: Small simplification 2014-05-19 20:45:42 +02:00
Pieter Hintjens
77f5f7adae Merge pull request #1043 from hurtonm/dont_reconnect_on_protocol_errors
Don't reconnect on protocol errors
2014-05-18 10:53:32 +02:00
Pieter Hintjens
de639c34ae Merge pull request #1042 from hurtonm/master
Fix bug in reporting protocol errors
2014-05-18 10:09:38 +02:00
Martin Hurton
045dab91a5 Merge pull request #1037 from hintjens/master
Problem: artificial restriction on binary identities
2014-05-18 09:14:06 +02:00
Martin Hurton
9a53f334d2 Don't reconnect on protocol errors 2014-05-18 08:49:29 +02:00
Martin Hurton
ed076d4620 Fix bug in reporting protocol errors 2014-05-18 08:30:40 +02:00
Martin Hurton
7d3fa3afcb Tell the session why the engine has stopped 2014-05-17 21:04:38 +02:00
Pieter Hintjens
aad54b2a8b Whitespace fixes 2014-05-16 16:00:37 +02:00
Pieter Hintjens
a178097f95 Problem: artificial restriction on binary identities
Applications that use ZMQ_IDENTITY can be trapped by the artificial
restriction on not using a binary zero as first byte. It's specially
nasty on random generated identities, e.g. UUIDs, as the chance of a
binary zero is low, so it will pass 255 out of 256 times.

Solution: remove the restriction.
2014-05-16 16:00:37 +02:00
Martin Hurton
bd73119e2b CURVE: Implement server-side ERROR handling 2014-05-16 07:25:29 +02:00
Martin Hurton
0750303bfe CURVE: Implement client-side ERROR handling 2014-05-15 06:39:45 +02:00
Martin Hurton
410f891599 Prefix error-reason with length in ERROR command 2014-05-14 14:13:13 +02:00
Martin Hurton
dd6a4fe806 NULL: Correct ERROR command format 2014-05-14 06:52:55 +02:00
Martin Hurton
164ff4be6b Remove debugging output 2014-05-14 06:35:08 +02:00
Martin Hurton
57546f4ecb PLAIN: Implement ERROR handling in server 2014-05-14 06:23:47 +02:00
Martin Hurton
8651b55797 PLAIN: Fix parsing of ERROR command 2014-05-14 06:23:47 +02:00
Martin Hurton
6b8513744c PLAIN: Implement ERROR handling in client 2014-05-13 18:34:48 +02:00
Stoian Ivanov
8fcefed43f patch cleanup 2014-05-12 10:40:24 +03:00
Stoian Ivanov
d5991d6728 merge to upstream 2014-05-12 10:24:31 +03:00
Martin Hurton
22d6a97403 Split plain_mechanism into client and server part 2014-05-12 06:10:56 +02:00
Stoian Ivanov
acb71e0096 store also here! 2014-05-10 14:06:37 +03:00
Will Strang
afe5fd87e9 Issue #1017: add ZMQ_HANDSHAKE_IVL time limit on connection handshake 2014-05-09 13:54:24 +00:00
Frank
b846f3075c ws 2014-05-09 00:07:02 +02:00
Frank
8962b7de45 removed return code check for now, got -1 in test_security_curve. 2014-05-09 00:04:20 +02:00
Frank
05ab9a848f find libsodium with cmake 2014-05-09 00:04:19 +02:00
Frank
2cdfa1fff3 initialize libsodium and tweetnacl 2014-05-09 00:04:19 +02:00
Martin Hurton
934560b559 NULL: Implement ERROR handling
NULL mechanism sends ERROR command rather than READY command when ZAP
handler rejects the ZAP request (status code != "200"). The body of
ERROR command contains the status code as returned by ZAP handler.
2014-05-07 16:49:56 +02:00
Martin Hurton
43d8252446 Update gssapi mechanism 2014-05-06 17:49:26 +02:00
Martin Hurton
0be8144176 Update mechanism API so we can check for ERROR status 2014-05-06 17:08:56 +02:00
Franco Fichtner
fff29a4a0c ipc: fail harder for abstract ipc on non-Linux
Using 'ipc://@abstract-socket' on non-Linux platforms yields inconsistent
behaviour.  Abstract sockets don't exist, so the literal file is created.
The test previously failed, but for a different reason: this is not the
directory you are looking for.  Now, zmq_bind() will fail for the right
reason: the socket can't be created.  Put the XFAIL back.
2014-05-05 23:26:06 +02:00
Franco Fichtner
8c09ae6e49 gssapi: RFC 2744 mandates GSS_C_NT_HOSTBASED_SERVICE
Tested on FreeBSD 10.
2014-05-05 22:03:53 +02:00
Martin Hurton
dcd1f2038e Minor renaming 2014-05-05 19:52:53 +02:00
Martin Hurton
f2807d11a0 Remove i_properties interface
We use metadata_t directly. No need for generic interface now.
2014-05-03 21:03:49 +02:00
Richard Newton
2f08477292 Initialise _has_src_addr variable, fixes hang on Windows. 2014-05-03 13:59:37 +01:00
Pieter Hintjens
b06474312d ZAP vs. ZMTP metadata priority fixed 2014-05-02 23:14:27 +02:00
Pieter Hintjens
bd4a76cc2a Problem: GSSAPI server doesn't parse ZAP user id
Solution: add this to ZAP reply processing.
2014-05-02 23:12:53 +02:00
Pieter Hintjens
84ed81c014 Added test_metadata
- also prioritize ZAP metadata over ZMTP metadata in case application
  uses same names.
2014-05-02 22:21:50 +02:00