/****************************************************\ FILE: offline.cpp DESCRIPTION: Handle 'offline' status and Dial-up UI \****************************************************/ #include "priv.h" #include "util.h" #ifdef FEATURE_OFFLINE /****************************************************\ FUNCTION: IsGlobalOffline DESCRIPTION: Determines whether wininet is in global offline mode PARAMETERS: None RETURN VALUE: BOOL TRUE - offline FALSE - online \****************************************************/ BOOL IsGlobalOffline(VOID) { DWORD dwState = 0, dwSize = sizeof(DWORD); BOOL fRet = FALSE; if(InternetQueryOption(NULL, INTERNET_OPTION_CONNECTED_STATE, &dwState, &dwSize)) { if(dwState & INTERNET_STATE_DISCONNECTED_BY_USER) fRet = TRUE; } return fRet; } /****************************************************\ FUNCTION: SetOffline DESCRIPTION: Sets wininet's offline mode PARAMETERS: fOffline - online or offline RETURN VALUE: None. \****************************************************/ VOID SetOffline(IN BOOL fOffline) { INTERNET_CONNECTED_INFO ci = {0}; if(fOffline) { ci.dwConnectedState = INTERNET_STATE_DISCONNECTED_BY_USER; ci.dwFlags = ISO_FORCE_DISCONNECTED; } else { ci.dwConnectedState = INTERNET_STATE_CONNECTED; } InternetSetOption(NULL, INTERNET_OPTION_CONNECTED_STATE, &ci, sizeof(ci)); } #endif // FEATURE_OFFLINE /****************************************************\ FUNCTION: AssureNetConnection DESCRIPTION: \****************************************************/ HRESULT AssureNetConnection(HINTERNET hint, HWND hwndParent, LPCWSTR pwzServerName, LPCITEMIDLIST pidl, BOOL fShowUI) { HRESULT hr = S_OK; #ifdef FEATURE_OFFLINE if (IsGlobalOffline()) { // Assume we need to cancel the FTP operation because we are offline. hr = HRESULT_FROM_WIN32(ERROR_CANCELLED); // Can we prompt to go online? if (fShowUI) { TCHAR szTitle[MAX_PATH]; TCHAR szPromptMsg[MAX_PATH]; EVAL(LoadString(HINST_THISDLL, IDS_FTPERR_TITLE, szTitle, ARRAYSIZE(szTitle))); EVAL(LoadString(HINST_THISDLL, IDS_OFFLINE_PROMPTTOGOONLINE, szPromptMsg, ARRAYSIZE(szPromptMsg))); if (IDYES == MessageBox(hwndParent, szPromptMsg, szTitle, (MB_ICONQUESTION | MB_YESNO))) { SetOffline(FALSE); hr = S_OK; } } } #endif // FEATURE_OFFLINE #ifdef FEATURE_DIALER if (S_OK == hr) { TCHAR szUrl[MAX_URL_STRING]; StrCpyN(szUrl, TEXT("ftp://"), ARRAYSIZE(szUrl)); StrCatBuff(szUrl, pwzServerName, ARRAYSIZE(szUrl)); // PERF: Does this value get cached? if (FALSE == InternetCheckConnection(szUrl, FLAG_ICC_FORCE_CONNECTION, 0) || #ifdef FEATURE_TEST_DIALER (IDNO == MessageBox(hwndParent, TEXT("TEST: Do you want to dial?"), TEXT("Test Dialer"), MB_YESNO)) #endif // FEATURE_TEST_DIALER ) { hr = HRESULT_FROM_WIN32(ERROR_CANCELLED); } } #endif // FEATURE_DIALER return hr; }