From 4a7aad06d95701cf232198093ce396dcdbb53e5b Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Thu, 16 Feb 2012 10:01:47 +0900 Subject: ZeroMQ renamed to Crossroads Signed-off-by: Martin Sustrik --- include/xs.h | 246 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 include/xs.h (limited to 'include/xs.h') diff --git a/include/xs.h b/include/xs.h new file mode 100644 index 0000000..05d98ab --- /dev/null +++ b/include/xs.h @@ -0,0 +1,246 @@ +/* + Copyright (c) 2009-2012 250bpm s.r.o. + Copyright (c) 2007-2010 iMatix Corporation + Copyright (c) 2011 VMware, Inc. + Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file + + This file is part of Crossroads project. + + Crossroads 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 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 __XS_H_INCLUDED__ +#define __XS_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 XS_EXPORT __declspec(dllexport) +# else +# define XS_EXPORT __declspec(dllimport) +# endif +#else +# if defined __SUNPRO_C || defined __SUNPRO_CC +# define XS_EXPORT __global +# elif (defined __GNUC__ && __GNUC__ >= 4) || defined __INTEL_COMPILER +# define XS_EXPORT __attribute__ ((visibility("default"))) +# else +# define XS_EXPORT +# endif +#endif + +/******************************************************************************/ +/* Crossroads versioning support. */ +/******************************************************************************/ + +/* Version macros for compile-time API version detection */ +#define XS_VERSION_MAJOR 0 +#define XS_VERSION_MINOR 0 +#define XS_VERSION_PATCH 0 + +#define XS_MAKE_VERSION(major, minor, patch) \ + ((major) * 10000 + (minor) * 100 + (patch)) +#define XS_VERSION \ + XS_MAKE_VERSION(XS_VERSION_MAJOR, XS_VERSION_MINOR, XS_VERSION_PATCH) + +/* Run-time API version detection */ +XS_EXPORT void xs_version (int *major, int *minor, int *patch); + +/******************************************************************************/ +/* Crossroads errors. */ +/******************************************************************************/ + +/* 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 XS_HAUSNUMERO 156384712 + +/* On Windows platform some of the standard POSIX errnos are not defined. */ +#ifndef ENOTSUP +#define ENOTSUP (XS_HAUSNUMERO + 1) +#endif +#ifndef EPROTONOSUPPORT +#define EPROTONOSUPPORT (XS_HAUSNUMERO + 2) +#endif +#ifndef ENOBUFS +#define ENOBUFS (XS_HAUSNUMERO + 3) +#endif +#ifndef ENETDOWN +#define ENETDOWN (XS_HAUSNUMERO + 4) +#endif +#ifndef EADDRINUSE +#define EADDRINUSE (XS_HAUSNUMERO + 5) +#endif +#ifndef EADDRNOTAVAIL +#define EADDRNOTAVAIL (XS_HAUSNUMERO + 6) +#endif +#ifndef ECONNREFUSED +#define ECONNREFUSED (XS_HAUSNUMERO + 7) +#endif +#ifndef EINPROGRESS +#define EINPROGRESS (XS_HAUSNUMERO + 8) +#endif +#ifndef ENOTSOCK +#define ENOTSOCK (XS_HAUSNUMERO + 9) +#endif +#ifndef EAFNOSUPPORT +#define EAFNOSUPPORT (XS_HAUSNUMERO + 10) +#endif + +/* Native Crossroads error codes. */ +#define EFSM (XS_HAUSNUMERO + 51) +#define ENOCOMPATPROTO (XS_HAUSNUMERO + 52) +#define ETERM (XS_HAUSNUMERO + 53) +#define EMTHREAD (XS_HAUSNUMERO + 54) + +/* This function retrieves the errno as it is known to Crossroads library. */ +/* The goal of this function is to make the code 100% portable, including */ +/* where Crossroads are compiled with certain CRT library (on Windows) is */ +/* linked to an application that uses different CRT library. */ +XS_EXPORT int xs_errno (void); + +/* Resolves system errors and Crossroads errors to human-readable string. */ +XS_EXPORT const char *xs_strerror (int errnum); + +/******************************************************************************/ +/* Crossroads message definition. */ +/******************************************************************************/ + +typedef struct {unsigned char _ [32];} xs_msg_t; + +typedef void (xs_free_fn) (void *data, void *hint); + +XS_EXPORT int xs_msg_init (xs_msg_t *msg); +XS_EXPORT int xs_msg_init_size (xs_msg_t *msg, size_t size); +XS_EXPORT int xs_msg_init_data (xs_msg_t *msg, void *data, + size_t size, xs_free_fn *ffn, void *hint); +XS_EXPORT int xs_msg_close (xs_msg_t *msg); +XS_EXPORT int xs_msg_move (xs_msg_t *dest, xs_msg_t *src); +XS_EXPORT int xs_msg_copy (xs_msg_t *dest, xs_msg_t *src); +XS_EXPORT void *xs_msg_data (xs_msg_t *msg); +XS_EXPORT size_t xs_msg_size (xs_msg_t *msg); +XS_EXPORT int xs_getmsgopt (xs_msg_t *msg, int option, void *optval, + size_t *optvallen); + +/******************************************************************************/ +/* Crossroads infrastructure initialisation & termination. */ +/******************************************************************************/ + +XS_EXPORT void *xs_init (int io_threads); +XS_EXPORT int xs_term (void *context); + +/******************************************************************************/ +/* Crossroads socket definition. */ +/******************************************************************************/ + +/* Socket types. */ +#define XS_PAIR 0 +#define XS_PUB 1 +#define XS_SUB 2 +#define XS_REQ 3 +#define XS_REP 4 +#define XS_XREQ 5 +#define XS_XREP 6 +#define XS_PULL 7 +#define XS_PUSH 8 +#define XS_XPUB 9 +#define XS_XSUB 10 + +#define XS_ROUTER XS_XREP +#define XS_DEALER XS_XREQ + +/* Socket options. */ +#define XS_AFFINITY 4 +#define XS_IDENTITY 5 +#define XS_SUBSCRIBE 6 +#define XS_UNSUBSCRIBE 7 +#define XS_RATE 8 +#define XS_RECOVERY_IVL 9 +#define XS_SNDBUF 11 +#define XS_RCVBUF 12 +#define XS_RCVMORE 13 +#define XS_FD 14 +#define XS_EVENTS 15 +#define XS_TYPE 16 +#define XS_LINGER 17 +#define XS_RECONNECT_IVL 18 +#define XS_BACKLOG 19 +#define XS_RECONNECT_IVL_MAX 21 +#define XS_MAXMSGSIZE 22 +#define XS_SNDHWM 23 +#define XS_RCVHWM 24 +#define XS_MULTICAST_HOPS 25 +#define XS_RCVTIMEO 27 +#define XS_SNDTIMEO 28 +#define XS_IPV4ONLY 31 + +/* Message options */ +#define XS_MORE 1 + +/* Send/recv options. */ +#define XS_DONTWAIT 1 +#define XS_SNDMORE 2 + +XS_EXPORT void *xs_socket (void *context, int type); +XS_EXPORT int xs_close (void *s); +XS_EXPORT int xs_setsockopt (void *s, int option, const void *optval, + size_t optvallen); +XS_EXPORT int xs_getsockopt (void *s, int option, void *optval, + size_t *optvallen); +XS_EXPORT int xs_bind (void *s, const char *addr); +XS_EXPORT int xs_connect (void *s, const char *addr); +XS_EXPORT int xs_send (void *s, const void *buf, size_t len, int flags); +XS_EXPORT int xs_recv (void *s, void *buf, size_t len, int flags); +XS_EXPORT int xs_sendmsg (void *s, xs_msg_t *msg, int flags); +XS_EXPORT int xs_recvmsg (void *s, xs_msg_t *msg, int flags); + +/******************************************************************************/ +/* I/O multiplexing. */ +/******************************************************************************/ + +#define XS_POLLIN 1 +#define XS_POLLOUT 2 +#define XS_POLLERR 4 + +typedef struct +{ + void *socket; +#if defined _WIN32 + SOCKET fd; +#else + int fd; +#endif + short events; + short revents; +} xs_pollitem_t; + +XS_EXPORT int xs_poll (xs_pollitem_t *items, int nitems, long timeout); + +#undef XS_EXPORT + +#ifdef __cplusplus +} +#endif + +#endif + -- cgit v1.2.3