mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-20 13:33:09 +00:00
Implement TorProvider class as described by Brian Warner
https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2490#comment:10
This commit is contained in:
parent
f549000121
commit
993d91ec0d
42
src/allmydata/tor.py
Normal file
42
src/allmydata/tor.py
Normal file
@ -0,0 +1,42 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
from __future__ import with_statement
|
||||
|
||||
from twisted.internet import reactor, defer
|
||||
|
||||
from txtorcon import torconfig
|
||||
from txtorcon import torcontrolprotocol
|
||||
|
||||
|
||||
class TorProvider:
|
||||
|
||||
def __init__(self, tor_binary=None, control_endpoint=None):
|
||||
assert tor_binary is not None or control_endpoint is not None
|
||||
|
||||
self.tor_binary = tor_binary
|
||||
self.control_endpoint = control_endpoint
|
||||
self.tor_control_protocol = None
|
||||
|
||||
def get_control_protocol(self):
|
||||
"""
|
||||
Returns a deferred which fires with the txtorcon tor control port object
|
||||
"""
|
||||
if self.tor_control_protocol is not None:
|
||||
d = defer.succeed(self.tor_control_protocol)
|
||||
else:
|
||||
if self.control_endpoint is None:
|
||||
config = torconfig.TorConfig()
|
||||
d = torconfig.launch_tor(config, reactor, tor_binary=self.tor_binary)
|
||||
def remember_tor_protocol(result):
|
||||
self.tor_control_protocol = result.tor_protocol
|
||||
return result.tor_protocol
|
||||
d.addCallback(remember_tor_protocol)
|
||||
else:
|
||||
d = torcontrolprotocol.connect(self.control_endpoint) # XXX use a password_function?
|
||||
def remember_tor_protocol(result):
|
||||
self.tor_control_protocol = result
|
||||
return result
|
||||
d.addCallback(remember_tor_protocol)
|
||||
return d
|
Loading…
Reference in New Issue
Block a user