PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/src/core/sys/posix/netdb.d

http://github.com/dsimcha/druntime
D | 414 lines | 250 code | 36 blank | 128 comment | 2 complexity | e6712c14604eec19aa7beecb0a962577 MD5 | raw file
  1. /**
  2. * D header file for POSIX.
  3. *
  4. * Copyright: Copyright David Nadlinger 2011.
  5. * License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
  6. * Authors: David Nadlinger, Sean Kelly
  7. * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
  8. */
  9. /* Copyright David Nadlinger 2011.
  10. * Distributed under the Boost Software License, Version 1.0.
  11. * (See accompanying file LICENSE or copy at
  12. * http://www.boost.org/LICENSE_1_0.txt)
  13. */
  14. module core.sys.posix.netdb;
  15. private import core.sys.posix.config;
  16. public import core.stdc.inttypes; // for uint32_t
  17. public import core.sys.posix.netinet.in_; // for in_port_t, in_addr_t
  18. public import core.sys.posix.sys.types; // for ino_t
  19. public import core.sys.posix.sys.socket; // for socklen_t
  20. extern (C):
  21. //
  22. // Required
  23. //
  24. /*
  25. struct hostent
  26. {
  27. char* h_name;
  28. char** h_aliases;
  29. int h_addrtype;
  30. int h_length;
  31. char** h_addr_list;
  32. }
  33. struct netent
  34. {
  35. char* n_name;
  36. char** n_aliase;
  37. int n_addrtype;
  38. uint32_t n_net;
  39. }
  40. struct protoent
  41. {
  42. char* p_name;
  43. char** p_aliases;
  44. int p_proto;
  45. }
  46. struct servent
  47. {
  48. char* s_name;
  49. char** s_aliases;
  50. int s_port;
  51. char* s_proto;
  52. }
  53. IPPORT_RESERVED
  54. h_errno
  55. HOST_NOT_FOUND
  56. NO_DATA
  57. NO_RECOVERY
  58. TRY_AGAIN
  59. struct addrinfo
  60. {
  61. int ai_flags;
  62. int ai_family;
  63. int ai_socktype;
  64. int ai_protocol;
  65. socklen_t ai_addrlen;
  66. sockaddr* ai_addr;
  67. char* ai_canonname;
  68. addrinfo* ai_next;
  69. }
  70. AI_PASSIVE
  71. AI_CANONNAME
  72. AI_NUMERICHOST
  73. AI_NUMERICSERV
  74. AI_V4MAPPED
  75. AI_ALL
  76. AI_ADDRCONFIG
  77. NI_NOFQDN
  78. NI_NUMERICHOST
  79. NI_NAMEREQD
  80. NI_NUMERICSERV
  81. NI_NUMERICSCOPE
  82. NI_DGRAM
  83. EAI_AGAIN
  84. EAI_BADFLAGS
  85. EAI_FAIL
  86. EAI_FAMILY
  87. EAI_MEMORY
  88. EAI_NONAME
  89. EAI_SERVICE
  90. EAI_SOCKTYPE
  91. EAI_SYSTEM
  92. EAI_OVERFLOW
  93. void endhostent();
  94. void endnetent();
  95. void endprotoent();
  96. void endservent();
  97. void freeaddrinfo(addrinfo*);
  98. const(char)* gai_strerror(int);
  99. int getaddrinfo(const(char)*, const(char)*, const(addrinfo)*, addrinfo**);
  100. hostent* gethostbyaddr(const(void)*, socklen_t, int);
  101. hostent* gethostbyname(const(char)*);
  102. hostent* gethostent();
  103. int getnameinfo(const(sockaddr)*, socklen_t, char*, socklen_t, char*, socklen_t, int);
  104. netent* getnetbyaddr(uint32_t, int);
  105. netent* getnetbyname(const(char)*);
  106. netent* getnetent();
  107. protoent* getprotobyname(const(char)*);
  108. protoent* getprotobynumber(int);
  109. protoent* getprotoent();
  110. servent* getservbyname(const(char)*, const(char)*);
  111. servent* getservbyport(int, const(char)*);
  112. servent* getservent();
  113. void sethostent(int);
  114. void setnetent(int);
  115. void setprotoent(int);
  116. void setservent(int);
  117. */
  118. version( linux )
  119. {
  120. struct hostent
  121. {
  122. char* h_name;
  123. char** h_aliases;
  124. int h_addrtype;
  125. int h_length;
  126. char** h_addr_list;
  127. char* h_addr() @property { return h_addr_list[0]; } // non-standard
  128. }
  129. struct netent
  130. {
  131. char* n_name;
  132. char** n_aliase;
  133. int n_addrtype;
  134. uint32_t n_net;
  135. }
  136. struct protoent
  137. {
  138. char* p_name;
  139. char** p_aliases;
  140. int p_proto;
  141. }
  142. struct servent
  143. {
  144. char* s_name;
  145. char** s_aliases;
  146. int s_port;
  147. char* s_proto;
  148. }
  149. enum IPPORT_RESERVED = 1024;
  150. //h_errno
  151. enum HOST_NOT_FOUND = 1;
  152. enum NO_DATA = 4;
  153. enum NO_RECOVERY = 3;
  154. enum TRY_AGAIN = 2;
  155. struct addrinfo
  156. {
  157. int ai_flags;
  158. int ai_family;
  159. int ai_socktype;
  160. int ai_protocol;
  161. socklen_t ai_addrlen;
  162. sockaddr* ai_addr;
  163. char* ai_canonname;
  164. addrinfo* ai_next;
  165. }
  166. enum AI_PASSIVE = 0x1;
  167. enum AI_CANONNAME = 0x2;
  168. enum AI_NUMERICHOST = 0x4;
  169. enum AI_NUMERICSERV = 0x400;
  170. enum AI_V4MAPPED = 0x8;
  171. enum AI_ALL = 0x10;
  172. enum AI_ADDRCONFIG = 0x20;
  173. enum NI_NOFQDN = 4;
  174. enum NI_NUMERICHOST = 1;
  175. enum NI_NAMEREQD = 8;
  176. enum NI_NUMERICSERV = 2;
  177. //enum NI_NUMERICSCOPE = ?;
  178. enum NI_DGRAM = 16;
  179. enum NI_MAXHOST = 1025; // non-standard
  180. enum NI_MAXSERV = 32; // non-standard
  181. enum EAI_AGAIN = -3;
  182. enum EAI_BADFLAGS = -1;
  183. enum EAI_FAIL = -4;
  184. enum EAI_FAMILY = -6;
  185. enum EAI_MEMORY = -10;
  186. enum EAI_NONAME = -2;
  187. enum EAI_SERVICE = -8;
  188. enum EAI_SOCKTYPE = -7;
  189. enum EAI_SYSTEM = -11;
  190. enum EAI_OVERFLOW = -12;
  191. }
  192. else version( OSX )
  193. {
  194. struct hostent
  195. {
  196. char* h_name;
  197. char** h_aliases;
  198. int h_addrtype;
  199. int h_length;
  200. char** h_addr_list;
  201. char* h_addr() @property { return h_addr_list[0]; } // non-standard
  202. }
  203. struct netent
  204. {
  205. char* n_name;
  206. char** n_aliase;
  207. int n_addrtype;
  208. uint32_t n_net;
  209. }
  210. struct protoent
  211. {
  212. char* p_name;
  213. char** p_aliases;
  214. int p_proto;
  215. }
  216. struct servent
  217. {
  218. char* s_name;
  219. char** s_aliases;
  220. int s_port;
  221. char* s_proto;
  222. }
  223. enum IPPORT_RESERVED = 1024;
  224. //h_errno
  225. enum HOST_NOT_FOUND = 1;
  226. enum NO_DATA = 4;
  227. enum NO_RECOVERY = 3;
  228. enum TRY_AGAIN = 2;
  229. struct addrinfo
  230. {
  231. int ai_flags;
  232. int ai_family;
  233. int ai_socktype;
  234. int ai_protocol;
  235. socklen_t ai_addrlen;
  236. char* ai_canonname;
  237. sockaddr* ai_addr;
  238. addrinfo* ai_next;
  239. }
  240. enum AI_PASSIVE = 0x1;
  241. enum AI_CANONNAME = 0x2;
  242. enum AI_NUMERICHOST = 0x4;
  243. enum AI_NUMERICSERV = 0x1000;
  244. enum AI_V4MAPPED = 0x800;
  245. enum AI_ALL = 0x100;
  246. enum AI_ADDRCONFIG = 0x400;
  247. enum NI_NOFQDN = 0x1;
  248. enum NI_NUMERICHOST = 0x2;
  249. enum NI_NAMEREQD = 0x4;
  250. enum NI_NUMERICSERV = 0x8;
  251. //enum NI_NUMERICSCOPE = ?;
  252. enum NI_DGRAM = 0x10;
  253. enum NI_MAXHOST = 1025; // non-standard
  254. enum NI_MAXSERV = 32; // non-standard
  255. enum EAI_AGAIN = 2;
  256. enum EAI_BADFLAGS = 3;
  257. enum EAI_FAIL = 4;
  258. enum EAI_FAMILY = 5;
  259. enum EAI_MEMORY = 6;
  260. enum EAI_NONAME = 8;
  261. enum EAI_SERVICE = 9;
  262. enum EAI_SOCKTYPE = 10;
  263. enum EAI_SYSTEM = 11;
  264. enum EAI_OVERFLOW = 14;
  265. }
  266. else version( FreeBSD )
  267. {
  268. struct hostent
  269. {
  270. char* h_name;
  271. char** h_aliases;
  272. int h_addrtype;
  273. int h_length;
  274. char** h_addr_list;
  275. char* h_addr() @property { return h_addr_list[0]; } // non-standard
  276. }
  277. struct netent
  278. {
  279. char* n_name;
  280. char** n_aliase;
  281. int n_addrtype;
  282. uint32_t n_net;
  283. }
  284. struct protoent
  285. {
  286. char* p_name;
  287. char** p_aliases;
  288. int p_proto;
  289. }
  290. struct servent
  291. {
  292. char* s_name;
  293. char** s_aliases;
  294. int s_port;
  295. char* s_proto;
  296. }
  297. enum IPPORT_RESERVED = 1024;
  298. //h_errno
  299. enum HOST_NOT_FOUND = 1;
  300. enum NO_DATA = 4;
  301. enum NO_RECOVERY = 3;
  302. enum TRY_AGAIN = 2;
  303. struct addrinfo
  304. {
  305. int ai_flags;
  306. int ai_family;
  307. int ai_socktype;
  308. int ai_protocol;
  309. socklen_t ai_addrlen;
  310. char* ai_canonname;
  311. sockaddr* ai_addr;
  312. addrinfo* ai_next;
  313. }
  314. enum AI_PASSIVE = 0x1;
  315. enum AI_CANONNAME = 0x2;
  316. enum AI_NUMERICHOST = 0x4;
  317. enum AI_NUMERICSERV = 0x8;
  318. enum AI_V4MAPPED = 0x800;
  319. enum AI_ALL = 0x100;
  320. enum AI_ADDRCONFIG = 0x400;
  321. enum NI_NOFQDN = 0x1;
  322. enum NI_NUMERICHOST = 0x2;
  323. enum NI_NAMEREQD = 0x4;
  324. enum NI_NUMERICSERV = 0x8;
  325. //enum NI_NUMERICSCOPE = ?;
  326. enum NI_DGRAM = 0x10;
  327. enum NI_MAXHOST = 1025; // non-standard
  328. enum NI_MAXSERV = 32; // non-standard
  329. enum EAI_AGAIN = 2;
  330. enum EAI_BADFLAGS = 3;
  331. enum EAI_FAIL = 4;
  332. enum EAI_FAMILY = 5;
  333. enum EAI_MEMORY = 6;
  334. enum EAI_NONAME = 8;
  335. enum EAI_SERVICE = 9;
  336. enum EAI_SOCKTYPE = 10;
  337. enum EAI_SYSTEM = 11;
  338. enum EAI_OVERFLOW = 14;
  339. }
  340. version( Posix )
  341. {
  342. void endhostent();
  343. void endnetent();
  344. void endprotoent();
  345. void endservent();
  346. void freeaddrinfo(addrinfo*);
  347. const(char)* gai_strerror(int);
  348. int getaddrinfo(const(char)*, const(char)*, const(addrinfo)*, addrinfo**);
  349. hostent* gethostbyaddr(const(void)*, socklen_t, int);
  350. hostent* gethostbyname(const(char)*);
  351. hostent* gethostent();
  352. int getnameinfo(const(sockaddr)*, socklen_t, char*, socklen_t, char*, socklen_t, int);
  353. netent* getnetbyaddr(uint32_t, int);
  354. netent* getnetbyname(const(char)*);
  355. netent* getnetent();
  356. protoent* getprotobyname(const(char)*);
  357. protoent* getprotobynumber(int);
  358. protoent* getprotoent();
  359. servent* getservbyname(const(char)*, const(char)*);
  360. servent* getservbyport(int, const(char)*);
  361. servent* getservent();
  362. void sethostent(int);
  363. void setnetent(int);
  364. void setprotoent(int);
  365. void setservent(int);
  366. }