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