11 #define TEST_URL "http://www.winehq.org/site/about"
12 #define TEST_URL_PATH "/site/about"
19 DWORD dwInternetStatus,
20 LPVOID lpvStatusInformation,
21 DWORD dwStatusInformationLength
26 switch (dwInternetStatus)
28 case INTERNET_STATUS_RESOLVING_NAME:
29 strcpy(name,"INTERNET_STATUS_RESOLVING_NAME");
31 case INTERNET_STATUS_NAME_RESOLVED:
32 strcpy(name,"INTERNET_STATUS_NAME_RESOLVED");
34 case INTERNET_STATUS_CONNECTING_TO_SERVER:
35 strcpy(name,"INTERNET_STATUS_CONNECTING_TO_SERVER");
37 case INTERNET_STATUS_CONNECTED_TO_SERVER:
38 strcpy(name,"INTERNET_STATUS_CONNECTED_TO_SERVER");
40 case INTERNET_STATUS_SENDING_REQUEST:
41 strcpy(name,"INTERNET_STATUS_SENDING_REQUEST");
43 case INTERNET_STATUS_REQUEST_SENT:
44 strcpy(name,"INTERNET_STATUS_REQUEST_SENT");
46 case INTERNET_STATUS_RECEIVING_RESPONSE:
47 strcpy(name,"INTERNET_STATUS_RECEIVING_RESPONSE");
49 case INTERNET_STATUS_RESPONSE_RECEIVED:
50 strcpy(name,"INTERNET_STATUS_RESPONSE_RECEIVED");
52 case INTERNET_STATUS_CTL_RESPONSE_RECEIVED:
53 strcpy(name,"INTERNET_STATUS_CTL_RESPONSE_RECEIVED");
55 case INTERNET_STATUS_PREFETCH:
56 strcpy(name,"INTERNET_STATUS_PREFETCH");
58 case INTERNET_STATUS_CLOSING_CONNECTION:
59 strcpy(name,"INTERNET_STATUS_CLOSING_CONNECTION");
61 case INTERNET_STATUS_CONNECTION_CLOSED:
62 strcpy(name,"INTERNET_STATUS_CONNECTION_CLOSED");
64 case INTERNET_STATUS_HANDLE_CREATED:
65 strcpy(name,"INTERNET_STATUS_HANDLE_CREATED");
67 case INTERNET_STATUS_HANDLE_CLOSING:
68 strcpy(name,"INTERNET_STATUS_HANDLE_CLOSING");
70 case INTERNET_STATUS_REQUEST_COMPLETE:
71 strcpy(name,"INTERNET_STATUS_REQUEST_COMPLETE");
74 case INTERNET_STATUS_REDIRECT:
75 strcpy(name,"INTERNET_STATUS_REDIRECT");
77 case INTERNET_STATUS_INTERMEDIATE_RESPONSE:
78 strcpy(name,"INTERNET_STATUS_INTERMEDIATE_RESPONSE");
82 trace("Callback %p 0x%lx %s(%li) %p %ld\n",hInternet,dwContext,name,dwInternetStatus,lpvStatusInformation,dwStatusInformationLength);
85 void winapi_test(int flags)
91 const char *types[2] = { "*", NULL };
92 HINTERNET hi, hic = 0, hor = 0;
94 trace("Starting with flags 0x%x\n",flags);
96 trace("InternetOpenA <--\n");
97 hi = InternetOpenA("",0x0,0x0,0x0,flags);
98 ok((hi != 0x0),"InternetOpen Failed\n");
99 trace("InternetOpenA -->\n");
101 if (hi == 0x0) goto abort;
103 InternetSetStatusCallback(hi,&callback);
105 trace("InternetConnectA <--\n");
106 hic=InternetConnectA(hi,"www.winehq.org",0x0,0x0,0x0,0x3,0x0,0xdeadbeef);
107 ok((hic != 0x0),"InternetConnect Failed\n");
108 trace("InternetConnectA -->\n");
110 if (hic == 0x0) goto abort;
112 trace("HttpOpenRequestA <--\n");
113 hor = HttpOpenRequestA(hic, "GET",
115 0x0,0x0,types,0x00400800,0xdeadbead);
116 if (hor == 0x0 && GetLastError() == 12007 /* ERROR_INTERNET_NAME_NOT_RESOLVED */) {
118 * If the internet name can't be resolved we are probably behind
119 * a firewall or in some other way not directly connected to the
120 * Internet. Not enough reason to fail the test. Just ignore and
124 ok((hor != 0x0),"HttpOpenRequest Failed\n");
126 trace("HttpOpenRequestA -->\n");
128 if (hor == 0x0) goto abort;
130 trace("HttpSendRequestA -->\n");
132 rc = HttpSendRequestA(hor, "", 0xffffffff,0x0,0x0);
134 ok(((rc == 0)&&(GetLastError()==997)),
135 "Asynchronous HttpSendRequest NOT returning 0 with error 997\n");
137 ok((rc != 0) || GetLastError() == 12007, /* 12007 == XP */
138 "Synchronous HttpSendRequest returning 0, error %ld\n", GetLastError());
139 trace("HttpSendRequestA <--\n");
141 while ((flags)&&(!goon))
145 rc = InternetQueryOptionA(hor,0x17,&out,&length);
146 trace("Option 0x17 -> %li %li\n",rc,out);
149 rc = InternetQueryOptionA(hor,0x22,buffer,&length);
150 trace("Option 0x22 -> %li %s\n",rc,buffer);
153 rc = HttpQueryInfoA(hor,0x16,buffer,&length,0x0);
155 trace("Option 0x16 -> %li %s\n",rc,buffer);
158 rc = InternetQueryOptionA(hor,0x22,buffer,&length);
160 trace("Option 0x22 -> %li %s\n",rc,buffer);
163 rc = HttpQueryInfoA(hor,0x5,&buffer,&length,0x0);
164 trace("Option 0x5 -> %li %s (%li)\n",rc,buffer,GetLastError());
167 rc = HttpQueryInfoA(hor,0x1,buffer,&length,0x0);
169 trace("Option 0x1 -> %li %s\n",rc,buffer);
172 trace("Entering Query loop\n");
177 rc = InternetQueryDataAvailable(hor,&length,0x0,0x0);
178 ok((rc != 0),"InternetQueryDataAvailable failed\n");
183 buffer = (char*)HeapAlloc(GetProcessHeap(),0,length+1);
185 rc = InternetReadFile(hor,buffer,length,&length);
189 trace("ReadFile -> %li %li\n",rc,length);
191 HeapFree(GetProcessHeap(),0,buffer);
196 rc = InternetCloseHandle(hor);
197 ok ((rc != 0), "InternetCloseHandle of handle opened by HttpOpenRequestA failed\n");
200 rc = InternetCloseHandle(hic);
201 ok ((rc != 0), "InternetCloseHandle of handle opened by InternetConnectA failed\n");
204 rc = InternetCloseHandle(hi);
205 ok ((rc != 0), "InternetCloseHandle of handle opened by InternetOpenA failed\n");
211 void InternetOpenUrlA_test(void)
213 HINTERNET myhinternet, myhttp;
215 URL_COMPONENTSA urlComponents;
216 char protocol[32], hostName[1024], userName[1024];
217 char password[1024], extra[1024], path[1024];
218 DWORD size, readbytes, totalbytes=0;
220 myhinternet = InternetOpen("Winetest",0,NULL,NULL,INTERNET_FLAG_NO_CACHE_WRITE);
221 ok((myhinternet != 0), "InternetOpen failed, error %lx\n",GetLastError());
223 ok (InternetCanonicalizeUrl(TEST_URL, buffer, &size,ICU_BROWSER_MODE),
224 "InternetCanonicalizeUrl failed, error %lx\n",GetLastError());
226 urlComponents.dwStructSize = sizeof(URL_COMPONENTSA);
227 urlComponents.lpszScheme = protocol;
228 urlComponents.dwSchemeLength = 32;
229 urlComponents.lpszHostName = hostName;
230 urlComponents.dwHostNameLength = 1024;
231 urlComponents.lpszUserName = userName;
232 urlComponents.dwUserNameLength = 1024;
233 urlComponents.lpszPassword = password;
234 urlComponents.dwPasswordLength = 1024;
235 urlComponents.lpszUrlPath = path;
236 urlComponents.dwUrlPathLength = 2048;
237 urlComponents.lpszExtraInfo = extra;
238 urlComponents.dwExtraInfoLength = 1024;
239 ok((InternetCrackUrl(TEST_URL, 0,0,&urlComponents)),
240 "InternetCrackUrl failed, error %lx\n",GetLastError());
242 myhttp = InternetOpenUrl(myhinternet, TEST_URL, 0, 0,
243 INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_TRANSFER_BINARY,0);
244 if (GetLastError() == 12007)
245 return; /* WinXP returns this when not connected to the net */
246 ok((myhttp != 0),"InternetOpenUrl failed, error %lx\n",GetLastError());
247 ok(InternetReadFile(myhttp, buffer,0x400,&readbytes), "InternetReadFile failed, error %lx\n",GetLastError());
248 totalbytes += readbytes;
249 while (readbytes && InternetReadFile(myhttp, buffer,0x400,&readbytes))
250 totalbytes += readbytes;
251 trace("read 0x%08lx bytes\n",totalbytes);
254 void InternetCrackUrl_test(void)
256 URL_COMPONENTSA urlComponents;
257 char protocol[32], hostName[1024], userName[1024];
258 char password[1024], extra[1024], path[1024];
260 urlComponents.dwStructSize = sizeof(URL_COMPONENTSA);
261 urlComponents.lpszScheme = protocol;
262 urlComponents.dwSchemeLength = 32;
263 urlComponents.lpszHostName = hostName;
264 urlComponents.dwHostNameLength = 1024;
265 urlComponents.lpszUserName = userName;
266 urlComponents.dwUserNameLength = 1024;
267 urlComponents.lpszPassword = password;
268 urlComponents.dwPasswordLength = 1024;
269 urlComponents.lpszUrlPath = path;
270 urlComponents.dwUrlPathLength = 2048;
271 urlComponents.lpszExtraInfo = extra;
272 urlComponents.dwExtraInfoLength = 1024;
273 ok((InternetCrackUrl(TEST_URL, 0,0,&urlComponents)),
274 "InternetCrackUrl failed, error %lx\n",GetLastError());
275 ok((strcmp(TEST_URL_PATH,path) == 0),"path cracked wrong\n");
278 void InternetCrackUrlW_test(void)
281 'h','t','t','p',':','/','/','1','9','2','.','1','6','8','.','0','.','2','2','/',
282 'C','F','I','D','E','/','m','a','i','n','.','c','f','m','?','C','F','S','V','R',
283 '=','I','D','E','&','A','C','T','I','O','N','=','I','D','E','_','D','E','F','A',
285 URL_COMPONENTSW comp;
286 WCHAR scheme[20], host[20], user[20], pwd[20], urlpart[50], extra[50];
295 memset(&comp, 0, sizeof comp);
296 comp.dwStructSize = sizeof comp;
297 comp.lpszScheme = scheme;
298 comp.dwSchemeLength = sizeof scheme;
299 comp.lpszHostName = host;
300 comp.dwHostNameLength = sizeof host;
301 comp.lpszUserName = user;
302 comp.dwUserNameLength = sizeof user;
303 comp.lpszPassword = pwd;
304 comp.dwPasswordLength = sizeof pwd;
305 comp.lpszUrlPath = urlpart;
306 comp.dwUrlPathLength = sizeof urlpart;
307 comp.lpszExtraInfo = extra;
308 comp.dwExtraInfoLength = sizeof extra;
310 r = InternetCrackUrlW(url, 0, 0, &comp );
311 ok( r, "failed to crack url\n");
312 ok( comp.dwSchemeLength == 4, "scheme length wrong\n");
313 ok( comp.dwHostNameLength == 12, "host length wrong\n");
314 ok( comp.dwUserNameLength == 0, "user length wrong\n");
315 ok( comp.dwPasswordLength == 0, "password length wrong\n");
316 ok( comp.dwUrlPathLength == 15, "url length wrong\n");
317 ok( comp.dwExtraInfoLength == 29, "extra length wrong\n");
325 memset(&comp, 0, sizeof comp);
326 comp.dwStructSize = sizeof comp;
327 comp.lpszHostName = host;
328 comp.dwHostNameLength = sizeof host;
329 comp.lpszUrlPath = urlpart;
330 comp.dwUrlPathLength = sizeof urlpart;
332 r = InternetCrackUrlW(url, 0, 0, &comp );
333 ok( r, "failed to crack url\n");
334 ok( comp.dwSchemeLength == 0, "scheme length wrong\n");
335 ok( comp.dwHostNameLength == 12, "host length wrong\n");
336 ok( comp.dwUserNameLength == 0, "user length wrong\n");
337 ok( comp.dwPasswordLength == 0, "password length wrong\n");
338 ok( comp.dwUrlPathLength == 44, "url length wrong\n");
339 ok( comp.dwExtraInfoLength == 0, "extra length wrong\n");
347 memset(&comp, 0, sizeof comp);
348 comp.dwStructSize = sizeof comp;
349 comp.lpszHostName = host;
350 comp.dwHostNameLength = sizeof host;
351 comp.lpszUrlPath = urlpart;
352 comp.dwUrlPathLength = sizeof urlpart;
353 comp.lpszExtraInfo = NULL;
354 comp.dwExtraInfoLength = sizeof extra;
356 r = InternetCrackUrlW(url, 0, 0, &comp );
357 ok( r, "failed to crack url\n");
358 ok( comp.dwSchemeLength == 0, "scheme length wrong\n");
359 ok( comp.dwHostNameLength == 12, "host length wrong\n");
360 ok( comp.dwUserNameLength == 0, "user length wrong\n");
361 ok( comp.dwPasswordLength == 0, "password length wrong\n");
362 ok( comp.dwUrlPathLength == 15, "url length wrong\n");
363 ok( comp.dwExtraInfoLength == 29, "extra length wrong\n");
368 winapi_test(0x10000000);
369 winapi_test(0x00000000);
370 InternetCrackUrl_test();
371 InternetOpenUrlA_test();
372 InternetCrackUrlW_test();