server.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!/usr/bin/env python3
  2. # Copyright 2022 The Chromium Authors. All rights reserved.
  3. # Use of this source code is governed by a BSD-style license that can be
  4. # found in the LICENSE file.
  5. from http.server import HTTPServer, SimpleHTTPRequestHandler, test
  6. from functools import partial
  7. import sys
  8. import urllib.request
  9. import socketserver
  10. import webbrowser
  11. import os
  12. debugger_port = 0
  13. remote_port = 7777
  14. class CORSRequestHandler(SimpleHTTPRequestHandler):
  15. def do_GET(self):
  16. if (self.path == "/discover.html"):
  17. try:
  18. contents = urllib.request.urlopen("http://localhost:" +
  19. str(remote_port) +
  20. "/json/version").read()
  21. self.send_response(200)
  22. except Exception:
  23. contents =\
  24. "\n Cannot connect to remote discovery page on localhost:"+\
  25. str(remote_port) +\
  26. "\n check for target command line parameter: \n" +\
  27. " --remote-debugging-port=" + str(remote_port) +\
  28. "\n and if the target is a remote DUT tunnel forwarding"+\
  29. " is required from local to remote : " + \
  30. "\n ssh root@$DUT_IP -L " + \
  31. str(remote_port)+":localhost:" + str(remote_port)
  32. contents = bytes(contents, 'UTF-8')
  33. # Used error code 206 to prevent console logs every time
  34. # connection is unsuccessful.
  35. self.send_response(206)
  36. self.send_header("Content-type", "text/html")
  37. self.send_header("Content-length", len(contents))
  38. self.end_headers()
  39. self.wfile.write(contents)
  40. else:
  41. SimpleHTTPRequestHandler.do_GET(self)
  42. if __name__ == '__main__':
  43. try:
  44. remote_port = int(sys.argv[1]) if len(sys.argv) > 1 else remote_port
  45. debugger_port = int(sys.argv[2]) if len(sys.argv) > 2 else debugger_port
  46. # Creates a partial object that will behave like a function called with args
  47. # and kwargs, while overriding directory with the given path.
  48. Handler = partial(CORSRequestHandler,
  49. directory=os.path.dirname(os.path.abspath(__file__)))
  50. socketserver.TCPServer.allow_reuse_address = True
  51. tpc_server = socketserver.TCPServer(("", debugger_port), Handler)
  52. # If socket is not specified it was assigned so we must grab it.
  53. if (debugger_port == 0):
  54. debugger_port = tpc_server.server_address[1]
  55. print("Server running on port", debugger_port)
  56. webbrowser.open("http://localhost:" + str(debugger_port) + "/app.html",
  57. new=1,
  58. autoraise=True)
  59. tpc_server.serve_forever()
  60. except KeyboardInterrupt:
  61. tpc_server.server_close()
  62. sys.exit()