ext/zeromq/include/zmq.h in rbczmq-1.7.1 vs ext/zeromq/include/zmq.h in rbczmq-1.7.2

- old
+ new

@@ -1,10 +1,7 @@ /* - Copyright (c) 2007-2012 iMatix Corporation - Copyright (c) 2009-2011 250bpm s.r.o. - Copyright (c) 2011 VMware, Inc. - Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file + Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file This file is part of 0MQ. 0MQ is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -16,31 +13,41 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + + ************************************************************************* + NOTE to contributors. This file comprises the principal public contract + for ZeroMQ API users (along with zmq_utils.h). Any change to this file + supplied in a stable release SHOULD not break existing applications. + In practice this means that the value of constants must not change, and + that old values may not be reused for new constants. + ************************************************************************* */ #ifndef __ZMQ_H_INCLUDED__ #define __ZMQ_H_INCLUDED__ #ifdef __cplusplus extern "C" { #endif -#if !defined WINCE +#if !defined _WIN32_WCE #include <errno.h> #endif #include <stddef.h> #include <stdio.h> #if defined _WIN32 #include <winsock2.h> #endif /* Handle DSO symbol visibility */ #if defined _WIN32 -# if defined DLL_EXPORT +# if defined ZMQ_STATIC +# define ZMQ_EXPORT +# elif defined DLL_EXPORT # define ZMQ_EXPORT __declspec(dllexport) # else # define ZMQ_EXPORT __declspec(dllimport) # endif #else @@ -51,18 +58,36 @@ # else # define ZMQ_EXPORT # endif #endif +/* Define integer types needed for event interface */ +#if defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_OPENVMS +# include <inttypes.h> +#elif defined _MSC_VER && _MSC_VER < 1600 +# ifndef int32_t +typedef __int32 int32_t; +# endif +# ifndef uint16_t +typedef unsigned __int16 uint16_t; +# endif +# ifndef uint8_t +typedef unsigned __int8 uint8_t; +# endif +#else +# include <stdint.h> +#endif + + /******************************************************************************/ /* 0MQ versioning support. */ /******************************************************************************/ /* Version macros for compile-time API version detection */ -#define ZMQ_VERSION_MAJOR 3 -#define ZMQ_VERSION_MINOR 2 -#define ZMQ_VERSION_PATCH 3 +#define ZMQ_VERSION_MAJOR 4 +#define ZMQ_VERSION_MINOR 1 +#define ZMQ_VERSION_PATCH 0 #define ZMQ_MAKE_VERSION(major, minor, patch) \ ((major) * 10000 + (minor) * 100 + (patch)) #define ZMQ_VERSION \ ZMQ_MAKE_VERSION(ZMQ_VERSION_MAJOR, ZMQ_VERSION_MINOR, ZMQ_VERSION_PATCH) @@ -152,26 +177,33 @@ /******************************************************************************/ /* 0MQ infrastructure (a.k.a. context) initialisation & termination. */ /******************************************************************************/ /* New API */ -/* Context options */ -#define ZMQ_IO_THREADS 1 -#define ZMQ_MAX_SOCKETS 2 -/* Default for new contexts */ -#define ZMQ_IO_THREADS_DFLT 1 -#define ZMQ_MAX_SOCKETS_DFLT 1024 +enum zmq_ctx_opts_t { + /* Context options */ + ZMQ_IO_THREADS = 1, + ZMQ_MAX_SOCKETS = 2 +}; +enum zmq_ctx_defaults_t { + /* Default for new contexts */ + ZMQ_IO_THREADS_DFLT = 1, + ZMQ_MAX_SOCKETS_DFLT = 1024 +}; + ZMQ_EXPORT void *zmq_ctx_new (void); -ZMQ_EXPORT int zmq_ctx_destroy (void *context); +ZMQ_EXPORT int zmq_ctx_term (void *context); +ZMQ_EXPORT int zmq_ctx_shutdown (void *ctx_); ZMQ_EXPORT int zmq_ctx_set (void *context, int option, int optval); ZMQ_EXPORT int zmq_ctx_get (void *context, int option); /* Old (legacy) API */ ZMQ_EXPORT void *zmq_init (int io_threads); ZMQ_EXPORT int zmq_term (void *context); +ZMQ_EXPORT int zmq_ctx_destroy (void *context); /******************************************************************************/ /* 0MQ message definition. */ /******************************************************************************/ @@ -198,157 +230,141 @@ /******************************************************************************/ /* 0MQ socket definition. */ /******************************************************************************/ -/* Socket types. */ -#define ZMQ_PAIR 0 -#define ZMQ_PUB 1 -#define ZMQ_SUB 2 -#define ZMQ_REQ 3 -#define ZMQ_REP 4 -#define ZMQ_DEALER 5 -#define ZMQ_ROUTER 6 -#define ZMQ_PULL 7 -#define ZMQ_PUSH 8 -#define ZMQ_XPUB 9 -#define ZMQ_XSUB 10 +/* Socket types. */ +enum zmq_socket_types_t { + ZMQ_PAIR = 0, + ZMQ_PUB = 1, + ZMQ_SUB = 2, + ZMQ_REQ = 3, + ZMQ_REP = 4, + ZMQ_DEALER = 5, + ZMQ_ROUTER = 6, + ZMQ_PULL = 7, + ZMQ_PUSH = 8, + ZMQ_XPUB = 9, + ZMQ_XSUB = 10, + ZMQ_STREAM = 11 +}; -/* Deprecated aliases */ -#define ZMQ_XREQ ZMQ_DEALER -#define ZMQ_XREP ZMQ_ROUTER - /* Socket options. */ -#define ZMQ_AFFINITY 4 -#define ZMQ_IDENTITY 5 -#define ZMQ_SUBSCRIBE 6 -#define ZMQ_UNSUBSCRIBE 7 -#define ZMQ_RATE 8 -#define ZMQ_RECOVERY_IVL 9 -#define ZMQ_SNDBUF 11 -#define ZMQ_RCVBUF 12 -#define ZMQ_RCVMORE 13 -#define ZMQ_FD 14 -#define ZMQ_EVENTS 15 -#define ZMQ_TYPE 16 -#define ZMQ_LINGER 17 -#define ZMQ_RECONNECT_IVL 18 -#define ZMQ_BACKLOG 19 -#define ZMQ_RECONNECT_IVL_MAX 21 -#define ZMQ_MAXMSGSIZE 22 -#define ZMQ_SNDHWM 23 -#define ZMQ_RCVHWM 24 -#define ZMQ_MULTICAST_HOPS 25 -#define ZMQ_RCVTIMEO 27 -#define ZMQ_SNDTIMEO 28 -#define ZMQ_IPV4ONLY 31 -#define ZMQ_LAST_ENDPOINT 32 -#define ZMQ_ROUTER_MANDATORY 33 -#define ZMQ_TCP_KEEPALIVE 34 -#define ZMQ_TCP_KEEPALIVE_CNT 35 -#define ZMQ_TCP_KEEPALIVE_IDLE 36 -#define ZMQ_TCP_KEEPALIVE_INTVL 37 -#define ZMQ_TCP_ACCEPT_FILTER 38 -#define ZMQ_DELAY_ATTACH_ON_CONNECT 39 -#define ZMQ_XPUB_VERBOSE 40 +enum zmq_socket_opts_t { + ZMQ_AFFINITY = 4, + ZMQ_IDENTITY = 5, + ZMQ_SUBSCRIBE = 6, + ZMQ_UNSUBSCRIBE = 7, + ZMQ_RATE = 8, + ZMQ_RECOVERY_IVL = 9, + ZMQ_SNDBUF = 11, + ZMQ_RCVBUF = 12, + ZMQ_RCVMORE = 13, + ZMQ_FD = 14, + ZMQ_EVENTS = 15, + ZMQ_TYPE = 16, + ZMQ_LINGER = 17, + ZMQ_RECONNECT_IVL = 18, + ZMQ_BACKLOG = 19, + ZMQ_RECONNECT_IVL_MAX = 21, + ZMQ_MAXMSGSIZE = 22, + ZMQ_SNDHWM = 23, + ZMQ_RCVHWM = 24, + ZMQ_MULTICAST_HOPS = 25, + ZMQ_RCVTIMEO = 27, + ZMQ_SNDTIMEO = 28, + ZMQ_LAST_ENDPOINT = 32, + ZMQ_ROUTER_MANDATORY = 33, + ZMQ_TCP_KEEPALIVE = 34, + ZMQ_TCP_KEEPALIVE_CNT = 35, + ZMQ_TCP_KEEPALIVE_IDLE = 36, + ZMQ_TCP_KEEPALIVE_INTVL = 37, + ZMQ_TCP_ACCEPT_FILTER = 38, + ZMQ_IMMEDIATE = 39, + ZMQ_XPUB_VERBOSE = 40, + ZMQ_ROUTER_RAW = 41, + ZMQ_IPV6 = 42, + ZMQ_MECHANISM = 43, + ZMQ_PLAIN_SERVER = 44, + ZMQ_PLAIN_USERNAME = 45, + ZMQ_PLAIN_PASSWORD = 46, + ZMQ_CURVE_SERVER = 47, + ZMQ_CURVE_PUBLICKEY = 48, + ZMQ_CURVE_SECRETKEY = 49, + ZMQ_CURVE_SERVERKEY = 50, + ZMQ_PROBE_ROUTER = 51, + ZMQ_REQ_CORRELATE = 52, + ZMQ_REQ_RELAXED = 53, + ZMQ_CONFLATE = 54, + ZMQ_ZAP_DOMAIN = 55 +}; - /* Message options */ -#define ZMQ_MORE 1 +enum zmq_msg_opts_t { + ZMQ_MORE = 1 +}; /* Send/recv options. */ -#define ZMQ_DONTWAIT 1 -#define ZMQ_SNDMORE 2 +enum zmq_send_recv_opts_t { + ZMQ_DONTWAIT = 1, + ZMQ_SNDMORE = 2 +}; -/* Deprecated aliases */ -#define ZMQ_NOBLOCK ZMQ_DONTWAIT -#define ZMQ_FAIL_UNROUTABLE ZMQ_ROUTER_MANDATORY -#define ZMQ_ROUTER_BEHAVIOR ZMQ_ROUTER_MANDATORY +/* Security mechanisms */ +enum zmq_security_types_t { + ZMQ_NULL = 0, + ZMQ_PLAIN = 1, + ZMQ_CURVE = 2 +}; /******************************************************************************/ /* 0MQ socket events and monitoring */ /******************************************************************************/ /* Socket transport events (tcp and ipc only) */ -#define ZMQ_EVENT_CONNECTED 1 -#define ZMQ_EVENT_CONNECT_DELAYED 2 -#define ZMQ_EVENT_CONNECT_RETRIED 4 +enum zmq_transport_events_t { + ZMQ_EVENT_CONNECTED = 1, + ZMQ_EVENT_CONNECT_DELAYED = 2, + ZMQ_EVENT_CONNECT_RETRIED = 4, -#define ZMQ_EVENT_LISTENING 8 -#define ZMQ_EVENT_BIND_FAILED 16 + ZMQ_EVENT_LISTENING = 8, + ZMQ_EVENT_BIND_FAILED = 16, -#define ZMQ_EVENT_ACCEPTED 32 -#define ZMQ_EVENT_ACCEPT_FAILED 64 + ZMQ_EVENT_ACCEPTED = 32, + ZMQ_EVENT_ACCEPT_FAILED = 64, -#define ZMQ_EVENT_CLOSED 128 -#define ZMQ_EVENT_CLOSE_FAILED 256 -#define ZMQ_EVENT_DISCONNECTED 512 + ZMQ_EVENT_CLOSED = 128, + ZMQ_EVENT_CLOSE_FAILED = 256, + ZMQ_EVENT_DISCONNECTED = 512, + ZMQ_EVENT_MONITOR_STOPPED = 1024 +}; #define ZMQ_EVENT_ALL ( ZMQ_EVENT_CONNECTED | ZMQ_EVENT_CONNECT_DELAYED | \ ZMQ_EVENT_CONNECT_RETRIED | ZMQ_EVENT_LISTENING | \ ZMQ_EVENT_BIND_FAILED | ZMQ_EVENT_ACCEPTED | \ ZMQ_EVENT_ACCEPT_FAILED | ZMQ_EVENT_CLOSED | \ - ZMQ_EVENT_CLOSE_FAILED | ZMQ_EVENT_DISCONNECTED ) + ZMQ_EVENT_CLOSE_FAILED | ZMQ_EVENT_DISCONNECTED | \ + ZMQ_EVENT_MONITOR_STOPPED) -/* Socket event data (union member per event) */ +/* Socket event data */ typedef struct { - int event; - union { - struct { - char *addr; - int fd; - } connected; - struct { - char *addr; - int err; - } connect_delayed; - struct { - char *addr; - int interval; - } connect_retried; - struct { - char *addr; - int fd; - } listening; - struct { - char *addr; - int err; - } bind_failed; - struct { - char *addr; - int fd; - } accepted; - struct { - char *addr; - int err; - } accept_failed; - struct { - char *addr; - int fd; - } closed; - struct { - char *addr; - int err; - } close_failed; - struct { - char *addr; - int fd; - } disconnected; - } data; + uint16_t event; // id of the event as bitfield + int32_t value ; // value is either error code, fd or reconnect interval } zmq_event_t; ZMQ_EXPORT void *zmq_socket (void *, int type); ZMQ_EXPORT int zmq_close (void *s); ZMQ_EXPORT int zmq_setsockopt (void *s, int option, const void *optval, - size_t optvallen); + size_t optvallen); ZMQ_EXPORT int zmq_getsockopt (void *s, int option, void *optval, size_t *optvallen); ZMQ_EXPORT int zmq_bind (void *s, const char *addr); ZMQ_EXPORT int zmq_connect (void *s, const char *addr); ZMQ_EXPORT int zmq_unbind (void *s, const char *addr); ZMQ_EXPORT int zmq_disconnect (void *s, const char *addr); ZMQ_EXPORT int zmq_send (void *s, const void *buf, size_t len, int flags); +ZMQ_EXPORT int zmq_send_const (void *s, const void *buf, size_t len, int flags); ZMQ_EXPORT int zmq_recv (void *s, void *buf, size_t len, int flags); ZMQ_EXPORT int zmq_socket_monitor (void *s, const char *addr, int events); ZMQ_EXPORT int zmq_sendmsg (void *s, zmq_msg_t *msg, int flags); ZMQ_EXPORT int zmq_recvmsg (void *s, zmq_msg_t *msg, int flags); @@ -361,14 +377,20 @@ /******************************************************************************/ /* I/O multiplexing. */ /******************************************************************************/ -#define ZMQ_POLLIN 1 -#define ZMQ_POLLOUT 2 -#define ZMQ_POLLERR 4 +enum zmq_poll_types_t { + ZMQ_POLLIN = 1, + ZMQ_POLLOUT = 2, + ZMQ_POLLERR = 4 +}; +enum zmq_poll_defaults_t { + ZMQ_POLLITEMS_DFLT = 16 +}; + typedef struct { void *socket; #if defined _WIN32 SOCKET fd; @@ -383,15 +405,36 @@ /* Built-in message proxy (3-way) */ ZMQ_EXPORT int zmq_proxy (void *frontend, void *backend, void *capture); -/* Deprecated aliases */ -#define ZMQ_STREAMER 1 -#define ZMQ_FORWARDER 2 -#define ZMQ_QUEUE 3 +/* Encode a binary key as printable text using ZMQ RFC 32 */ +ZMQ_EXPORT char *zmq_z85_encode (char *dest, uint8_t *data, size_t size); + +/* Encode a binary key from printable text per ZMQ RFC 32 */ +ZMQ_EXPORT uint8_t *zmq_z85_decode (uint8_t *dest, char *string); + /* Deprecated method */ ZMQ_EXPORT int zmq_device (int type, void *frontend, void *backend); + +/* Deprecated options and aliases */ +enum zmq_deprecated_t { + /* Misc */ + ZMQ_IPV4ONLY = 31, + ZMQ_DELAY_ATTACH_ON_CONNECT = ZMQ_IMMEDIATE, + ZMQ_NOBLOCK = ZMQ_DONTWAIT, + ZMQ_FAIL_UNROUTABLE = ZMQ_ROUTER_MANDATORY, + ZMQ_ROUTER_BEHAVIOR = ZMQ_ROUTER_MANDATORY, + + /* Socket aliases */ + ZMQ_XREQ=ZMQ_DEALER, + ZMQ_XREP=ZMQ_ROUTER, + + /* I/O aliasses */ + ZMQ_STREAMER = 1, + ZMQ_FORWARDER = 2, + ZMQ_QUEUE = 3 +}; #undef ZMQ_EXPORT #ifdef __cplusplus }