Корректная обработка ошибок при неправильном имени канала.
authorRoman Bazalevsky <rvb@rvb.name>
Mon, 2 Nov 2015 12:33:20 +0000 (15:33 +0300)
committerRoman Bazalevsky <rvb@rvb.name>
Mon, 2 Nov 2015 12:33:20 +0000 (15:33 +0300)
plugins/m3u_plugin.py

index 1bb6483b34866e0aee5823625d94a22166cd7c9f..4d806fac9643d1271266febf11e6df255b031e03 100644 (file)
@@ -45,6 +45,7 @@ class M3u(VPProxyPlugin):
 
     def handle(self, connection):
 
 
     def handle(self, connection):
 
+        logger = logging.getLogger('plugin_m3u')
         hostport = connection.headers['Host']
 
         self.splitted_path=connection.path.split('/')
         hostport = connection.headers['Host']
 
         self.splitted_path=connection.path.split('/')
@@ -61,6 +62,7 @@ class M3u(VPProxyPlugin):
           None  
         else:
           connection.dieWithError(404)  
           None  
         else:
           connection.dieWithError(404)  
+          return
           
         if len(self.splitted_path)>3 and self.splitted_path[1]!="play":
             connection.dieWithError()
           
         if len(self.splitted_path)>3 and self.splitted_path[1]!="play":
             connection.dieWithError()
@@ -108,6 +110,10 @@ class M3u(VPProxyPlugin):
             connection.end_headers()
         elif self.splitted_path[1]=="play":
             channel=self.splitted_path[len(self.splitted_path)-1]
             connection.end_headers()
         elif self.splitted_path[1]=="play":
             channel=self.splitted_path[len(self.splitted_path)-1]
+            logger.debug('channel requestes= "%s"' % channel)
+            if not channel:
+              connection.dieWithError(404)
+              return
             channel=urllib.unquote(channel).decode('utf-8')
             if len(self.splitted_path)<=4:
               prefix="get"
             channel=urllib.unquote(channel).decode('utf-8')
             if len(self.splitted_path)<=4:
               prefix="get"
@@ -115,10 +121,13 @@ class M3u(VPProxyPlugin):
               prefix=self.splitted_path[len(self.splitted_path)-2]
               if prefix not in ('get','mp4','webm'):
                 connection.dieWithError()
               prefix=self.splitted_path[len(self.splitted_path)-2]
               if prefix not in ('get','mp4','webm'):
                 connection.dieWithError()
+                return
             else:
               connection.dieWithError()  
             else:
               connection.dieWithError()  
+              return
             url=None
             for record in playlist:
             url=None
             for record in playlist:
+              if record.title:
                 if record.title.decode('utf-8').replace('/','')==channel:
                     url=record.path.decode('utf-8')
             if url:
                 if record.title.decode('utf-8').replace('/','')==channel:
                     url=record.path.decode('utf-8')
             if url:
@@ -127,7 +136,9 @@ class M3u(VPProxyPlugin):
                 connection.send_header('Location', redirect)
                 connection.end_headers()
             else:
                 connection.send_header('Location', redirect)
                 connection.end_headers()
             else:
+                logger.debug('Nothing found!')
                 connection.dieWithError(404)
                 connection.dieWithError(404)
+                return
             
         else:
             connection.send_response(200)
             
         else:
             connection.send_response(200)
@@ -144,10 +155,10 @@ class M3u(VPProxyPlugin):
             connection.dieWithError()
             return
 
             connection.dieWithError()
             return
 
+        exported = ""
+
         if self.splitted_path[1]=="list":
  
         if self.splitted_path[1]=="list":
  
-             exported = ""
-            
              for record in playlist:
                  if record.title:
                      exported = exported + "" + record.title.decode('utf-8').replace('/','') + "\n"
              for record in playlist:
                  if record.title:
                      exported = exported + "" + record.title.decode('utf-8').replace('/','') + "\n"
@@ -182,9 +193,9 @@ class M3u(VPProxyPlugin):
 
             exported = playlistgen.exportm3u(hostport,prefix)
 
 
             exported = playlistgen.exportm3u(hostport,prefix)
 
-        exported = exported.encode('utf-8')
-        
-        connection.wfile.write(exported)
+        if exported:
+            exported = exported.encode('utf-8')
+            connection.wfile.write(exported)
 
     def getparam(self, key):
         if key in self.params:
 
     def getparam(self, key):
         if key in self.params: