diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main_gui.cpp | 22 | ||||
| -rw-r--r-- | src/readme.txt | 2 | ||||
| -rw-r--r-- | src/tor.cpp | 15 | ||||
| -rw-r--r-- | src/tor.h | 1 |
4 files changed, 35 insertions, 5 deletions
diff --git a/src/main_gui.cpp b/src/main_gui.cpp index f0fe903..3f52e91 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp | |||
| @@ -143,6 +143,7 @@ static void PrintUsage() | |||
| 143 | printf(" /socks=HOST:PORT (SOCKS5 proxy for Nostr, .btf relay, and onion dials)\n"); | 143 | printf(" /socks=HOST:PORT (SOCKS5 proxy for Nostr, .btf relay, and onion dials)\n"); |
| 144 | printf(" /tor[=HOST:PORT] (Tor mode; default SOCKS5 proxy is 127.0.0.1:9050)\n"); | 144 | printf(" /tor[=HOST:PORT] (Tor mode; default SOCKS5 proxy is 127.0.0.1:9050)\n"); |
| 145 | printf(" /managedtor[=PATH] (start Tor, create a hidden service, advertise its onion)\n"); | 145 | printf(" /managedtor[=PATH] (start Tor, create a hidden service, advertise its onion)\n"); |
| 146 | printf(" /nomanagedtor (disable automatic bundled Tor startup)\n"); | ||
| 146 | printf(" /oniononly (do not fall back to rendezvous when a .btf onion dial fails)\n"); | 147 | printf(" /oniononly (do not fall back to rendezvous when a .btf onion dial fails)\n"); |
| 147 | printf(" /btfseed=ADDRESS:ENCHEX (extra bootstrap peer, repeatable)\n"); | 148 | printf(" /btfseed=ADDRESS:ENCHEX (extra bootstrap peer, repeatable)\n"); |
| 148 | printf("\n"); | 149 | printf("\n"); |
| @@ -322,19 +323,30 @@ static void ParseStartupArguments(int argc, char* argv[]) | |||
| 322 | } | 323 | } |
| 323 | 324 | ||
| 324 | bool fManagedTor = arg(argc, argv, "/managedtor") || arg(argc, argv, "-managedtor"); | 325 | bool fManagedTor = arg(argc, argv, "/managedtor") || arg(argc, argv, "-managedtor"); |
| 326 | bool fNoManagedTor = arg(argc, argv, "/nomanagedtor") || arg(argc, argv, "-nomanagedtor"); | ||
| 325 | bool fTorMode = arg(argc, argv, "/tor") || arg(argc, argv, "-tor"); | 327 | bool fTorMode = arg(argc, argv, "/tor") || arg(argc, argv, "-tor"); |
| 326 | string socksProxy = argval2(argc, argv, "/socks", "-socks"); | 328 | string socksProxy = argval2(argc, argv, "/socks", "-socks"); |
| 327 | if (fManagedTor) | 329 | string bundledTorPath; |
| 330 | bool fAutoManagedTor = !fManagedTor && !fNoManagedTor && !fTorMode && | ||
| 331 | socksProxy.empty() && BtfBundledTorPath(bundledTorPath); | ||
| 332 | if (fManagedTor || fAutoManagedTor) | ||
| 328 | { | 333 | { |
| 329 | if (fTorMode || !socksProxy.empty()) | 334 | if (fManagedTor && (fTorMode || !socksProxy.empty())) |
| 330 | fprintf(stderr, "Warning: /managedtor takes precedence over /tor and /socks\n"); | 335 | fprintf(stderr, "Warning: /managedtor takes precedence over /tor and /socks\n"); |
| 331 | 336 | ||
| 332 | string torPath = argval2(argc, argv, "/managedtor", "-managedtor"); | 337 | string torPath = fManagedTor ? argval2(argc, argv, "/managedtor", "-managedtor") : bundledTorPath; |
| 333 | string err; | 338 | string err; |
| 334 | if (!BtfStartManagedTor(torPath, err)) | 339 | if (!BtfStartManagedTor(torPath, err)) |
| 335 | fprintf(stderr, "Ignoring /managedtor=%s: %s\n", torPath.c_str(), err.c_str()); | 340 | { |
| 341 | if (fAutoManagedTor) | ||
| 342 | fprintf(stderr, "Bundled Tor not enabled automatically: %s\n", err.c_str()); | ||
| 343 | else | ||
| 344 | fprintf(stderr, "Ignoring /managedtor=%s: %s\n", torPath.c_str(), err.c_str()); | ||
| 345 | } | ||
| 336 | else | 346 | else |
| 337 | fprintf(stderr, "Managed Tor enabled: %s\n", BtfManagedTorStatus().c_str()); | 347 | fprintf(stderr, "Managed Tor enabled%s: %s\n", |
| 348 | fAutoManagedTor ? " automatically" : "", | ||
| 349 | BtfManagedTorStatus().c_str()); | ||
| 338 | } | 350 | } |
| 339 | else if (fTorMode) | 351 | else if (fTorMode) |
| 340 | { | 352 | { |
diff --git a/src/readme.txt b/src/readme.txt index 9ddbc24..752be66 100644 --- a/src/readme.txt +++ b/src/readme.txt | |||
| @@ -52,6 +52,8 @@ Command-line options (in addition to the original ones) | |||
| 52 | /managedtor[=PATH] | 52 | /managedtor[=PATH] |
| 53 | start Tor, create a v3 hidden service for this node, route outbound | 53 | start Tor, create a v3 hidden service for this node, route outbound |
| 54 | discovery through it, and advertise the generated onion endpoint | 54 | discovery through it, and advertise the generated onion endpoint |
| 55 | Windows release packages that include tor/tor.exe start this mode | ||
| 56 | automatically; use /nomanagedtor to force the legacy relay path | ||
| 55 | /solomine mine without requiring a connected peer (local testing) | 57 | /solomine mine without requiring a connected peer (local testing) |
| 56 | /operator operator mode (run pool server) | 58 | /operator operator mode (run pool server) |
| 57 | /participant=ADDR | 59 | /participant=ADDR |
diff --git a/src/tor.cpp b/src/tor.cpp index e47ee44..20b4577 100644 --- a/src/tor.cpp +++ b/src/tor.cpp | |||
| @@ -500,6 +500,21 @@ static std::string ResolveTorPath(const std::string& torPathOpt) | |||
| 500 | #endif | 500 | #endif |
| 501 | } | 501 | } |
| 502 | 502 | ||
| 503 | bool BtfBundledTorPath(std::string& torPathOut) | ||
| 504 | { | ||
| 505 | torPathOut.clear(); | ||
| 506 | std::string exeDir = ExecutableDir(); | ||
| 507 | #ifdef _WIN32 | ||
| 508 | std::string path = PathJoin(exeDir, "tor/tor.exe"); | ||
| 509 | #else | ||
| 510 | std::string path = PathJoin(exeDir, "tor/tor"); | ||
| 511 | #endif | ||
| 512 | if (!FileIsExecutableCandidate(path)) | ||
| 513 | return false; | ||
| 514 | torPathOut = path; | ||
| 515 | return true; | ||
| 516 | } | ||
| 517 | |||
| 503 | std::string BtfBuildManagedTorrcForTest(const std::string& dataDir, | 518 | std::string BtfBuildManagedTorrcForTest(const std::string& dataDir, |
| 504 | const std::string& hiddenServiceDir, | 519 | const std::string& hiddenServiceDir, |
| 505 | unsigned short socksPort, | 520 | unsigned short socksPort, |
| @@ -13,6 +13,7 @@ bool BtfStartManagedTor(const std::string& torPathOpt, std::string& errOut); | |||
| 13 | void BtfStopManagedTor(); | 13 | void BtfStopManagedTor(); |
| 14 | bool BtfManagedTorEnabled(); | 14 | bool BtfManagedTorEnabled(); |
| 15 | std::string BtfManagedTorStatus(); | 15 | std::string BtfManagedTorStatus(); |
| 16 | bool BtfBundledTorPath(std::string& torPathOut); | ||
| 16 | 17 | ||
| 17 | std::string BtfBuildManagedTorrcForTest(const std::string& dataDir, | 18 | std::string BtfBuildManagedTorrcForTest(const std::string& dataDir, |
| 18 | const std::string& hiddenServiceDir, | 19 | const std::string& hiddenServiceDir, |