From 9d7b9dd8d2c61858c0eb2cdfbbf51d4cccf129c5 Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Thu, 3 Mar 2016 13:02:17 -0800 Subject: [PATCH] add --no-listen, for debugging --- src/wormhole/blocking/transit.py | 7 ++++++- src/wormhole/scripts/cli_args.py | 2 ++ src/wormhole/scripts/cmd_receive_blocking.py | 1 + src/wormhole/scripts/cmd_receive_twisted.py | 1 + src/wormhole/scripts/cmd_send_blocking.py | 4 +++- src/wormhole/scripts/cmd_send_twisted.py | 4 +++- src/wormhole/twisted/transit.py | 6 +++++- 7 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/wormhole/blocking/transit.py b/src/wormhole/blocking/transit.py index 42a334a..c520437 100644 --- a/src/wormhole/blocking/transit.py +++ b/src/wormhole/blocking/transit.py @@ -207,13 +207,14 @@ class RecordPipe: self.skt.close() class Common: - def __init__(self, transit_relay, timing=None): + def __init__(self, transit_relay, no_listen=False, timing=None): if transit_relay: if not isinstance(transit_relay, type(u"")): raise UsageError self._transit_relays = [transit_relay] else: self._transit_relays = [] + self._no_listen = no_listen self._timing = timing or DebugTiming() self._timing_started = self._timing.add_event("transit") self.winning = threading.Event() @@ -224,6 +225,10 @@ class Common: self._start_server() def _start_server(self): + if self._no_listen: + self.my_direct_hints = [] + self.listener = None + return server = MyTCPServer(("", 0), None) _, port = server.server_address self.my_direct_hints = [u"tcp:%s:%d" % (addr, port) diff --git a/src/wormhole/scripts/cli_args.py b/src/wormhole/scripts/cli_args.py index fd8e11f..3a4d898 100644 --- a/src/wormhole/scripts/cli_args.py +++ b/src/wormhole/scripts/cli_args.py @@ -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") g.add_argument("--twisted", action="store_true", 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) subparsers = parser.add_subparsers(title="subcommands", dest="subcommand") diff --git a/src/wormhole/scripts/cmd_receive_blocking.py b/src/wormhole/scripts/cmd_receive_blocking.py index f527492..afecd06 100644 --- a/src/wormhole/scripts/cmd_receive_blocking.py +++ b/src/wormhole/scripts/cmd_receive_blocking.py @@ -144,6 +144,7 @@ class BlockingReceiver: def establish_transit(self, w, them_d): transit_key = w.derive_key(APPID+u"/transit-key") transit_receiver = TransitReceiver(self.args.transit_helper, + no_listen=self.args.no_listen, timing=self.args.timing) transit_receiver.set_transit_key(transit_key) data = json.dumps({ diff --git a/src/wormhole/scripts/cmd_receive_twisted.py b/src/wormhole/scripts/cmd_receive_twisted.py index ca35f6e..1dadf8a 100644 --- a/src/wormhole/scripts/cmd_receive_twisted.py +++ b/src/wormhole/scripts/cmd_receive_twisted.py @@ -99,6 +99,7 @@ class TwistedReceiver(BlockingReceiver): def establish_transit(self, w, them_d): transit_key = w.derive_key(APPID+u"/transit-key") transit_receiver = TransitReceiver(self.args.transit_helper, + no_listen=self.args.no_listen, timing=self.args.timing) transit_receiver.set_transit_key(transit_key) direct_hints = yield transit_receiver.get_direct_hints() diff --git a/src/wormhole/scripts/cmd_send_blocking.py b/src/wormhole/scripts/cmd_send_blocking.py index b3bd9ab..7259185 100644 --- a/src/wormhole/scripts/cmd_send_blocking.py +++ b/src/wormhole/scripts/cmd_send_blocking.py @@ -18,7 +18,9 @@ def send_blocking(args): file=args.stdout) 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 = { "direct_connection_hints": transit_sender.get_direct_hints(), "relay_connection_hints": transit_sender.get_relay_hints(), diff --git a/src/wormhole/scripts/cmd_send_twisted.py b/src/wormhole/scripts/cmd_send_twisted.py index 3a45446..f6d04ed 100644 --- a/src/wormhole/scripts/cmd_send_twisted.py +++ b/src/wormhole/scripts/cmd_send_twisted.py @@ -45,7 +45,9 @@ def send_twisted(args): w = Wormhole(APPID, args.relay_url, timing=args.timing) 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 = {} transit_data["relay_connection_hints"] = transit_sender.get_relay_hints() direct_hints = yield transit_sender.get_direct_hints() diff --git a/src/wormhole/twisted/transit.py b/src/wormhole/twisted/transit.py index 1f71a5d..5b0e88d 100644 --- a/src/wormhole/twisted/transit.py +++ b/src/wormhole/twisted/transit.py @@ -469,7 +469,8 @@ def there_can_be_only_one(contenders): class Common: 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 not isinstance(transit_relay, type(u"")): raise UsageError @@ -477,6 +478,7 @@ class Common: else: self._transit_relays = [] self._transit_key = None + self._no_listen = no_listen self._waiting_for_transit_key = [] self._listener = None self._winner = None @@ -485,6 +487,8 @@ class Common: self._timing_started = self._timing.add_event("transit") def _build_listener(self): + if self._no_listen: + return ([], None) portnum = allocate_tcp_port() direct_hints = [u"tcp:%s:%d" % (addr, portnum) for addr in ipaddrs.find_addresses()]