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

1754 Commits

Author SHA1 Message Date
danielkr
503da83fce Add #include to string.h in blob.hpp
Required for memmove(), memcpy()
2013-08-17 23:15:15 +03:00
Uli Köhler
e2c322cf80 Implemented zmq_send_const 2013-08-17 20:22:50 +02:00
Richard Newton
a83baa9b0b Fix up threading code from port tests to windows. 2013-08-17 14:23:22 +01:00
Richard Newton
7f74fc7c99 Port tests to windows and add to cmake build. 2013-08-17 13:43:45 +01:00
Richard Newton
e16a6af0c7 Fix compile error on windows. 2013-08-08 17:27:49 +01:00
Christian Kamm
423ca36b17 Rename ZMQ_REQ_SEND_RESETS -> ZMQ_REQ_STRICT.
It defaults to enabled. Switch it off to be able to send a new message
before the previous reply has been received.
2013-08-03 14:35:18 +02:00
Christian Kamm
f5c59556bd REQ: Unset reply_pipe if it terminates.
* Fixes a terminate() call on a dangling pointer in the SEND_RESETS
  case.
* Fixes recv_reply_pipe() never receiving a message once the pipe it is
  waiting on is terminated.
2013-07-29 09:35:15 +02:00
Christian Kamm
a0cc87a9d9 Add ZMQ_REQ_SEND_RESETS option.
This allows making a new request on a REQ socket by sending a new
message. Without the option set, calling send() after the first message
is done will continue to return an EFSM error.

It's useful for when a REQ is not getting a response. Previously that
meant creating a new socket or switching to DEALER.
2013-07-28 11:43:38 +02:00
Christian Kamm
b9646f2aac Add ZMQ_REQ_REQUEST_IDS option.
* Documentation:
The default behavior of REQ sockets is to rely on the ordering of messages
to match requests and responses and that is usually sufficient. When this option
is set to 1, the REQ socket will prefix outgoing messages with an extra frame
containing a request id. That means the full message is (request id, 0,
user frames...). The REQ socket will discard all incoming messages that don't
begin with these two frames.

* Behavior change: When a REQ socket gets an invalid reply, it used to
  discard the message and return EAGAIN. REQ sockets still discard
  invalid messages, but keep looking at the next one automatically
  until a good one is found or there are no more messages.
* Add test_req_request_ids.
2013-07-26 21:38:21 +02:00
Martin Hurton
4a5358f4d0 Implement ZAP for NULL mechanism 2013-07-18 10:59:39 +02:00
Martin Hurton
53bc53da04 Update PLAIN mechanism to the latest ZAP revision 2013-07-18 10:59:34 +02:00
Martin Hurton
d65231be1c Update CURVE mechanism to the latest ZAP revision 2013-07-18 10:59:31 +02:00
Martin Hurton
7541debe6d Add get_peer_ip_address utility function
The functon returns string representation of peer's
IP address. We will need this to update ZAP implementation.
2013-07-18 10:41:31 +02:00
Christian Kamm
c56d797bf9 REQ sockets drop replies from unasked peers.
* Add lb_t::sendpipe() that returns the pipe that was used for sending,
  similar to fq_t::recvpipe().
* Add forwarder functions to dealer_t to access these two.
* Add logic to req_t to ignore replies on pipes that are not the one
  where the request was sent.
* Enable test in test_spec_req.
2013-07-14 07:55:47 +02:00
Christophe Juniet
7b7f7e4ebd Fix compilation warnings on unsigned comparisons.
Fix two unsigned comparisons to zero or more being always true. Clang
won't compile this with -Werror.
2013-07-03 22:30:48 +02:00
Ian Barber
5a30022045 Merge pull request #603 from ricnewton/master
Add monitor event for when monitoring is stopped so we can unblock any sockets waiting on monitor socket.
2013-07-01 04:08:25 -07:00
Richard Newton
01dd6eb110 Fix cmake build
Fix build on windows, uint isn't a standard type, unsigned int is.
2013-07-01 11:52:39 +01:00
Richard Newton
d4d23caf32 Add new socket monitor event for when socket monitoring is stopped. 2013-07-01 11:00:46 +01:00
Pieter Hintjens
1cfee8d1e7 Merge pull request #601 from leewoosung/hotfixes/patched
[LIBZMQ-541] pub socket sending fail issue
2013-07-01 02:14:07 -07:00
Martin Hurton
783bb890a9 Check socket types during mechanism handshake 2013-07-01 10:12:08 +02:00
ganesh.vr
4671108e57 LIBZMQ-541 issue fix 2013-07-01 15:57:06 +09:00
Pieter Hintjens
58b1082467 Merge pull request #600 from hurtonm/master
Set socket buffers before establishing TCP connection
2013-06-29 23:56:04 -07:00
Martin Hurton
afe9afa2a5 Set socket buffers before establishing TCP connection
The window scale option carried in SYN segment is computed from socket's
receive buffer size. So we need to set this buffer size before calling
connect or bind.
2013-06-30 07:30:51 +02:00
Ian Barber
11947b1ccb Merge pull request #597 from hintjens/master
Problem: working with binary keys is painful
2013-06-29 09:36:50 -07:00
Martin Hurton
aef2171e83 Make last_endpoint attribute of socket object 2013-06-29 17:26:13 +02:00
Martin Hurton
c9bdb893f8 Use generic session class whenever possible 2013-06-29 12:24:36 +02:00
Martin Hurton
fd7e9b8c46 Use generic session class whenever possible 2013-06-29 11:27:03 +02:00
Pieter Hintjens
7041770108 Added Z85 support
The use of binary for CURVE keys is painful; you cannot easily copy
these in e.g. email, or use them directly in source code. There are
various encoding possibilities. Base16 and Base64 are not optimal.
Ascii85 is not safe for source (it generates quotes and escapes).

So, I've designed a new Base85 encoding, Z85, which is safe to use
in code and elsewhere, and I've modified libzmq to use this where
it also uses binary keys (in get/setsockopt).

Very simply, if you use a 32-byte value, it's Base256 (binary),
and if you use a 40-byte value, it's Base85 (Z85).

I've put the Z85 codec into z85_codec.hpp, it's not elegant C++
but it is minimal and it works. Feel free to rewrap as a real class
if this annoys you.
2013-06-28 22:10:22 +02:00
Pieter Hintjens
76df045950 Return EINVAL when trying to use CURVE without libsodium 2013-06-28 12:04:01 +02:00
Martin Hurton
357a9c45fb Simplify ZMQ_STREAM socket implementation, part II 2013-06-28 11:44:34 +02:00
Pieter Hintjens
7832addd20 Updated security mechanisms to use variable-length commands
RFC23, RFC24, RFC26 now use variable-length command names that
end in null octet (valid C strings) instead of fixed-length
space padded strings.
2013-06-28 11:42:54 +02:00
Pieter Hintjens
c4ae74f816 Fixed zmq_errno function definition 2013-06-28 10:16:56 +02:00
Martin Hurton
a1bb5e83ff Simplify ZMQ_STREAM socket implementation 2013-06-28 09:48:54 +02:00
Pieter Hintjens
ad77937956 Added ZMQ_STREAM socket type
- designed for TCP clients and servers
- added HTTP client / server example in tests/test_stream.cpp
- same as ZMQ_ROUTER + ZMQ_ROUTER_RAW + ZMQ_ROUTER_MANDATORY
- includes b893ce set ZMQ_IDENTITY on outgoing connect
- deprecates ZMQ_ROUTER_RAW
2013-06-27 20:53:15 +02:00
Gavin
b893ce2503 Store identity for raw socket
Identity stored during connect procedure. Can be read using
zmq_getsockopt and used as the identity frame when sending messages.
This allows the implementation of a raw socket client.
2013-06-23 18:16:33 +01:00
Martin Hurton
b12be41736 Rename parse_properties to parse_metadata 2013-06-23 09:01:52 +02:00
Martin Hurton
99d4974580 Refactor how properties are parsed 2013-06-22 19:02:08 +02:00
Martin Hurton
084e8792de Small cleanup in pipe.cpp 2013-06-22 16:15:35 +02:00
Ian Barber
2bf51247fe Merge pull request #587 from hurtonm/master
Make ZAP optional for CURVE mechanism
2013-06-22 07:14:28 -07:00
Martin Hurton
fa0f0e21b8 Make ZAP optional for PLAIN mechanism 2013-06-22 16:05:46 +02:00
Pieter Hintjens
8bb79b5eb1 Merge pull request #586 from hurtonm/master
Make ZAP optional for CURVE mechanism
2013-06-22 06:42:26 -07:00
Martin Hurton
5975e00fd1 Make ZAP optional for CURVE mechanism 2013-06-22 15:36:21 +02:00
Pieter Hintjens
1ea06883c0 Fixed spelling in comments 2013-06-22 13:39:24 +02:00
Pieter Hintjens
f4848ddb32 Prints message and exits if app tries to use CURVE without libsodium 2013-06-22 13:39:24 +02:00
Ian Barber
694543e3a2 Merge branch 'master' of git://github.com/zeromq/libzmq 2013-06-22 10:59:16 +01:00
Ian Barber
f4c51db842 Fix small streamengine issue w/ term and handshake
Also tidy up monitor test a little.
2013-06-22 10:58:16 +01:00
Martin Hurton
8af208fab7 Implement ZMTP/3.0 CURVE mechanism 2013-06-22 11:48:44 +02:00
Martin Hurton
e4a211870c Implement CurveZMQ message encryption and authentication 2013-06-22 11:46:40 +02:00
Martin Hurton
c9638fceb4 Merge pull request #581 from hintjens/master
Problem: code isn't setting mechanism to CURVE properly
2013-06-22 02:12:39 -07:00
Pieter Hintjens
8c0ded5076 Properly set mechanism to CURVE when setting a curve option 2013-06-22 11:05:01 +02:00
Martin Hurton
20a7978d67 Stop ZMTP handshake when an unexpected message comes 2013-06-22 08:12:11 +02:00
Ian Barber
cabf4e658f Comments to clarify the socket name function 2013-06-21 16:56:45 +01:00
Ian Barber
1fe7820629 Merge pull request #577 from hintjens/master
API for CURVE configuration
2013-06-20 11:09:20 -07:00
Gonzalo Diethelm
3b355fec9a Introduced private constants for the context sanity tag values.
Ignored more MSVC intermmediate files.
2013-06-20 12:43:32 -04:00
Pieter Hintjens
d9bb16725e Added options for CURVE security
- ZMQ_CURVE_PUBLICKEY for clients and servers
- ZMQ_CURVE_SECRETKEY for clients
- ZMQ_CURVE_SERVERKEY for clients
- ZMQ_CURVE_SERVER for servers
- added tools/curve_keygen.c as example
- updated man pages
2013-06-20 18:09:12 +02:00
Martin Hurton
37b99c0b4b Implement ZMTP/3.0 CURVE handshake 2013-06-20 13:36:12 +02:00
xinchuan
38327927ce fix memory leak in tempnam() usage 2013-06-15 16:11:50 +08:00
shripchenko
627190c8be another iteration on ZMQ_PROBE_ROUTER
now it properly works for ROUTER
2013-06-10 02:31:00 -07:00
Pieter Hintjens
6ff51ee909 Updated ZAP request for changed protocol draft
- username and password sent as two string frames
- fixed test case to match
2013-06-07 15:50:36 +02:00
Martin Hurton
2928c91a6d Implement ZAP and integrate it with PLAIN mechanism 2013-06-06 13:28:21 +02:00
Martin Hurton
4e47084dd4 Minor cleanups 2013-06-06 13:28:21 +02:00
Martin Hurton
c3e40736de Rename terminated->pipe_terminated 2013-06-06 13:28:21 +02:00
Pieter Hintjens
a9679da764 Packaging on ZMQ_PROBE_ROUTER
- renamed to ZMQ_PROBE_ROUTER
2013-06-05 15:55:15 +02:00
shripchenko
97324398a7 refactored ZMQ_ROUTER_ANNOUNCE_SELF code. renamed it to ZMQ_PROBE_NEW_PEERS.
implement it for DEALER tocket.
+documentation
2013-06-05 15:29:40 +02:00
Josh Gao
43d049741f Fix mistaken use of xor in "2^31 - 1". 2013-05-31 15:54:01 -07:00
Ian Barber
9a0b2c8970 Pieter's change to fix memory leak on mechanism 2013-05-29 21:58:20 +01:00
Pieter Hintjens
240eff384a Merge pull request #563 from shripchenko/master
Refactoring of 'ZMQ_ROUTER_ANNOUNCE_SELF'
2013-05-29 09:03:54 -07:00
Martin Hurton
4e4803e07f Rename pipe states to make it more mnemonic 2013-05-28 13:45:20 +02:00
shripchenko
f805e4dd03 changed option name. +documentation changes 2013-05-24 07:09:53 -07:00
shripchenko
aec989fb5d small refactoring 2013-05-23 02:02:18 -07:00
shripchenko
51750a7d2a refactored ZMQ_ROUTER_ANNOUNCE_SELF code. renamed it to ZMQ_PROBE_NEW_PEERS.
implement it for DEALER tocket.
+documentation
2013-05-23 01:49:40 -07:00
Martin Hurton
f781eb7e7b Merge pull request #562 from hintjens/master
Removed tracing on router option setting
2013-05-22 07:05:20 -07:00
Pieter Hintjens
fbd1729cbd Removed tracing for Travis builds 2013-05-22 00:17:03 +02:00
shripchenko
ed3a115da9 Add ROUTER socket option to introduce self(send an empty message) to new peers, to allow ROUTER<->ROUTER auto-discovery problem. 2013-05-21 10:25:21 -07:00
Pieter Hintjens
4112693051 Cleaned up router option code
- made consistent with options.cpp code
- added trace print for ongoing issue with Travis CI builds
2013-05-21 15:15:16 +02:00
Pieter Hintjens
31ee92f2fd stdint.h is not available on all platforms 2013-05-19 10:01:33 +01:00
Pieter Hintjens
73562112b8 Whitespace fixes 2013-05-18 11:53:20 +01:00
Pieter Hintjens
f909b9c722 plain_mechanism now uses options.as_server
- we need to switch to PLAIN according to options.mechanism
- we need to catch case when both peers are as-server (or neither is)
- and to use username/password from options, for client
2013-05-17 17:21:59 +01:00
Martin Hurton
182a224bb0 Use socket options to select security mechanism 2013-05-17 15:49:59 +02:00
Pieter Hintjens
e1f797b048 Added configuration for PLAIN security
* ZMQ_PLAIN_SERVER, ZMQ_PLAIN_USERNAME, ZMQ_PLAIN_PASSWORD options
* Man page changes to zmq_setsockopt and zmq_getsockopt
* Man pages for ZMQ_NULL, ZMQ_PLAIN, and ZMQ_CURVE
* Test program test_security
2013-05-15 17:55:21 +02:00
Martin Hurton
4eecda8af3 Implement ZMTP/3.0 PLAIN mechanism
This implements protocol handshake.
We still need to design and implement 1) API changes so a user
can set username and password, and 2) a mechanism for engine
to authenticate users.
2013-05-14 11:20:13 +02:00
Martin Hurton
d47295db70 Abstract security mechanism 2013-05-14 10:52:52 +02:00
Martin Hurton
cd4d8bb15a Implement ZMTP/3.0 NULL mechanism 2013-04-28 14:13:40 +02:00
Jon Dyte
56ead84490 Experimental function zmq_recviov doesnt work correctly in a couple of cases
1) VSM - you cannot hand out the 'data' address as it was not allocated on the heap
2) for other messages the 'data' address cannot be handed out either, as it not the address
originally returned by malloc and hence cannot be passed to 'free'.
see msg.cpp
u.lmsg.content = (content_t*) malloc (sizeof (content_t) + size_);
....
u.lmsg.content->data = u.lmsg.content + 1;

So the function is changed to always malloc a data buffer and copy the data into it.
There is a possible optimisation using memmove for the non-VSM case but that is not done yet.
2013-04-25 21:58:26 +01:00
Lourens Naudé
b5e5e10126 Fix return code redeclaration for platforms with SO_NOSIGPIPE 2013-04-23 23:01:14 +01:00
Pieter Hintjens
710f38f1cc Fixed syntax error 2013-04-22 15:12:53 +02:00
Pieter Hintjens
f4dbccd4fb Fix for LIBZMQ-526 2013-04-22 14:51:09 +02:00
Pieter Hintjens
f0cf4095b5 Fixed issue #525 - multipart upstreaming from xsub to xpub 2013-04-18 17:23:57 +02:00
Martin Hurton
e52c436252 Interoperate with higher versions of ZMTP protocol 2013-04-14 22:59:50 +02:00
Steven McCoy
d079190efa [#LIBZMQ-446] Silence error on setting PGM_TOS due to some platforms raising an error at runtime. Noted are RHEL 4. 2013-04-12 23:55:04 -04:00
Martin Hurton
9d79ac2830 Use state functions for message flow
The patch makes the code somewhat simpler and prepares it for
more complex initialization handshakes.
2013-04-12 15:49:08 +02:00
Martin Hurton
7942db7606 Refactor code so that messages go through engines 2013-04-11 18:52:51 +02:00
Ken Steele
3286bf5ab6 On the Tile architecture, use atomic instructions for atomic ptr and counter.
For atomic_counter and atomic_ptr classes, detect the Tile architecture
using #if defined __tile__ matching ARM and Solaris and then use the
Tile atomic instructions. Without this change, the default Mutex
implementation is used, which is slower.
2013-03-20 12:54:38 -04:00
Mika Fischer
03c28411d8 Work around for LIBZMQ-496
The problem is that other threads might still be in mailbox::send() when
it is destroyed. So as a workaround, we just acquire the mutex in the
destructor. Therefore the running send will finish before the mailbox is
destroyed.

See also the fix for LIBZMQ-281 in zeromq2-x.

Signed-off-by: Mika Fischer <mika.fischer@zoopnet.de>
2013-03-18 10:20:08 +01:00
Martin Hurton
81818401e8 Update PGM with recent changes 2013-03-18 02:14:20 +01:00
Pieter Hintjens
0e77d65f12 Removed pointless comment 2013-03-12 16:15:54 +01:00
Pieter Hintjens
8358d4e832 Renamed ZMQ_DELAY_ATTACH_ON_CONNECT_COULD_THIS_BE_ANY_LONGER to ZMQ_IMMEDIATE 2013-03-12 16:11:19 +01:00
Pieter Hintjens
12c7db8c42 Code name clean up 2013-03-12 15:56:10 +01:00
Pieter Hintjens
d826c53b9b Bumped ZMTP revision to 2
* Starting draft ZMTP/2.1 protocol (revision 2)
* Basis for adding security to the wire protocol
* Maintains backward compatibility
2013-03-12 15:49:23 +01:00
Pieter Hintjens
785ef41f67 Refactored codecs to match ZMTP version numbers 2013-03-12 15:29:37 +01:00