From 273c4d796cbc2080ae2cb7545aa4c8b8250d182c Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Tue, 10 Sep 2019 23:09:04 -0700
Subject: [PATCH] change default port= to listen on both IPv4+IPv6

The default was "tcp:4001", which happens to expand into
"tcp:4001:interface=127.0.0.1", which limits the listening socket to IPv4
connections only.

Changing it to "tcp:4001:interface=\:\:1" means "listen on ::1", which is the
IPv6 name for the loopback interface, and gets us a socket that accepts both
IPv4 and IPv6 connections.

Note: this might cause incompatibilities with IPv4-only hosts, if they don't
accept the "::1" name. For these systems, run the server as `twist
transitrelay --port=tcp:4001" to revert to the old behavior.

closes #12
---
 src/wormhole_transit_relay/server_tap.py       | 2 +-
 src/wormhole_transit_relay/test/test_config.py | 6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/wormhole_transit_relay/server_tap.py b/src/wormhole_transit_relay/server_tap.py
index 718759e..d3e3f56 100644
--- a/src/wormhole_transit_relay/server_tap.py
+++ b/src/wormhole_transit_relay/server_tap.py
@@ -19,7 +19,7 @@ class Options(usage.Options):
     longdesc = LONGDESC
 
     optParameters = [
-        ("port", "p", "tcp:4001", "endpoint to listen on"),
+        ("port", "p", "tcp:4001:interface=\:\:1", "endpoint to listen on"),
         ("blur-usage", None, None, "blur timestamps and data sizes in logs"),
         ("log-fd", None, None, "write JSON usage logs to this file descriptor"),
         ("usage-db", None, None, "record usage data (SQLite)"),
diff --git a/src/wormhole_transit_relay/test/test_config.py b/src/wormhole_transit_relay/test/test_config.py
index 02e3fee..6eb5dc2 100644
--- a/src/wormhole_transit_relay/test/test_config.py
+++ b/src/wormhole_transit_relay/test/test_config.py
@@ -2,17 +2,19 @@ from __future__ import unicode_literals, print_function
 from twisted.trial import unittest
 from .. import server_tap
 
+PORT = "tcp:4001:interface=\:\:1"
+
 class Config(unittest.TestCase):
     def test_defaults(self):
         o = server_tap.Options()
         o.parseOptions([])
         self.assertEqual(o, {"blur-usage": None, "log-fd": None,
-                             "usage-db": None, "port": "tcp:4001"})
+                             "usage-db": None, "port": PORT})
     def test_blur(self):
         o = server_tap.Options()
         o.parseOptions(["--blur-usage=60"])
         self.assertEqual(o, {"blur-usage": 60, "log-fd": None,
-                             "usage-db": None, "port": "tcp:4001"})
+                             "usage-db": None, "port": PORT})
 
     def test_string(self):
         o = server_tap.Options()