1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #ifndef _EVENT2_UTIL_H_
27 #define _EVENT2_UTIL_H_
28
29
30
31
32
33
34
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40
41 #include "opal_rename.h"
42
43
44 #include <event2/event-config.h>
45 #ifdef _EVENT_HAVE_SYS_TIME_H
46 #include <sys/time.h>
47 #endif
48 #ifdef _EVENT_HAVE_STDINT_H
49 #include <stdint.h>
50 #elif defined(_EVENT_HAVE_INTTYPES_H)
51 #include <inttypes.h>
52 #endif
53 #ifdef _EVENT_HAVE_SYS_TYPES_H
54 #include <sys/types.h>
55 #endif
56 #ifdef _EVENT_HAVE_STDDEF_H
57 #include <stddef.h>
58 #endif
59 #ifdef _MSC_VER
60 #include <BaseTsd.h>
61 #endif
62 #include <stdarg.h>
63 #ifdef _EVENT_HAVE_NETDB_H
64 #if !defined(_GNU_SOURCE)
65 #define _GNU_SOURCE
66 #endif
67 #include <netdb.h>
68 #endif
69
70 #if defined(WIN32) && !defined(__CYGWIN__)
71 #include <winsock2.h>
72 #else
73 #include <sys/socket.h>
74 #endif
75
76
77 #if defined(_EVENT_SIZEOF_VOID__) && !defined(_EVENT_SIZEOF_VOID_P)
78 #define _EVENT_SIZEOF_VOID_P _EVENT_SIZEOF_VOID__
79 #endif
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 #ifdef _EVENT_HAVE_UINT64_T
111 #define ev_uint64_t uint64_t
112 #define ev_int64_t int64_t
113 #elif defined(WIN32)
114 #define ev_uint64_t unsigned __int64
115 #define ev_int64_t signed __int64
116 #elif _EVENT_SIZEOF_LONG_LONG == 8
117 #define ev_uint64_t unsigned long long
118 #define ev_int64_t long long
119 #elif _EVENT_SIZEOF_LONG == 8
120 #define ev_uint64_t unsigned long
121 #define ev_int64_t long
122 #elif defined(_EVENT_IN_DOXYGEN)
123 #define ev_uint64_t ...
124 #define ev_int64_t ...
125 #else
126 #error "No way to define ev_uint64_t"
127 #endif
128
129 #ifdef _EVENT_HAVE_UINT32_T
130 #define ev_uint32_t uint32_t
131 #define ev_int32_t int32_t
132 #elif defined(WIN32)
133 #define ev_uint32_t unsigned int
134 #define ev_int32_t signed int
135 #elif _EVENT_SIZEOF_LONG == 4
136 #define ev_uint32_t unsigned long
137 #define ev_int32_t signed long
138 #elif _EVENT_SIZEOF_INT == 4
139 #define ev_uint32_t unsigned int
140 #define ev_int32_t signed int
141 #elif defined(_EVENT_IN_DOXYGEN)
142 #define ev_uint32_t ...
143 #define ev_int32_t ...
144 #else
145 #error "No way to define ev_uint32_t"
146 #endif
147
148 #ifdef _EVENT_HAVE_UINT16_T
149 #define ev_uint16_t uint16_t
150 #define ev_int16_t int16_t
151 #elif defined(WIN32)
152 #define ev_uint16_t unsigned short
153 #define ev_int16_t signed short
154 #elif _EVENT_SIZEOF_INT == 2
155 #define ev_uint16_t unsigned int
156 #define ev_int16_t signed int
157 #elif _EVENT_SIZEOF_SHORT == 2
158 #define ev_uint16_t unsigned short
159 #define ev_int16_t signed short
160 #elif defined(_EVENT_IN_DOXYGEN)
161 #define ev_uint16_t ...
162 #define ev_int16_t ...
163 #else
164 #error "No way to define ev_uint16_t"
165 #endif
166
167 #ifdef _EVENT_HAVE_UINT8_T
168 #define ev_uint8_t uint8_t
169 #define ev_int8_t int8_t
170 #elif defined(_EVENT_IN_DOXYGEN)
171 #define ev_uint8_t ...
172 #define ev_int8_t ...
173 #else
174 #define ev_uint8_t unsigned char
175 #define ev_int8_t signed char
176 #endif
177
178 #ifdef _EVENT_HAVE_UINTPTR_T
179 #define ev_uintptr_t uintptr_t
180 #define ev_intptr_t intptr_t
181 #elif _EVENT_SIZEOF_VOID_P <= 4
182 #define ev_uintptr_t ev_uint32_t
183 #define ev_intptr_t ev_int32_t
184 #elif _EVENT_SIZEOF_VOID_P <= 8
185 #define ev_uintptr_t ev_uint64_t
186 #define ev_intptr_t ev_int64_t
187 #elif defined(_EVENT_IN_DOXYGEN)
188 #define ev_uintptr_t ...
189 #define ev_intptr_t ...
190 #else
191 #error "No way to define ev_uintptr_t"
192 #endif
193
194 #ifdef _EVENT_ssize_t
195 #define ev_ssize_t _EVENT_ssize_t
196 #else
197 #define ev_ssize_t ssize_t
198 #endif
199
200 #ifdef WIN32
201 #define ev_off_t ev_int64_t
202 #else
203 #define ev_off_t off_t
204 #endif
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222 #define EV_UINT64_MAX ((((ev_uint64_t)0xffffffffUL) << 32) | 0xffffffffUL)
223 #define EV_INT64_MAX ((((ev_int64_t) 0x7fffffffL) << 32) | 0xffffffffL)
224 #define EV_INT64_MIN ((-EV_INT64_MAX) - 1)
225 #define EV_UINT32_MAX ((ev_uint32_t)0xffffffffUL)
226 #define EV_INT32_MAX ((ev_int32_t) 0x7fffffffL)
227 #define EV_INT32_MIN ((-EV_INT32_MAX) - 1)
228 #define EV_UINT16_MAX ((ev_uint16_t)0xffffUL)
229 #define EV_INT16_MAX ((ev_int16_t) 0x7fffL)
230 #define EV_INT16_MIN ((-EV_INT16_MAX) - 1)
231 #define EV_UINT8_MAX 255
232 #define EV_INT8_MAX 127
233 #define EV_INT8_MIN ((-EV_INT8_MAX) - 1)
234
235
236
237
238
239
240
241 #if _EVENT_SIZEOF_SIZE_T == 8
242 #define EV_SIZE_MAX EV_UINT64_MAX
243 #define EV_SSIZE_MAX EV_INT64_MAX
244 #elif _EVENT_SIZEOF_SIZE_T == 4
245 #define EV_SIZE_MAX EV_UINT32_MAX
246 #define EV_SSIZE_MAX EV_INT32_MAX
247 #elif defined(_EVENT_IN_DOXYGEN)
248 #define EV_SIZE_MAX ...
249 #define EV_SSIZE_MAX ...
250 #else
251 #error "No way to define SIZE_MAX"
252 #endif
253
254 #define EV_SSIZE_MIN ((-EV_SSIZE_MAX) - 1)
255
256
257 #ifdef WIN32
258 #define ev_socklen_t int
259 #elif defined(_EVENT_socklen_t)
260 #define ev_socklen_t _EVENT_socklen_t
261 #else
262 #define ev_socklen_t socklen_t
263 #endif
264
265 #ifdef _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY
266 #if !defined(_EVENT_HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY) \
267 && !defined(ss_family)
268 #define ss_family __ss_family
269 #endif
270 #endif
271
272
273
274
275 #ifdef WIN32
276 #define evutil_socket_t intptr_t
277 #else
278 #define evutil_socket_t int
279 #endif
280
281
282
283
284
285
286
287
288
289
290
291
292 int evutil_socketpair(int d, int type, int protocol, evutil_socket_t sv[2]);
293
294
295
296
297
298 int evutil_make_socket_nonblocking(evutil_socket_t sock);
299
300
301
302
303
304
305
306
307
308
309
310
311 int evutil_make_listen_socket_reuseable(evutil_socket_t sock);
312
313
314
315
316
317
318
319 int evutil_make_socket_closeonexec(evutil_socket_t sock);
320
321
322
323
324
325
326
327 int evutil_closesocket(evutil_socket_t sock);
328 #define EVUTIL_CLOSESOCKET(s) evutil_closesocket(s)
329
330
331 #ifdef WIN32
332
333 #define EVUTIL_SOCKET_ERROR() WSAGetLastError()
334
335 #define EVUTIL_SET_SOCKET_ERROR(errcode) \
336 do { WSASetLastError(errcode); } while (0)
337
338 int evutil_socket_geterror(evutil_socket_t sock);
339
340 const char *evutil_socket_error_to_string(int errcode);
341 #elif defined(_EVENT_IN_DOXYGEN)
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357 #define EVUTIL_SOCKET_ERROR() ...
358
359 #define EVUTIL_SET_SOCKET_ERROR(errcode) ...
360
361 #define evutil_socket_geterror(sock) ...
362
363 #define evutil_socket_error_to_string(errcode) ...
364
365 #else
366 #define EVUTIL_SOCKET_ERROR() (errno)
367 #define EVUTIL_SET_SOCKET_ERROR(errcode) \
368 do { errno = (errcode); } while (0)
369 #define evutil_socket_geterror(sock) (errno)
370 #define evutil_socket_error_to_string(errcode) (strerror(errcode))
371 #endif
372
373
374
375
376
377
378
379
380
381
382 #ifdef _EVENT_HAVE_TIMERADD
383 #define evutil_timeradd(tvp, uvp, vvp) timeradd((tvp), (uvp), (vvp))
384 #define evutil_timersub(tvp, uvp, vvp) timersub((tvp), (uvp), (vvp))
385 #else
386 #define evutil_timeradd(tvp, uvp, vvp) \
387 do { \
388 (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
389 (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
390 if ((vvp)->tv_usec >= 1000000) { \
391 (vvp)->tv_sec++; \
392 (vvp)->tv_usec -= 1000000; \
393 } \
394 } while (0)
395 #define evutil_timersub(tvp, uvp, vvp) \
396 do { \
397 (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
398 (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
399 if ((vvp)->tv_usec < 0) { \
400 (vvp)->tv_sec--; \
401 (vvp)->tv_usec += 1000000; \
402 } \
403 } while (0)
404 #endif
405
406 #ifdef _EVENT_HAVE_TIMERCLEAR
407 #define evutil_timerclear(tvp) timerclear(tvp)
408 #else
409 #define evutil_timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
410 #endif
411
412
413
414
415 #define evutil_timercmp(tvp, uvp, cmp) \
416 (((tvp)->tv_sec == (uvp)->tv_sec) ? \
417 ((tvp)->tv_usec cmp (uvp)->tv_usec) : \
418 ((tvp)->tv_sec cmp (uvp)->tv_sec))
419
420 #ifdef _EVENT_HAVE_TIMERISSET
421 #define evutil_timerisset(tvp) timerisset(tvp)
422 #else
423 #define evutil_timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
424 #endif
425
426
427 #ifdef offsetof
428 #define evutil_offsetof(type, field) offsetof(type, field)
429 #else
430 #define evutil_offsetof(type, field) ((off_t)(&((type *)0)->field))
431 #endif
432
433
434
435 ev_int64_t evutil_strtoll(const char *s, char **endptr, int base);
436
437
438 #ifdef _EVENT_HAVE_GETTIMEOFDAY
439 #define evutil_gettimeofday(tv, tz) gettimeofday((tv), (tz))
440 #else
441 struct timezone;
442 int evutil_gettimeofday(struct timeval *tv, struct timezone *tz);
443 #endif
444
445
446
447
448 int evutil_snprintf(char *buf, size_t buflen, const char *format, ...)
449 #ifdef __GNUC__
450 __attribute__((format(printf, 3, 4)))
451 #endif
452 ;
453
454
455
456 int evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap)
457 #ifdef __GNUC__
458 __attribute__((format(printf, 3, 0)))
459 #endif
460 ;
461
462
463 const char *evutil_inet_ntop(int af, const void *src, char *dst, size_t len);
464
465 int evutil_inet_pton(int af, const char *src, void *dst);
466 struct sockaddr;
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488 int evutil_parse_sockaddr_port(const char *str, struct sockaddr *out, int *outlen);
489
490
491
492
493
494
495 int evutil_sockaddr_cmp(const struct sockaddr *sa1, const struct sockaddr *sa2,
496 int include_port);
497
498
499
500
501 int evutil_ascii_strcasecmp(const char *str1, const char *str2);
502
503
504
505 int evutil_ascii_strncasecmp(const char *str1, const char *str2, size_t n);
506
507
508
509 #ifdef _EVENT_HAVE_STRUCT_ADDRINFO
510 #define evutil_addrinfo addrinfo
511 #else
512
513
514
515
516
517 struct evutil_addrinfo {
518 int ai_flags;
519 int ai_family;
520 int ai_socktype;
521 int ai_protocol;
522 size_t ai_addrlen;
523 char *ai_canonname;
524 struct sockaddr *ai_addr;
525 struct evutil_addrinfo *ai_next;
526 };
527 #endif
528
529
530
531
532
533
534
535 #ifdef EAI_ADDRFAMILY
536 #define EVUTIL_EAI_ADDRFAMILY EAI_ADDRFAMILY
537 #else
538 #define EVUTIL_EAI_ADDRFAMILY -901
539 #endif
540 #ifdef EAI_AGAIN
541 #define EVUTIL_EAI_AGAIN EAI_AGAIN
542 #else
543 #define EVUTIL_EAI_AGAIN -902
544 #endif
545 #ifdef EAI_BADFLAGS
546 #define EVUTIL_EAI_BADFLAGS EAI_BADFLAGS
547 #else
548 #define EVUTIL_EAI_BADFLAGS -903
549 #endif
550 #ifdef EAI_FAIL
551 #define EVUTIL_EAI_FAIL EAI_FAIL
552 #else
553 #define EVUTIL_EAI_FAIL -904
554 #endif
555 #ifdef EAI_FAMILY
556 #define EVUTIL_EAI_FAMILY EAI_FAMILY
557 #else
558 #define EVUTIL_EAI_FAMILY -905
559 #endif
560 #ifdef EAI_MEMORY
561 #define EVUTIL_EAI_MEMORY EAI_MEMORY
562 #else
563 #define EVUTIL_EAI_MEMORY -906
564 #endif
565
566
567
568 #if defined(EAI_NODATA) && (!defined(EAI_NONAME) || EAI_NODATA != EAI_NONAME)
569 #define EVUTIL_EAI_NODATA EAI_NODATA
570 #else
571 #define EVUTIL_EAI_NODATA -907
572 #endif
573 #ifdef EAI_NONAME
574 #define EVUTIL_EAI_NONAME EAI_NONAME
575 #else
576 #define EVUTIL_EAI_NONAME -908
577 #endif
578 #ifdef EAI_SERVICE
579 #define EVUTIL_EAI_SERVICE EAI_SERVICE
580 #else
581 #define EVUTIL_EAI_SERVICE -909
582 #endif
583 #ifdef EAI_SOCKTYPE
584 #define EVUTIL_EAI_SOCKTYPE EAI_SOCKTYPE
585 #else
586 #define EVUTIL_EAI_SOCKTYPE -910
587 #endif
588 #ifdef EAI_SYSTEM
589 #define EVUTIL_EAI_SYSTEM EAI_SYSTEM
590 #else
591 #define EVUTIL_EAI_SYSTEM -911
592 #endif
593
594 #define EVUTIL_EAI_CANCEL -90001
595
596 #ifdef AI_PASSIVE
597 #define EVUTIL_AI_PASSIVE AI_PASSIVE
598 #else
599 #define EVUTIL_AI_PASSIVE 0x1000
600 #endif
601 #ifdef AI_CANONNAME
602 #define EVUTIL_AI_CANONNAME AI_CANONNAME
603 #else
604 #define EVUTIL_AI_CANONNAME 0x2000
605 #endif
606 #ifdef AI_NUMERICHOST
607 #define EVUTIL_AI_NUMERICHOST AI_NUMERICHOST
608 #else
609 #define EVUTIL_AI_NUMERICHOST 0x4000
610 #endif
611 #ifdef AI_NUMERICSERV
612 #define EVUTIL_AI_NUMERICSERV AI_NUMERICSERV
613 #else
614 #define EVUTIL_AI_NUMERICSERV 0x8000
615 #endif
616 #ifdef AI_V4MAPPED
617 #define EVUTIL_AI_V4MAPPED AI_V4MAPPED
618 #else
619 #define EVUTIL_AI_V4MAPPED 0x10000
620 #endif
621 #ifdef AI_ALL
622 #define EVUTIL_AI_ALL AI_ALL
623 #else
624 #define EVUTIL_AI_ALL 0x20000
625 #endif
626 #ifdef AI_ADDRCONFIG
627 #define EVUTIL_AI_ADDRCONFIG AI_ADDRCONFIG
628 #else
629 #define EVUTIL_AI_ADDRCONFIG 0x40000
630 #endif
631
632
633 struct evutil_addrinfo;
634
635
636
637
638
639
640
641
642
643
644
645 int evutil_getaddrinfo(const char *nodename, const char *servname,
646 const struct evutil_addrinfo *hints_in, struct evutil_addrinfo **res);
647
648
649 void evutil_freeaddrinfo(struct evutil_addrinfo *ai);
650
651 const char *evutil_gai_strerror(int err);
652
653
654
655
656
657
658
659 void evutil_secure_rng_get_bytes(void *buf, size_t n);
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677 int evutil_secure_rng_init(void);
678
679
680
681
682
683 #if 0
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698 void evutil_secure_rng_add_bytes(const char *dat, size_t datlen);
699 #endif
700
701 #ifdef __cplusplus
702 }
703 #endif
704
705 #endif