| 334 | } |
| 335 | |
| 336 | int |
| 337 | QPACK::_encode_prefix(uint16_t largest_reference, uint16_t base_index, IOBufferBlock *prefix) |
| 338 | { |
| 339 | int ret; |
| 340 | if ((ret = xpack_encode_integer(reinterpret_cast<uint8_t *>(prefix->end()), |
| 341 | reinterpret_cast<uint8_t *>(prefix->end() + prefix->write_avail()), largest_reference, 8)) < 0) { |
| 342 | return -1; |
| 343 | } |
| 344 | prefix->fill(ret); |
| 345 | |
| 346 | uint16_t delta; |
| 347 | prefix->end()[0] = 0x0; |
| 348 | if (base_index < largest_reference) { |
| 349 | prefix->end()[0] |= 0x80; |
| 350 | delta = largest_reference - base_index; |
| 351 | } else { |
| 352 | delta = base_index - largest_reference; |
| 353 | } |
| 354 | |
| 355 | if ((ret = xpack_encode_integer(reinterpret_cast<uint8_t *>(prefix->end()), |
| 356 | reinterpret_cast<uint8_t *>(prefix->end() + prefix->write_avail()), delta, 7)) < 0) { |
| 357 | return -2; |
| 358 | } |
| 359 | prefix->fill(ret); |
| 360 | |
| 361 | QPACKDebug("Encoded Header Data Prefix: largest_ref=%d, base_index=%d, delta=%d", largest_reference, base_index, delta); |
| 362 | |
| 363 | return 0; |
| 364 | } |
| 365 | |
| 366 | int |
| 367 | QPACK::_encode_header(const MIMEField &field, uint16_t base_index, IOBufferBlock *compressed_header, uint16_t &referred_index) |
no test coverage detected