Exemplo n.º 1
0
    def data_came_in(self, s, data):
        socket = self.socket[s]
        self._write_sock(socket, data)
        while socket['mlen'] >= socket['len']:
            if socket['hread'] == 0:
                header = self._read_sock(socket, self.hlen)
                socket['len'], socket['mac'] = struct.unpack(self.hfmt, header)
                socket['hread'] = 1
            else:
                if socket['req-mode']:
                    header = self._read_sock(socket, self.rrlen)
                    if socket.has_key('h_in'):
                        socket['h_in'].update(header)
                    data = self._read_sock(socket, socket['len'] - self.rrlen)
                else:
                    data = self._read_sock(socket, socket['len'])

                if socket.has_key('h_in'):
                    socket['h_in'].update(data)
                    if socket['mac'] != socket['h_in'].digest():
                        s.close()
                        print binascii.hexlify(socket['mac'])
                        print binascii.hexlify(socket['h_in'].digest())
                        self.connection_lost(s, 'Bad HMAC')

                if socket['req-mode']:
                    (rr, mid) = struct.unpack(self.rrfmt, header)
                    if rr == Request:
                        self.handler.request_came_in(s, mid, data)
                    elif rr == Response:
                        self.handler.response_came_in(s, mid, data)
                else:
                    self.handler.message_came_in(s, data)
                socket['len'] = self.hlen
                socket['hread'] = 0
Exemplo n.º 2
0
 def _send_msg(self, s, data):
     socket = self.socket[s]
     if socket.has_key('h_out'):
         socket['h_out'].update(data)
         mac = socket['h_out'].digest()
     else:
         mac = '\x00' * 20
     return s.write(struct.pack(self.hfmt, len(data), mac) + data)