Beispiel #1
0
    def receive(self, prereceived_data = None):
        received = ""
        if prereceived_data:
            received = prereceived_data

        received += self.listen_socket.recv(BUFFER_SIZE)
        Logger.v("=============\n", received, "\n=============")

        if len(received) == 0:
            self.send_received_data()

        if not self.headers_complete:
            try:
                headers, received = received.split("\r\n\r\n", 1)
                self.data += headers + "\r\n\r\n"
                self.headers_complete = True
            except ValueError:
                self.data += received
                return

            self.header_length = len(self.data)

            if re.findall("Transfer-Encoding:\W+chunked", self.data):
                self.dechunker = Dechunker()

            elif "Content-Length:" in self.data:
                splitted = self.data.split()
                position = splitted.index("Content-Length:")
                self.message_length = int(splitted[position + 1])

        if not self.dechunker is None:
            try:
                self.dechunker.feed(received)
            except SocketClosed as e:
                self.data = re.sub("Transfer-Encoding:\W+chunked",
                                   "Content-Length: 0",
                                   self.data)
                self.data += self.dechunker.dump()
                self.send_received_data()
        else:
            self.data += received

            if self.headers_complete and len(self.data) >= self.message_length:
                self.send_received_data()
Beispiel #2
0
class ClientListener(Listener):

    def __init__(self, client_socket, server_socket):
        threading.Thread.__init__(self)
        self.listen_socket = client_socket
        self.output_socket = server_socket
        self.paired_listener = None
        self.stop = False

        self.data = ""
        self.message_length = 0
        self.headers_complete = False

        self.dechunker = None

    def receive(self, prereceived_data = None):
        received = ""
        if prereceived_data:
            received = prereceived_data

        received += self.listen_socket.recv(BUFFER_SIZE)
        Logger.v("=============\n", received, "\n=============")

        if len(received) == 0:
            self.send_received_data()

        if not self.headers_complete:
            try:
                headers, received = received.split("\r\n\r\n", 1)
                self.data += headers + "\r\n\r\n"
                self.headers_complete = True
            except ValueError:
                self.data += received
                return

            self.header_length = len(self.data)

            if re.findall("Transfer-Encoding:\W+chunked", self.data):
                self.dechunker = Dechunker()

            elif "Content-Length:" in self.data:
                splitted = self.data.split()
                position = splitted.index("Content-Length:")
                self.message_length = int(splitted[position + 1])

        if not self.dechunker is None:
            try:
                self.dechunker.feed(received)
            except SocketClosed as e:
                self.data = re.sub("Transfer-Encoding:\W+chunked",
                                   "Content-Length: 0",
                                   self.data)
                self.data += self.dechunker.dump()
                self.send_received_data()
        else:
            self.data += received

            if self.headers_complete and len(self.data) >= self.message_length:
                self.send_received_data()

    #def receive(self):
        #received = self.listen_socket.recv(BUFFER_SIZE)
        #if received.lower() == received.upper():
            #return
        #self.send(received)

    def print_send(self, message):
        self._print_send(message, '>')
        #Logger.v(">>>>>>>>>>>>>>\n%s\n>>>>>>>>>>>>>>" % data)

    def alter(self, message):
        headers = message.headers.headers

        if "Accept-Encoding" in headers:
            headers["Accept-Encoding"] = {'value': 'identity'}
Beispiel #3
0
class ServerListener(Listener):

    def __init__(self, client_socket, server_socket):
        threading.Thread.__init__(self)
        self.listen_socket = server_socket
        self.output_socket = client_socket
        self.paired_listener = None
        self.stop = False

        self.data = ""
        self.message_length = 0
        self.headers_complete = False

        self.dechunker = None

    def receive(self):
        received = self.listen_socket.recv(BUFFER_SIZE)

        if len(received) == 0:
            self.send_received_data(close_socket = True)

        if not self.headers_complete:
            try:
                headers, received = received.split("\r\n\r\n", 1)
                self.data = headers + "\r\n\r\n"
                self.headers_complete = True
            except ValueError:
                self.data = received
                return

            self.header_length = len(self.data)

            if re.findall("Transfer-Encoding:\W+chunked", self.data):
                self.dechunker = Dechunker()

            elif "Content-Length:" in self.data:
                splitted = self.data.split()
                position = splitted.index("Content-Length:")
                self.message_length = int(splitted[position + 1])

        if not self.dechunker is None:
            try:
                self.dechunker.feed(received)
            except SocketClosed:
                self.data = re.sub("Transfer-Encoding:\W+chunked",
                                   "Content-Length: 0",
                                   self.data)
                self.data += self.dechunker.dump()
                self.send_received_data(close_socket = True)
        else:
            self.data += received

            if self.headers_complete and len(self.data) >= self.message_length:
                self.send_received_data(close_socket = True)

    def print_send(self, message):
        self._print_send(message, '<')
        #Logger.v("<<<<<<<<<<<<<<\n%s\n<<<<<<<<<<<<<<" % data)

    def alter(self, message):
        message.inject_sunlight()