def handle(self):
data = self.request[0].strip()
data_length = len(data)
# check packet start byte 0x9C
if not data_length >= 8 and data[0] == 0x9c:
return
packet_type = data[1]
frame_size = (data[2] << 8) + data[3]
# check consistency of length and proper frame ending
if not (data_length - 7 == frame_size) and data[-1] == 0x36:
return
packet_number = data[4]
number_of_packets = data[5]
if packet_type == 0xDA: # data frame
# tell ribbapi that tpm2_net data is received
self.server.ribbapi.receiving_data.set()
self.server.update_time()
if packet_number == 0:
self.server.misbehaving = True
if packet_number == (1 if not self.server.misbehaving else 0):
self.server.tmp_buffer_index = 0
upper = min(self.server.tmp_buffer.size,
self.server.tmp_buffer_index + frame_size)
arange = np.arange(self.server.tmp_buffer_index,
upper)
np.put(self.server.tmp_buffer, arange, list(data[6:-1]))
self.server.tmp_buffer_index = self.server.tmp_buffer_index + frame_size
if packet_number == (number_of_packets if not self.server.misbehaving else number_of_packets - 1):
if not self.server.ribbapi.current_animation:
self.server.ribbapi.frame_queue.put(self.server.tmp_buffer.copy())
elif data[1] == 0xC0: # command
# NOT IMPLEMENTED
return
elif data[1] == 0xAA: # request response
# NOT IMPLEMENTED
return
else: # no valid tmp2 packet type
return
评论列表
文章目录