1
1

types.d 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. /*
  2. Boost Software License - Version 1.0 - August 17th, 2003
  3. Permission is hereby granted, free of charge, to any person or organization
  4. obtaining a copy of the software and accompanying documentation covered by
  5. this license (the "Software") to use, reproduce, display, distribute,
  6. execute, and transmit the Software, and to prepare derivative works of the
  7. Software, and to permit third-parties to whom the Software is furnished to
  8. do so, all subject to the following:
  9. The copyright notices in the Software and this entire statement, including
  10. the above license grant, this restriction and the following disclaimer,
  11. must be included in all copies of the Software, in whole or in part, and
  12. all derivative works of the Software, unless such copies or derivative
  13. works are solely in the form of machine-executable object code generated by
  14. a source language processor.
  15. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
  18. SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
  19. FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
  20. ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  21. DEALINGS IN THE SOFTWARE.
  22. */
  23. module derelict.nanomsg.types;
  24. /******************************************************************************/
  25. /* ABI versioning support. */
  26. /******************************************************************************/
  27. /* Don't change this unless you know exactly what you're doing and have */
  28. /* read and understand the following documents: */
  29. /* www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html */
  30. /* www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html */
  31. /* The current interface version. */
  32. enum NN_VERSION_CURRENT = 2;
  33. /* The latest revision of the current interface. */
  34. enum NN_VERSION_REVISION = 1;
  35. /* How many past interface versions are still supported. */
  36. enum NN_VERSION_AGE = 2;
  37. /******************************************************************************/
  38. /* Errors. */
  39. /******************************************************************************/
  40. /* A number random enough not to collide with different errno ranges on */
  41. /* different OSes. The assumption is that error_t is at least 32-bit type. */
  42. enum NN_HAUSNUMERO = 156384712;
  43. /* On some platforms some standard POSIX errnos are not defined. */
  44. enum ENOTSUP = (NN_HAUSNUMERO + 1);
  45. enum EPROTONOSUPPORT = (NN_HAUSNUMERO + 2);
  46. enum ENOBUFS = (NN_HAUSNUMERO + 3);
  47. enum ENETDOWN = (NN_HAUSNUMERO + 4);
  48. enum EADDRINUSE = (NN_HAUSNUMERO + 5);
  49. enum EADDRNOTAVAIL = (NN_HAUSNUMERO + 6);
  50. enum ECONNREFUSED = (NN_HAUSNUMERO + 7);
  51. enum EINPROGRESS = (NN_HAUSNUMERO + 8);
  52. enum ENOTSOCK = (NN_HAUSNUMERO + 9);
  53. enum EAFNOSUPPORT = (NN_HAUSNUMERO + 10);
  54. enum EPROTO = (NN_HAUSNUMERO + 11);
  55. enum EAGAIN = (NN_HAUSNUMERO + 12);
  56. enum EBADF = (NN_HAUSNUMERO + 13);
  57. enum EINVAL = (NN_HAUSNUMERO + 14);
  58. enum EMFILE = (NN_HAUSNUMERO + 15);
  59. enum EFAULT = (NN_HAUSNUMERO + 16);
  60. enum EACCES = (NN_HAUSNUMERO + 17);
  61. enum EACCESS = (EACCES);
  62. enum ENETRESET = (NN_HAUSNUMERO + 18);
  63. enum ENETUNREACH = (NN_HAUSNUMERO + 19);
  64. enum EHOSTUNREACH = (NN_HAUSNUMERO + 20);
  65. enum ENOTCONN = (NN_HAUSNUMERO + 21);
  66. enum EMSGSIZE = (NN_HAUSNUMERO + 22);
  67. enum ETIMEDOUT = (NN_HAUSNUMERO + 23);
  68. enum ECONNABORTED = (NN_HAUSNUMERO + 24);
  69. enum ECONNRESET = (NN_HAUSNUMERO + 25);
  70. enum ENOPROTOOPT = (NN_HAUSNUMERO + 26);
  71. enum EISCONN = (NN_HAUSNUMERO + 27);
  72. enum NN_EISCONN_DEFINED = 1;
  73. enum ESOCKTNOSUPPORT = (NN_HAUSNUMERO + 28);
  74. /* Native nanomsg error codes. */
  75. enum ETERM = (NN_HAUSNUMERO + 53);
  76. enum EFSM = (NN_HAUSNUMERO + 54);
  77. /* Constants that are returned in `ns` member of nn_symbol_properties */
  78. enum NN_NS_NAMESPACE = 0;
  79. enum NN_NS_VERSION = 1;
  80. enum NN_NS_DOMAIN = 2;
  81. enum NN_NS_TRANSPORT = 3;
  82. enum NN_NS_PROTOCOL = 4;
  83. enum NN_NS_OPTION_LEVEL = 5;
  84. enum NN_NS_SOCKET_OPTION = 6;
  85. enum NN_NS_TRANSPORT_OPTION = 7;
  86. enum NN_NS_OPTION_TYPE = 8;
  87. enum NN_NS_OPTION_UNIT = 9;
  88. enum NN_NS_FLAG = 10;
  89. enum NN_NS_ERROR = 11;
  90. enum NN_NS_LIMIT = 12;
  91. /* Constants that are returned in `type` member of nn_symbol_properties */
  92. enum NN_TYPE_NONE = 0;
  93. enum NN_TYPE_INT = 1;
  94. enum NN_TYPE_STR = 2;
  95. /* Constants that are returned in the `unit` member of nn_symbol_properties */
  96. enum NN_UNIT_NONE = 0;
  97. enum NN_UNIT_BYTES = 1;
  98. enum NN_UNIT_MILLISECONDS = 2;
  99. enum NN_UNIT_PRIORITY = 3;
  100. enum NN_UNIT_BOOLEAN = 4;
  101. /* Structure that is returned from nn_symbol */
  102. struct nn_symbol_properties {
  103. /* The constant value */
  104. int value;
  105. /* The constant name */
  106. const char* name;
  107. /* The constant namespace, or zero for namespaces themselves */
  108. int ns;
  109. /* The option type for socket option constants */
  110. int type;
  111. /* The unit for the option value for socket option constants */
  112. int unit;
  113. };
  114. /******************************************************************************/
  115. /* Zero-copy support. */
  116. /******************************************************************************/
  117. enum NN_MSG = cast(size_t)(-1);
  118. /******************************************************************************/
  119. /* Socket definition. */
  120. /******************************************************************************/
  121. struct nn_iovec {
  122. void* iov_base;
  123. size_t iov_len;
  124. };
  125. struct nn_msghdr {
  126. nn_iovec* msg_iov;
  127. int msg_iovlen;
  128. void* msg_control;
  129. size_t msg_controllen;
  130. };
  131. struct nn_cmsghdr {
  132. size_t cmsg_len;
  133. int cmsg_level;
  134. int cmsg_type;
  135. };
  136. /* SP address families. */
  137. enum AF_SP = 1;
  138. enum AF_SP_RAW = 2;
  139. /* Max size of an SP address. */
  140. enum NN_SOCKADDR_MAX = 128;
  141. /* Socket option levels: Negative numbers are reserved for transports,
  142. positive for socket types. */
  143. enum NN_SOL_SOCKET = 0;
  144. /* Generic socket options (NN_SOL_SOCKET level). */
  145. enum NN_LINGER = 1;
  146. enum NN_SNDBUF = 2;
  147. enum NN_RCVBUF = 3;
  148. enum NN_SNDTIMEO = 4;
  149. enum NN_RCVTIMEO = 5;
  150. enum NN_RECONNECT_IVL = 6;
  151. enum NN_RECONNECT_IVL_MAX = 7;
  152. enum NN_SNDPRIO = 8;
  153. enum NN_RCVPRIO = 9;
  154. enum NN_SNDFD = 10;
  155. enum NN_RCVFD = 11;
  156. enum NN_DOMAIN = 12;
  157. enum NN_PROTOCOL = 13;
  158. enum NN_IPV4ONLY = 14;
  159. enum NN_SOCKET_NAME = 15;
  160. /* Send/recv options. */
  161. enum NN_DONTWAIT = 1;
  162. /* Ancillary data. */
  163. enum PROTO_SP = 1;
  164. enum SP_HDR = 1;
  165. /******************************************************************************/
  166. /* Socket mutliplexing support. */
  167. /******************************************************************************/
  168. enum NN_POLLIN = 1;
  169. enum NN_POLLOUT = 2;
  170. struct nn_pollfd {
  171. int fd;
  172. short events;
  173. short revents;
  174. };
  175. /*****************/
  176. /* Pair */
  177. /*****************/
  178. enum NN_PROTO_PAIR = 1;
  179. enum NN_PAIR = (NN_PROTO_PAIR * 16 + 0);
  180. /*****************/
  181. /* Pubsub */
  182. /*****************/
  183. enum NN_PROTO_PUBSUB = 2;
  184. enum NN_PUB = (NN_PROTO_PUBSUB * 16 + 0);
  185. enum NN_SUB = (NN_PROTO_PUBSUB * 16 + 1);
  186. enum NN_SUB_SUBSCRIBE = 1;
  187. enum NN_SUB_UNSUBSCRIBE = 2;
  188. /*****************/
  189. /* ReqRep */
  190. /*****************/
  191. enum NN_PROTO_REQREP = 3;
  192. enum NN_REQ = (NN_PROTO_REQREP * 16 + 0);
  193. enum NN_REP = (NN_PROTO_REQREP * 16 + 1);
  194. enum NN_REQ_RESEND_IVL = 1;
  195. /*****************/
  196. /* Pipeline */
  197. /*****************/
  198. enum NN_PROTO_PIPELINE = 5;
  199. enum NN_PUSH = (NN_PROTO_PIPELINE * 16 + 0);
  200. enum NN_PULL= (NN_PROTO_PIPELINE * 16 + 1);
  201. /*****************/
  202. /* Survey */
  203. /*****************/
  204. enum NN_PROTO_SURVEY = 6;
  205. enum NN_SURVEYOR = (NN_PROTO_SURVEY * 16 + 0);
  206. enum NN_RESPONDENT = (NN_PROTO_SURVEY * 16 + 1);
  207. enum NN_SURVEYOR_DEADLINE = 1;
  208. /*****************/
  209. /* Bus */
  210. /*****************/
  211. enum NN_PROTO_BUS = 7;
  212. enum NN_BUS = (NN_PROTO_BUS * 16 + 0);
  213. /*****************/
  214. /* Inproc */
  215. /*****************/
  216. enum NN_INPROC = -1;
  217. /*****************/
  218. /* Ipc */
  219. /*****************/
  220. enum NN_IPC = -2;
  221. /*****************/
  222. /* Tcp */
  223. /*****************/
  224. enum NN_TCP = -3;
  225. enum NN_TCP_NODELAY = 1;