def _on_frame_data(self, data): unmasked = bytearray(data) for i in xrange(len(data)): unmasked[i] = unmasked[i] ^ self._frame_mask[i % 4] if not self._final_frame: if self._fragmented_message_buffer: self._fragmented_message_buffer += unmasked else: self._fragmented_message_opcode = self._frame_opcode self._fragmented_message_buffer = unmasked else: if self._frame_opcode == 0: unmasked = self._fragmented_message_buffer + unmasked opcode = self._fragmented_message_opcode self._fragmented_message_buffer = None else: opcode = self._frame_opcode self._handle_message(opcode, bytes_type(unmasked)) if not self.client_terminated: self._receive_frame()