Esempio n. 1
0
class HttpMetaCommunicator(object):
	
	def __init__(self):
		super(HttpMetaCommunicator, self).__init__()
		self.http = HttpMessage()
	
	
	def handle_read(self):
		if self.http.is_body():
			if self._buffer == '':
				self.http = HttpMessage()
				self.fragmented = False
			else:
				if not self.fragmented:
					return
		
		super(HttpMetaCommunicator, self).handle_read()
		if self.make_http_message() is not None:
			self._buffer = self.process()
			self.fragmented = False
			return
		
		# The packet seams to be fragmented
		self.fragmented = True
	
	
	def make_http_message(self):
		if not self.http.is_headers():
			res = self._buffer.partition("\r\n\r\n")
			if res[1] is not '':
				self.http.put_headers(res[0] + "\r\n")
				if self.http.path is not '':
					Logger.debug("Gateway:: HTTP request: " + self.http.path)
				self._buffer = res[2]
			else:
				return None
		
		if not self.http.is_body():
			self.http.put_body(self._buffer)
			self._buffer = ''
			#TODO: prefer this way (implement later)
			#self._buffer = self._buffer[len_buf:]
			if not self.http.is_body():
				return None
		
		return self.http
	
	
	def process(self):
		raise NotImplemented()
Esempio n. 2
0
class HttpMetaCommunicator(object):
    def __init__(self):
        super(HttpMetaCommunicator, self).__init__()
        self.http = HttpMessage()

    def handle_read(self):
        if self.http.is_body():
            if self._buffer == '':
                self.http = HttpMessage()
                self.fragmented = False
            else:
                if not self.fragmented:
                    return

        super(HttpMetaCommunicator, self).handle_read()
        if self.make_http_message() is not None:
            self._buffer = self.process()
            self.fragmented = False
            return

        # The packet seams to be fragmented
        self.fragmented = True

    def make_http_message(self):
        if not self.http.is_headers():
            res = self._buffer.partition("\r\n\r\n")
            if res[1] is not '':
                self.http.put_headers(res[0] + "\r\n")
                if self.http.path is not '':
                    Logger.debug("[WebApps] HTTP request: " + self.http.path)
                self._buffer = res[2]
            else:
                return None

        if not self.http.is_body():
            self.http.put_body(self._buffer)
            self._buffer = ''
            #TODO: prefer this way (implement later)
            #self._buffer = self._buffer[len_buf:]
            if not self.http.is_body():
                return None

        return self.http

    def process(self):
        raise NotImplemented()