aboutsummaryrefslogtreecommitdiff
path: root/src/gns
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-09-28 07:53:28 +0000
committerChristian Grothoff <christian@grothoff.org>2012-09-28 07:53:28 +0000
commit23e7a5c1060d37c45a955e4bed961661af8cafb9 (patch)
tree9dd69941cf64d243bedd11ac0ec718e65f28d38f /src/gns
parent0a99d7b72bd98fddabf16920a9e0129fbf8e0521 (diff)
downloadgnunet-23e7a5c1060d37c45a955e4bed961661af8cafb9.tar.gz
gnunet-23e7a5c1060d37c45a955e4bed961661af8cafb9.zip
-dos2unix
Diffstat (limited to 'src/gns')
-rw-r--r--src/gns/w32nsp-resolve.c654
-rw-r--r--src/gns/w32nsp.c24
2 files changed, 351 insertions, 327 deletions
diff --git a/src/gns/w32nsp-resolve.c b/src/gns/w32nsp-resolve.c
index 065d3952f..884e4ba43 100644
--- a/src/gns/w32nsp-resolve.c
+++ b/src/gns/w32nsp-resolve.c
@@ -1,20 +1,20 @@
1#define INITGUID 1#define INITGUID
2#include <windows.h> 2#include <windows.h>
3#include <nspapi.h> 3#include <nspapi.h>
4#include <ws2spi.h> 4#include <ws2spi.h>
5#include <nspapi.h> 5#include <nspapi.h>
6#include <ws2tcpip.h> 6#include <ws2tcpip.h>
7#include "gnunet_w32nsp_lib.h" 7#include "gnunet_w32nsp_lib.h"
8#include <stdio.h> 8#include <stdio.h>
9 9
10typedef int (WSPAPI *LPNSPSTARTUP) (LPGUID lpProviderId, LPNSP_ROUTINE lpnspRoutines); 10typedef int (WSPAPI *LPNSPSTARTUP) (LPGUID lpProviderId, LPNSP_ROUTINE lpnspRoutines);
11 11
12GUID host = {0x0002a800,0,0,{ 0xC0,0,0,0,0,0,0,0x46 }}; 12GUID host = {0x0002a800,0,0,{ 0xC0,0,0,0,0,0,0,0x46 }};
13GUID ip4 = {0x00090035,0,1,{ 0xc0,0,0,0,0,0,0,0x046}}; 13GUID ip4 = {0x00090035,0,1,{ 0xc0,0,0,0,0,0,0,0x046}};
14GUID ip6 = {0x00090035,0,0x001c, { 0xc0,0,0,0,0,0,0,0x046}}; 14GUID ip6 = {0x00090035,0,0x001c, { 0xc0,0,0,0,0,0,0,0x046}};
15 15
16DEFINE_GUID(W32_DNS, 0x22059D40, 0x7E9E, 0x11CF, 0xAE, 0x5A, 0x00, 0xAA, 0x00, 0xA7, 0x11, 0x2B); 16DEFINE_GUID(W32_DNS, 0x22059D40, 0x7E9E, 0x11CF, 0xAE, 0x5A, 0x00, 0xAA, 0x00, 0xA7, 0x11, 0x2B);
17 17
18#define DEFINE_DNS_GUID(a,x) DEFINE_GUID(a, 0x00090035, 0x0000, x, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46) 18#define DEFINE_DNS_GUID(a,x) DEFINE_GUID(a, 0x00090035, 0x0000, x, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)
19DEFINE_DNS_GUID(SVCID_DNS_TYPE_A, 0x0001); 19DEFINE_DNS_GUID(SVCID_DNS_TYPE_A, 0x0001);
20DEFINE_DNS_GUID(SVCID_DNS_TYPE_NS, 0x0002); 20DEFINE_DNS_GUID(SVCID_DNS_TYPE_NS, 0x0002);
@@ -27,314 +27,314 @@ DEFINE_DNS_GUID(SVCID_DNS_TYPE_AAAA, 0x001c);
27DEFINE_DNS_GUID(SVCID_DNS_TYPE_SRV, 0x0021); 27DEFINE_DNS_GUID(SVCID_DNS_TYPE_SRV, 0x0021);
28DEFINE_GUID(SVCID_HOSTNAME, 0x0002a800, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); 28DEFINE_GUID(SVCID_HOSTNAME, 0x0002a800, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
29DEFINE_GUID(SVCID_INET_HOSTADDRBYNAME, 0x0002a803, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); 29DEFINE_GUID(SVCID_INET_HOSTADDRBYNAME, 0x0002a803, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
30 30
31// 31//
32// Utility to turn a list of offsets into a list of addresses. Used 32// Utility to turn a list of offsets into a list of addresses. Used
33// to convert structures returned as BLOBs. 33// to convert structures returned as BLOBs.
34// 34//
35 35
36VOID FixList(PCHAR ** List, PCHAR Base) 36VOID FixList(PCHAR ** List, PCHAR Base)
37{ 37{
38 if(*List) 38 if(*List)
39 { 39 {
40 PCHAR * Addr; 40 PCHAR * Addr;
41 41
42 Addr = *List = (PCHAR *)( ((DWORD)*List + Base) ); 42 Addr = *List = (PCHAR *)( ((DWORD)*List + Base) );
43 while(*Addr) 43 while(*Addr)
44 { 44 {
45 *Addr = (PCHAR)(((DWORD)*Addr + Base)); 45 *Addr = (PCHAR)(((DWORD)*Addr + Base));
46 Addr++; 46 Addr++;
47 } 47 }
48 } 48 }
49} 49}
50 50
51 51
52// 52//
53// Routine to convert a hostent returned in a BLOB to one with 53// Routine to convert a hostent returned in a BLOB to one with
54// usable pointers. The structure is converted in-place. 54// usable pointers. The structure is converted in-place.
55// 55//
56VOID UnpackHostEnt(struct hostent * hostent) 56VOID UnpackHostEnt(struct hostent * hostent)
57{ 57{
58 PCHAR pch; 58 PCHAR pch;
59 59
60 pch = (PCHAR)hostent; 60 pch = (PCHAR)hostent;
61 61
62 if(hostent->h_name) 62 if(hostent->h_name)
63 { 63 {
64 hostent->h_name = (PCHAR)((DWORD)hostent->h_name + pch); 64 hostent->h_name = (PCHAR)((DWORD)hostent->h_name + pch);
65 } 65 }
66 FixList(&hostent->h_aliases, pch); 66 FixList(&hostent->h_aliases, pch);
67 FixList(&hostent->h_addr_list, pch); 67 FixList(&hostent->h_addr_list, pch);
68} 68}
69 69
70void 70void
71print_hostent (struct hostent *he) 71print_hostent (struct hostent *he)
72{ 72{
73 int i; 73 int i;
74 char **pAlias; 74 char **pAlias;
75 printf("\tOfficial name: %s\n", he->h_name); 75 printf("\tOfficial name: %s\n", he->h_name);
76 for (pAlias = he->h_aliases; *pAlias != 0; pAlias++) { 76 for (pAlias = he->h_aliases; *pAlias != 0; pAlias++) {
77 printf("\tAlternate name #%d: %s\n", ++i, *pAlias); 77 printf("\tAlternate name #%d: %s\n", ++i, *pAlias);
78 } 78 }
79 printf("\tAddress type: "); 79 printf("\tAddress type: ");
80 switch (he->h_addrtype) { 80 switch (he->h_addrtype) {
81 case AF_INET: 81 case AF_INET:
82 printf("AF_INET\n"); 82 printf("AF_INET\n");
83 break; 83 break;
84 case AF_INET6: 84 case AF_INET6:
85 printf("AF_INET6\n"); 85 printf("AF_INET6\n");
86 break; 86 break;
87 case AF_NETBIOS: 87 case AF_NETBIOS:
88 printf("AF_NETBIOS\n"); 88 printf("AF_NETBIOS\n");
89 break; 89 break;
90 default: 90 default:
91 printf(" %d\n", he->h_addrtype); 91 printf(" %d\n", he->h_addrtype);
92 break; 92 break;
93 } 93 }
94 printf("\tAddress length: %d\n", he->h_length); 94 printf("\tAddress length: %d\n", he->h_length);
95 95
96 if (he->h_addrtype == AF_INET) { 96 if (he->h_addrtype == AF_INET) {
97 struct sockaddr_in addr; 97 struct sockaddr_in addr;
98 memset (&addr, 0, sizeof (addr)); 98 memset (&addr, 0, sizeof (addr));
99 addr.sin_family = AF_INET; 99 addr.sin_family = AF_INET;
100 addr.sin_port = 0; 100 addr.sin_port = 0;
101 i = 0; 101 i = 0;
102 while (he->h_addr_list[i] != 0) { 102 while (he->h_addr_list[i] != 0) {
103 char buf[1024]; 103 char buf[1024];
104 DWORD buflen = 1024; 104 DWORD buflen = 1024;
105 addr.sin_addr = *(struct in_addr *) he->h_addr_list[i++]; 105 addr.sin_addr = *(struct in_addr *) he->h_addr_list[i++];
106 if (NO_ERROR == WSAAddressToStringA ((LPSOCKADDR) &addr, sizeof (addr), NULL, buf, &buflen)) 106 if (NO_ERROR == WSAAddressToStringA ((LPSOCKADDR) &addr, sizeof (addr), NULL, buf, &buflen))
107 printf("\tIPv4 Address #%d: %s\n", i, buf); 107 printf("\tIPv4 Address #%d: %s\n", i, buf);
108 else 108 else
109 printf("\tIPv4 Address #%d: Can't convert: %lu\n", i, GetLastError ()); 109 printf("\tIPv4 Address #%d: Can't convert: %lu\n", i, GetLastError ());
110 } 110 }
111 } else if (he->h_addrtype == AF_INET6) { 111 } else if (he->h_addrtype == AF_INET6) {
112 struct sockaddr_in6 addr; 112 struct sockaddr_in6 addr;
113 memset (&addr, 0, sizeof (addr)); 113 memset (&addr, 0, sizeof (addr));
114 addr.sin6_family = AF_INET6; 114 addr.sin6_family = AF_INET6;
115 addr.sin6_port = 0; 115 addr.sin6_port = 0;
116 i = 0; 116 i = 0;
117 while (he->h_addr_list[i] != 0) { 117 while (he->h_addr_list[i] != 0) {
118 char buf[1024]; 118 char buf[1024];
119 DWORD buflen = 1024; 119 DWORD buflen = 1024;
120 addr.sin6_addr = *(struct in6_addr *) he->h_addr_list[i++]; 120 addr.sin6_addr = *(struct in6_addr *) he->h_addr_list[i++];
121 if (NO_ERROR == WSAAddressToStringA ((LPSOCKADDR) &addr, sizeof (addr), NULL, buf, &buflen)) 121 if (NO_ERROR == WSAAddressToStringA ((LPSOCKADDR) &addr, sizeof (addr), NULL, buf, &buflen))
122 printf("\tIPv6 Address #%d: %s\n", i, buf); 122 printf("\tIPv6 Address #%d: %s\n", i, buf);
123 else 123 else
124 printf("\tIPv6 Address #%d: Can't convert: %lu\n", i, GetLastError ()); 124 printf("\tIPv6 Address #%d: Can't convert: %lu\n", i, GetLastError ());
125 } 125 }
126 } 126 }
127} 127}
128 128
129int 129int
130main (int argc, char **argv) 130main (int argc, char **argv)
131{ 131{
132 int ret; 132 int ret;
133 int r = 1; 133 int r = 1;
134 WSADATA wsd; 134 WSADATA wsd;
135 GUID *prov = NULL; 135 GUID *prov = NULL;
136 GUID *sc = NULL; 136 GUID *sc = NULL;
137 wchar_t *cmdl; 137 wchar_t *cmdl;
138 int wargc; 138 int wargc;
139 wchar_t **wargv; 139 wchar_t **wargv;
140 140
141 if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) 141 if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
142 { 142 {
143 fprintf (stderr, "WSAStartup() failed: %lu\n", GetLastError()); 143 fprintf (stderr, "WSAStartup() failed: %lu\n", GetLastError());
144 return 5; 144 return 5;
145 } 145 }
146 146
147 cmdl = GetCommandLineW (); 147 cmdl = GetCommandLineW ();
148 if (cmdl == NULL) 148 if (cmdl == NULL)
149 { 149 {
150 WSACleanup(); 150 WSACleanup();
151 return 2; 151 return 2;
152 } 152 }
153 wargv = CommandLineToArgvW (cmdl, &wargc); 153 wargv = CommandLineToArgvW (cmdl, &wargc);
154 if (wargv == NULL) 154 if (wargv == NULL)
155 { 155 {
156 WSACleanup(); 156 WSACleanup();
157 return 3; 157 return 3;
158 } 158 }
159 r = 4; 159 r = 4;
160 160
161 if (wargc == 5) 161 if (wargc == 5)
162 { 162 {
163 if (wcscmp (wargv[1], L"A") == 0) 163 if (wcscmp (wargv[1], L"A") == 0)
164 sc = &SVCID_DNS_TYPE_A; 164 sc = &SVCID_DNS_TYPE_A;
165 else if (wcscmp (wargv[1], L"AAAA") == 0) 165 else if (wcscmp (wargv[1], L"AAAA") == 0)
166 sc = &SVCID_DNS_TYPE_AAAA; 166 sc = &SVCID_DNS_TYPE_AAAA;
167 else if (wcscmp (wargv[1], L"name") == 0) 167 else if (wcscmp (wargv[1], L"name") == 0)
168 sc = &SVCID_HOSTNAME; 168 sc = &SVCID_HOSTNAME;
169 else if (wcscmp (wargv[1], L"addr") == 0) 169 else if (wcscmp (wargv[1], L"addr") == 0)
170 sc = &SVCID_INET_HOSTADDRBYNAME; 170 sc = &SVCID_INET_HOSTADDRBYNAME;
171 else 171 else
172 wargc -= 1; 172 wargc -= 1;
173 if (wcscmp (wargv[4], L"mswdns") == 0) 173 if (wcscmp (wargv[4], L"mswdns") == 0)
174 prov = &W32_DNS; 174 prov = &W32_DNS;
175 else if (wcscmp (wargv[4], L"gnunetdns") == 0) 175 else if (wcscmp (wargv[4], L"gnunetdns") == 0)
176 prov = &GNUNET_NAMESPACE_PROVIDER_DNS; 176 prov = &GNUNET_NAMESPACE_PROVIDER_DNS;
177 else 177 else
178 wargc -= 1; 178 wargc -= 1;
179 } 179 }
180 180
181 if (wargc == 5) 181 if (wargc == 5)
182 { 182 {
183 HMODULE nsp; 183 HMODULE nsp;
184 184
185 nsp = LoadLibraryW (wargv[3]); 185 nsp = LoadLibraryW (wargv[3]);
186 if (nsp == NULL) 186 if (nsp == NULL)
187 { 187 {
188 fprintf (stderr, "Failed to load library `%S'\n", wargv[3]); 188 fprintf (stderr, "Failed to load library `%S'\n", wargv[3]);
189 } 189 }
190 else 190 else
191 { 191 {
192 LPNSPSTARTUP startup = (LPNSPSTARTUP) GetProcAddress (nsp, "NSPStartup"); 192 LPNSPSTARTUP startup = (LPNSPSTARTUP) GetProcAddress (nsp, "NSPStartup");
193 if (startup != NULL) 193 if (startup != NULL)
194 { 194 {
195 NSP_ROUTINE api; 195 NSP_ROUTINE api;
196 ret = startup (prov, &api); 196 ret = startup (prov, &api);
197 if (NO_ERROR != ret) 197 if (NO_ERROR != ret)
198 fprintf (stderr, "startup failed\n"); 198 fprintf (stderr, "startup failed\n");
199 else 199 else
200 { 200 {
201 HANDLE lookup; 201 HANDLE lookup;
202 WSAQUERYSETW search; 202 WSAQUERYSETW search;
203 char buf[4096]; 203 char buf[4096];
204 WSAQUERYSETW *result = (WSAQUERYSETW *) buf; 204 WSAQUERYSETW *result = (WSAQUERYSETW *) buf;
205 DWORD resultsize; 205 DWORD resultsize;
206 DWORD err; 206 DWORD err;
207 memset (&search, 0, sizeof (search)); 207 memset (&search, 0, sizeof (search));
208 search.dwSize = sizeof (search); 208 search.dwSize = sizeof (search);
209 search.lpszServiceInstanceName = (wcscmp (wargv[2], L" ") == 0) ? NULL : wargv[2]; 209 search.lpszServiceInstanceName = (wcscmp (wargv[2], L" ") == 0) ? NULL : wargv[2];
210 search.lpServiceClassId = sc; 210 search.lpServiceClassId = sc;
211 search.lpNSProviderId = prov; 211 search.lpNSProviderId = prov;
212 search.dwNameSpace = NS_ALL; 212 search.dwNameSpace = NS_ALL;
213 ret = api.NSPLookupServiceBegin (prov, &search, NULL, LUP_RETURN_ALL, &lookup); 213 ret = api.NSPLookupServiceBegin (prov, &search, NULL, LUP_RETURN_ALL, &lookup);
214 if (ret != NO_ERROR) 214 if (ret != NO_ERROR)
215 { 215 {
216 fprintf (stderr, "lookup start failed\n"); 216 fprintf (stderr, "lookup start failed\n");
217 } 217 }
218 else 218 else
219 { 219 {
220 resultsize = 4096; 220 resultsize = 4096;
221 ret = api.NSPLookupServiceNext (lookup, LUP_RETURN_ALL, &resultsize, result); 221 ret = api.NSPLookupServiceNext (lookup, LUP_RETURN_ALL, &resultsize, result);
222 err = GetLastError (); 222 err = GetLastError ();
223 if (ret != NO_ERROR) 223 if (ret != NO_ERROR)
224 { 224 {
225 fprintf (stderr, "lookup next failed\n"); 225 fprintf (stderr, "lookup next failed\n");
226 } 226 }
227 else 227 else
228 { 228 {
229 int i; 229 int i;
230 printf ("Got result:\n"); 230 printf ("Got result:\n");
231 printf (" lpszServiceInstanceName: %S\n", result->lpszServiceInstanceName ? result->lpszServiceInstanceName : L"NULL"); 231 printf (" lpszServiceInstanceName: %S\n", result->lpszServiceInstanceName ? result->lpszServiceInstanceName : L"NULL");
232 if (result->lpServiceClassId) 232 if (result->lpServiceClassId)
233 printf (" lpServiceClassId: { 0x%08lX,0x%04X,0x%04X, { 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X } }\n", 233 printf (" lpServiceClassId: { 0x%08lX,0x%04X,0x%04X, { 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X } }\n",
234 result->lpServiceClassId->Data1, result->lpServiceClassId->Data2, result->lpServiceClassId->Data3, result->lpServiceClassId->Data4[0], 234 result->lpServiceClassId->Data1, result->lpServiceClassId->Data2, result->lpServiceClassId->Data3, result->lpServiceClassId->Data4[0],
235 result->lpServiceClassId->Data4[1], result->lpServiceClassId->Data4[2], result->lpServiceClassId->Data4[3], result->lpServiceClassId->Data4[4], 235 result->lpServiceClassId->Data4[1], result->lpServiceClassId->Data4[2], result->lpServiceClassId->Data4[3], result->lpServiceClassId->Data4[4],
236 result->lpServiceClassId->Data4[5], result->lpServiceClassId->Data4[6], result->lpServiceClassId->Data4[7]); 236 result->lpServiceClassId->Data4[5], result->lpServiceClassId->Data4[6], result->lpServiceClassId->Data4[7]);
237 else 237 else
238 printf (" lpServiceClassId: NULL\n"); 238 printf (" lpServiceClassId: NULL\n");
239 if (result->lpVersion) 239 if (result->lpVersion)
240 printf (" lpVersion: 0x%08lX, %d\n", result->lpVersion->dwVersion, result->lpVersion->ecHow); 240 printf (" lpVersion: 0x%08lX, %d\n", result->lpVersion->dwVersion, result->lpVersion->ecHow);
241 else 241 else
242 printf (" lpVersion: NULL\n"); 242 printf (" lpVersion: NULL\n");
243 printf (" lpszComment: %S\n", result->lpszComment ? result->lpszComment : L"NULL"); 243 printf (" lpszComment: %S\n", result->lpszComment ? result->lpszComment : L"NULL");
244 printf (" dwNameSpace: %lu\n", result->dwNameSpace); 244 printf (" dwNameSpace: %lu\n", result->dwNameSpace);
245 if (result->lpNSProviderId) 245 if (result->lpNSProviderId)
246 printf (" lpNSProviderId: { 0x%08lX,0x%04X,0x%04X, { 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X } }\n", 246 printf (" lpNSProviderId: { 0x%08lX,0x%04X,0x%04X, { 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X } }\n",
247 result->lpNSProviderId->Data1, result->lpNSProviderId->Data2, result->lpNSProviderId->Data3, result->lpNSProviderId->Data4[0], 247 result->lpNSProviderId->Data1, result->lpNSProviderId->Data2, result->lpNSProviderId->Data3, result->lpNSProviderId->Data4[0],
248 result->lpNSProviderId->Data4[1], result->lpNSProviderId->Data4[2], result->lpNSProviderId->Data4[3], result->lpNSProviderId->Data4[4], 248 result->lpNSProviderId->Data4[1], result->lpNSProviderId->Data4[2], result->lpNSProviderId->Data4[3], result->lpNSProviderId->Data4[4],
249 result->lpNSProviderId->Data4[5], result->lpNSProviderId->Data4[6], result->lpNSProviderId->Data4[7]); 249 result->lpNSProviderId->Data4[5], result->lpNSProviderId->Data4[6], result->lpNSProviderId->Data4[7]);
250 else 250 else
251 printf (" lpNSProviderId: NULL\n"); 251 printf (" lpNSProviderId: NULL\n");
252 printf (" lpszContext: %S\n", result->lpszContext ? result->lpszContext : L"NULL"); 252 printf (" lpszContext: %S\n", result->lpszContext ? result->lpszContext : L"NULL");
253 printf (" dwNumberOfProtocols: %lu\n", result->dwNumberOfProtocols); 253 printf (" dwNumberOfProtocols: %lu\n", result->dwNumberOfProtocols);
254 printf (" lpszQueryString: %S\n", result->lpszQueryString ? result->lpszQueryString : L"NULL"); 254 printf (" lpszQueryString: %S\n", result->lpszQueryString ? result->lpszQueryString : L"NULL");
255 printf (" dwNumberOfCsAddrs: %lu\n", result->dwNumberOfCsAddrs); 255 printf (" dwNumberOfCsAddrs: %lu\n", result->dwNumberOfCsAddrs);
256 for (i = 0; i < result->dwNumberOfCsAddrs; i++) 256 for (i = 0; i < result->dwNumberOfCsAddrs; i++)
257 { 257 {
258 switch (result->lpcsaBuffer[i].iSocketType) 258 switch (result->lpcsaBuffer[i].iSocketType)
259 { 259 {
260 case SOCK_STREAM: 260 case SOCK_STREAM:
261 printf (" %d: iSocketType = SOCK_STREAM\n", i); 261 printf (" %d: iSocketType = SOCK_STREAM\n", i);
262 break; 262 break;
263 case SOCK_DGRAM: 263 case SOCK_DGRAM:
264 printf (" %d: iSocketType = SOCK_DGRAM\n", i); 264 printf (" %d: iSocketType = SOCK_DGRAM\n", i);
265 break; 265 break;
266 default: 266 default:
267 printf (" %d: iSocketType = %d\n", i, result->lpcsaBuffer[i].iSocketType); 267 printf (" %d: iSocketType = %d\n", i, result->lpcsaBuffer[i].iSocketType);
268 } 268 }
269 switch (result->lpcsaBuffer[i].iProtocol) 269 switch (result->lpcsaBuffer[i].iProtocol)
270 { 270 {
271 case IPPROTO_TCP: 271 case IPPROTO_TCP:
272 printf (" %d: iProtocol = IPPROTO_TCP\n", i); 272 printf (" %d: iProtocol = IPPROTO_TCP\n", i);
273 break; 273 break;
274 case IPPROTO_UDP: 274 case IPPROTO_UDP:
275 printf (" %d: iProtocol = IPPROTO_UDP\n", i); 275 printf (" %d: iProtocol = IPPROTO_UDP\n", i);
276 break; 276 break;
277 default: 277 default:
278 printf (" %d: iProtocol = %d\n", i, result->lpcsaBuffer[i].iProtocol); 278 printf (" %d: iProtocol = %d\n", i, result->lpcsaBuffer[i].iProtocol);
279 } 279 }
280 switch (result->lpcsaBuffer[i].LocalAddr.lpSockaddr->sa_family) 280 switch (result->lpcsaBuffer[i].LocalAddr.lpSockaddr->sa_family)
281 { 281 {
282 case AF_INET: 282 case AF_INET:
283 printf (" %d: loc family = AF_INET\n", i); 283 printf (" %d: loc family = AF_INET\n", i);
284 break; 284 break;
285 case AF_INET6: 285 case AF_INET6:
286 printf (" %d: loc family = AF_INET6\n", i); 286 printf (" %d: loc family = AF_INET6\n", i);
287 break; 287 break;
288 default: 288 default:
289 printf (" %d: loc family = %hu\n", i, result->lpcsaBuffer[i].LocalAddr.lpSockaddr->sa_family); 289 printf (" %d: loc family = %hu\n", i, result->lpcsaBuffer[i].LocalAddr.lpSockaddr->sa_family);
290 } 290 }
291 switch (result->lpcsaBuffer[i].RemoteAddr.lpSockaddr->sa_family) 291 switch (result->lpcsaBuffer[i].RemoteAddr.lpSockaddr->sa_family)
292 { 292 {
293 case AF_INET: 293 case AF_INET:
294 printf (" %d: rem family = AF_INET\n", i); 294 printf (" %d: rem family = AF_INET\n", i);
295 break; 295 break;
296 case AF_INET6: 296 case AF_INET6:
297 printf (" %d: rem family = AF_INET6\n", i); 297 printf (" %d: rem family = AF_INET6\n", i);
298 break; 298 break;
299 default: 299 default:
300 printf (" %d: rem family = %hu\n", i, result->lpcsaBuffer[i].RemoteAddr.lpSockaddr->sa_family); 300 printf (" %d: rem family = %hu\n", i, result->lpcsaBuffer[i].RemoteAddr.lpSockaddr->sa_family);
301 } 301 }
302 char buf[1024]; 302 char buf[1024];
303 DWORD buflen = 1024; 303 DWORD buflen = 1024;
304 if (NO_ERROR == WSAAddressToStringA (result->lpcsaBuffer[i].LocalAddr.lpSockaddr, result->lpcsaBuffer[i].LocalAddr.iSockaddrLength, NULL, buf, &buflen)) 304 if (NO_ERROR == WSAAddressToStringA (result->lpcsaBuffer[i].LocalAddr.lpSockaddr, result->lpcsaBuffer[i].LocalAddr.iSockaddrLength, NULL, buf, &buflen))
305 printf("\tLocal Address #%d: %s\n", i, buf); 305 printf("\tLocal Address #%d: %s\n", i, buf);
306 else 306 else
307 printf("\tLocal Address #%d: Can't convert: %lu\n", i, GetLastError ()); 307 printf("\tLocal Address #%d: Can't convert: %lu\n", i, GetLastError ());
308 buflen = 1024; 308 buflen = 1024;
309 if (NO_ERROR == WSAAddressToStringA (result->lpcsaBuffer[i].RemoteAddr.lpSockaddr, result->lpcsaBuffer[i].RemoteAddr.iSockaddrLength, NULL, buf, &buflen)) 309 if (NO_ERROR == WSAAddressToStringA (result->lpcsaBuffer[i].RemoteAddr.lpSockaddr, result->lpcsaBuffer[i].RemoteAddr.iSockaddrLength, NULL, buf, &buflen))
310 printf("\tRemote Address #%d: %s\n", i, buf); 310 printf("\tRemote Address #%d: %s\n", i, buf);
311 else 311 else
312 printf("\tRemote Address #%d: Can't convert: %lu\n", i, GetLastError ()); 312 printf("\tRemote Address #%d: Can't convert: %lu\n", i, GetLastError ());
313 } 313 }
314 printf (" dwOutputFlags: 0x%08lX\n", result->dwOutputFlags); 314 printf (" dwOutputFlags: 0x%08lX\n", result->dwOutputFlags);
315 printf (" lpBlob: 0x%p\n", result->lpBlob); 315 printf (" lpBlob: 0x%p\n", result->lpBlob);
316 if (result->lpBlob) 316 if (result->lpBlob)
317 { 317 {
318 struct hostent *he = malloc (result->lpBlob->cbSize); 318 struct hostent *he = malloc (result->lpBlob->cbSize);
319 if (he != NULL) 319 if (he != NULL)
320 { 320 {
321 memcpy (he, result->lpBlob->pBlobData, result->lpBlob->cbSize); 321 memcpy (he, result->lpBlob->pBlobData, result->lpBlob->cbSize);
322 UnpackHostEnt (he); 322 UnpackHostEnt (he);
323 print_hostent (he); 323 print_hostent (he);
324 free (he); 324 free (he);
325 } 325 }
326 } 326 }
327 } 327 }
328 ret = api.NSPLookupServiceEnd (lookup); 328 ret = api.NSPLookupServiceEnd (lookup);
329 if (ret != NO_ERROR) 329 if (ret != NO_ERROR)
330 printf ("NSPLookupServiceEnd() failed: %lu\n", GetLastError ()); 330 printf ("NSPLookupServiceEnd() failed: %lu\n", GetLastError ());
331 } 331 }
332 api.NSPCleanup (prov); 332 api.NSPCleanup (prov);
333 } 333 }
334 } 334 }
335 FreeLibrary (nsp); 335 FreeLibrary (nsp);
336 } 336 }
337 } 337 }
338 WSACleanup(); 338 WSACleanup();
339 return r; 339 return r;
340} \ No newline at end of file 340} \ No newline at end of file
diff --git a/src/gns/w32nsp.c b/src/gns/w32nsp.c
index 9b0d17dc7..86e83dc99 100644
--- a/src/gns/w32nsp.c
+++ b/src/gns/w32nsp.c
@@ -1,3 +1,27 @@
1/*
2 This file is part of GNUnet.
3 (C) 2012 Christian Grothoff (and other contributing authors)
4
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
19*/
20/**
21 * @file gns/w32nsp.c
22 * @brief W32 integration for GNS
23 * @author LRN
24 */
1/* This code is partially based upon samples from the book 25/* This code is partially based upon samples from the book
2 * "Network Programming For Microsoft Windows, 2Nd Edition". 26 * "Network Programming For Microsoft Windows, 2Nd Edition".
3 */ 27 */