transcoding option for web-video added
[vpproxy.git] / vphttp.py
index 904656368a089d160b6524b3c09521fcdcbbc3e4..5670965c84638b5c31807658631677c132ec3c01 100644 (file)
--- a/vphttp.py
+++ b/vphttp.py
@@ -163,7 +163,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
             self.reqtype = self.splittedpath[1].lower()
             # If first parameter is 'pid' or 'torrent' or it should be handled
             # by plugin
-            if not (self.reqtype=='get' or self.reqtype in VPStuff.pluginshandlers):
+            if not (self.reqtype in ('get','mp4') or self.reqtype in VPStuff.pluginshandlers):
                 self.dieWithError(400)  # 400 Bad Request
                 return
         except IndexError:
                 self.dieWithError(400)  # 400 Bad Request
                 return
         except IndexError:
@@ -186,6 +186,7 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
     def handleRequest(self, headers_only):
 
         # Limit concurrent connections
     def handleRequest(self, headers_only):
 
         # Limit concurrent connections
+        print VPStuff.clientcounter.total
         if 0 < VPConfig.maxconns <= VPStuff.clientcounter.total:
             logger.debug("Maximum connections reached, can't serve this")
             self.dieWithError(503)  # 503 Service Unavailable
         if 0 < VPConfig.maxconns <= VPStuff.clientcounter.total:
             logger.debug("Maximum connections reached, can't serve this")
             self.dieWithError(503)  # 503 Service Unavailable
@@ -193,6 +194,7 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
 
         # Pretend to work fine with Fake UAs or HEAD request.
         useragent = self.headers.get('User-Agent')
 
         # Pretend to work fine with Fake UAs or HEAD request.
         useragent = self.headers.get('User-Agent')
+        logger.debug("HTTP User Agent:"+useragent)
         fakeua = useragent and useragent in VPConfig.fakeuas
         if headers_only or fakeua:
             if fakeua:
         fakeua = useragent and useragent in VPConfig.fakeuas
         if headers_only or fakeua:
             if fakeua:
@@ -214,19 +216,19 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
                 self.params.append('0')
 
         # Adding client to clientcounter
                 self.params.append('0')
 
         # Adding client to clientcounter
-        clients = VPStuff.clientcounter.add(self.path_unquoted, self.clientip)
+        clients = VPStuff.clientcounter.add(self.reqtype+'\\'+self.path_unquoted, self.clientip)
         # If we are the one client, but sucessfully got vp instance from clientcounter,
         # then somebody is waiting in the videodestroydelay state
 
         # Check if we are first client
         # If we are the one client, but sucessfully got vp instance from clientcounter,
         # then somebody is waiting in the videodestroydelay state
 
         # Check if we are first client
-        if VPStuff.clientcounter.get(self.path_unquoted)==1:
+        if VPStuff.clientcounter.get(self.reqtype+'\\'+self.path_unquoted)==1:
             logger.debug("First client, should create VLC session")
             shouldcreatevp = True
         else:
             logger.debug("Can reuse existing session")
             shouldcreatevp = False
 
             logger.debug("First client, should create VLC session")
             shouldcreatevp = True
         else:
             logger.debug("Can reuse existing session")
             shouldcreatevp = False
 
-        self.vlcid = hashlib.md5(self.path_unquoted).hexdigest()
+        self.vlcid = hashlib.md5(self.reqtype+'\\'+self.path_unquoted).hexdigest()
 
         # Send fake headers if this User-Agent is in fakeheaderuas tuple
         if fakeua:
 
         # Send fake headers if this User-Agent is in fakeheaderuas tuple
         if fakeua:
@@ -243,12 +245,9 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
             logger.debug("hangDetector spawned")
             gevent.sleep()
 
             logger.debug("hangDetector spawned")
             gevent.sleep()
 
-            # Initializing VPClient
-
             # Getting URL
             self.errorhappened = False
 
             # Getting URL
             self.errorhappened = False
 
-            print shouldcreatevp
             if shouldcreatevp:
                 logger.debug("Got url " + self.path_unquoted)
                 # Force ffmpeg demuxing if set in config
             if shouldcreatevp:
                 logger.debug("Got url " + self.path_unquoted)
                 # Force ffmpeg demuxing if set in config
@@ -257,8 +256,9 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
                 else:
                     self.vlcprefix = ''
 
                 else:
                     self.vlcprefix = ''
 
+                logger.debug("Ready to start broadcast....")                    
                 VPStuff.vlcclient.startBroadcast(
                 VPStuff.vlcclient.startBroadcast(
-                    self.vlcid, self.vlcprefix + self.path_unquoted, VPConfig.vlcmux, VPConfig.vlcpreaccess)
+                    self.vlcid, self.vlcprefix + self.path_unquoted, VPConfig.vlcmux, VPConfig.vlcpreaccess, self.reqtype)
                 # Sleep a bit, because sometimes VLC doesn't open port in
                 # time
                 gevent.sleep(0.5)
                 # Sleep a bit, because sometimes VLC doesn't open port in
                 # time
                 gevent.sleep(0.5)
@@ -311,12 +311,11 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
             # Unknown exception
             logger.error(traceback.format_exc())
             self.errorhappened = True
             # Unknown exception
             logger.error(traceback.format_exc())
             self.errorhappened = True
-            raise
             self.dieWithError()
         finally:
             logger.debug("END REQUEST")
             self.dieWithError()
         finally:
             logger.debug("END REQUEST")
-            VPStuff.clientcounter.delete(self.path_unquoted, self.clientip)
-            if not VPStuff.clientcounter.get(self.path_unquoted):
+            VPStuff.clientcounter.delete(self.reqtype+'\\'+self.path_unquoted, self.clientip)
+            if not VPStuff.clientcounter.get(self.reqtype+'\\'+self.path_unquoted):
                 try:
                     logger.debug("That was the last client, destroying VPClient")
                     VPStuff.vlcclient.stopBroadcast(self.vlcid)
                 try:
                     logger.debug("That was the last client, destroying VPClient")
                     VPStuff.vlcclient.stopBroadcast(self.vlcid)
@@ -417,7 +416,7 @@ DEVNULL = open(os.devnull, 'wb')
 # Spawning procedures
 def spawnVLC(cmd, delay = 0):
     try:
 # Spawning procedures
 def spawnVLC(cmd, delay = 0):
     try:
-        VPStuff.vlc = psutil.Popen(cmd, stdout=DEVNULL, stderr=DEVNULL)
+        VPStuff.vlc = psutil.Popen(cmd) #, stdout=DEVNULL, stderr=DEVNULL)
         gevent.sleep(delay)
         return True
     except:
         gevent.sleep(delay)
         return True
     except:
@@ -430,7 +429,6 @@ def connectVLC():
             out_port=VPConfig.vlcoutport)
         return True
     except vlcclient.VlcException as e:
             out_port=VPConfig.vlcoutport)
         return True
     except vlcclient.VlcException as e:
-        print repr(e)
         return False
 
 def isRunning(process):
         return False
 
 def isRunning(process):