diff --git a/src/unlocker/main.cpp b/src/unlocker/main.cpp index ff104df..4adc21f 100644 --- a/src/unlocker/main.cpp +++ b/src/unlocker/main.cpp @@ -10,29 +10,39 @@ bool setProxy(bool enable, const std::string& proxyAddr) { INTERNET_PER_CONN_OPTION_LIST list; INTERNET_PER_CONN_OPTION options[3]; - unsigned long listSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); + + ZeroMemory(&list, sizeof(list)); + ZeroMemory(options, sizeof(options)); options[0].dwOption = INTERNET_PER_CONN_FLAGS; + if (enable) + { + if (proxyAddr.empty()) return false; + options[0].Value.dwValue = PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT; + + options[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER; + options[1].Value.pszValue = const_cast(proxyAddr.c_str()); + + options[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS; + options[2].Value.pszValue = (char*)""; + + list.dwOptionCount = 3; + } else + { options[0].Value.dwValue = PROXY_TYPE_DIRECT; - - options[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER; - options[1].Value.pszValue = const_cast(proxyAddr.c_str()); - - options[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS; - options[2].Value.pszValue = const_cast(""); + list.dwOptionCount = 1; + } list.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); list.pszConnection = NULL; - list.dwOptionCount = 3; - list.dwOptionError = 0; list.pOptions = options; - if (!InternetSetOptionA(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &list, listSize)) + if (!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &list, sizeof(list))) { - Log::error("Failed to set proxy options, Err: {}", GetLastError()); + Log::error("Failed to set proxy options - error: {}", GetLastError()); return false; }