aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/internal/forwarders/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/telemetry/telemetry/internal/forwarders/__init__.py')
-rw-r--r--catapult/telemetry/telemetry/internal/forwarders/__init__.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/internal/forwarders/__init__.py b/catapult/telemetry/telemetry/internal/forwarders/__init__.py
new file mode 100644
index 00000000..b11fbfee
--- /dev/null
+++ b/catapult/telemetry/telemetry/internal/forwarders/__init__.py
@@ -0,0 +1,55 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import collections
+
+
+PortPair = collections.namedtuple('PortPair', ['local_port', 'remote_port'])
+PortSet = collections.namedtuple('PortSet', ['http', 'https', 'dns'])
+
+
+
+class ForwarderFactory(object):
+
+ def Create(self, port_pair):
+ """Creates a forwarder that maps remote (device) <-> local (host) ports.
+
+ Args:
+ port_pair: A PortPairs instance that consists of a PortPair mapping
+ for each protocol. http is required. https and dns may be None.
+ """
+ raise NotImplementedError()
+
+ @property
+ def host_ip(self):
+ return '127.0.0.1'
+
+
+class Forwarder(object):
+
+ def __init__(self, port_pair):
+ assert port_pair, 'Port mapping is required.'
+ self._port_pair = port_pair
+ self._forwarding = True
+
+ @property
+ def host_port(self):
+ return self._port_pair.remote_port
+
+ @property
+ def host_ip(self):
+ return '127.0.0.1'
+
+ @property
+ def port_pair(self):
+ return self._port_pair
+
+ @property
+ def url(self):
+ assert self.host_ip and self.host_port
+ return 'http://%s:%i' % (self.host_ip, self.host_port)
+
+ def Close(self):
+ self._port_pair = None
+ self._forwarding = False