upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main_gui.cpp22
-rw-r--r--src/readme.txt2
-rw-r--r--src/tor.cpp15
-rw-r--r--src/tor.h1
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
503bool 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
503std::string BtfBuildManagedTorrcForTest(const std::string& dataDir, 518std::string BtfBuildManagedTorrcForTest(const std::string& dataDir,
504 const std::string& hiddenServiceDir, 519 const std::string& hiddenServiceDir,
505 unsigned short socksPort, 520 unsigned short socksPort,
diff --git a/src/tor.h b/src/tor.h
index 7c5c603..cfb87a5 100644
--- a/src/tor.h
+++ b/src/tor.h
@@ -13,6 +13,7 @@ bool BtfStartManagedTor(const std::string& torPathOpt, std::string& errOut);
13void BtfStopManagedTor(); 13void BtfStopManagedTor();
14bool BtfManagedTorEnabled(); 14bool BtfManagedTorEnabled();
15std::string BtfManagedTorStatus(); 15std::string BtfManagedTorStatus();
16bool BtfBundledTorPath(std::string& torPathOut);
16 17
17std::string BtfBuildManagedTorrcForTest(const std::string& dataDir, 18std::string BtfBuildManagedTorrcForTest(const std::string& dataDir,
18 const std::string& hiddenServiceDir, 19 const std::string& hiddenServiceDir,