0
0
mirror of https://github.com/zeromq/libzmq.git synced 2025-01-02 03:08:04 +08:00

2328 Commits

Author SHA1 Message Date
Martin Hurton
3f6148abdf Implement new message encoder/decoder
This is supposed to become part of the ZMTP/1.1.

The main differences from the ZMTP/1.0 framing protocol are:
- flags field comes first, followed by the length field
- long messages are signaled using a flag rather then 0xff escape
- length field does not include the flags field, 0 is a valid value
2012-09-05 20:17:22 +02:00
Martin Hurton
8672f5829e Introduce abstract interface for message encoder/decoder 2012-09-05 18:31:27 +02:00
Pieter Hintjens
a224c97329 Merge pull request #420 from ianbarber/master
Fix some PGM refactor breakages
2012-09-04 16:03:58 -07:00
Ian Barber
d7331b7b1f Fixing PGM issues
Hopefully fixed LIBZMQ-427 - there was a slight typo in the init_address
refactor. The encoder refactoring had also broken pgm_sender and
receiver, but just required updating to use the new functions.
2012-09-04 23:24:48 +01:00
Ian Barber
d0687876c0 Merge pull request #419 from hurtonm/code_cleanup
Code cleanup
2012-09-03 13:58:06 -07:00
Martin Hurton
9d17ead33d Remove superfluous statement 2012-09-03 19:26:52 +02:00
Martin Hurton
7e6db47e65 Remove unused member variable 2012-09-03 19:07:57 +02:00
Ian Barber
9143ac5156 Merge pull request #418 from hurtonm/versioned_ztp
Introduce versioning into ZTP
2012-09-02 15:24:09 -07:00
Martin Hurton
d9307c9ff0 Make ZMQ interoperate with ZMQ 2.x SUB sockets
Since ZMQ 2.x does not support subscription forwarding, it's not
possible to use ZMQ 2.x SUB socket to receive messages from a PUB
socket.

This patch adds some compatibility layer so that ZMQ 2.x SUB socket
receives messages from PUB socket.
2012-09-02 22:46:26 +02:00
Martin Hurton
dfc0222ee6 Decouple encoder_t and decoder_t from session_base_t
This patch introduces i_msg_sink and i_msg_source interfaces. This
allows us to make message encoder and decoder more general.
2012-09-02 22:46:26 +02:00
Martin Hurton
1bca4f6f03 Extend ZTP/1.0 protocol
The new protocol adds support for protocol version and  exchanges the
socket type, so that the library can reject a connection when the
sockets do not match.

The protocol was designed so that it's possible to detect and fully
support ZTP/1.0 peers.

When a new connection is set up, peers exchange greeting messages. The
greeting message encodes both the protocol verion and the socket type.
The format of the greeting message is as follows:

    greeting    = tag1, adaptation, tag2, version, length, socket_type
    tag1        = BYTE / 0xff
    adaptation  = 8 BYTES
    tag2        = BYTE / 0x7f
    version     = BYTE / 1
    length      = BYTE / 1
    socket_type = BYTE

The protocol does not define the value of adaptation field.

When interoperability with ZTP/1.0 peers is required, the adaptaion
encodes, in network byte order, the length of identity message increased
by 1. When adaptaion consists of eight zeros, the current
implementatatio of 0MQ 2.x closes the connection.

This patch supports both ZTP/1.0 and new protocol.
2012-09-02 22:46:26 +02:00
Mikko Koppanen
6347f8b0c9 Merge pull request #416 from hintjens/master
Fixed COPYING.LESSER
2012-08-28 04:40:38 -07:00
Pieter Hintjens
ab8248847c Fixed license to remove references to X11 code 2012-08-28 20:39:38 +09:00
Pieter Hintjens
c959f526f1 Merge pull request #415 from Quuxplusone/unused-parameters
Silence all "unused parameter" warnings from Clang.
2012-08-27 16:34:31 -07:00
Arthur O'Dwyer
08f6a9e7e8 Remove unused argc/argv parameters in tests. 2012-08-27 16:10:47 -07:00
Arthur O'Dwyer
c29aef4dd8 Verify the value of the "void *s" passed to the monitor function.
This formerly unused parameter actually represents the socket
on which the event was received. As such, we should check that
its value makes sense: it must be either "rep" or "req", and in
the case of some kinds of events, it must be specifically one
or the other.

After this change, "s" is no longer unused.
2012-08-27 16:06:51 -07:00
Arthur O'Dwyer
3b984d40e9 Silence all "unused parameter" warnings from Clang.
Compiling without warnings is a good goal, because it makes
new warnings (which probably indicate bugs) stand out rather
than getting lost in the spam.

My fixes fall into two categories:

    - Adding (void) casts of unused parameters, where their
      unusedness seems like a TODO (or in some cases a bug?).

    - Removing parameter names altogether, where the function
      is clearly a stub that will never use its parameters.

Should be no change in behavior.
2012-08-27 16:05:51 -07:00
Arthur O'Dwyer
7fa4d423b8 Fix char_traits<unsigned char> to what looks like correct behavior.
char_traits<unsigned char>::to_char_type(x) used to return 0 no matter
what x was, and likewise to_int_type(x) used to return 0 no matter what.
(0 is what you get when you default-construct an integral type, which
is what the old code was doing.) This seemed like buggy behavior to me,
so I've changed it.
2012-08-27 16:00:40 -07:00
Pieter Hintjens
f6fe600eef Merge pull request #414 from ianbarber/master
Fix build breaking typos in monitor VA code
2012-08-26 17:04:36 -07:00
Ian Barber
fd67cd810a Update ROUTER_BEHAVIOR documentation
Include a note about potential interactions with reactors, and update
reference to old FAIL_UNROUTABLE name.
2012-08-26 17:48:52 +01:00
Ian Barber
95c018c0d3 Use full endpoint string in monitor response
The endpoint was excluding the tcp://, causing tests to fail
2012-08-26 16:29:40 +01:00
Ian Barber
94835581a4 Remove early return on terminated state
Code as stands breaks shutdown process. It was a bugfix by Arthur to a
bad line which was testing for an impossible state - but afaics we do
actually want to flush in those states. It is possible I am wrong on
that though - if there are any shutdown issues introduced aroudn this
commit I would suggest further investigation around this flushing
behavior.
2012-08-26 15:07:16 +01:00
Ian Barber
206e5f6f44 Incorrect function name in socket_base
VA specific monitor event in socket base was named monitor_event rather
than va_monitor_event
2012-08-26 14:29:09 +01:00
Ian Barber
f028379c1c Incorrect var name in monitor_event
The call to the va version of the function was using 'event' instead of
'event_'
2012-08-26 14:27:12 +01:00
Ian Barber
8bf541b252 Fixing incorrect argument order on va_start
Compile was failing on the monitor_event function function due to the
va_start params being switched.
2012-08-26 14:24:50 +01:00
Pieter Hintjens
4a43a0d074 Merge pull request #413 from Quuxplusone/static-analysis
Various bugfixes found by compiling with extra warnings
2012-08-25 01:19:09 -07:00
Arthur O'Dwyer
7fadd708a0 Fix monitor_event() to work at all.
There are three versions of monitor_event(), all taking
variadic arguments. The original code just has the first one
creating a va_list and passing that va_list variadically to
the second one... which creates a new va_list and passes it
variadically to the third one... and of course everything
blows up when we try to pull a non-va_list argument off the
stack.

The correct approach matches the C standard library's use
of printf/vprintf, scanf/vscanf, and so on. Once you make
a va_list, you must pass it only to functions which expect
a va_list parameter.
2012-08-24 16:42:31 -07:00
Arthur O'Dwyer
537a802788 Add a missing null-check, turning a segfault into an assertion.
Static analysis says:
src\tcp_address.cpp(297): error V595: The 'res' pointer was utilized before it was verified against nullptr. Check lines: 297, 301.
src\tcp_address.cpp(603): error V106: Implicit type conversion third argument 'full_bytes' of function 'memcmp' to memsize type.
src\tcp_address.cpp(603): error V526: The 'memcmp' function returns 0 if corresponding buffers are equal. Consider examining the condition for mistakes.

In fact the use of "memcmp" is correct, but the enclosing "if" isn't
necessary, and the compiler is happier if "full_bytes" is a size_t.
2012-08-24 16:38:46 -07:00
Arthur O'Dwyer
6347d392fd Fix a bug in pipe_t::flush().
Static analysis says:
src\pipe.cpp(193): error V547: Expression is always false. Probably the '||' operator should be used here.

If flush() is called on a pipe whose state was
"terminated" or "double_terminated", the programmer's
intent was to return immediately. But in fact the
two conditions can never be true simultaneously, so
the early return never happens, and we may try to flush
a terminated pipe anyway.
2012-08-24 16:36:19 -07:00
Arthur O'Dwyer
0886b7a26b Silence a compiler warning.
Static analysis says:
src\fd.hpp(38): error V103: Implicit type conversion from memsize to 32-bit type.

Adding the explicit cast should shut it up.
2012-08-24 16:33:48 -07:00
Arthur O'Dwyer
a48751b34b The "count_" out-parameter is doubled instead of unchanged.
Static analysis says:
src\zmq.cpp(489): error V220: Suspicious sequence of types castings: memsize -> 32-bit integer -> memsize. The value being casted: '* count_'.
src\zmq.cpp(510): error V127: An overflow of the 32-bit 'nread' variable is possible inside a long cycle which utilizes a memsize-type loop counter.

I've silenced the warning on line 489 and ignored the other.
But also, it looks to me like there's a serious bug here: The
out-parameter "count_" is never set to zero before we start
incrementing it. So its final value will always be between
1 and 2 times its initial value. The fix seems obvious.
2012-08-24 16:30:42 -07:00
Ian Barber
d588dbf27c Merge pull request #410 from Quuxplusone/LIBZMQ-414
[LIBZMQ-414] Fix an error in the inline assembly for Thumb2.
2012-08-23 13:02:30 -07:00
Ian Barber
033e311d66 Merge pull request #411 from Quuxplusone/fix-test_monitor-bug
Fix a bug reported on the mailing list.
2012-08-23 13:01:44 -07:00
Arthur O'Dwyer
f718d2bead Fix a bug reported on the mailing list.
Both memcmp and strcmp return zero on equal, nonzero on nonequal;
so all of these tests were backwards.

The original committer fixed the failure by comparing 22 bytes instead
of the correct 21, so that the assertions would trigger only if the
22nd byte happened to match exactly --- which was rare.

The correct fix is to compare the right number of bytes with the
right sense.  (I think all of the ".addr" fields are null-terminated,
in which case it's more appropriate to use strcmp throughout.)
2012-08-23 12:56:00 -07:00
Arthur O'Dwyer
28c9255d46 Fix an error in the inline assembly for Thumb2.
Notice that ZeroMQ has never been compiled for Thumb2 before,
and I personally don't make any guarantees that it will actually
behave correctly once compiled. But after this patch, it is at
least *possible* to compile it for Thumb2.

(Thumb2 is the target for most iOS devices.)
2012-08-23 12:49:21 -07:00
Pieter Hintjens
12833804c9 Merge pull request #409 from hurtonm/master
Exchange greeting messages for all socket types
2012-08-12 02:33:17 -07:00
Martin Hurton
1ab85f471a Exchange greeting messages for all socket types
Fixes #415.
2012-08-11 19:04:49 +02:00
Ian Barber
b32542e396 Merge pull request #403 from methodmissing/efault-zmq-poll
Revert zmq_poll NULL poll items check to 2.2 behavior - let the poll items count filter out empty poll sets and not return a sometimes unexpected EFAULT error status
2012-08-05 08:10:53 -07:00
Ian Barber
040d4d322d Merge pull request #408 from teotwaki/master
Fix reordering compile errors
2012-08-05 08:08:59 -07:00
Sebastian Lauwers
a622328a9c Fix reordering compile errors 2012-08-04 23:54:31 +02:00
Pieter Hintjens
5637ed08a5 Merge pull request #407 from methodmissing/LIBZMQ-399
Fix invalid address metadata for ZMQ_EVENT_DISCONNECTED
2012-08-04 04:21:49 -07:00
Lourens Naudé
9dc248f6ab Fix invalid address metadata for ZMQ_EVENT_DISCONNECTED 2012-08-04 11:41:33 +01:00
Ian Barber
1f22954762 Merge pull request #406 from hurtonm/master
Fix issue #406
2012-07-31 11:17:45 -07:00
Martin Hurton
9fab9937e5 Fix issue #406
When a peer reconnects, the router socket receives an identity
message containing this peer id. When this happens, the current
implementation crashes.

This patch makes a router socket to silently ignore all identity
messages coming from reconnected peers.
2012-07-31 18:59:13 +02:00
Pieter Hintjens
84560c1607 Merge pull request #405 from jimenezrick/master
Fix LIBZMQ-404: zmq_term not truly re-entrant
2012-07-29 00:45:20 -07:00
Ricardo Catalinas Jiménez
92bee5a6db Fix LIBZMQ-404: zmq_term not truly re-entrant
zmq_term can not safely be re-entered with pgm transport.
Fix proposed by Steven McCoy.
2012-07-28 11:09:04 +02:00
Ian Barber
631e12d4e5 Merge pull request #404 from mimetnet/master
Correction for LIBZMQ-335
2012-07-26 14:12:05 -07:00
Matthew Metnetsky
a0eb0bb7e6 signaler.cpp's Windows Lock should be in the "Global" namespace
That way it can be used more appropriately between processes.
2012-07-26 13:55:27 -04:00
Matthew Metnetsky
83537916f8 Fix issue 335
By assigning a SECURITY_DESCRIPTOR to the event we gain the ability to
share it between service and console programs. We also added
EVENT_MODIFY_STATE as a requirement to OpenEvent so we can SetEvent later
in the method.
2012-07-26 13:52:38 -04:00
Lourens Naudé
556074d438 Revert zmq_poll NULL poll items check to 2.2 behavior - let the poll items count filter out empty poll sets and not return a sometimes unexpected EFAULT error status 2012-07-24 02:22:27 +01:00
Pieter Hintjens
9be0c7e4b5 Merge pull request #402 from hurtonm/master
Small code cleanup
2012-07-17 23:59:59 -07:00
Martin Hurton
92827e45ee Small code cleanup 2012-07-18 01:53:43 +02:00
Ian Barber
bea0b4817b Merge pull request #401 from hurtonm/master
Fix issue #397
2012-07-13 07:14:27 -07:00
Martin Hurton
62b5b914f5 Always mark socket as retired when closing ipc_listener
When closing an ipc listener, the library may try to unlink
the associated file. When this fails, the underlying
socket is not marked as retired and this triggers
assertion failure.

Fixes issue #397
2012-07-13 15:46:05 +02:00
Ian Barber
43ee4396cf Merge pull request #400 from hurtonm/master
Be more conservative about when to generate ZMQ_EVENT_CLOSE_FAILED
2012-07-11 10:17:44 -07:00
Martin Hurton
c84ca01e95 Be more conservative about when to generate ZMQ_EVENT_CLOSE_FAILED
This also fixes a bug in tcp_connecter and tcp_listener, which
generated the event not when they failed to close the socket but
when the succeed to close it.
2012-07-11 19:02:31 +02:00
Pieter Hintjens
0533fb1ce1 Merge pull request #399 from hurtonm/master
Small cleanup
2012-07-11 08:02:01 -07:00
Martin Hurton
6ac5cf8697 Simplify code for writer activation in Router socket 2012-07-11 15:15:04 +02:00
Ian Barber
f8752bf9fc Merge pull request #398 from hurtonm/master
Rewrite event processing in io_thread
2012-07-06 10:50:00 -07:00
Martin Hurton
e37814eca4 Rewrite event processing in io_thread 2012-07-06 19:17:05 +02:00
Pieter Hintjens
823d14c7fc Merge pull request #397 from hurtonm/master
Code cleanup
2012-07-06 04:02:17 -07:00
Martin Hurtoň
37d1e84467 Merge pull request #396 from hintjens/master
Reverting fix for #393
2012-07-06 03:54:55 -07:00
Martin Hurton
86eaa9c8e7 Rewrite process_command's loop 2012-07-06 12:17:36 +02:00
Pieter Hintjens
8d64fc6af8 Reverted fix for #393, was already fixed 2012-07-06 17:33:41 +09:00
Ian Barber
73f960e739 Merge pull request #395 from hintjens/master
Fixed issue #393 - Android build error
2012-07-05 23:02:20 -07:00
Pieter Hintjens
9aa8452b80 Fixed issue #393, compilation warnings 2012-07-06 12:23:51 +09:00
Martin Hurtoň
77dd0a6fba Merge pull request #394 from hintjens/master
Fixed HWM doc on ZMQ_PULL
2012-07-04 05:20:51 -07:00
Pieter Hintjens
8d96a43975 Fixed documentation of HWM on ZMQ_PULL 2012-07-04 17:46:08 +09:00
Pieter Hintjens
e7f59297d0 Merge pull request #393 from cyrilh/master
Making Android&pyzmq friendly version with -avoid-version
2012-07-03 18:30:09 -07:00
Cyril Holweck
01919774dc Making Android&pyzmq friendly version with avoid-version 2012-07-03 12:20:37 +02:00
Pieter Hintjens
1ff5af098a Merge pull request #392 from hurtonm/master
mtrie clenaup
2012-07-02 06:54:26 -07:00
Martin Hurton
1b0e6ef8b4 mtrie: Code simplification 2012-07-02 08:32:23 +02:00
Martin Hurton
692648de96 mtrie: Do not throw exception on allocation failure 2012-07-02 06:11:29 +02:00
Chuck Remes
e471e5b401 Merge pull request #391 from methodmissing/monitor-manual-format
Let docs for zmq_ctx_set_monitor() respect a 80 char wide column width
2012-06-26 11:39:35 -07:00
Lourens Naudé
9ccbeb84fa Let docs for zmq_ctx_set_monitor() respect a 80 char wide column width 2012-06-26 19:35:59 +01:00
Pieter Hintjens
6a1bd3e1e7 Merge pull request #390 from hurtonm/master
Small code simplification
2012-06-25 18:03:07 -07:00
Martin Hurton
26e14d3064 Small code simplification 2012-06-26 02:05:52 +02:00
Pieter Hintjens
6f1229be6f Merge pull request #389 from hurtonm/master
Fix a bug in trie implementation
2012-06-25 05:09:00 -07:00
Martin Hurton
f8293df4c5 Fix a bug in trie implementation
When removing keys for a specified value, make sure we drop
empty node table. Failing to do this can lead to asserion failure.

Refs: http://lists.zeromq.org/pipermail/zeromq-dev/2012-June/017589.html
2012-06-25 13:39:12 +02:00
Pieter Hintjens
c251d940b3 Merge pull request #388 from minrk/forward-iovec
declare struct iovec
2012-06-23 18:40:58 -07:00
MinRK
a178817141 forward-declare struct iovec
avoids warnings of the form:

warning: 'struct iovec' declared inside parameter list
warning: its scope is only this definition or declaration, which is probably not what you want

when building downstream projects
2012-06-23 12:51:38 -07:00
Pieter Hintjens
b57b7debaa Merge pull request #386 from steve-o/err-handler
Fix missing ENETRESET for Jira #LIBZMQ-329.
2012-06-20 02:34:40 -07:00
Steven McCoy
fc335c59ea Fix missing ENETRESET for Jira #LIBZMQ-329. 2012-06-19 14:15:48 -04:00
Ian Barber
c60b0f579d Merge pull request #385 from jdc8/master
Missing semi-colon makes Windows compilation fail, Missing files in WIndows solution file
2012-06-19 08:46:49 -07:00
Jos Decoster
85c19f1269 added missing files to MSVC10 solution file: tcp.cpp, tcp.hpp 2012-06-19 17:05:15 +02:00
jdc8
98ee759dad Added missing semi-colon. 2012-06-19 09:37:06 -04:00
Pieter Hintjens
eb16f6b88e Merge pull request #384 from steve-o/err-handler
Add errno fallback values for MSVC2008.
2012-06-18 22:34:40 -07:00
Steven McCoy
5b3d0c633d Add errno fallback values for MSVC2008. 2012-06-18 17:13:17 -04:00
Ian Barber
7bbccdeac9 Merge pull request #383 from Kobolog/master
Reworked ZMQ_FAIL_UNROUTABLE to actually work as it was intended.
2012-06-17 00:36:58 -07:00
Kobolog
08749c8e7b Removed an unneeded include in tests 2012-06-17 02:38:15 +04:00
Kobolog
6da48aed3a Fixed tests 2012-06-17 02:36:08 +04:00
Kobolog
829d0003be Verbose ROUTER socket behavior patch 2012-06-17 02:33:43 +04:00
Pieter Hintjens
21eb8c8fa5 Merge pull request #382 from hurtonm/master
Fix open_socket to return -1 (INVALID_SOCKET on Windows) on error
2012-06-16 12:53:11 -07:00
Martin Hurton
7d99129411 Fix open_socket to return -1 (INVALID_SOCKET on Windows) on error 2012-06-16 21:46:20 +02:00
Pieter Hintjens
7753379eab Merge pull request #381 from hurtonm/connecter_cleanups
Connecter cleanups
2012-06-14 23:09:59 -07:00
Martin Hurton
919bd9628d {tcp|ipc}_connecter: check whether socket is valid before closing it
Calling close () when the underlying socket is invalid
triggers an assertion failure.
2012-06-15 02:38:47 +02:00
Martin Hurton
ec9f8994a7 Simplify {tcp|ipc}_connecter
Make start_connecting () to have singe exit point.
2012-06-15 02:03:20 +02:00
Martin Hurton
e0fed9d29a Simplify {tcp|ipc}_connecter
The patch is meant to make the code easier to understand.
The 'wait' attribute is replaced by 'delayed_start'
and 'timer_started' attributes. The former is constant and
is initialized in the constructor. The latter is a flag
reflecting whether a timer has been started and changes during
the lifetime of the object.
2012-06-15 01:55:13 +02:00
Pieter Hintjens
c8d0d68471 Merge pull request #380 from jlopex/master
current libzmq not compiling with android NDK
2012-06-14 12:17:51 -07:00
Javier Lopez
eb6c668c2a libzmq3.x not compiling on Android crosscompiler
- Android crosscompiler shows a warning about two signed/unsigned checks
  on compilation, this patch adds casts to avoid this, so zmq3.x can
  compile on it.
2012-06-14 12:14:55 -07:00