From 20243de8fcf6dc30d7f0b1dbbc2f9db22683ae24 Mon Sep 17 00:00:00 2001 From: Nsable-sh Date: Thu, 13 Aug 2026 12:20:16 -0300 Subject: net: fix managed Tor Windows startup --- src/tor.cpp | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) (limited to 'src/tor.cpp') diff --git a/src/tor.cpp b/src/tor.cpp index 0a1f48e..180cd2b 100644 --- a/src/tor.cpp +++ b/src/tor.cpp @@ -177,38 +177,52 @@ static bool ReadOneLine(const std::string& path, std::string& out) static bool PickLocalPort(unsigned short& portOut, std::string& errOut) { portOut = 0; + bool ok = false; +#ifdef _WIN32 + WSADATA wsadata; + int ret = WSAStartup(MAKEWORD(2,2), &wsadata); + if (ret != NO_ERROR) + { + errOut = strprintf("could not start Winsock for local port probe (WSAStartup returned %d)", ret); + return false; + } +#endif + struct sockaddr_in addr; + socklen_t len = sizeof(addr); SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) { errOut = "could not create local port probe socket"; - return false; + goto done; } - struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); addr.sin_port = 0; if (bind(s, (struct sockaddr*)&addr, sizeof(addr)) != 0) { - closesocket(s); errOut = "could not bind local port probe socket"; - return false; + goto done; } - socklen_t len = sizeof(addr); if (getsockname(s, (struct sockaddr*)&addr, &len) != 0) { - closesocket(s); errOut = "could not read local port probe socket"; - return false; + goto done; } portOut = ntohs(addr.sin_port); - closesocket(s); if (portOut == 0) { errOut = "local port probe returned port zero"; - return false; + goto done; } - return true; + ok = true; +done: + if (s != INVALID_SOCKET) + closesocket(s); +#ifdef _WIN32 + WSACleanup(); +#endif + return ok; } static std::string ExecutableDir() @@ -285,8 +299,6 @@ std::string BtfBuildManagedTorrcForTest(const std::string& dataDir, { std::string torData = NormalizeTorrcPath(dataDir); std::string hsDir = NormalizeTorrcPath(hiddenServiceDir); - std::string logFile = NormalizeTorrcPath(PathJoin(dataDir, "tor.log")); - std::string s; s += "# Generated by Bitflash. Edit only while Bitflash is not managing Tor.\n"; s += "DataDirectory " + QuoteTorrcPath(torData) + "\n"; @@ -296,7 +308,6 @@ std::string BtfBuildManagedTorrcForTest(const std::string& dataDir, s += "HiddenServiceVersion 3\n"; s += strprintf("HiddenServicePort %u 127.0.0.1:%u\n", (unsigned)p2pPort, (unsigned)p2pPort); - s += "Log notice file " + QuoteTorrcPath(logFile) + "\n"; return s; } -- cgit v1.2.3