Browse Source

Add some initial support for pluggable transports in TorNet

We can now configure extorports and pt ports, and we can make a
sort-of-plausible bridge line.

We will need more work to get an actually correct bridge line, since

   1) we need to copy the 'cert' field out of the obfs state
      directory, and
   2) we will need to start the bridge before we can configure the
      client, which is not how we usually do things.
Nick Mathewson 5 years ago
parent
commit
ffd612b1f5
1 changed files with 23 additions and 4 deletions
  1. 23 4
      lib/chutney/TorNet.py

+ 23 - 4
lib/chutney/TorNet.py

@@ -633,11 +633,20 @@ class LocalNodeBuilder(NodeBuilder):
         if not self._env['bridge']:
         if not self._env['bridge']:
             return ""
             return ""
 
 
-        bridgelines = "Bridge %s:%s\n" % (self._env['ip'],
-                                          self._env['orport'])
+        if self._env['pt_bridge']:
+            port = self._env['ptport']
+            transport = self._env['pt_transport']
+        else:
+            port = self._env['orport']
+            transport = ""
+
+        bridgelines = "Bridge %s %s:%s\n" % (transport,
+                                             self._env['ip'],
+                                             port)
         if self._env['ipv6_addr'] is not None:
         if self._env['ipv6_addr'] is not None:
-            bridgelines += "Bridge %s:%s\n" % (self._env['ipv6_addr'],
-                                               self._env['orport'])
+            bridgelines += "Bridge %s %s:%s\n" % (transport,
+                                                  self._env['ipv6_addr'],
+                                                  port)
         return bridgelines
         return bridgelines
 
 
 
 
@@ -861,6 +870,8 @@ DEFAULTS = {
     'hasbridgeauth': False,
     'hasbridgeauth': False,
     'relay': False,
     'relay': False,
     'bridge': False,
     'bridge': False,
+    'pt_bridge': False,
+    'pt_transport' : "",
     'hs': False,
     'hs': False,
     'hs_directory': 'hidden_service',
     'hs_directory': 'hidden_service',
     'hs-hostname': None,
     'hs-hostname': None,
@@ -879,6 +890,8 @@ DEFAULTS = {
     'dirport_base': 7000,
     'dirport_base': 7000,
     'controlport_base': 8000,
     'controlport_base': 8000,
     'socksport_base': 9000,
     'socksport_base': 9000,
+    'extorport_base' : 9500,
+    'ptport_base' : 9900,
     'authorities': "AlternateDirAuthority bleargh bad torrc file!",
     'authorities': "AlternateDirAuthority bleargh bad torrc file!",
     'bridges': "Bridge bleargh bad torrc file!",
     'bridges': "Bridge bleargh bad torrc file!",
     'core': True,
     'core': True,
@@ -968,6 +981,12 @@ class TorEnviron(chutney.Templating.Environ):
     def _get_dirport(self, my):
     def _get_dirport(self, my):
         return my['dirport_base'] + my['nodenum']
         return my['dirport_base'] + my['nodenum']
 
 
+    def _get_extorport(self, my):
+        return my['extorport_base'] + my['nodenum']
+
+    def _get_ptport(self, my):
+        return my['ptport_base'] + my['nodenum']
+
     def _get_dir(self, my):
     def _get_dir(self, my):
         return os.path.abspath(os.path.join(my['net_base_dir'],
         return os.path.abspath(os.path.join(my['net_base_dir'],
                                             "nodes",
                                             "nodes",