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 && length
!= 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");
198 rc
= InternetCloseHandle(hor
);
199 ok ((rc
== 0), "Double close of handle opened by HttpOpenRequestA succeeded\n");
202 rc
= InternetCloseHandle(hic
);
203 ok ((rc
!= 0), "InternetCloseHandle of handle opened by InternetConnectA failed\n");
206 rc
= InternetCloseHandle(hi
);
207 ok ((rc
!= 0), "InternetCloseHandle of handle opened by InternetOpenA failed\n");
213 void InternetOpenUrlA_test(void)
215 HINTERNET myhinternet
, myhttp
;
217 URL_COMPONENTSA urlComponents
;
218 char protocol
[32], hostName
[1024], userName
[1024];
219 char password
[1024], extra
[1024], path
[1024];
220 DWORD size
, readbytes
, totalbytes
=0;
223 myhinternet
= InternetOpen("Winetest",0,NULL
,NULL
,INTERNET_FLAG_NO_CACHE_WRITE
);
224 ok((myhinternet
!= 0), "InternetOpen failed, error %lx\n",GetLastError());
226 ret
= InternetCanonicalizeUrl(TEST_URL
, buffer
, &size
,ICU_BROWSER_MODE
);
227 ok( ret
, "InternetCanonicalizeUrl failed, error %lx\n",GetLastError());
229 urlComponents
.dwStructSize
= sizeof(URL_COMPONENTSA
);
230 urlComponents
.lpszScheme
= protocol
;
231 urlComponents
.dwSchemeLength
= 32;
232 urlComponents
.lpszHostName
= hostName
;
233 urlComponents
.dwHostNameLength
= 1024;
234 urlComponents
.lpszUserName
= userName
;
235 urlComponents
.dwUserNameLength
= 1024;
236 urlComponents
.lpszPassword
= password
;
237 urlComponents
.dwPasswordLength
= 1024;
238 urlComponents
.lpszUrlPath
= path
;
239 urlComponents
.dwUrlPathLength
= 2048;
240 urlComponents
.lpszExtraInfo
= extra
;
241 urlComponents
.dwExtraInfoLength
= 1024;
242 ret
= InternetCrackUrl(TEST_URL
, 0,0,&urlComponents
);
243 ok( ret
, "InternetCrackUrl failed, error %lx\n",GetLastError());
245 myhttp
= InternetOpenUrl(myhinternet
, TEST_URL
, 0, 0,
246 INTERNET_FLAG_RELOAD
|INTERNET_FLAG_NO_CACHE_WRITE
|INTERNET_FLAG_TRANSFER_BINARY
,0);
247 if (GetLastError() == 12007)
248 return; /* WinXP returns this when not connected to the net */
249 ok((myhttp
!= 0),"InternetOpenUrl failed, error %lx\n",GetLastError());
250 ret
= InternetReadFile(myhttp
, buffer
,0x400,&readbytes
);
251 ok( ret
, "InternetReadFile failed, error %lx\n",GetLastError());
252 totalbytes
+= readbytes
;
253 while (readbytes
&& InternetReadFile(myhttp
, buffer
,0x400,&readbytes
))
254 totalbytes
+= readbytes
;
255 trace("read 0x%08lx bytes\n",totalbytes
);
258 void InternetCrackUrl_test(void)
260 URL_COMPONENTSA urlComponents
;
261 char protocol
[32], hostName
[1024], userName
[1024];
262 char password
[1024], extra
[1024], path
[1024];
265 urlComponents
.dwStructSize
= sizeof(URL_COMPONENTSA
);
266 urlComponents
.lpszScheme
= protocol
;
267 urlComponents
.dwSchemeLength
= 32;
268 urlComponents
.lpszHostName
= hostName
;
269 urlComponents
.dwHostNameLength
= 1024;
270 urlComponents
.lpszUserName
= userName
;
271 urlComponents
.dwUserNameLength
= 1024;
272 urlComponents
.lpszPassword
= password
;
273 urlComponents
.dwPasswordLength
= 1024;
274 urlComponents
.lpszUrlPath
= path
;
275 urlComponents
.dwUrlPathLength
= 2048;
276 urlComponents
.lpszExtraInfo
= extra
;
277 urlComponents
.dwExtraInfoLength
= 1024;
278 ret
= InternetCrackUrl(TEST_URL
, 0,0,&urlComponents
);
279 ok( ret
, "InternetCrackUrl failed, error %lx\n",GetLastError());
280 ok((strcmp(TEST_URL_PATH
,path
) == 0),"path cracked wrong\n");
283 void InternetCrackUrlW_test(void)
286 'h','t','t','p',':','/','/','1','9','2','.','1','6','8','.','0','.','2','2','/',
287 'C','F','I','D','E','/','m','a','i','n','.','c','f','m','?','C','F','S','V','R',
288 '=','I','D','E','&','A','C','T','I','O','N','=','I','D','E','_','D','E','F','A',
290 URL_COMPONENTSW comp
;
291 WCHAR scheme
[20], host
[20], user
[20], pwd
[20], urlpart
[50], extra
[50];
300 memset(&comp
, 0, sizeof comp
);
301 comp
.dwStructSize
= sizeof comp
;
302 comp
.lpszScheme
= scheme
;
303 comp
.dwSchemeLength
= sizeof scheme
;
304 comp
.lpszHostName
= host
;
305 comp
.dwHostNameLength
= sizeof host
;
306 comp
.lpszUserName
= user
;
307 comp
.dwUserNameLength
= sizeof user
;
308 comp
.lpszPassword
= pwd
;
309 comp
.dwPasswordLength
= sizeof pwd
;
310 comp
.lpszUrlPath
= urlpart
;
311 comp
.dwUrlPathLength
= sizeof urlpart
;
312 comp
.lpszExtraInfo
= extra
;
313 comp
.dwExtraInfoLength
= sizeof extra
;
315 r
= InternetCrackUrlW(url
, 0, 0, &comp
);
316 ok( r
, "failed to crack url\n");
317 ok( comp
.dwSchemeLength
== 4, "scheme length wrong\n");
318 ok( comp
.dwHostNameLength
== 12, "host length wrong\n");
319 ok( comp
.dwUserNameLength
== 0, "user length wrong\n");
320 ok( comp
.dwPasswordLength
== 0, "password length wrong\n");
321 ok( comp
.dwUrlPathLength
== 15, "url length wrong\n");
322 ok( comp
.dwExtraInfoLength
== 29, "extra length wrong\n");
330 memset(&comp
, 0, sizeof comp
);
331 comp
.dwStructSize
= sizeof comp
;
332 comp
.lpszHostName
= host
;
333 comp
.dwHostNameLength
= sizeof host
;
334 comp
.lpszUrlPath
= urlpart
;
335 comp
.dwUrlPathLength
= sizeof urlpart
;
337 r
= InternetCrackUrlW(url
, 0, 0, &comp
);
338 ok( r
, "failed to crack url\n");
339 ok( comp
.dwSchemeLength
== 0, "scheme length wrong\n");
340 ok( comp
.dwHostNameLength
== 12, "host length wrong\n");
341 ok( comp
.dwUserNameLength
== 0, "user length wrong\n");
342 ok( comp
.dwPasswordLength
== 0, "password length wrong\n");
343 ok( comp
.dwUrlPathLength
== 44, "url length wrong\n");
344 ok( comp
.dwExtraInfoLength
== 0, "extra length wrong\n");
352 memset(&comp
, 0, sizeof comp
);
353 comp
.dwStructSize
= sizeof comp
;
354 comp
.lpszHostName
= host
;
355 comp
.dwHostNameLength
= sizeof host
;
356 comp
.lpszUrlPath
= urlpart
;
357 comp
.dwUrlPathLength
= sizeof urlpart
;
358 comp
.lpszExtraInfo
= NULL
;
359 comp
.dwExtraInfoLength
= sizeof extra
;
361 r
= InternetCrackUrlW(url
, 0, 0, &comp
);
362 ok( r
, "failed to crack url\n");
363 ok( comp
.dwSchemeLength
== 0, "scheme length wrong\n");
364 ok( comp
.dwHostNameLength
== 12, "host length wrong\n");
365 ok( comp
.dwUserNameLength
== 0, "user length wrong\n");
366 ok( comp
.dwPasswordLength
== 0, "password length wrong\n");
367 ok( comp
.dwUrlPathLength
== 15, "url length wrong\n");
368 ok( comp
.dwExtraInfoLength
== 29, "extra length wrong\n");
371 static void InternetTimeFromSystemTimeA_test()
374 static const SYSTEMTIME time
= { 2005, 1, 5, 7, 12, 6, 35, 0 };
375 char string
[INTERNET_RFC1123_BUFSIZE
];
376 static const char expect
[] = "Fri, 07 Jan 2005 12:06:35 GMT";
378 ret
= InternetTimeFromSystemTimeA( &time
, INTERNET_RFC1123_FORMAT
, string
, sizeof(string
) );
379 ok( ret
, "InternetTimeFromSystemTimeA failed (%ld)\n", GetLastError() );
381 ok( !memcmp( string
, expect
, sizeof(expect
) ),
382 "InternetTimeFromSystemTimeA failed (%ld)\n", GetLastError() );
385 static void InternetTimeFromSystemTimeW_test()
388 static const SYSTEMTIME time
= { 2005, 1, 5, 7, 12, 6, 35, 0 };
389 WCHAR string
[INTERNET_RFC1123_BUFSIZE
+ 1];
390 static const WCHAR expect
[] = { 'F','r','i',',',' ','0','7',' ','J','a','n',' ','2','0','0','5',' ',
391 '1','2',':','0','6',':','3','5',' ','G','M','T',0 };
393 ret
= InternetTimeFromSystemTimeW( &time
, INTERNET_RFC1123_FORMAT
, string
, sizeof(string
) );
394 ok( ret
, "InternetTimeFromSystemTimeW failed (%ld)\n", GetLastError() );
396 ok( !memcmp( string
, expect
, sizeof(expect
) ),
397 "InternetTimeFromSystemTimeW failed (%ld)\n", GetLastError() );
400 static void InternetTimeToSystemTimeA_test()
404 static const SYSTEMTIME expect
= { 2005, 1, 5, 7, 12, 6, 35, 0 };
405 static const char string
[] = "Fri, 07 Jan 2005 12:06:35 GMT";
406 static const char string2
[] = " fri 7 jan 2005 12 06 35";
408 ret
= InternetTimeToSystemTimeA( string
, &time
, 0 );
409 ok( ret
, "InternetTimeToSystemTimeA failed (%ld)\n", GetLastError() );
410 ok( !memcmp( &time
, &expect
, sizeof(expect
) ),
411 "InternetTimeToSystemTimeA failed (%ld)\n", GetLastError() );
413 ret
= InternetTimeToSystemTimeA( string2
, &time
, 0 );
414 ok( ret
, "InternetTimeToSystemTimeA failed (%ld)\n", GetLastError() );
415 ok( !memcmp( &time
, &expect
, sizeof(expect
) ),
416 "InternetTimeToSystemTimeA failed (%ld)\n", GetLastError() );
419 static void InternetTimeToSystemTimeW_test()
423 static const SYSTEMTIME expect
= { 2005, 1, 5, 7, 12, 6, 35, 0 };
424 static const WCHAR string
[] = { 'F','r','i',',',' ','0','7',' ','J','a','n',' ','2','0','0','5',' ',
425 '1','2',':','0','6',':','3','5',' ','G','M','T',0 };
426 static const WCHAR string2
[] = { ' ','f','r','i',' ','7',' ','j','a','n',' ','2','0','0','5',' ',
427 '1','2',' ','0','6',' ','3','5',0 };
428 static const WCHAR string3
[] = { 'F','r',0 };
430 ret
= InternetTimeToSystemTimeW( string
, &time
, 0 );
431 ok( ret
, "InternetTimeToSystemTimeW failed (%ld)\n", GetLastError() );
432 ok( !memcmp( &time
, &expect
, sizeof(expect
) ),
433 "InternetTimeToSystemTimeW failed (%ld)\n", GetLastError() );
435 ret
= InternetTimeToSystemTimeW( string2
, &time
, 0 );
436 ok( ret
, "InternetTimeToSystemTimeW failed (%ld)\n", GetLastError() );
437 ok( !memcmp( &time
, &expect
, sizeof(expect
) ),
438 "InternetTimeToSystemTimeW failed (%ld)\n", GetLastError() );
440 ret
= InternetTimeToSystemTimeW( string3
, &time
, 0 );
442 ok( ret
, "InternetTimeToSystemTimeW succeeds on (%ld), string3='Fr'", GetLastError() );
448 winapi_test(0x10000000);
449 winapi_test(0x00000000);
450 InternetCrackUrl_test();
451 InternetOpenUrlA_test();
452 InternetCrackUrlW_test();
453 InternetTimeFromSystemTimeA_test();
454 InternetTimeFromSystemTimeW_test();
455 InternetTimeToSystemTimeA_test();
456 InternetTimeToSystemTimeW_test();