From a65dfaf33be11deea5313739c6b4b881523101d0 Mon Sep 17 00:00:00 2001 From: neru Date: Fri, 20 Mar 2026 05:03:05 -0300 Subject: [PATCH] feat: set default proxy --- src/unlocker/main.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/unlocker/main.cpp b/src/unlocker/main.cpp index 23f06c6..60e5a24 100644 --- a/src/unlocker/main.cpp +++ b/src/unlocker/main.cpp @@ -2,6 +2,56 @@ #include +#include +#include + +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); + + options[0].dwOption = INTERNET_PER_CONN_FLAGS; + if (enable) + options[0].Value.dwValue = PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT; + 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.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)) + { + Log::error("Failed to set proxy options, Err: {}", GetLastError()); + return false; + } + + InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0); + InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL, 0); + + return true; +} + +bool running = true; +BOOL WINAPI consoleHandler(DWORD dwType) +{ + if (dwType == CTRL_C_EVENT || dwType == CTRL_CLOSE_EVENT) + { + running = false; + return TRUE; + } + return FALSE; +} + int main() { Log::createConsole(); @@ -18,6 +68,8 @@ int main() return 1; } + setProxy(true, std::format("127.0.0.1:{}", PROXY_PORT)); + Log::verbose("Proxy running (CTRL+C to stop)"); while (running) Sleep(100); @@ -25,5 +77,7 @@ int main() Log::verbose("Shutting down proxy"); proxy->Shutdown(); delete proxy; + setProxy(false, ""); + return 0; } \ No newline at end of file