From 46f8864e4879b257e20c7686f6e8e008cd749939 Mon Sep 17 00:00:00 2001 From: Martin Lucina Date: Tue, 13 Mar 2012 11:17:59 +0100 Subject: Drop libxszmq, keep only libzmq compatibility library (--enable-libzmq) This simplifies the options for new users; either use libxs APIs or build with --enable-libzmq and get libzmq 2.1 emulation. Signed-off-by: Martin Lucina --- .gitignore | 3 - configure.ac | 30 +++--- include/xszmq.h | 283 -------------------------------------------------- include/xszmq_utils.h | 65 ------------ include/zmq.h | 283 ++++++++++++++++++++++++++++++++++++++++++++++++++ include/zmq_utils.h | 65 ++++++++++++ src/Makefile.am | 39 ++----- src/libxszmq.pc.in | 10 -- src/xszmq.cpp | 4 +- 9 files changed, 376 insertions(+), 406 deletions(-) delete mode 100644 include/xszmq.h delete mode 100644 include/xszmq_utils.h create mode 100644 include/zmq.h create mode 100644 include/zmq_utils.h delete mode 100644 src/libxszmq.pc.in diff --git a/.gitignore b/.gitignore index 0933b44..048a74d 100644 --- a/.gitignore +++ b/.gitignore @@ -20,8 +20,6 @@ autom4te.cache .* *~ .*~ -include/zmq.h -include/zmq_utils.h tests/pair_inproc tests/pair_ipc tests/pair_tcp @@ -55,7 +53,6 @@ doc/*.7 doc/*.html doc/*.xml src/libxs.pc -src/libxszmq.pc src/libzmq.pc bin/ lib/ diff --git a/configure.ac b/configure.ac index 04e2dfd..2ba0f26 100644 --- a/configure.ac +++ b/configure.ac @@ -28,14 +28,14 @@ AC_SUBST(PACKAGE_VERSION) LIBXS_ABI_VERSION="1:0:0" AC_SUBST(LIBXS_ABI_VERSION) -# ABI version for libxszmq +# ABI version for XS libzmq compatibility library # # This must be set to the ABI version of libzmq we are emulating. # This is currently libzmq 2.1 which is ABI 1.0.0. # -# libxszmq -version-info current:revision:age -LIBXSZMQ_ABI_VERSION="1:0:0" -AC_SUBST(LIBXSZMQ_ABI_VERSION) +# libzmq -version-info current:revision:age +LIBZMQ_ABI_VERSION="1:0:0" +AC_SUBST(LIBZMQ_ABI_VERSION) # Take a copy of original flags XS_ORIG_CFLAGS="${CFLAGS:-none}" @@ -279,14 +279,14 @@ AC_TYPE_UINT32_T AC_C_VOLATILE # libzmq compatibility mode -libxs_libzmq_compat="no" -AC_ARG_ENABLE([libzmq-compat], [AS_HELP_STRING([--enable-libzmq-compat], +libxs_libzmq="no" +AC_ARG_ENABLE([libzmq], [AS_HELP_STRING([--enable-libzmq], [install libzmq compatibility library and headers [default=no]])], - [enable_libzmq_compat=$enableval], [enable_libzmq_compat=no]) + [enable_libzmq=$enableval], [enable_libzmq=no]) -if test "x$enable_libzmq_compat" != "xno"; then +if test "x$enable_libzmq" != "xno"; then AC_MSG_NOTICE([enabling libzmq compatibility library and headers]) - libxs_libzmq_compat="yes" + libxs_libzmq="yes" fi # PGM extension @@ -381,7 +381,7 @@ if test "x$libxs_pedantic" = "xyes"; then fi AC_LANG_POP([C++]) -AM_CONDITIONAL(BUILD_LIBZMQ, test "x$libxs_libzmq_compat" = "xyes") +AM_CONDITIONAL(BUILD_LIBZMQ, test "x$libxs_libzmq" = "xyes") AM_CONDITIONAL(BUILD_PGM, test "x$libxs_pgm_ext" = "xyes") AM_CONDITIONAL(ON_MINGW, test "x$libxs_on_mingw32" = "xyes") @@ -401,10 +401,10 @@ AC_SUBST(LIBXS_EXTRA_CXXFLAGS) AC_SUBST(LIBXS_EXTRA_LDFLAGS) AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile - perf/Makefile src/libxs.pc src/libxszmq.pc \ + perf/Makefile src/libxs.pc \ builds/msvc/Makefile tests/Makefile \ foreign/openpgm/Makefile]) -if test "x$libxs_libzmq_compat" == "xyes"; then +if test "x$libxs_libzmq" == "xyes"; then AC_CONFIG_FILES([src/libzmq.pc]) fi AC_OUTPUT @@ -422,7 +422,7 @@ Configuration for $PACKAGE_STRING GCC code coverage reporting: ${XS_GCOV-no} Polling system: $libxs_cv_poller Disable eventfd: $xs_disable_eventfd - Build libzmq compatibility library and headers: $libxs_libzmq_compat + Build libzmq compatibility library and headers: $libxs_libzmq PGM extension: $with_pgm_ext Use system-provided PGM library: $with_system_pgm_ext Build documentation: $libxs_build_doc @@ -439,8 +439,8 @@ Installation: EOF -if test "x$libxs_libzmq_compat" == "xyes"; then - AC_MSG_WARN([The --enable-libzmq-compat option was specified:]) +if test "x$libxs_libzmq" == "xyes"; then + AC_MSG_WARN([The --enable-libzmq option was specified:]) AC_MSG_WARN([libzmq compatibility library and headers are enabled.]) AC_MSG_WARN([This will overwrite any existing installation of libzmq.]) fi diff --git a/include/xszmq.h b/include/xszmq.h deleted file mode 100644 index 4463d9d..0000000 --- a/include/xszmq.h +++ /dev/null @@ -1,283 +0,0 @@ -/* - Copyright (c) 2012 Martin Lucina - Copyright (c) 2007-2011 iMatix Corporation - Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file - - This file is part of Crossroads I/O. - - Crossroads I/O is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - Crossroads I/O is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - 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 . -*/ - -#ifndef __XSZMQ_H_INCLUDED__ -#define __XSZMQ_H_INCLUDED__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#if defined _WIN32 -#include -#endif - -/* Handle DSO symbol visibility */ -#if defined _WIN32 -# if defined DLL_EXPORT -# define XSZMQ_EXPORT __declspec(dllexport) -# else -# define XSZMQ_EXPORT __declspec(dllimport) -# endif -#else -# if defined __SUNPRO_C || defined __SUNPRO_CC -# define XSZMQ_EXPORT __global -# elif (defined __GNUC__ && __GNUC__ >= 4) || defined __INTEL_COMPILER -# define XSZMQ_EXPORT __attribute__ ((visibility("default"))) -# else -# define XSZMQ_EXPORT -# endif -#endif - -/******************************************************************************/ -/* 0MQ versioning support. */ -/******************************************************************************/ - -/* Version macros for compile-time API version detection */ -#define ZMQ_VERSION_MAJOR 2 -#define ZMQ_VERSION_MINOR 1 -#define ZMQ_VERSION_PATCH 11 - -#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) - -/* Run-time API version detection */ -XSZMQ_EXPORT void zmq_version (int *major, int *minor, int *patch); - -/******************************************************************************/ -/* 0MQ errors. */ -/******************************************************************************/ - -/* These constants conflict with xs.h. Disable them if we are building the */ -/* libxszmq compatibility library itself. */ -#ifndef XS_BUILDING_LIBXSZMQ - -/* A number random enough not to collide with different errno ranges on */ -/* different OSes. The assumption is that error_t is at least 32-bit type. */ -#define ZMQ_HAUSNUMERO 156384712 - -/* On Windows platform some of the standard POSIX errnos are not defined. */ -#ifndef ENOTSUP -#define ENOTSUP (ZMQ_HAUSNUMERO + 1) -#endif -#ifndef EPROTONOSUPPORT -#define EPROTONOSUPPORT (ZMQ_HAUSNUMERO + 2) -#endif -#ifndef ENOBUFS -#define ENOBUFS (ZMQ_HAUSNUMERO + 3) -#endif -#ifndef ENETDOWN -#define ENETDOWN (ZMQ_HAUSNUMERO + 4) -#endif -#ifndef EADDRINUSE -#define EADDRINUSE (ZMQ_HAUSNUMERO + 5) -#endif -#ifndef EADDRNOTAVAIL -#define EADDRNOTAVAIL (ZMQ_HAUSNUMERO + 6) -#endif -#ifndef ECONNREFUSED -#define ECONNREFUSED (ZMQ_HAUSNUMERO + 7) -#endif -#ifndef EINPROGRESS -#define EINPROGRESS (ZMQ_HAUSNUMERO + 8) -#endif -#ifndef ENOTSOCK -#define ENOTSOCK (ZMQ_HAUSNUMERO + 9) -#endif - -/* Native 0MQ error codes. */ -#ifndef EFSM -#define EFSM (ZMQ_HAUSNUMERO + 51) -#endif -#ifndef ENOCOMPATPROTO -#define ENOCOMPATPROTO (ZMQ_HAUSNUMERO + 52) -#endif -#ifndef ETERM -#define ETERM (ZMQ_HAUSNUMERO + 53) -#endif -#ifndef EMTHREAD -#define EMTHREAD (ZMQ_HAUSNUMERO + 54) -#endif - -#endif /* XS_BUILDING_LIBXSZMQ */ - -/* This function retrieves the errno as it is known to 0MQ library. The goal */ -/* of this function is to make the code 100% portable, including where 0MQ */ -/* compiled with certain CRT library (on Windows) is linked to an */ -/* application that uses different CRT library. */ -XSZMQ_EXPORT int zmq_errno (void); - -/* Resolves system errors and 0MQ errors to human-readable string. */ -XSZMQ_EXPORT const char *zmq_strerror (int errnum); - -/******************************************************************************/ -/* 0MQ message definition. */ -/******************************************************************************/ - -/* Maximal size of "Very Small Message". VSMs are passed by value */ -/* to avoid excessive memory allocation/deallocation. */ -/* If VMSs larger than 255 bytes are required, type of 'vsm_size' */ -/* field in zmq_msg_t structure should be modified accordingly. */ -#define ZMQ_MAX_VSM_SIZE 30 - -/* Message types. These integers may be stored in 'content' member of the */ -/* message instead of regular pointer to the data. */ -#define ZMQ_DELIMITER 31 -#define ZMQ_VSM 32 - -/* Message flags. ZMQ_MSG_SHARED is strictly speaking not a message flag */ -/* (it has no equivalent in the wire format), however, making it a flag */ -/* allows us to pack the stucture tigher and thus improve performance. */ -#define ZMQ_MSG_MORE 1 -#define ZMQ_MSG_SHARED 128 -#define ZMQ_MSG_MASK 129 /* Merges all the flags */ - -/* A message. Note that 'content' is not a pointer to the raw data. */ -/* Rather it is pointer to zmq::msg_content_t structure */ -/* (see src/msg_content.hpp for its definition). */ -typedef struct -{ - void *content; - unsigned char flags; - unsigned char vsm_size; - unsigned char vsm_data [ZMQ_MAX_VSM_SIZE]; -} zmq_msg_t; - -typedef void (zmq_free_fn) (void *data, void *hint); - -XSZMQ_EXPORT int zmq_msg_init (zmq_msg_t *msg); -XSZMQ_EXPORT int zmq_msg_init_size (zmq_msg_t *msg, size_t size); -XSZMQ_EXPORT int zmq_msg_init_data (zmq_msg_t *msg, void *data, - size_t size, zmq_free_fn *ffn, void *hint); -XSZMQ_EXPORT int zmq_msg_close (zmq_msg_t *msg); -XSZMQ_EXPORT int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src); -XSZMQ_EXPORT int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src); -XSZMQ_EXPORT void *zmq_msg_data (zmq_msg_t *msg); -XSZMQ_EXPORT size_t zmq_msg_size (zmq_msg_t *msg); - -/******************************************************************************/ -/* 0MQ infrastructure (a.k.a. context) initialisation & termination. */ -/******************************************************************************/ - -XSZMQ_EXPORT void *zmq_init (int io_threads); -XSZMQ_EXPORT int zmq_term (void *context); - -/******************************************************************************/ -/* 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 -#define ZMQ_XREQ ZMQ_DEALER /* Old alias, remove in 3.x */ -#define ZMQ_XREP ZMQ_ROUTER /* Old alias, remove in 3.x */ -#define ZMQ_UPSTREAM ZMQ_PULL /* Old alias, remove in 3.x */ -#define ZMQ_DOWNSTREAM ZMQ_PUSH /* Old alias, remove in 3.x */ - -/* Socket options. */ -#define ZMQ_HWM 1 -#define ZMQ_SWAP 3 -#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_MCAST_LOOP 10 -#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_RECOVERY_IVL_MSEC 20 /* opt. recovery time, reconcile in 3.x */ -#define ZMQ_RECONNECT_IVL_MAX 21 - -/* Send/recv options. */ -#define ZMQ_NOBLOCK 1 -#define ZMQ_SNDMORE 2 - -XSZMQ_EXPORT void *zmq_socket (void *context, int type); -XSZMQ_EXPORT int zmq_close (void *s); -XSZMQ_EXPORT int zmq_setsockopt (void *s, int option, const void *optval, - size_t optvallen); -XSZMQ_EXPORT int zmq_getsockopt (void *s, int option, void *optval, - size_t *optvallen); -XSZMQ_EXPORT int zmq_bind (void *s, const char *addr); -XSZMQ_EXPORT int zmq_connect (void *s, const char *addr); -XSZMQ_EXPORT int zmq_send (void *s, zmq_msg_t *msg, int flags); -XSZMQ_EXPORT int zmq_recv (void *s, zmq_msg_t *msg, int flags); - -/******************************************************************************/ -/* I/O multiplexing. */ -/******************************************************************************/ - -#define ZMQ_POLLIN 1 -#define ZMQ_POLLOUT 2 -#define ZMQ_POLLERR 4 - -typedef struct -{ - void *socket; -#if defined _WIN32 - SOCKET fd; -#else - int fd; -#endif - short events; - short revents; -} zmq_pollitem_t; - -XSZMQ_EXPORT int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout); - -/******************************************************************************/ -/* Built-in devices */ -/******************************************************************************/ - -#define ZMQ_STREAMER 1 -#define ZMQ_FORWARDER 2 -#define ZMQ_QUEUE 3 - -XSZMQ_EXPORT int zmq_device (int device, void * insocket, void* outsocket); - -#undef XSZMQ_EXPORT - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/include/xszmq_utils.h b/include/xszmq_utils.h deleted file mode 100644 index b25bf91..0000000 --- a/include/xszmq_utils.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright (c) 2012 Martin Lucina - Copyright (c) 2007-2011 iMatix Corporation - Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file - - This file is part of Crossroads I/O. - - Crossroads I/O is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - Crossroads I/O is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - 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 . -*/ - -#ifndef __XSZMQ_UTILS_H_INCLUDED__ -#define __XSZMQ_UTILS_H_INCLUDED__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Handle DSO symbol visibility */ -#if defined _WIN32 -# if defined DLL_EXPORT -# define XSZMQ_EXPORT __declspec(dllexport) -# else -# define XSZMQ_EXPORT __declspec(dllimport) -# endif -#else -# if defined __SUNPRO_C || defined __SUNPRO_CC -# define XSZMQ_EXPORT __global -# elif (defined __GNUC__ && __GNUC__ >= 4) || defined __INTEL_COMPILER -# define XSZMQ_EXPORT __attribute__ ((visibility("default"))) -# else -# define XSZMQ_EXPORT -# endif -#endif - -/* Helper functions are used by perf tests so that they don't have to care */ -/* about minutiae of time-related functions on different OS platforms. */ - -/* Starts the stopwatch. Returns the handle to the watch. */ -XSZMQ_EXPORT void *zmq_stopwatch_start (void); - -/* Stops the stopwatch. Returns the number of microseconds elapsed since */ -/* the stopwatch was started. */ -XSZMQ_EXPORT unsigned long zmq_stopwatch_stop (void *watch_); - -/* Sleeps for specified number of seconds. */ -XSZMQ_EXPORT void zmq_sleep (int seconds_); - -#undef XSZMQ_EXPORT - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/include/zmq.h b/include/zmq.h new file mode 100644 index 0000000..4463d9d --- /dev/null +++ b/include/zmq.h @@ -0,0 +1,283 @@ +/* + Copyright (c) 2012 Martin Lucina + Copyright (c) 2007-2011 iMatix Corporation + Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file + + This file is part of Crossroads I/O. + + Crossroads I/O is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Crossroads I/O is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + 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 . +*/ + +#ifndef __XSZMQ_H_INCLUDED__ +#define __XSZMQ_H_INCLUDED__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#if defined _WIN32 +#include +#endif + +/* Handle DSO symbol visibility */ +#if defined _WIN32 +# if defined DLL_EXPORT +# define XSZMQ_EXPORT __declspec(dllexport) +# else +# define XSZMQ_EXPORT __declspec(dllimport) +# endif +#else +# if defined __SUNPRO_C || defined __SUNPRO_CC +# define XSZMQ_EXPORT __global +# elif (defined __GNUC__ && __GNUC__ >= 4) || defined __INTEL_COMPILER +# define XSZMQ_EXPORT __attribute__ ((visibility("default"))) +# else +# define XSZMQ_EXPORT +# endif +#endif + +/******************************************************************************/ +/* 0MQ versioning support. */ +/******************************************************************************/ + +/* Version macros for compile-time API version detection */ +#define ZMQ_VERSION_MAJOR 2 +#define ZMQ_VERSION_MINOR 1 +#define ZMQ_VERSION_PATCH 11 + +#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) + +/* Run-time API version detection */ +XSZMQ_EXPORT void zmq_version (int *major, int *minor, int *patch); + +/******************************************************************************/ +/* 0MQ errors. */ +/******************************************************************************/ + +/* These constants conflict with xs.h. Disable them if we are building the */ +/* libxszmq compatibility library itself. */ +#ifndef XS_BUILDING_LIBXSZMQ + +/* A number random enough not to collide with different errno ranges on */ +/* different OSes. The assumption is that error_t is at least 32-bit type. */ +#define ZMQ_HAUSNUMERO 156384712 + +/* On Windows platform some of the standard POSIX errnos are not defined. */ +#ifndef ENOTSUP +#define ENOTSUP (ZMQ_HAUSNUMERO + 1) +#endif +#ifndef EPROTONOSUPPORT +#define EPROTONOSUPPORT (ZMQ_HAUSNUMERO + 2) +#endif +#ifndef ENOBUFS +#define ENOBUFS (ZMQ_HAUSNUMERO + 3) +#endif +#ifndef ENETDOWN +#define ENETDOWN (ZMQ_HAUSNUMERO + 4) +#endif +#ifndef EADDRINUSE +#define EADDRINUSE (ZMQ_HAUSNUMERO + 5) +#endif +#ifndef EADDRNOTAVAIL +#define EADDRNOTAVAIL (ZMQ_HAUSNUMERO + 6) +#endif +#ifndef ECONNREFUSED +#define ECONNREFUSED (ZMQ_HAUSNUMERO + 7) +#endif +#ifndef EINPROGRESS +#define EINPROGRESS (ZMQ_HAUSNUMERO + 8) +#endif +#ifndef ENOTSOCK +#define ENOTSOCK (ZMQ_HAUSNUMERO + 9) +#endif + +/* Native 0MQ error codes. */ +#ifndef EFSM +#define EFSM (ZMQ_HAUSNUMERO + 51) +#endif +#ifndef ENOCOMPATPROTO +#define ENOCOMPATPROTO (ZMQ_HAUSNUMERO + 52) +#endif +#ifndef ETERM +#define ETERM (ZMQ_HAUSNUMERO + 53) +#endif +#ifndef EMTHREAD +#define EMTHREAD (ZMQ_HAUSNUMERO + 54) +#endif + +#endif /* XS_BUILDING_LIBXSZMQ */ + +/* This function retrieves the errno as it is known to 0MQ library. The goal */ +/* of this function is to make the code 100% portable, including where 0MQ */ +/* compiled with certain CRT library (on Windows) is linked to an */ +/* application that uses different CRT library. */ +XSZMQ_EXPORT int zmq_errno (void); + +/* Resolves system errors and 0MQ errors to human-readable string. */ +XSZMQ_EXPORT const char *zmq_strerror (int errnum); + +/******************************************************************************/ +/* 0MQ message definition. */ +/******************************************************************************/ + +/* Maximal size of "Very Small Message". VSMs are passed by value */ +/* to avoid excessive memory allocation/deallocation. */ +/* If VMSs larger than 255 bytes are required, type of 'vsm_size' */ +/* field in zmq_msg_t structure should be modified accordingly. */ +#define ZMQ_MAX_VSM_SIZE 30 + +/* Message types. These integers may be stored in 'content' member of the */ +/* message instead of regular pointer to the data. */ +#define ZMQ_DELIMITER 31 +#define ZMQ_VSM 32 + +/* Message flags. ZMQ_MSG_SHARED is strictly speaking not a message flag */ +/* (it has no equivalent in the wire format), however, making it a flag */ +/* allows us to pack the stucture tigher and thus improve performance. */ +#define ZMQ_MSG_MORE 1 +#define ZMQ_MSG_SHARED 128 +#define ZMQ_MSG_MASK 129 /* Merges all the flags */ + +/* A message. Note that 'content' is not a pointer to the raw data. */ +/* Rather it is pointer to zmq::msg_content_t structure */ +/* (see src/msg_content.hpp for its definition). */ +typedef struct +{ + void *content; + unsigned char flags; + unsigned char vsm_size; + unsigned char vsm_data [ZMQ_MAX_VSM_SIZE]; +} zmq_msg_t; + +typedef void (zmq_free_fn) (void *data, void *hint); + +XSZMQ_EXPORT int zmq_msg_init (zmq_msg_t *msg); +XSZMQ_EXPORT int zmq_msg_init_size (zmq_msg_t *msg, size_t size); +XSZMQ_EXPORT int zmq_msg_init_data (zmq_msg_t *msg, void *data, + size_t size, zmq_free_fn *ffn, void *hint); +XSZMQ_EXPORT int zmq_msg_close (zmq_msg_t *msg); +XSZMQ_EXPORT int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src); +XSZMQ_EXPORT int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src); +XSZMQ_EXPORT void *zmq_msg_data (zmq_msg_t *msg); +XSZMQ_EXPORT size_t zmq_msg_size (zmq_msg_t *msg); + +/******************************************************************************/ +/* 0MQ infrastructure (a.k.a. context) initialisation & termination. */ +/******************************************************************************/ + +XSZMQ_EXPORT void *zmq_init (int io_threads); +XSZMQ_EXPORT int zmq_term (void *context); + +/******************************************************************************/ +/* 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 +#define ZMQ_XREQ ZMQ_DEALER /* Old alias, remove in 3.x */ +#define ZMQ_XREP ZMQ_ROUTER /* Old alias, remove in 3.x */ +#define ZMQ_UPSTREAM ZMQ_PULL /* Old alias, remove in 3.x */ +#define ZMQ_DOWNSTREAM ZMQ_PUSH /* Old alias, remove in 3.x */ + +/* Socket options. */ +#define ZMQ_HWM 1 +#define ZMQ_SWAP 3 +#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_MCAST_LOOP 10 +#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_RECOVERY_IVL_MSEC 20 /* opt. recovery time, reconcile in 3.x */ +#define ZMQ_RECONNECT_IVL_MAX 21 + +/* Send/recv options. */ +#define ZMQ_NOBLOCK 1 +#define ZMQ_SNDMORE 2 + +XSZMQ_EXPORT void *zmq_socket (void *context, int type); +XSZMQ_EXPORT int zmq_close (void *s); +XSZMQ_EXPORT int zmq_setsockopt (void *s, int option, const void *optval, + size_t optvallen); +XSZMQ_EXPORT int zmq_getsockopt (void *s, int option, void *optval, + size_t *optvallen); +XSZMQ_EXPORT int zmq_bind (void *s, const char *addr); +XSZMQ_EXPORT int zmq_connect (void *s, const char *addr); +XSZMQ_EXPORT int zmq_send (void *s, zmq_msg_t *msg, int flags); +XSZMQ_EXPORT int zmq_recv (void *s, zmq_msg_t *msg, int flags); + +/******************************************************************************/ +/* I/O multiplexing. */ +/******************************************************************************/ + +#define ZMQ_POLLIN 1 +#define ZMQ_POLLOUT 2 +#define ZMQ_POLLERR 4 + +typedef struct +{ + void *socket; +#if defined _WIN32 + SOCKET fd; +#else + int fd; +#endif + short events; + short revents; +} zmq_pollitem_t; + +XSZMQ_EXPORT int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout); + +/******************************************************************************/ +/* Built-in devices */ +/******************************************************************************/ + +#define ZMQ_STREAMER 1 +#define ZMQ_FORWARDER 2 +#define ZMQ_QUEUE 3 + +XSZMQ_EXPORT int zmq_device (int device, void * insocket, void* outsocket); + +#undef XSZMQ_EXPORT + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/zmq_utils.h b/include/zmq_utils.h new file mode 100644 index 0000000..b25bf91 --- /dev/null +++ b/include/zmq_utils.h @@ -0,0 +1,65 @@ +/* + Copyright (c) 2012 Martin Lucina + Copyright (c) 2007-2011 iMatix Corporation + Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file + + This file is part of Crossroads I/O. + + Crossroads I/O is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Crossroads I/O is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + 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 . +*/ + +#ifndef __XSZMQ_UTILS_H_INCLUDED__ +#define __XSZMQ_UTILS_H_INCLUDED__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Handle DSO symbol visibility */ +#if defined _WIN32 +# if defined DLL_EXPORT +# define XSZMQ_EXPORT __declspec(dllexport) +# else +# define XSZMQ_EXPORT __declspec(dllimport) +# endif +#else +# if defined __SUNPRO_C || defined __SUNPRO_CC +# define XSZMQ_EXPORT __global +# elif (defined __GNUC__ && __GNUC__ >= 4) || defined __INTEL_COMPILER +# define XSZMQ_EXPORT __attribute__ ((visibility("default"))) +# else +# define XSZMQ_EXPORT +# endif +#endif + +/* Helper functions are used by perf tests so that they don't have to care */ +/* about minutiae of time-related functions on different OS platforms. */ + +/* Starts the stopwatch. Returns the handle to the watch. */ +XSZMQ_EXPORT void *zmq_stopwatch_start (void); + +/* Stops the stopwatch. Returns the number of microseconds elapsed since */ +/* the stopwatch was started. */ +XSZMQ_EXPORT unsigned long zmq_stopwatch_stop (void *watch_); + +/* Sleeps for specified number of seconds. */ +XSZMQ_EXPORT void zmq_sleep (int seconds_); + +#undef XSZMQ_EXPORT + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/Makefile.am b/src/Makefile.am index 84c7d3d..0b226a1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,29 +1,18 @@ pkgconfigdir = $(libdir)/pkgconfig if BUILD_LIBZMQ -lib_LTLIBRARIES = libxs.la libxszmq.la libzmq.la +lib_LTLIBRARIES = libxs.la libzmq.la -pkgconfig_DATA = libxs.pc libxszmq.pc libzmq.pc +pkgconfig_DATA = libxs.pc libzmq.pc include_HEADERS = ../include/xs.h ../include/xs_utils.h \ - ../include/xszmq.h ../include/xszmq_utils.h \ ../include/zmq.h ../include/zmq_utils.h - -../include/zmq.h: ../include/xszmq.h - cp ../include/xszmq.h ../include/zmq.h - -../include/zmq_utils.h: ../include/xszmq_utils.h - cp ../include/xszmq_utils.h ../include/zmq_utils.h - -distclean-local: - -rm -f ../include/zmq.h ../include/zmq_utils.h else -lib_LTLIBRARIES = libxs.la libxszmq.la +lib_LTLIBRARIES = libxs.la -pkgconfig_DATA = libxs.pc libxszmq.pc +pkgconfig_DATA = libxs.pc -include_HEADERS = ../include/xs.h ../include/xs_utils.h \ - ../include/xszmq.h ../include/xszmq_utils.h +include_HEADERS = ../include/xs.h ../include/xs_utils.h endif libxs_la_SOURCES = \ @@ -165,24 +154,18 @@ libxs_la_CPPFLAGS = -I$(top_srcdir)/@pgm_srcdir@/include/ libxs_la_LIBADD = $(top_srcdir)/@pgm_srcdir@/libpgm_noinst.la endif -libxszmq_la_SOURCES = xszmq.cpp -libxszmq_la_CPPFLAGS = -DXS_BUILDING_LIBXSZMQ -libxszmq_la_LIBADD = libxs.la +if BUILD_LIBZMQ +libzmq_la_SOURCES = xszmq.cpp +libzmq_la_CPPFLAGS = -DXS_BUILDING_LIBXSZMQ +libzmq_la_LIBADD = libxs.la if ON_MINGW -libxszmq_la_LDFLAGS = -no-undefined -avoid-version -version-info @LIBXSZMQ_ABI_VERSION@ +libzmq_la_LDFLAGS = -no-undefined -avoid-version -version-info @LIBZMQ_ABI_VERSION@ else -libxszmq_la_LDFLAGS = -version-info @LIBXSZMQ_ABI_VERSION@ +libzmq_la_LDFLAGS = -version-info @LIBZMQ_ABI_VERSION@ endif - -if BUILD_LIBZMQ -libzmq_la_SOURCES = $(libxszmq_la_SOURCES) -libzmq_la_CPPFLAGS = $(libxszmq_la_CPPFLAGS) -libzmq_la_LIBADD = $(libxszmq_la_LIBADD) -libzmq_la_LDFLAGS = $(libxszmq_la_LDFLAGS) endif dist-hook: -rm $(distdir)/platform.hpp - diff --git a/src/libxszmq.pc.in b/src/libxszmq.pc.in deleted file mode 100644 index 9c631ad..0000000 --- a/src/libxszmq.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libxszmq -Description: Crossroads libxszmq compatibility library -Version: @VERSION@ -Libs: -L${libdir} -lxszmq -Cflags: -I${includedir} diff --git a/src/xszmq.cpp b/src/xszmq.cpp index d97d9ea..4146e45 100644 --- a/src/xszmq.cpp +++ b/src/xszmq.cpp @@ -19,8 +19,8 @@ along with this program. If not, see . */ -#include "../include/xszmq.h" -#include "../include/xszmq_utils.h" +#include "../include/zmq.h" +#include "../include/zmq_utils.h" #include "../include/xs.h" #include "../include/xs_utils.h" -- cgit v1.2.3