Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygendialogs.c
Go to the documentation of this file.
00001 /* 00002 * Wininet 00003 * 00004 * Copyright 2003 Mike McCormack for CodeWeavers Inc. 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00019 */ 00020 00021 #include "config.h" 00022 #include "wine/port.h" 00023 00024 #if defined(__MINGW32__) || defined (_MSC_VER) 00025 #include <ws2tcpip.h> 00026 #endif 00027 00028 #include <stdarg.h> 00029 00030 #include "windef.h" 00031 #include "winbase.h" 00032 #include "winuser.h" 00033 #include "winreg.h" 00034 #include "wininet.h" 00035 #include "winnetwk.h" 00036 #include "wine/debug.h" 00037 #include "winerror.h" 00038 #define NO_SHLWAPI_STREAM 00039 #include "shlwapi.h" 00040 00041 #include "internet.h" 00042 00043 #include "wine/unicode.h" 00044 00045 #include "resource.h" 00046 00047 #define MAX_STRING_LEN 1024 00048 00049 WINE_DEFAULT_DEBUG_CHANNEL(wininet); 00050 00051 struct WININET_ErrorDlgParams 00052 { 00053 HWND hWnd; 00054 HINTERNET hRequest; 00055 DWORD dwError; 00056 DWORD dwFlags; 00057 LPVOID* lppvData; 00058 }; 00059 00060 /*********************************************************************** 00061 * WININET_GetProxyServer 00062 * 00063 * Determine the name of the proxy server the request is using 00064 */ 00065 static BOOL WININET_GetProxyServer( HINTERNET hRequest, LPWSTR szBuf, DWORD sz ) 00066 { 00067 http_request_t *request; 00068 http_session_t *session = NULL; 00069 appinfo_t *hIC = NULL; 00070 BOOL ret = FALSE; 00071 LPWSTR p; 00072 00073 request = (http_request_t*) get_handle_object( hRequest ); 00074 if (NULL == request) 00075 return FALSE; 00076 00077 session = request->session; 00078 if (NULL == session) 00079 goto done; 00080 00081 hIC = session->appInfo; 00082 if (NULL == hIC) 00083 goto done; 00084 00085 lstrcpynW(szBuf, hIC->proxy, sz); 00086 00087 /* FIXME: perhaps it would be better to use InternetCrackUrl here */ 00088 p = strchrW(szBuf, ':'); 00089 if (p) 00090 *p = 0; 00091 00092 ret = TRUE; 00093 00094 done: 00095 WININET_Release( &request->hdr ); 00096 return ret; 00097 } 00098 00099 /*********************************************************************** 00100 * WININET_GetServer 00101 * 00102 * Determine the name of the web server 00103 */ 00104 static BOOL WININET_GetServer( HINTERNET hRequest, LPWSTR szBuf, DWORD sz ) 00105 { 00106 http_request_t *request; 00107 http_session_t *session = NULL; 00108 BOOL ret = FALSE; 00109 00110 request = (http_request_t*) get_handle_object( hRequest ); 00111 if (NULL == request) 00112 return FALSE; 00113 00114 session = request->session; 00115 if (NULL == session) 00116 goto done; 00117 00118 lstrcpynW(szBuf, session->hostName, sz); 00119 00120 ret = TRUE; 00121 00122 done: 00123 WININET_Release( &request->hdr ); 00124 return ret; 00125 } 00126 00127 /*********************************************************************** 00128 * WININET_GetAuthRealm 00129 * 00130 * Determine the name of the (basic) Authentication realm 00131 */ 00132 static BOOL WININET_GetAuthRealm( HINTERNET hRequest, LPWSTR szBuf, DWORD sz, BOOL proxy ) 00133 { 00134 LPWSTR p, q; 00135 DWORD index, query; 00136 static const WCHAR szRealm[] = { 'r','e','a','l','m','=',0 }; 00137 00138 if (proxy) 00139 query = HTTP_QUERY_PROXY_AUTHENTICATE; 00140 else 00141 query = HTTP_QUERY_WWW_AUTHENTICATE; 00142 00143 /* extract the Realm from the response and show it */ 00144 index = 0; 00145 if( !HttpQueryInfoW( hRequest, query, szBuf, &sz, &index) ) 00146 return FALSE; 00147 00148 /* 00149 * FIXME: maybe we should check that we're 00150 * dealing with 'Basic' Authentication 00151 */ 00152 p = strchrW( szBuf, ' ' ); 00153 if( !p || strncmpW( p+1, szRealm, strlenW(szRealm) ) ) 00154 { 00155 ERR("response wrong? (%s)\n", debugstr_w(szBuf)); 00156 return FALSE; 00157 } 00158 00159 /* remove quotes */ 00160 p += 7; 00161 if( *p == '"' ) 00162 { 00163 p++; 00164 q = strrchrW( p, '"' ); 00165 if( q ) 00166 *q = 0; 00167 } 00168 strcpyW( szBuf, p ); 00169 00170 return TRUE; 00171 } 00172 00173 /*********************************************************************** 00174 * WININET_GetSetPassword 00175 */ 00176 static BOOL WININET_GetSetPassword( HWND hdlg, LPCWSTR szServer, 00177 LPCWSTR szRealm, BOOL bSet ) 00178 { 00179 WCHAR szResource[0x80], szUserPass[0x40]; 00180 LPWSTR p; 00181 HWND hUserItem, hPassItem; 00182 DWORD r, dwMagic = 19; 00183 UINT r_len, u_len; 00184 WORD sz; 00185 static const WCHAR szColon[] = { ':',0 }; 00186 static const WCHAR szbs[] = { '/', 0 }; 00187 00188 hUserItem = GetDlgItem( hdlg, IDC_USERNAME ); 00189 hPassItem = GetDlgItem( hdlg, IDC_PASSWORD ); 00190 00191 /* now try fetch the username and password */ 00192 lstrcpyW( szResource, szServer); 00193 lstrcatW( szResource, szbs); 00194 lstrcatW( szResource, szRealm); 00195 00196 /* 00197 * WNetCachePassword is only concerned with the length 00198 * of the data stored (which we tell it) and it does 00199 * not use strlen() internally so we can add WCHAR data 00200 * instead of ASCII data and get it back the same way. 00201 */ 00202 if( bSet ) 00203 { 00204 szUserPass[0] = 0; 00205 GetWindowTextW( hUserItem, szUserPass, 00206 (sizeof szUserPass-1)/sizeof(WCHAR) ); 00207 lstrcatW(szUserPass, szColon); 00208 u_len = strlenW( szUserPass ); 00209 GetWindowTextW( hPassItem, szUserPass+u_len, 00210 (sizeof szUserPass)/sizeof(WCHAR)-u_len ); 00211 00212 r_len = (strlenW( szResource ) + 1)*sizeof(WCHAR); 00213 u_len = (strlenW( szUserPass ) + 1)*sizeof(WCHAR); 00214 r = WNetCachePassword( (CHAR*)szResource, r_len, 00215 (CHAR*)szUserPass, u_len, dwMagic, 0 ); 00216 00217 return ( r == WN_SUCCESS ); 00218 } 00219 00220 sz = sizeof szUserPass; 00221 r_len = (strlenW( szResource ) + 1)*sizeof(WCHAR); 00222 r = WNetGetCachedPassword( (CHAR*)szResource, r_len, 00223 (CHAR*)szUserPass, &sz, dwMagic ); 00224 if( r != WN_SUCCESS ) 00225 return FALSE; 00226 00227 p = strchrW( szUserPass, ':' ); 00228 if( p ) 00229 { 00230 *p = 0; 00231 SetWindowTextW( hUserItem, szUserPass ); 00232 SetWindowTextW( hPassItem, p+1 ); 00233 } 00234 00235 return TRUE; 00236 } 00237 00238 /*********************************************************************** 00239 * WININET_SetAuthorization 00240 */ 00241 static BOOL WININET_SetAuthorization( HINTERNET hRequest, LPWSTR username, 00242 LPWSTR password, BOOL proxy ) 00243 { 00244 http_request_t *request; 00245 http_session_t *session; 00246 BOOL ret = FALSE; 00247 LPWSTR p, q; 00248 00249 request = (http_request_t*) get_handle_object( hRequest ); 00250 if( !request ) 00251 return FALSE; 00252 00253 session = request->session; 00254 if (NULL == session || session->hdr.htype != WH_HHTTPSESSION) 00255 { 00256 INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE); 00257 goto done; 00258 } 00259 00260 p = heap_strdupW(username); 00261 if( !p ) 00262 goto done; 00263 00264 q = heap_strdupW(password); 00265 if( !q ) 00266 { 00267 HeapFree(GetProcessHeap(), 0, username); 00268 goto done; 00269 } 00270 00271 if (proxy) 00272 { 00273 appinfo_t *hIC = session->appInfo; 00274 00275 HeapFree(GetProcessHeap(), 0, hIC->proxyUsername); 00276 hIC->proxyUsername = p; 00277 00278 HeapFree(GetProcessHeap(), 0, hIC->proxyPassword); 00279 hIC->proxyPassword = q; 00280 } 00281 else 00282 { 00283 HeapFree(GetProcessHeap(), 0, session->userName); 00284 session->userName = p; 00285 00286 HeapFree(GetProcessHeap(), 0, session->password); 00287 session->password = q; 00288 } 00289 00290 ret = TRUE; 00291 00292 done: 00293 WININET_Release( &request->hdr ); 00294 return ret; 00295 } 00296 00297 /*********************************************************************** 00298 * WININET_ProxyPasswordDialog 00299 */ 00300 static INT_PTR WINAPI WININET_ProxyPasswordDialog( 00301 HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) 00302 { 00303 HWND hitem; 00304 struct WININET_ErrorDlgParams *params; 00305 WCHAR szRealm[0x80], szServer[0x80]; 00306 00307 if( uMsg == WM_INITDIALOG ) 00308 { 00309 TRACE("WM_INITDIALOG (%08lx)\n", lParam); 00310 00311 /* save the parameter list */ 00312 params = (struct WININET_ErrorDlgParams*) lParam; 00313 SetWindowLongPtrW( hdlg, GWLP_USERDATA, lParam ); 00314 00315 /* extract the Realm from the proxy response and show it */ 00316 if( WININET_GetAuthRealm( params->hRequest, 00317 szRealm, sizeof szRealm/sizeof(WCHAR), TRUE ) ) 00318 { 00319 hitem = GetDlgItem( hdlg, IDC_REALM ); 00320 SetWindowTextW( hitem, szRealm ); 00321 } 00322 00323 /* extract the name of the proxy server */ 00324 if( WININET_GetProxyServer( params->hRequest, 00325 szServer, sizeof szServer/sizeof(WCHAR)) ) 00326 { 00327 hitem = GetDlgItem( hdlg, IDC_PROXY ); 00328 SetWindowTextW( hitem, szServer ); 00329 } 00330 00331 WININET_GetSetPassword( hdlg, szServer, szRealm, FALSE ); 00332 00333 return TRUE; 00334 } 00335 00336 params = (struct WININET_ErrorDlgParams*) 00337 GetWindowLongPtrW( hdlg, GWLP_USERDATA ); 00338 00339 switch( uMsg ) 00340 { 00341 case WM_COMMAND: 00342 if( wParam == IDOK ) 00343 { 00344 WCHAR username[0x20], password[0x20]; 00345 00346 username[0] = 0; 00347 hitem = GetDlgItem( hdlg, IDC_USERNAME ); 00348 if( hitem ) 00349 GetWindowTextW( hitem, username, sizeof username/sizeof(WCHAR) ); 00350 00351 password[0] = 0; 00352 hitem = GetDlgItem( hdlg, IDC_PASSWORD ); 00353 if( hitem ) 00354 GetWindowTextW( hitem, password, sizeof password/sizeof(WCHAR) ); 00355 00356 hitem = GetDlgItem( hdlg, IDC_SAVEPASSWORD ); 00357 if( hitem && 00358 SendMessageW( hitem, BM_GETSTATE, 0, 0 ) && 00359 WININET_GetAuthRealm( params->hRequest, 00360 szRealm, sizeof szRealm/sizeof(WCHAR), TRUE ) && 00361 WININET_GetProxyServer( params->hRequest, 00362 szServer, sizeof szServer/sizeof(WCHAR)) ) 00363 { 00364 WININET_GetSetPassword( hdlg, szServer, szRealm, TRUE ); 00365 } 00366 WININET_SetAuthorization( params->hRequest, username, password, TRUE ); 00367 00368 EndDialog( hdlg, ERROR_INTERNET_FORCE_RETRY ); 00369 return TRUE; 00370 } 00371 if( wParam == IDCANCEL ) 00372 { 00373 EndDialog( hdlg, 0 ); 00374 return TRUE; 00375 } 00376 break; 00377 } 00378 return FALSE; 00379 } 00380 00381 /*********************************************************************** 00382 * WININET_PasswordDialog 00383 */ 00384 static INT_PTR WINAPI WININET_PasswordDialog( 00385 HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) 00386 { 00387 HWND hitem; 00388 struct WININET_ErrorDlgParams *params; 00389 WCHAR szRealm[0x80], szServer[0x80]; 00390 00391 if( uMsg == WM_INITDIALOG ) 00392 { 00393 TRACE("WM_INITDIALOG (%08lx)\n", lParam); 00394 00395 /* save the parameter list */ 00396 params = (struct WININET_ErrorDlgParams*) lParam; 00397 SetWindowLongPtrW( hdlg, GWLP_USERDATA, lParam ); 00398 00399 /* extract the Realm from the response and show it */ 00400 if( WININET_GetAuthRealm( params->hRequest, 00401 szRealm, sizeof szRealm/sizeof(WCHAR), FALSE ) ) 00402 { 00403 hitem = GetDlgItem( hdlg, IDC_REALM ); 00404 SetWindowTextW( hitem, szRealm ); 00405 } 00406 00407 /* extract the name of the server */ 00408 if( WININET_GetServer( params->hRequest, 00409 szServer, sizeof szServer/sizeof(WCHAR)) ) 00410 { 00411 hitem = GetDlgItem( hdlg, IDC_SERVER ); 00412 SetWindowTextW( hitem, szServer ); 00413 } 00414 00415 WININET_GetSetPassword( hdlg, szServer, szRealm, FALSE ); 00416 00417 return TRUE; 00418 } 00419 00420 params = (struct WININET_ErrorDlgParams*) 00421 GetWindowLongPtrW( hdlg, GWLP_USERDATA ); 00422 00423 switch( uMsg ) 00424 { 00425 case WM_COMMAND: 00426 if( wParam == IDOK ) 00427 { 00428 WCHAR username[0x20], password[0x20]; 00429 00430 username[0] = 0; 00431 hitem = GetDlgItem( hdlg, IDC_USERNAME ); 00432 if( hitem ) 00433 GetWindowTextW( hitem, username, sizeof username/sizeof(WCHAR) ); 00434 00435 password[0] = 0; 00436 hitem = GetDlgItem( hdlg, IDC_PASSWORD ); 00437 if( hitem ) 00438 GetWindowTextW( hitem, password, sizeof password/sizeof(WCHAR) ); 00439 00440 hitem = GetDlgItem( hdlg, IDC_SAVEPASSWORD ); 00441 if( hitem && 00442 SendMessageW( hitem, BM_GETSTATE, 0, 0 ) && 00443 WININET_GetAuthRealm( params->hRequest, 00444 szRealm, sizeof szRealm/sizeof(WCHAR), FALSE ) && 00445 WININET_GetServer( params->hRequest, 00446 szServer, sizeof szServer/sizeof(WCHAR)) ) 00447 { 00448 WININET_GetSetPassword( hdlg, szServer, szRealm, TRUE ); 00449 } 00450 WININET_SetAuthorization( params->hRequest, username, password, FALSE ); 00451 00452 EndDialog( hdlg, ERROR_INTERNET_FORCE_RETRY ); 00453 return TRUE; 00454 } 00455 if( wParam == IDCANCEL ) 00456 { 00457 EndDialog( hdlg, 0 ); 00458 return TRUE; 00459 } 00460 break; 00461 } 00462 return FALSE; 00463 } 00464 00465 /*********************************************************************** 00466 * WININET_InvalidCertificateDialog 00467 */ 00468 static INT_PTR WINAPI WININET_InvalidCertificateDialog( 00469 HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) 00470 { 00471 struct WININET_ErrorDlgParams *params; 00472 HWND hitem; 00473 WCHAR buf[1024]; 00474 00475 if( uMsg == WM_INITDIALOG ) 00476 { 00477 TRACE("WM_INITDIALOG (%08lx)\n", lParam); 00478 00479 /* save the parameter list */ 00480 params = (struct WININET_ErrorDlgParams*) lParam; 00481 SetWindowLongPtrW( hdlg, GWLP_USERDATA, lParam ); 00482 00483 switch( params->dwError ) 00484 { 00485 case ERROR_INTERNET_INVALID_CA: 00486 LoadStringW( WININET_hModule, IDS_CERT_CA_INVALID, buf, 1024 ); 00487 break; 00488 case ERROR_INTERNET_SEC_CERT_DATE_INVALID: 00489 LoadStringW( WININET_hModule, IDS_CERT_DATE_INVALID, buf, 1024 ); 00490 break; 00491 case ERROR_INTERNET_SEC_CERT_CN_INVALID: 00492 LoadStringW( WININET_hModule, IDS_CERT_CN_INVALID, buf, 1024 ); 00493 break; 00494 case ERROR_INTERNET_SEC_CERT_ERRORS: 00495 /* FIXME: We should fetch information about the 00496 * certificate here and show all the relevant errors. 00497 */ 00498 LoadStringW( WININET_hModule, IDS_CERT_ERRORS, buf, 1024 ); 00499 break; 00500 default: 00501 FIXME( "No message for error %d\n", params->dwError ); 00502 buf[0] = '\0'; 00503 } 00504 00505 hitem = GetDlgItem( hdlg, IDC_CERT_ERROR ); 00506 SetWindowTextW( hitem, buf ); 00507 00508 return TRUE; 00509 } 00510 00511 params = (struct WININET_ErrorDlgParams*) 00512 GetWindowLongPtrW( hdlg, GWLP_USERDATA ); 00513 00514 switch( uMsg ) 00515 { 00516 case WM_COMMAND: 00517 if( wParam == IDOK ) 00518 { 00519 BOOL res = TRUE; 00520 00521 if( params->dwFlags & FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS ) 00522 { 00523 DWORD flags, size = sizeof(flags); 00524 00525 InternetQueryOptionW( params->hRequest, INTERNET_OPTION_SECURITY_FLAGS, &flags, &size ); 00526 switch( params->dwError ) 00527 { 00528 case ERROR_INTERNET_INVALID_CA: 00529 flags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA; 00530 break; 00531 case ERROR_INTERNET_SEC_CERT_DATE_INVALID: 00532 flags |= SECURITY_FLAG_IGNORE_CERT_DATE_INVALID; 00533 break; 00534 case ERROR_INTERNET_SEC_CERT_CN_INVALID: 00535 flags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID; 00536 break; 00537 case ERROR_INTERNET_SEC_CERT_ERRORS: 00538 FIXME("Should only add ignore flags as needed.\n"); 00539 flags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID | 00540 SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | 00541 SECURITY_FLAG_IGNORE_UNKNOWN_CA; 00542 /* FIXME: ERROR_INTERNET_SEC_CERT_ERRORS also 00543 * seems to set the corresponding DLG_* flags. 00544 */ 00545 break; 00546 } 00547 res = InternetSetOptionW( params->hRequest, INTERNET_OPTION_SECURITY_FLAGS, &flags, size ); 00548 if(!res) 00549 WARN("InternetSetOption(INTERNET_OPTION_SECURITY_FLAGS) failed.\n"); 00550 } 00551 00552 EndDialog( hdlg, res ? ERROR_SUCCESS : ERROR_NOT_SUPPORTED ); 00553 return TRUE; 00554 } 00555 if( wParam == IDCANCEL ) 00556 { 00557 TRACE("Pressed cancel.\n"); 00558 00559 EndDialog( hdlg, ERROR_CANCELLED ); 00560 return TRUE; 00561 } 00562 break; 00563 } 00564 00565 return FALSE; 00566 } 00567 00568 /*********************************************************************** 00569 * WININET_GetConnectionStatus 00570 */ 00571 static INT WININET_GetConnectionStatus( HINTERNET hRequest ) 00572 { 00573 WCHAR szStatus[0x20]; 00574 DWORD sz, index, dwStatus; 00575 00576 TRACE("%p\n", hRequest ); 00577 00578 sz = sizeof szStatus; 00579 index = 0; 00580 if( !HttpQueryInfoW( hRequest, HTTP_QUERY_STATUS_CODE, 00581 szStatus, &sz, &index)) 00582 return -1; 00583 dwStatus = atoiW( szStatus ); 00584 00585 TRACE("request %p status = %d\n", hRequest, dwStatus ); 00586 00587 return dwStatus; 00588 } 00589 00590 00591 /*********************************************************************** 00592 * InternetErrorDlg 00593 */ 00594 DWORD WINAPI InternetErrorDlg(HWND hWnd, HINTERNET hRequest, 00595 DWORD dwError, DWORD dwFlags, LPVOID* lppvData) 00596 { 00597 struct WININET_ErrorDlgParams params; 00598 INT dwStatus; 00599 00600 TRACE("%p %p %d %08x %p\n", hWnd, hRequest, dwError, dwFlags, lppvData); 00601 00602 if( !hWnd && !(dwFlags & FLAGS_ERROR_UI_FLAGS_NO_UI) ) 00603 return ERROR_INVALID_HANDLE; 00604 00605 params.hWnd = hWnd; 00606 params.hRequest = hRequest; 00607 params.dwError = dwError; 00608 params.dwFlags = dwFlags; 00609 params.lppvData = lppvData; 00610 00611 switch( dwError ) 00612 { 00613 case ERROR_SUCCESS: 00614 case ERROR_INTERNET_INCORRECT_PASSWORD: 00615 if( !dwError && !(dwFlags & FLAGS_ERROR_UI_FILTER_FOR_ERRORS ) ) 00616 return 0; 00617 00618 dwStatus = WININET_GetConnectionStatus( hRequest ); 00619 switch (dwStatus) 00620 { 00621 case HTTP_STATUS_PROXY_AUTH_REQ: 00622 return DialogBoxParamW( WININET_hModule, MAKEINTRESOURCEW( IDD_PROXYDLG ), 00623 hWnd, WININET_ProxyPasswordDialog, (LPARAM) ¶ms ); 00624 case HTTP_STATUS_DENIED: 00625 return DialogBoxParamW( WININET_hModule, MAKEINTRESOURCEW( IDD_AUTHDLG ), 00626 hWnd, WININET_PasswordDialog, (LPARAM) ¶ms ); 00627 default: 00628 WARN("unhandled status %u\n", dwStatus); 00629 return 0; 00630 } 00631 case ERROR_INTERNET_SEC_CERT_ERRORS: 00632 case ERROR_INTERNET_SEC_CERT_CN_INVALID: 00633 case ERROR_INTERNET_SEC_CERT_DATE_INVALID: 00634 case ERROR_INTERNET_INVALID_CA: 00635 if( dwFlags & FLAGS_ERROR_UI_FLAGS_NO_UI ) 00636 return ERROR_CANCELLED; 00637 00638 if( dwFlags & ~FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS ) 00639 FIXME("%08x contains unsupported flags.\n", dwFlags); 00640 00641 return DialogBoxParamW( WININET_hModule, MAKEINTRESOURCEW( IDD_INVCERTDLG ), 00642 hWnd, WININET_InvalidCertificateDialog, (LPARAM) ¶ms ); 00643 case ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR: 00644 case ERROR_INTERNET_POST_IS_NON_SECURE: 00645 FIXME("Need to display dialog for error %d\n", dwError); 00646 return ERROR_SUCCESS; 00647 } 00648 00649 return ERROR_NOT_SUPPORTED; 00650 } Generated on Fri May 25 2012 04:15:22 for ReactOS by
1.7.6.1
|