MCPcopy Create free account
hub / github.com/apache/brpc / Decode

Method Decode

src/brpc/details/hpack.cpp:765–843  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

763}
764
765ssize_t HPacker::Decode(butil::IOBufBytesIterator& iter, Header* h) {
766 if (iter == NULL) {
767 return 0;
768 }
769 const uint8_t first_byte = *iter;
770 // Check the leading 4 bits to determin the entry type
771 switch (first_byte >> 4) {
772 case 15:
773 case 14:
774 case 13:
775 case 12:
776 case 11:
777 case 10:
778 case 9:
779 case 8:
780 // (1xxx) Indexed Header Field Representation
781 // https://tools.ietf.org/html/rfc7541#section-6.1
782 {
783 int index = 0;
784 ssize_t index_bytes = DecodeInteger(iter, 7, (uint32_t*)&index);
785 if (index_bytes <= 0) {
786 return index_bytes;
787 }
788 const Header* indexed_header = HeaderAt(index);
789 if (indexed_header == NULL) {
790 LOG(ERROR) << "No header at index=" << index;
791 return -1;
792 }
793 *h = *indexed_header;
794 return index_bytes;
795 }
796 break;
797 case 7:
798 case 5:
799 case 6:
800 case 4:
801 // (01xx) Literal Header Field with Incremental Indexing
802 // https://tools.ietf.org/html/rfc7541#section-6.2.1
803 {
804 const ssize_t bytes_consumed = DecodeWithKnownPrefix(iter, h, 6);
805 if (bytes_consumed <= 0) {
806 return -1;
807 }
808 _decode_table->AddHeader(*h);
809 return bytes_consumed;
810 }
811 break;
812 case 3:
813 case 2:
814 // (001x) Dynamic Table Size Update
815 // https://tools.ietf.org/html/rfc7541#section-6.3
816 {
817 uint32_t max_size = 0;
818 ssize_t read_bytes = DecodeInteger(iter, 5, &max_size);
819 if (read_bytes <= 0) {
820 return read_bytes;
821 }
822 if (max_size > H2Settings::DEFAULT_HEADER_TABLE_SIZE) {

Callers 1

DecodeStringFunction · 0.45

Calls 2

DecodeIntegerFunction · 0.85
HeaderAtFunction · 0.85

Tested by

no test coverage detected