ua_architecture.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
  2. * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
  3. *
  4. * Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
  5. * Copyright 2017 (c) Stefan Profanter, fortiss GmbH
  6. */
  7. #ifndef PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_
  8. #define PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_
  9. #ifndef _BSD_SOURCE
  10. # define _BSD_SOURCE
  11. #endif
  12. /* Disable some security warnings on MSVC */
  13. #ifdef _MSC_VER
  14. # define _CRT_SECURE_NO_WARNINGS
  15. #endif
  16. /* Assume that Windows versions are newer than Windows XP */
  17. #if defined(__MINGW32__) && (!defined(WINVER) || WINVER < 0x501)
  18. # undef WINVER
  19. # undef _WIN32_WINDOWS
  20. # undef _WIN32_WINNT
  21. # define WINVER 0x0501
  22. # define _WIN32_WINDOWS 0x0501
  23. # define _WIN32_WINNT 0x0501
  24. #endif
  25. #include <errno.h>
  26. #include <winsock2.h>
  27. #include <ws2tcpip.h>
  28. #define ssize_t int
  29. #define OPTVAL_TYPE char
  30. #define UA_sleep_ms(X) Sleep(X)
  31. #define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds)
  32. #define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds)
  33. #ifdef UNDER_CE
  34. # define errno
  35. #endif
  36. #define UA_IPV6 1
  37. #define UA_SOCKET int
  38. #define UA_INVALID_SOCKET -1
  39. #define UA_ERRNO WSAGetLastError()
  40. #define UA_INTERRUPTED WSAEINTR
  41. #define UA_AGAIN WSAEWOULDBLOCK
  42. #define UA_EAGAIN EAGAIN
  43. #define UA_WOULDBLOCK WSAEWOULDBLOCK
  44. #define UA_ERR_CONNECTION_PROGRESS WSAEWOULDBLOCK
  45. #include "ua_types.h"
  46. #define ua_send send
  47. #define ua_recv recv
  48. #define ua_close closesocket
  49. #define ua_select select
  50. #define ua_shutdown shutdown
  51. #define ua_socket socket
  52. #define ua_bind bind
  53. #define ua_listen listen
  54. #define ua_accept accept
  55. #define ua_connect connect
  56. #define ua_translate_error gai_strerror
  57. #define ua_getaddrinfo getaddrinfo
  58. #define ua_getsockopt getsockopt
  59. #define ua_setsockopt setsockopt
  60. #define ua_freeaddrinfo freeaddrinfo
  61. static UA_INLINE UA_StatusCode socket_set_blocking(UA_SOCKET sockfd){
  62. u_long iMode = 0;
  63. if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
  64. return UA_STATUSCODE_BADINTERNALERROR;
  65. return UA_STATUSCODE_GOOD;;
  66. }
  67. static UA_INLINE UA_StatusCode socket_set_nonblocking(UA_SOCKET sockfd){
  68. u_long iMode = 1;
  69. if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
  70. return UA_STATUSCODE_BADINTERNALERROR;
  71. return UA_STATUSCODE_GOOD;;
  72. }
  73. #include <stdio.h>
  74. #define ua_snprintf(source, size, string, ...) _snprintf_s(source, size, _TRUNCATE, string, __VA_ARGS__)
  75. static UA_INLINE void ua_initialize_architecture_network(void){
  76. WSADATA wsaData;
  77. WORD wVersionRequested = MAKEWORD(2, 2);
  78. WSAStartup(wVersionRequested, &wsaData);
  79. }
  80. static UA_INLINE void ua_deinitialize_architecture_network(void){
  81. WSACleanup();
  82. }
  83. #endif /* PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_ */