This source file includes following definitions.
- opal_inet_pton
- opal_inet_ntop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include "opal_config.h"
21
22 #include "opal/win32/opal_inet.h"
23 #include "opal/util/output.h"
24
25
26
27
28
29
30
31
32
33
34 int opal_inet_pton(int af, const char *src, void *dst)
35 {
36 int addr_len;
37 struct sockaddr sa;
38 struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
39 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
40
41 memset (&sa, 0, sizeof(struct sockaddr));
42
43 switch (af) {
44 case AF_INET:
45 addr_len = sizeof(struct sockaddr_in);
46 break;
47
48 case AF_INET6:
49 addr_len = sizeof(struct sockaddr_in6);
50 break;
51
52 default:
53 return -1;
54 }
55
56 if ( 0 == WSAStringToAddress ((LPTSTR) src, af, NULL, (LPSOCKADDR) &sa, &addr_len )) {
57 switch (af) {
58 case AF_INET:
59 memcpy (dst, &sin->sin_addr, sizeof(struct in_addr));
60 break;
61
62 case AF_INET6:
63 memcpy (dst, &sin6->sin6_addr, sizeof(struct in6_addr));
64 break;
65 }
66 return 1;
67 } else {
68 opal_output(0, "WSAStringToAddress failed %s:%d. Error code: %d", __FILE__, __LINE__, GetLastError());
69 return 0;
70 }
71 }
72
73
74
75
76
77
78
79
80 const char *opal_inet_ntop(int af, const void *src, char *dst, size_t size)
81 {
82 int addr_len;
83 struct sockaddr sa;
84 DWORD str_len = size;
85 struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
86 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
87
88 memset (&sa, 0, sizeof (struct sockaddr));
89
90 switch (af) {
91 case AF_INET:
92 addr_len = sizeof(struct sockaddr_in);
93 sin->sin_family = af;
94 memcpy (&sin->sin_addr, src, sizeof (struct in_addr));
95 break;
96
97 case AF_INET6:
98 addr_len = sizeof(struct sockaddr_in6);
99 sin6->sin6_family = af;
100 memcpy (&sin6->sin6_addr, src, sizeof (struct in6_addr));
101 break;
102
103 default:
104 return NULL;
105 }
106
107 if ( 0 == WSAAddressToString ((LPSOCKADDR) &sa, addr_len, NULL, dst, &str_len )) {
108 return dst;
109 } else {
110 opal_output(0, "WSAAddressToString failed %s:%d. Error code: %d", __FILE__, __LINE__, GetLastError());
111 return NULL;
112 }
113 }