diff options
author | Antti Ajanki <antti.ajanki@iki.fi> | 2010-11-09 21:51:15 +0200 |
---|---|---|
committer | Antti Ajanki <antti.ajanki@iki.fi> | 2010-11-09 21:51:15 +0200 |
commit | 650f211871942dfb37f474042b5d49f024874fe4 (patch) | |
tree | 41762b447f722744cd897cc878d1f2d99d9aea93 | |
parent | 10fe7c33a93666b1e98841698723eb2c12442800 (diff) | |
download | vdr-plugin-webvideo-650f211871942dfb37f474042b5d49f024874fe4.tar.gz vdr-plugin-webvideo-650f211871942dfb37f474042b5d49f024874fe4.tar.bz2 |
bookmarklet
-rw-r--r-- | examples/watchonvdr_bookmarklet.js | 1 | ||||
-rwxr-xr-x | examples/watchonvdr_proxy.py | 65 |
2 files changed, 66 insertions, 0 deletions
diff --git a/examples/watchonvdr_bookmarklet.js b/examples/watchonvdr_bookmarklet.js new file mode 100644 index 0000000..240ecdf --- /dev/null +++ b/examples/watchonvdr_bookmarklet.js @@ -0,0 +1 @@ +javascript:(function(){ var vdrserver='127.0.0.1:50080'; var xmlhttp=new XMLHttpRequest(); xmlhttp.open("GET", "http://" + vdrserver + "/play?url=" + encodeURIComponent(location.href), true); xmlhttp.send(null); })();
\ No newline at end of file diff --git a/examples/watchonvdr_proxy.py b/examples/watchonvdr_proxy.py new file mode 100755 index 0000000..ae8fecd --- /dev/null +++ b/examples/watchonvdr_proxy.py @@ -0,0 +1,65 @@ +#!/usr/bin/python + +# Proxy for relaying commands to play a video on VDR from a web +# browser to VDR. +# +# Listens for HTTP GET /play?url=XXX requests where XXX is the address +# of the video page (not address of the video stream) and converts +# them to webvideo plugin SVDRP commands. The bookmarklet in +# webvi_bookmarklet.js generates such requests. See README for the +# list of supported video sites. +# +# Antti Ajanki <antti.ajanki@iki.fi> + +import urllib +import socket +from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler + +SVDRP_ADDRESS = ('', 2001) +LISTEN_ADDRESS = ('', 50080) + +class SVDRPRequestHandler(BaseHTTPRequestHandler): + def send(self, cmd): + self.sock.sendall(cmd) + self.sock.sendall('\r\n') + + def do_GET(self): + if self.path.startswith('/play?url='): + videopage = urllib.unquote(self.path[len('/play?url='):]) + + # Strip everything after the first linefeed to prevent + # SVDRP command injection. + videopage = videopage.split('\r', 1)[0].split('\n', 1)[0] + + try: + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock.settimeout(10) + self.sock.connect(SVDRP_ADDRESS) + self.send('plug webvideo play %s' % videopage) + self.send('quit') + while len(self.sock.recv(4096)) > 0: + pass + self.sock.close() + + self.send_response(204, 'OK') + self.send_header('Access-Control-Allow-Origin', '*') + self.end_headers() + except socket.error, exc: + self.send_response(503, 'SVDRP connection error: %s' % exc) + self.send_header('Access-Control-Allow-Origin', '*') + self.end_headers() + except socket.timeout: + self.send_response(504, 'SVDRP timeout') + self.send_header('Access-Control-Allow-Origin', '*') + self.end_headers() + else: + self.send_response(404, 'Not found') + self.send_header('Access-Control-Allow-Origin', '*') + self.end_headers() + +def main(): + httpd = HTTPServer(LISTEN_ADDRESS, SVDRPRequestHandler) + httpd.serve_forever() + +if __name__ == '__main__': + main() |