| 127 | return self.decompressor(int32_pack(uncompressed_length) + encoded_data) |
| 128 | |
| 129 | def encode_header(self, buffer, payload_length, uncompressed_length, is_self_contained): |
| 130 | if payload_length > Segment.MAX_PAYLOAD_LENGTH: |
| 131 | raise DriverException('Payload length exceed Segment.MAX_PAYLOAD_LENGTH') |
| 132 | |
| 133 | header_data = payload_length |
| 134 | |
| 135 | flag_offset = self.FLAG_OFFSET |
| 136 | if self.compression: |
| 137 | header_data |= uncompressed_length << flag_offset |
| 138 | flag_offset += 17 |
| 139 | |
| 140 | if is_self_contained: |
| 141 | header_data |= 1 << flag_offset |
| 142 | |
| 143 | write_uint_le(buffer, header_data, size=self.header_length) |
| 144 | header_crc = compute_crc24(header_data, self.header_length) |
| 145 | write_uint_le(buffer, header_crc, size=CRC24_LENGTH) |
| 146 | |
| 147 | def _encode_segment(self, buffer, payload, is_self_contained): |
| 148 | """ |