X-Git-Url: https://git.rvb.name/vpproxy.git/blobdiff_plain/1aebc74d991c35b7eb82395434d543d44f536089..c65fdd8ebbd745ba03e5477eb317343aace3ebba:/vphttp.py diff --git a/vphttp.py b/vphttp.py index 7ed52f7..040e94c 100644 --- a/vphttp.py +++ b/vphttp.py @@ -138,6 +138,7 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler): ''' GET request handler ''' + logger = logging.getLogger('http_HTTPHandler') self.clientconnected = True # Don't wait videodestroydelay if error happened @@ -149,6 +150,14 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler): # Connected client IP address self.clientip = self.request.getpeername()[0] + req_headers = self.headers + self.client_data = { + 'ip': self.clientip, + 'forwarded-for': req_headers.get('X-Forwarded-For'), + 'client-agent': req_headers.get('User-Agent'), + 'uuid': uuid.uuid4() + } + if VPConfig.firewall: # If firewall enabled self.clientinrange = any(map(lambda i: ipaddr.IPAddress(self.clientip) \ @@ -190,8 +199,6 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler): def handleRequest(self, headers_only): - self.unic = uuid.uuid4() - # Limit concurrent connections if 0 < VPConfig.maxconns <= VPStuff.clientcounter.total: logger.debug("Maximum connections reached, can't serve this") @@ -222,19 +229,19 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler): self.params.append('0') # Adding client to clientcounter - clients = VPStuff.clientcounter.add(self.reqtype+'\\'+self.path_unquoted, self.clientip, self.unic) + clients = VPStuff.clientcounter.add(self.reqtype+'/'+self.path_unquoted, self.client_data) # 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.reqtype+'\\'+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 - self.vlcid = hashlib.md5(self.reqtype+'\\'+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: @@ -338,19 +345,7 @@ class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler): finally: logger.debug("END REQUEST") logger.info("Closed connection from " + self.clientip + " path " + self.path) - VPStuff.clientcounter.delete(self.reqtype+'\\'+self.path_unquoted, self.clientip, self.unic) -# if not VPStuff.clientcounter.get(self.reqtype+'\\'+self.path_unquoted): -# try: -# logger.debug("That was the last client, destroying VPClient") -# logger.info("Stopping broadcasting " + self.path) -# VPStuff.vlcclient.stopBroadcast(self.vlcid) -# except vlcclient.VlcException: -# logger.error("VLC connection problem, %s client(s)!" % VPStuff.clientcounter.total) -# if VPStuff.clientcounter.total == 0: -# logger.error("Probably VLC hang") -# VPStuff.vlc.kill() -# except: -# pass + VPStuff.clientcounter.delete(self.reqtype+'/'+self.path_unquoted, self.client_data) self.vp.destroy() class HTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer): @@ -525,7 +520,7 @@ sched = BackgroundScheduler() sched.start() def clean_streams(): - VPStuff.vlcclient.clean_streams(15) + VPStuff.vlcclient.clean_streams(VPConfig.videodestroydelay) job = sched.add_job(clean_streams, 'interval', seconds=15) @@ -562,4 +557,5 @@ try: # Return to our server tasks server.handle_request() except (KeyboardInterrupt, SystemExit): + sched.shutdown() shutdown()