summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntti Ajanki <antti.ajanki@iki.fi>2010-11-09 21:51:15 +0200
committerAntti Ajanki <antti.ajanki@iki.fi>2010-11-09 21:51:15 +0200
commit650f211871942dfb37f474042b5d49f024874fe4 (patch)
tree41762b447f722744cd897cc878d1f2d99d9aea93
parent10fe7c33a93666b1e98841698723eb2c12442800 (diff)
downloadvdr-plugin-webvideo-650f211871942dfb37f474042b5d49f024874fe4.tar.gz
vdr-plugin-webvideo-650f211871942dfb37f474042b5d49f024874fe4.tar.bz2
bookmarklet
-rw-r--r--examples/watchonvdr_bookmarklet.js1
-rwxr-xr-xexamples/watchonvdr_proxy.py65
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()