static BOOL proxy_active(void) { WINHTTP_PROXY_INFO proxy_info; BOOL active = FALSE; if (WinHttpGetDefaultProxyConfiguration(&proxy_info)) { active = (proxy_info.lpszProxy != NULL); if (active) GlobalFree(proxy_info.lpszProxy); if (proxy_info.lpszProxyBypass != NULL) GlobalFree(proxy_info.lpszProxyBypass); } else active = FALSE; return active; }
JNIEXPORT jstring JNICALL Java_com_btr_proxy_search_desktop_win_Win32ProxyUtils_winHttpGetDefaultProxyConfiguration (JNIEnv *env, jobject source) { WINHTTP_PROXY_INFO proxyInfo; // Retrieve the default proxy configuration. BOOL result = WinHttpGetDefaultProxyConfiguration( &proxyInfo ); if (result == FALSE) { // TODO what to do in case of error. DWORD errorCode = GetLastError(); } int proxyTypeLen = 0; int proxyLen = 0; int proxyBypassLen = 0; LPWSTR proxyType = NULL; if (proxyInfo.dwAccessType == WINHTTP_ACCESS_TYPE_NAMED_PROXY) { proxyType = L"PROXY "; proxyTypeLen = wcslen(proxyType); } else if (proxyInfo.dwAccessType == WINHTTP_ACCESS_TYPE_NO_PROXY) { proxyType = L"DIRECT "; proxyTypeLen = wcslen(proxyType); } if (proxyInfo.lpszProxy != NULL) { proxyLen += wcslen(proxyInfo.lpszProxy); } if (proxyInfo.lpszProxyBypass != NULL) { proxyBypassLen += wcslen(proxyInfo.lpszProxyBypass); } jstring retVal = proxyInfo.lpszProxy == NULL? NULL : env->NewString((jchar*)proxyInfo.lpszProxy, wcslen(proxyInfo.lpszProxy)); if (proxyInfo.lpszProxy != NULL) { GlobalFree( proxyInfo.lpszProxy ); } if (proxyInfo.lpszProxyBypass != NULL) { GlobalFree( proxyInfo.lpszProxyBypass ); } return retVal; //int retValueLen = proxyTypeLen+proxyLen+1+proxyBypassLen+1; //int insertPos = 0; //LPWSTR combined = new WCHAR[retValueLen]; //combined[retValueLen] = 0; //wcsncat_s(combined, retValueLen, proxyType, proxyTypeLen); //insertPos += proxyTypeLen; //retValueLen -= proxyTypeLen; //wcsncat_s(combined, retValueLen, proxyInfo.lpszProxy, proxyLen); //insertPos += proxyLen; //retValueLen -= proxyLen; //wcsncat_s(combined, retValueLen, TEXT("|"), 1); //insertPos += proxyLen; //retValueLen -= proxyLen; //wcsncat_s(combined, retValueLen, proxyInfo.lpszProxyBypass, proxyBypassLen); //insertPos += proxyBypassLen; //retValueLen -= proxyBypassLen; // if (proxyInfo.lpszProxy != NULL) { // GlobalFree( proxyInfo.lpszProxy ); // } // if (proxyInfo.lpszProxyBypass != NULL) { // GlobalFree( proxyInfo.lpszProxyBypass ); // } //jstring retVal = env->NewString((jchar*)combined, wcslen(combined)); //return retVal; }