def get_frame_bin(self): # Encode header encoder = Encoder() headers_frame_field = bytearray() if self._data is None: # if user didn't touch data self._data = encoder.encode(self._header_list) # encode header list self._flag = self.flag # get flag by method if self._is_padded: headers_frame_field.append(self._pad_len) # append pad length self._data += bytearray(self._pad_len) # append pad byte in pad length headers_frame_field += int_to_bytes(self.promised_stream_id, 4) # append promised stream id self._data = headers_frame_field + self._data # append HEADERS field print('push promise data', Frame.get_frame_bin(self)) return Frame.get_frame_bin(self)
def test_frame_header(): frame = Frame() try: frame.data = bytearray(Frame.FRAME_MAX_SIZE) + 1 # test over-byte except Exception: pass else: assert 0 # passed over byte frame.data = b'\xFF\xFF' + bytearray(Frame.FRAME_MIN_SIZE) frame.type = 0x10 frame.id = 0x010CA0 frame_bin = frame.get_frame_bin() assert frame_bin[0] << 16 | frame_bin[1] << 8 | frame_bin[2] << 0 == len(frame.data) # type is 0 assert frame_bin[3] == 0x10 assert frame_bin[5] << 24 | frame_bin[6] << 16 | frame_bin[7] << 8 | frame_bin[8] << 0 == 0x010CA0 # check payload assert frame_bin[9:] == b'\xFF\xFF' + bytearray(Frame.FRAME_MIN_SIZE)
def get_frame_bin(self): # Encode header encoder = Encoder() headers_frame_field = bytearray() if self._data is None: # if user didn't touch data self._data = encoder.encode(self._header_list) # encode header list self._flag = self.flag # get flag by method if self._is_padded: headers_frame_field.append(self._pad_len) # append pad length self._data += bytearray(self._pad_len) # append pad byte in pad length if self._is_priority: headers_frame_field += int_to_bytes(self._dependency_id, 4) # append dependency stream id headers_frame_field.append(self._weight) self._data = headers_frame_field + self._data # append HEADERS field return Frame.get_frame_bin(self)
def get_frame_bin(self): if self._data is None and not self.is_ack: # If user didn't set data self._data = bytearray() for setting in self._setting_list: # set identifier 16 bit self._data.append((setting[0] & 0x0000FF00) >> 8) self._data.append((setting[0] & 0x000000FF) >> 0) # set value 32 bit self._data.append((setting[1] & 0xFF000000) >> 24) self._data.append((setting[1] & 0x00FF0000) >> 16) self._data.append((setting[1] & 0x0000FF00) >> 8) self._data.append((setting[1] & 0x000000FF) >> 0) elif self.is_ack: # if ACK SETTINGS frame clear payload self._data = bytearray() self._flag = SettingFrame.ACK_FLAG # call super get_frame_bin return Frame.get_frame_bin(self)
def get_frame_bin(self): if self._data is None: # if user didn't touch data self._data = bytearray() self._data += int_to_bytes(self._dependency_id) # append dependency stream id self._data.append(self._weight) return Frame.get_frame_bin(self)
def get_frame_bin(self): headers_frame_field = bytearray() if self._data is None: self._data = bytearray() # check for safe self._flag = self.flag # get flag by method if self._is_padded: headers_frame_field.append(self._pad_len) # append pad length self._data += bytearray(self._pad_len) # append pad byte in pad length self._data = headers_frame_field + self._data # append HEADERS field return Frame.get_frame_bin(self)