OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # | |
3 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
4 # Use of this source code is governed by a BSD-style license that can be | |
5 # found in the LICENSE file. | |
6 | |
7 """Command line tool for forwarding ports from a device to the host. | |
8 | |
9 Allows an Android device to connect to services running on the host machine, | |
10 i.e., "adb forward" in reverse. Requires |host_forwarder| and |device_forwarder| | |
11 to be built. | |
12 """ | |
13 | |
14 import logging | |
15 import optparse | |
16 import sys | |
17 import time | |
18 | |
19 from pylib import constants | |
20 from pylib import forwarder | |
21 from pylib.device import adb_wrapper | |
22 from pylib.device import device_errors | |
23 from pylib.device import device_utils | |
24 from pylib.utils import run_tests_helper | |
25 | |
26 | |
27 def main(argv): | |
28 parser = optparse.OptionParser(usage='Usage: %prog [options] device_port ' | |
29 'host_port [device_port_2 host_port_2] ...', | |
30 description=__doc__) | |
31 parser.add_option('-v', | |
32 '--verbose', | |
33 dest='verbose_count', | |
34 default=0, | |
35 action='count', | |
36 help='Verbose level (multiple times for more)') | |
37 parser.add_option('--device', | |
38 help='Serial number of device we should use.') | |
39 parser.add_option('--debug', action='store_const', const='Debug', | |
40 dest='build_type', default='Release', | |
41 help='Use Debug build of host tools instead of Release.') | |
42 | |
43 options, args = parser.parse_args(argv) | |
44 run_tests_helper.SetLogLevel(options.verbose_count) | |
45 | |
46 if len(args) < 2 or not len(args) % 2: | |
47 parser.error('Need even number of port pairs') | |
48 sys.exit(1) | |
49 | |
50 try: | |
51 port_pairs = map(int, args[1:]) | |
52 port_pairs = zip(port_pairs[::2], port_pairs[1::2]) | |
53 except ValueError: | |
54 parser.error('Bad port number') | |
55 sys.exit(1) | |
56 | |
57 devices = device_utils.DeviceUtils.HealthyDevices() | |
58 | |
59 if options.device: | |
60 device = next((d for d in devices if d == options.device), None) | |
61 if not device: | |
62 raise device_errors.DeviceUnreachableError(options.device) | |
63 elif devices: | |
64 device = devices[0] | |
65 logging.info('No device specified. Defaulting to %s', devices[0]) | |
66 else: | |
67 raise device_errors.NoDevicesError() | |
68 | |
69 constants.SetBuildType(options.build_type) | |
70 try: | |
71 forwarder.Forwarder.Map(port_pairs, device) | |
72 while True: | |
73 time.sleep(60) | |
74 except KeyboardInterrupt: | |
75 sys.exit(0) | |
76 finally: | |
77 forwarder.Forwarder.UnmapAllDevicePorts(device) | |
78 | |
79 if __name__ == '__main__': | |
80 main(sys.argv) | |
OLD | NEW |