ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

dialogs.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) &params );
00624         case HTTP_STATUS_DENIED:
00625             return DialogBoxParamW( WININET_hModule, MAKEINTRESOURCEW( IDD_AUTHDLG ),
00626                                     hWnd, WININET_PasswordDialog, (LPARAM) &params );
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) &params );
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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.