libzmq  master
ZeroMQ C++ Core Engine (LIBZMQ)
precompiled.hpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2007-2016 Contributors as noted in the AUTHORS file
3 
4  This file is part of libzmq, the ZeroMQ core engine in C++.
5 
6  libzmq is free software; you can redistribute it and/or modify it under
7  the terms of the GNU Lesser General Public License (LGPL) as published
8  by the Free Software Foundation; either version 3 of the License, or
9  (at your option) any later version.
10 
11  As a special exception, the Contributors give you permission to link
12  this library with independent modules to produce an executable,
13  regardless of the license terms of these independent modules, and to
14  copy and distribute the resulting executable under terms of your choice,
15  provided that you also meet, for each linked independent module, the
16  terms and conditions of the license of that module. An independent
17  module is a module which is not derived from or based on this library.
18  If you modify this library, you must extend this exception to your
19  version of the library.
20 
21  libzmq is distributed in the hope that it will be useful, but WITHOUT
22  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
24  License for more details.
25 
26  You should have received a copy of the GNU Lesser General Public License
27  along with this program. If not, see <http://www.gnu.org/licenses/>.
28 */
29 
30 #ifndef __ZMQ_PRECOMPILED_HPP_INCLUDED__
31 #define __ZMQ_PRECOMPILED_HPP_INCLUDED__
32 
33 #ifdef _MSC_VER
34 
35 // Windows headers
36 #include "platform.hpp"
37 
38 #if defined ZMQ_HAVE_WINDOWS
39 #define WIN32_LEAN_AND_MEAN // speeds up compilation by removing rarely used windows definitions from headers
40 #include "windows.hpp"
41 #else
42 #include <unistd.h>
43 #include <sys/socket.h>
44 #include <arpa/inet.h>
45 #include <netinet/tcp.h>
46 #include <netinet/in.h>
47 #include <netdb.h>
48 #include <fcntl.h>
49 #if defined ZMQ_HAVE_OPENBSD
50 #define ucred sockpeercred
51 #endif
52 #endif
53 
54 
55 // system headers
56 #include <intrin.h>
57 #include <io.h>
58 #include <rpc.h>
59 #include <sys/stat.h>
60 #include <assert.h>
61 #if defined _MSC_VER
62 #if defined _WIN32_WCE
63 #include <cmnintrin.h>
64 #else
65 #include <intrin.h>
66 #endif
67 #endif
68 #include <ctype.h>
69 #include <errno.h>
70 
71 #ifdef HAVE_LIBGSSAPI_KRB5
72 #include <string.h>
73 #include <string>
74 
75 #include "msg.hpp"
76 #include "session_base.hpp"
77 #include "err.hpp"
78 #include "gssapi_server.hpp"
79 #include "wire.hpp"
80 
81 #include <gssapi/gssapi.h>
82 #endif
83 #ifdef HAVE_LIBGSSAPI_KRB5
84 
85 #if !defined(ZMQ_HAVE_FREEBSD) && !defined(ZMQ_HAVE_DRAGONFLY)
86 #include <gssapi/gssapi_generic.h>
87 #endif
88 #include <gssapi/gssapi_krb5.h>
89 
90 #include "mechanism.hpp"
91 #include "options.hpp"
92 #include <gssapi/gssapi_krb5.h>
93 #endif
94 #if ((defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_FREEBSD ||\
95  defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_OPENBSD ||\
96  defined ZMQ_HAVE_QNXNTO || defined ZMQ_HAVE_NETBSD ||\
97  defined ZMQ_HAVE_DRAGONFLY || defined ZMQ_HAVE_GNU)\
98  && defined ZMQ_HAVE_IFADDRS)
99 #include <ifaddrs.h>
100 #endif
101 #include <intrin.h>
102 #include <inttypes.h>
103 #include <io.h>
104 #include <ipexport.h>
105 #include <iphlpapi.h>
106 #include <limits.h>
107 #include <Mstcpip.h>
108 #include <mswsock.h>
109 #include <process.h>
110 #include <rpc.h>
111 #include <signal.h>
112 #include <stdarg.h>
113 #include <stddef.h>
114 #include <stdint.h>
115 #include <stdio.h>
116 #include <stdlib.h>
117 #include <string.h>
118 #include <sys/stat.h>
119 #include <sys/types.h>
120 #include <time.h>
121 #include <winsock2.h>
122 #include <ws2tcpip.h>
123 
124 // standard C++ headers
125 #include <algorithm>
126 #include <atomic>
127 #include <climits>
128 #include <cmath>
129 #include <cstddef>
130 #include <cstdlib>
131 #include <cstring>
132 #include <deque>
133 #include <limits>
134 #include <map>
135 #include <new>
136 #include <set>
137 #include <sstream>
138 #include <string>
139 #include <vector>
140 
141 #endif // _MSC_VER
142 
143 
144 // 0MQ definitions and exported functions
145 #include "platform.hpp"
146 #include "../include/zmq.h"
147 
148 /******************************************************************************/
149 /* These functions are DRAFT and disabled in stable releases, and subject to */
150 /* change at ANY time until declared stable. */
151 /******************************************************************************/
152 
153 #ifndef ZMQ_BUILD_DRAFT_API
154 
155 /* DRAFT Socket types. */
156 #define ZMQ_SERVER 12
157 #define ZMQ_CLIENT 13
158 #define ZMQ_RADIO 14
159 #define ZMQ_DISH 15
160 #define ZMQ_GATHER 16
161 #define ZMQ_SCATTER 17
162 
163 /* DRAFT Socket methods. */
164 int zmq_join (void *s, const char *group);
165 int zmq_leave (void *s, const char *group);
166 
167 /* DRAFT Msg methods. */
168 int zmq_msg_set_routing_id(zmq_msg_t *msg, uint32_t routing_id);
169 uint32_t zmq_msg_routing_id(zmq_msg_t *msg);
170 int zmq_msg_set_group(zmq_msg_t *msg, const char *group);
171 const char *zmq_msg_group(zmq_msg_t *msg);
172 
173 /******************************************************************************/
174 /* Poller polling on sockets,fd and thread-safe sockets */
175 /******************************************************************************/
176 
177 #define ZMQ_HAVE_POLLER
178 
179 typedef struct zmq_poller_event_t
180 {
181  void *socket;
182 #if defined _WIN32
183  SOCKET fd;
184 #else
185  int fd;
186 #endif
187  void *user_data;
188  short events;
190 
191 void *zmq_poller_new (void);
192 int zmq_poller_destroy (void **poller_p);
193 int zmq_poller_add (void *poller, void *socket, void *user_data, short events);
194 int zmq_poller_modify (void *poller, void *socket, short events);
195 int zmq_poller_remove (void *poller, void *socket);
196 int zmq_poller_wait (void *poller, zmq_poller_event_t *event, long timeout);
197 
198 #if defined _WIN32
199 int zmq_poller_add_fd (void *poller, SOCKET fd, void *user_data, short events);
200 int zmq_poller_modify_fd (void *poller, SOCKET fd, short events);
201 int zmq_poller_remove_fd (void *poller, SOCKET fd);
202 #else
203 int zmq_poller_add_fd (void *poller, int fd, void *user_data, short events);
204 int zmq_poller_modify_fd (void *poller, int fd, short events);
205 int zmq_poller_remove_fd (void *poller, int fd);
206 #endif
207 
208 /******************************************************************************/
209 /* Scheduling timers */
210 /******************************************************************************/
211 
212 #define ZMQ_HAVE_TIMERS
213 
214 typedef void (zmq_timer_fn)(int timer_id, void *arg);
215 
216 void *zmq_timers_new (void);
217 int zmq_timers_destroy (void **timers_p);
218 int zmq_timers_add (void *timers, size_t interval, zmq_timer_fn handler, void *arg);
219 int zmq_timers_cancel (void *timers, int timer_id);
220 int zmq_timers_set_interval (void *timers, int timer_id, size_t interval);
221 int zmq_timers_reset (void *timers, int timer_id);
222 long zmq_timers_timeout (void *timers);
223 int zmq_timers_execute (void *timers);
224 
225 #endif // ZMQ_BUILD_DRAFT_API
226 
227 #endif //ifndef __ZMQ_PRECOMPILED_HPP_INCLUDED__
int zmq_poller_remove_fd(void *poller, int fd)
Definition: zmq.cpp:1206
int zmq_poller_add_fd(void *poller, int fd, void *user_data, short events)
Definition: zmq.cpp:1143
int zmq_poller_add(void *poller, void *socket, void *user_data, short events)
Definition: zmq.cpp:1124
uint32_t zmq_msg_routing_id(zmq_msg_t *msg)
Definition: zmq.cpp:715
int zmq_timers_execute(void *timers)
Definition: zmq.cpp:1311
int zmq_poller_wait(void *poller, zmq_poller_event_t *event, long timeout)
Definition: zmq.cpp:1218
void handler(int timer_id, void *arg)
Definition: test_timers.cpp:43
int zmq_timers_cancel(void *timers, int timer_id)
Definition: zmq.cpp:1271
int zmq_timers_destroy(void **timers_p)
Definition: zmq.cpp:1249
int zmq_timers_add(void *timers, size_t interval, zmq_timer_fn handler, void *arg)
Definition: zmq.cpp:1261
long zmq_timers_timeout(void *timers)
Definition: zmq.cpp:1301
struct zmq_poller_event_t zmq_poller_event_t
int zmq_timers_reset(void *timers, int timer_id)
Definition: zmq.cpp:1291
int zmq_join(void *s, const char *group)
Definition: zmq.cpp:299
void * zmq_timers_new(void)
Definition: zmq.cpp:1242
int zmq_poller_modify(void *poller, void *socket, short events)
Definition: zmq.cpp:1155
Definition: zmq.h:221
int zmq_poller_remove(void *poller, void *socket)
Definition: zmq.cpp:1187
const char * zmq_msg_group(zmq_msg_t *msg)
Definition: zmq.cpp:725
int zmq_leave(void *s, const char *group)
Definition: zmq.cpp:310
int zmq_timers_set_interval(void *timers, int timer_id, size_t interval)
Definition: zmq.cpp:1281
int zmq_msg_set_group(zmq_msg_t *msg, const char *group)
Definition: zmq.cpp:720
int zmq_msg_set_routing_id(zmq_msg_t *msg, uint32_t routing_id)
Definition: zmq.cpp:710
int zmq_poller_modify_fd(void *poller, int fd, short events)
Definition: zmq.cpp:1175
int zmq_poller_destroy(void **poller_p)
Definition: zmq.cpp:1111
void( zmq_timer_fn)(int timer_id, void *arg)
void * zmq_poller_new(void)
Definition: zmq.cpp:1104