OLD | NEW |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import logging | 5 import logging |
6 import os | 6 import os |
7 import pexpect | 7 import pexpect |
8 import re | 8 import re |
9 import sys | 9 import sys |
10 | 10 |
11 import android_commands | 11 import android_commands |
12 from constants import CHROME_DIR | 12 from constants import CHROME_DIR |
13 | 13 |
14 class Forwarder(object): | 14 class Forwarder(object): |
15 """Class to manage port forwards from the device to the host.""" | 15 """Class to manage port forwards from the device to the host.""" |
16 | 16 |
17 _FORWARDER_PATH = '/data/local/tmp/forwarder' | 17 _FORWARDER_PATH = '/data/local/tmp/forwarder' |
18 _TIMEOUT_SECS = 30 | 18 _TIMEOUT_SECS = 30 |
19 | 19 |
20 def __init__(self, adb, port_pairs, tool, host_name): | 20 def __init__(self, adb, port_pairs, tool, host_name, build_type): |
21 """Forwards TCP ports on the device back to the host. | 21 """Forwards TCP ports on the device back to the host. |
22 | 22 |
23 Works like adb forward, but in reverse. | 23 Works like adb forward, but in reverse. |
24 | 24 |
25 Args: | 25 Args: |
26 adb: Instance of AndroidCommands for talking to the device. | 26 adb: Instance of AndroidCommands for talking to the device. |
27 port_pairs: A list of tuples (device_port, host_port) to forward. Note | 27 port_pairs: A list of tuples (device_port, host_port) to forward. Note |
28 that you can specify 0 as a device_port, in which case a | 28 that you can specify 0 as a device_port, in which case a |
29 port will by dynamically assigned on the device. You can | 29 port will by dynamically assigned on the device. You can |
30 get the number of the assigned port using the | 30 get the number of the assigned port using the |
31 DevicePortForHostPort method. | 31 DevicePortForHostPort method. |
32 tool: Tool class to use to get wrapper, if necessary, for executing the | 32 tool: Tool class to use to get wrapper, if necessary, for executing the |
33 forwarder (see valgrind_tools.py). | 33 forwarder (see valgrind_tools.py). |
34 host_name: Optional. Address to forward to, must be addressable from the | 34 host_name: Address to forward to, must be addressable from the |
35 host machine. Usually this is omitted and loopback is used. | 35 host machine. Usually use loopback '127.0.0.1'. |
| 36 build_type: 'Release' or 'Debug'. |
36 | 37 |
37 Raises: | 38 Raises: |
38 Exception on failure to forward the port. | 39 Exception on failure to forward the port. |
39 """ | 40 """ |
40 self._adb = adb | 41 self._adb = adb |
41 self._host_to_device_port_map = dict() | 42 self._host_to_device_port_map = dict() |
42 self._process = None | 43 self._process = None |
43 adb.PushIfNeeded( | 44 adb.PushIfNeeded( |
44 os.path.join(CHROME_DIR, 'out', 'Release', 'forwarder'), | 45 os.path.join(CHROME_DIR, 'out', build_type, 'forwarder'), |
45 Forwarder._FORWARDER_PATH) | 46 Forwarder._FORWARDER_PATH) |
46 forward_string = ['%d:%d:%s' % | 47 forward_string = ['%d:%d:%s' % |
47 (device, host, host_name) for device, host in port_pairs] | 48 (device, host, host_name) for device, host in port_pairs] |
48 | 49 |
49 # Kill off any existing forwarders on conflicting non-dynamically allocated | 50 # Kill off any existing forwarders on conflicting non-dynamically allocated |
50 # ports. | 51 # ports. |
51 for device_port, _ in port_pairs: | 52 for device_port, _ in port_pairs: |
52 if device_port != 0: | 53 if device_port != 0: |
53 self._KillForwardersUsingDevicePort(device_port) | 54 self._KillForwardersUsingDevicePort(device_port) |
54 | 55 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 | 112 |
112 def DevicePortForHostPort(self, host_port): | 113 def DevicePortForHostPort(self, host_port): |
113 """Get the device port that corresponds to a given host port.""" | 114 """Get the device port that corresponds to a given host port.""" |
114 return self._host_to_device_port_map.get(host_port) | 115 return self._host_to_device_port_map.get(host_port) |
115 | 116 |
116 def Close(self): | 117 def Close(self): |
117 """Terminate the forwarder process.""" | 118 """Terminate the forwarder process.""" |
118 if self._process: | 119 if self._process: |
119 self._process.close() | 120 self._process.close() |
120 self._process = None | 121 self._process = None |
OLD | NEW |