WebExtension as alternative to Chromecast
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.5 KiB

6 years ago
  1. #!/usr/bin/env python
  2. from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
  3. import sys
  4. import socket
  5. import json
  6. import struct
  7. import re
  8. import select
  9. server_address = ('',8128)
  10. timeout = 15
  11. # Send an encoded message to stdout.
  12. def extensionCall(messageContent):
  13. sys.stdout.write(struct.pack('@I', len(messageContent)))
  14. sys.stdout.write(messageContent)
  15. sys.stdout.flush()
  16. # wait for extension response
  17. i, o, e = select.select( [sys.stdin], [], [], timeout)
  18. if (i):
  19. rawLength = sys.stdin.read(4)
  20. if len(rawLength) == 0:
  21. return True
  22. messageLength = struct.unpack('@I', rawLength)[0]
  23. message = sys.stdin.read(messageLength)
  24. return message
  25. else:
  26. return False
  27. class PostHTTPRequestHandler(BaseHTTPRequestHandler):
  28. def do_GET(self):
  29. response = extensionCall('{"command" : "status"}')
  30. if response:
  31. self.send_response(200)
  32. else:
  33. self.send_response(500)
  34. self.send_header('Content-type', 'application/json')
  35. self.end_headers()
  36. self.wfile.write(response)
  37. def do_POST(self):
  38. buffer = self.rfile.read(int(self.headers['Content-Length']))
  39. response = extensionCall(buffer)
  40. if response:
  41. self.send_response(200)
  42. else:
  43. self.send_response(500)
  44. self.send_header('Content-type', 'application/json')
  45. self.end_headers()
  46. self.wfile.write(response)
  47. httpd = HTTPServer(server_address, PostHTTPRequestHandler)
  48. httpd.serve_forever()