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)
Exemple #2
0
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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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)