Корректная обработка ошибок при неправильном имени канала.
[vpproxy.git] / vphttp.py
index bda34851d4be98e4ef5b7df5b6ef2d710e5e44ee..0c09c5297bb8e040d32460a1201c517f473544ac 100644 (file)
--- a/vphttp.py
+++ b/vphttp.py
@@ -27,6 +27,7 @@ import hashlib
 import vpconfig
 from vpconfig import VPConfig
 import vlcclient
+import gc
 import plugins.modules.ipaddr as ipaddr
 from clientcounter import ClientCounter
 from plugins.modules.PluginInterface import VPProxyPlugin
@@ -164,7 +165,7 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
             self.reqtype = self.splittedpath[1].lower()
             # If first parameter is 'pid' or 'torrent' or it should be handled
             # by plugin
-            if not (self.reqtype in ('get','mp4','ogg') or self.reqtype in VPStuff.pluginshandlers):
+            if not (self.reqtype in ('get','mp4','ogg','ogv') or self.reqtype in VPStuff.pluginshandlers):
                 self.dieWithError(400)  # 400 Bad Request
                 return
         except IndexError:
@@ -235,7 +236,9 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
             logger.debug(
                 "Sending fake headers for " + useragent)
             self.send_response(200)
-            if self.reqtype=="ogg":
+            self.send_header('Cache-Control','no-cache, no-store, must-revalidate');
+            self.send_header('Pragma','no-cache');
+            if self.reqtype in ("ogg","ogv"):
                 self.send_header("Content-Type", "video/ogg")
             else:
                 self.send_header("Content-Type", "video/mpeg")
@@ -295,6 +298,9 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
                 for key in self.video.info().dict:
                     self.send_header(key, self.video.info().dict[key])
 
+                self.send_header('Cache-Control','no-cache, no-store, must-revalidate');
+                self.send_header('Pragma','no-cache');
+
                 if self.reqtype=="ogg":
                     self.send_header("Content-Type", "video/ogg")
                 else:
@@ -335,7 +341,11 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
                 except:
                     pass
                 self.vp.destroy()
-
+            if not self.headerssent:
+                logger.error("Problem receiving video stream, no headers!")
+                if VPStuff.clientcounter.total == 0:
+                    logger.error("Probably VLC hang")
+                    VPStuff.vlc.kill()
 
 class HTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
 
@@ -402,6 +412,7 @@ for i in pluginslist:
         continue
     logger.debug('Plugin loaded: ' + plugname)
     for j in plugininstance.handlers:
+        logger.info("Registering handler '" + j +"'")
         VPStuff.pluginshandlers[j] = plugininstance
     VPStuff.pluginlist.append(plugininstance)