add --no-listen, for debugging

This commit is contained in:
Brian Warner 2016-03-03 13:02:17 -08:00
parent fdf96b07fe
commit 9d7b9dd8d2
7 changed files with 21 additions and 4 deletions

View File

@ -207,13 +207,14 @@ class RecordPipe:
self.skt.close() self.skt.close()
class Common: class Common:
def __init__(self, transit_relay, timing=None): def __init__(self, transit_relay, no_listen=False, timing=None):
if transit_relay: if transit_relay:
if not isinstance(transit_relay, type(u"")): if not isinstance(transit_relay, type(u"")):
raise UsageError raise UsageError
self._transit_relays = [transit_relay] self._transit_relays = [transit_relay]
else: else:
self._transit_relays = [] self._transit_relays = []
self._no_listen = no_listen
self._timing = timing or DebugTiming() self._timing = timing or DebugTiming()
self._timing_started = self._timing.add_event("transit") self._timing_started = self._timing.add_event("transit")
self.winning = threading.Event() self.winning = threading.Event()
@ -224,6 +225,10 @@ class Common:
self._start_server() self._start_server()
def _start_server(self): def _start_server(self):
if self._no_listen:
self.my_direct_hints = []
self.listener = None
return
server = MyTCPServer(("", 0), None) server = MyTCPServer(("", 0), None)
_, port = server.server_address _, port = server.server_address
self.my_direct_hints = [u"tcp:%s:%d" % (addr, port) self.my_direct_hints = [u"tcp:%s:%d" % (addr, port)

View File

@ -29,6 +29,8 @@ g.add_argument("--dump-timing", type=type(u""), # TODO: hide from --help output
metavar="FILE", help="(debug) write timing data to file") metavar="FILE", help="(debug) write timing data to file")
g.add_argument("--twisted", action="store_true", g.add_argument("--twisted", action="store_true",
help="use Twisted-based implementations, for testing") help="use Twisted-based implementations, for testing")
g.add_argument("--no-listen", action="store_true",
help="(debug) don't open a listening socket for Transit")
parser.set_defaults(timing=None) parser.set_defaults(timing=None)
subparsers = parser.add_subparsers(title="subcommands", subparsers = parser.add_subparsers(title="subcommands",
dest="subcommand") dest="subcommand")

View File

@ -144,6 +144,7 @@ class BlockingReceiver:
def establish_transit(self, w, them_d): def establish_transit(self, w, them_d):
transit_key = w.derive_key(APPID+u"/transit-key") transit_key = w.derive_key(APPID+u"/transit-key")
transit_receiver = TransitReceiver(self.args.transit_helper, transit_receiver = TransitReceiver(self.args.transit_helper,
no_listen=self.args.no_listen,
timing=self.args.timing) timing=self.args.timing)
transit_receiver.set_transit_key(transit_key) transit_receiver.set_transit_key(transit_key)
data = json.dumps({ data = json.dumps({

View File

@ -99,6 +99,7 @@ class TwistedReceiver(BlockingReceiver):
def establish_transit(self, w, them_d): def establish_transit(self, w, them_d):
transit_key = w.derive_key(APPID+u"/transit-key") transit_key = w.derive_key(APPID+u"/transit-key")
transit_receiver = TransitReceiver(self.args.transit_helper, transit_receiver = TransitReceiver(self.args.transit_helper,
no_listen=self.args.no_listen,
timing=self.args.timing) timing=self.args.timing)
transit_receiver.set_transit_key(transit_key) transit_receiver.set_transit_key(transit_key)
direct_hints = yield transit_receiver.get_direct_hints() direct_hints = yield transit_receiver.get_direct_hints()

View File

@ -18,7 +18,9 @@ def send_blocking(args):
file=args.stdout) file=args.stdout)
if fd_to_send is not None: if fd_to_send is not None:
transit_sender = TransitSender(args.transit_helper, timing=args.timing) transit_sender = TransitSender(args.transit_helper,
no_listen=args.no_listen,
timing=args.timing)
transit_data = { transit_data = {
"direct_connection_hints": transit_sender.get_direct_hints(), "direct_connection_hints": transit_sender.get_direct_hints(),
"relay_connection_hints": transit_sender.get_relay_hints(), "relay_connection_hints": transit_sender.get_relay_hints(),

View File

@ -45,7 +45,9 @@ def send_twisted(args):
w = Wormhole(APPID, args.relay_url, timing=args.timing) w = Wormhole(APPID, args.relay_url, timing=args.timing)
if fd_to_send: if fd_to_send:
transit_sender = TransitSender(args.transit_helper, timing=args.timing) transit_sender = TransitSender(args.transit_helper,
no_listen=args.no_listen,
timing=args.timing)
phase1["transit"] = transit_data = {} phase1["transit"] = transit_data = {}
transit_data["relay_connection_hints"] = transit_sender.get_relay_hints() transit_data["relay_connection_hints"] = transit_sender.get_relay_hints()
direct_hints = yield transit_sender.get_direct_hints() direct_hints = yield transit_sender.get_direct_hints()

View File

@ -469,7 +469,8 @@ def there_can_be_only_one(contenders):
class Common: class Common:
RELAY_DELAY = 2.0 RELAY_DELAY = 2.0
def __init__(self, transit_relay, reactor=reactor, timing=None): def __init__(self, transit_relay, no_listen=False,
reactor=reactor, timing=None):
if transit_relay: if transit_relay:
if not isinstance(transit_relay, type(u"")): if not isinstance(transit_relay, type(u"")):
raise UsageError raise UsageError
@ -477,6 +478,7 @@ class Common:
else: else:
self._transit_relays = [] self._transit_relays = []
self._transit_key = None self._transit_key = None
self._no_listen = no_listen
self._waiting_for_transit_key = [] self._waiting_for_transit_key = []
self._listener = None self._listener = None
self._winner = None self._winner = None
@ -485,6 +487,8 @@ class Common:
self._timing_started = self._timing.add_event("transit") self._timing_started = self._timing.add_event("transit")
def _build_listener(self): def _build_listener(self):
if self._no_listen:
return ([], None)
portnum = allocate_tcp_port() portnum = allocate_tcp_port()
direct_hints = [u"tcp:%s:%d" % (addr, portnum) direct_hints = [u"tcp:%s:%d" % (addr, portnum)
for addr in ipaddrs.find_addresses()] for addr in ipaddrs.find_addresses()]