Exemplo n.º 1
0
    def checkFreshness(self, request, date, clientIP):

        request = HttpParser.addIfModified(request, date)
        serverSocket = self.sendReqToWebServer(request)
        response = self.getResponseFromServer(serverSocket, clientIP)
        if (response == []
                or response == None):  #empty response or not enouph charge
            return ""
        else:
            if (HttpParser.isModified(response[0])):
                return response
            else:
                return None
Exemplo n.º 2
0
 def logProxySentRequestToWebServer(self, message):
     header = HttpParser.getHeader(message)
     if header == None:
         return
     header = header.decode(errors="ignore").rstrip("\r\n")
     self.log(" Proxy sent request to server with headers:\n")
     self.log(_DIVIDER + header + _DIVIDER)
Exemplo n.º 3
0
 def logClientRequestToProxy(self, message):
     header = HttpParser.getHeader(message)
     if header == None:
         return
     header = header.decode(errors="ignore").rstrip("\r\n")
     self.log("Client sent request to proxy with headers:\n")
     self.log(_DIVIDER + header + _DIVIDER)
Exemplo n.º 4
0
 def logProxySendDataToClient(self, message):
     header = HttpParser.getHeader(message)
     if header == None:
         return
     header = header.decode(errors="ignore").rstrip("\r\n")
     self.log("Proxy sent response to client with headers:\n")
     self.log(_DIVIDER + header + _DIVIDER)
Exemplo n.º 5
0
	def getWebServerSocketInfo(request):
		url = HttpParser.getUrl(request)
		http_pos = url.find("://") # find pos of ://
		if (http_pos==-1):
			temp = url
		else:
			temp = url[(http_pos+3):] # get the rest of url

		port_pos = temp.find(":") # find the port pos (if any)

		# find end of web server
		webserver_pos = temp.find("/")
		if webserver_pos == -1:
			webserver_pos = len(temp)

		webserver = ""
		port = -1
		if (port_pos==-1 or webserver_pos < port_pos): 
			# default port 
			port = 80 
			webserver = temp[:webserver_pos] 
		else: # specific port 
			port = int((temp[(port_pos+1):])[:webserver_pos-port_pos-1])
			webserver = temp[:port_pos] 
		return port, webserver 
Exemplo n.º 6
0
 def logRecieveDataFromWebServer(self, message):
     header = HttpParser.getHeader(message)
     if header == None:
         return
     # print("got header")
     # print(header)
     header = header.decode(errors="ignore").rstrip("\r\n")
     self.log("Server sent response to proxy with headers:\n")
     self.log(_DIVIDER + header + _DIVIDER)
Exemplo n.º 7
0
	def prepareForWebServer(request):
		request = HttpParser.changeHttpVersion(request)
		request = HttpParser.removeHttpFromMessage(request)
		request = HttpParser.changeAcceptEncoding(request)
		request = HttpParser.changeConnection(request)
		request = HttpParser.replaceUrl(request)
		request = HttpParser.removeProxyHeader(request)

		return request 
Exemplo n.º 8
0
    def handleRequest(self, clientSocket, clientAddress, incomingRequest):
        cacheHit, cacheResponse, cacheDate = self.cacheHandler.checkInCache(
            HttpParser.getUrl(incomingRequest))

        if (cacheHit):  # cache item is fresh
            self.logHandler.logCacheIsFresh()
            self.sendResponseToClient(cacheResponse, clientSocket)
            self.logHandler.logSendFromCache()
        else:
            if (cacheResponse == None):  # not in cache
                self.logHandler.logNotInCache()
                serverSocket = self.sendReqToWebServer(incomingRequest)

                response = self.getResponseFromServer(serverSocket,
                                                      clientAddress[0])
                isNoCache = HttpParser.noCache(
                    HttpParser.getHeader(response[0]))
                if (not isNoCache):  # pragma no cache in response header
                    self.logHandler.logSaveInCache()
                    self.cacheHandler.saveInCache(
                        HttpParser.getUrl(incomingRequest), response)
                    self.logHandler.logSaveDone()

                if (response == [] or response
                        == None):  #empty response or not enough charge
                    return
                else:
                    self.sendResponseToClient(response, clientSocket)

            else:  # item in cache, check for freshness
                self.logHandler.logCheckForFreshness()
                response = self.checkFreshness(incomingRequest, cacheDate,
                                               clientAddress[0])

                if (response == None):  # is fresh
                    self.logHandler.logCacheIsFresh()
                    self.logHandler.logSendFromCache()
                    self.sendResponseToClient(cacheResponse, clientSocket)
                    self.cacheHandler.hit(HttpParser.getUrl(incomingRequest),
                                          cacheResponse)

                elif (response == ""):  # response is empty
                    return

                else:  # not fresh
                    self.logHandler.logModified()
                    self.sendResponseToClient(response, clientSocket)
                    self.cacheHandler.hit(HttpParser.getUrl(incomingRequest),
                                          response)
Exemplo n.º 9
0
    def proxyThread(self, clientSocket, clientAddress):
        # get the request from browser
        try:
            incomingRequest = clientSocket.recv(200000)
            if (len(incomingRequest) <= 0):
                return
            self.logHandler.logClientRequestToProxy(incomingRequest)

            restriction = self.restrictionHandler.checkForRestriction(
                HttpParser.getHost(incomingRequest))
            self.logHandler.logRestriction(restriction)
            if restriction == -1:
                return
            elif restriction == 0:
                pass
            else:
                time.sleep(restriction / 1000)

            incomingRequest = self.privacyHandler.setPrivacy(incomingRequest)
            self.logHandler.logPrivacy()
            self.handleRequest(clientSocket, clientAddress, incomingRequest)

        except:
            pass
Exemplo n.º 10
0
 def setPrivacy(self, request):
     if (self.config["enable"] == False):
         return request
     return HttpParser.replaceUserAgent(request, self.config["userAgent"])
Exemplo n.º 11
0
	def hit(self, key, response):
		self.remove(key)
		isNoCache = HttpParser.noCache(HttpParser.getHeader(response[0]))
		if(not isNoCache): # pragma no cache in response header
			self.saveNewMessage(self, key, response)
Exemplo n.º 12
0
	def saveNewMessage(self, key, message):	
		gmtDatetime = datetime.fromtimestamp(mktime(gmtime()))
		item = cacheItem(key, gmtDatetime, HttpParser.getExpireDate(HttpParser.getHeader(message[0])), message)
		self.cache.append(item)