[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [oonib/master] keep old config behavior with new endpoint code
commit 575f0aa5a44d1f851fb3d4fbb1bcf1fbf36a4f2d
Author: Joe Landers <joe@xxxxxxxxxxxxxx>
Date: Sun May 15 18:25:41 2016 +0200
keep old config behavior with new endpoint code
---
oonib/onion.py | 36 ++++++++++++++++++++++++++++++++----
oonib/oonibackend.py | 42 +++++++++++++++++++-----------------------
2 files changed, 51 insertions(+), 27 deletions(-)
diff --git a/oonib/onion.py b/oonib/onion.py
index 262e672..8abefe5 100644
--- a/oonib/onion.py
+++ b/oonib/onion.py
@@ -1,7 +1,7 @@
import tempfile
from oonib import log
from oonib.config import config
-from twisted.internet import reactor, endpoints
+from twisted.internet import reactor, endpoints, defer
import os
from random import randint
@@ -53,9 +53,8 @@ def txSetupFailed(failure):
log.err("Setup failed")
log.exception(failure)
-def configTor(torconfig):
- def updates(prog, tag, summary):
- print("%d%%: %s" % (prog, summary))
+def _configTor():
+ torconfig = TorConfig()
if config.main.socks_port:
torconfig.SocksPort = config.main.socks_port
@@ -89,3 +88,32 @@ def configTor(torconfig):
config.main.socks_port = socks_port
torconfig.save()
+ return torconfig
+
+# get_global_tor is a near-rip of that from txtorcon (so you can have some
+# confidence in the logic of it), but we use our own _configTor() while
+# the txtorcon function hardcodes some default values we don't want.
+_global_tor_config = None
+_global_tor_lock = defer.DeferredLock()
+# we need the lock because we (potentially) yield several times while
+# "creating" the TorConfig instance
+
+@xxxxxxxxxxxxxxxxxxxxx
+def get_global_tor(reactor):
+ global _global_tor_config
+ global _global_tor_lock
+ yield _global_tor_lock.acquire()
+
+ try:
+ if _global_tor_config is None:
+ _global_tor_config = config = _configTor()
+
+ # start Tor launching
+ def updates(prog, tag, summary):
+ print("%d%%: %s" % (prog, summary))
+ yield launch_tor(config, reactor, progress_updates=updates)
+ yield config.post_bootstrap
+
+ defer.returnValue(_global_tor_config)
+ finally:
+ _global_tor_lock.release()
diff --git a/oonib/oonibackend.py b/oonib/oonibackend.py
index 337b797..18bacf0 100644
--- a/oonib/oonibackend.py
+++ b/oonib/oonibackend.py
@@ -11,14 +11,14 @@ from distutils.version import LooseVersion
from oonib.api import ooniBackend, ooniBouncer
from oonib.config import config
-from oonib.onion import configTor
+from oonib.onion import get_global_tor
from oonib.testhelpers import dns_helpers, ssl_helpers
from oonib.testhelpers import http_helpers, tcp_helpers
import os
from twisted.application import internet, service
-from twisted.internet import reactor, endpoints, ssl
+from twisted.internet import reactor, endpoints, ssl, defer
from twisted.names import dns
from txtorcon import TCPHiddenServiceEndpoint, TorConfig
@@ -103,15 +103,17 @@ if config.helpers['http-return-json-headers'].port:
http_return_request_helper.startService()
def getHSEndpoint(endpoint_config):
- if torconfig is None:
- raise Exception("you probably need to set tor_hidden_service: true")
- hsdir = os.path.join(torconfig.DataDirectory, endpoint_config['hsdir'])
+ hsdir = endpoint_config['hsdir']
+ hsdir = os.path.expanduser(hsdir)
+ hsdir = os.path.realpath(hsdir)
if LooseVersion(txtorcon_version) >= LooseVersion('0.10.0'):
- return TCPHiddenServiceEndpoint.global_tor(reactor,
+ return TCPHiddenServiceEndpoint(reactor,
+ get_global_tor(reactor),
80,
hidden_service_dir=hsdir)
else:
- return TCPHiddenServiceEndpoint.global_tor(reactor,
+ return TCPHiddenServiceEndpoint(reactor,
+ get_global_tor(reactor),
80,
data_dir=hsdir)
@@ -151,27 +153,21 @@ def createService(endpoint, role, endpoint_config):
multiService.addService(service)
service.startService()
-torconfig = None
-if config.main.tor_hidden_service:
- torconfig = TorConfig()
- configTor(torconfig)
-
# this is to ensure same behaviour with an old config file
-if config.main.bouncer_endpoints is None and config.main.tor_hidden_service:
- config.main.bouncer_endpoints = [ {'type': 'onion', 'hsdir': 'bouncer'} ]
-
-if config.main.collector_endpoints is None and config.main.tor_hidden_service:
- config.main.collector_endpoints = [ {'type': 'onion', 'hsdir': 'collector'} ]
-
-config.main.bouncer_endpoints = config.main.get('bouncer_endpoints', [])
-config.main.collector_endpoints = config.main.get('collector_endpoints', [])
-
-for endpoint_config in config.main.bouncer_endpoints:
+if config.main.tor_hidden_service and \
+ config.main.bouncer_endpoints is None and \
+ config.main.collector_endpoints is None:
+ bouncer_hsdir = os.path.join(config.main.tor_datadir, 'bouncer')
+ collector_hsdir = os.path.join(config.main.tor_datadir, 'collector')
+ config.main.bouncer_endpoints = [ {'type': 'onion', 'hsdir': bouncer_hsdir} ]
+ config.main.collector_endpoints = [ {'type': 'onion', 'hsdir': collector_hsdir} ]
+
+for endpoint_config in config.main.get('bouncer_endpoints'):
print "Starting bouncer with config %s" % endpoint_config
endpoint = getEndpoint(endpoint_config)
createService(endpoint, 'bouncer', endpoint_config)
-for endpoint_config in config.main.collector_endpoints:
+for endpoint_config in config.main.get('collector_endpoints'):
print "Starting collector with config %s" % endpoint_config
endpoint = getEndpoint(endpoint_config)
createService(endpoint, 'collector', endpoint_config)
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits