| 177 | // +---------------------------------------------------------------+ |
| 178 | |
| 179 | bool |
| 180 | http2_parse_frame_header(IOVec iov, Http2FrameHeader &hdr) |
| 181 | { |
| 182 | byte_pointer ptr(iov.iov_base); |
| 183 | byte_addressable_value<uint32_t> length_and_type; |
| 184 | byte_addressable_value<uint32_t> streamid; |
| 185 | |
| 186 | if (unlikely(iov.iov_len < HTTP2_FRAME_HEADER_LEN)) { |
| 187 | return false; |
| 188 | } |
| 189 | |
| 190 | memcpy_and_advance(length_and_type.bytes, ptr); |
| 191 | memcpy_and_advance(hdr.flags, ptr); |
| 192 | memcpy_and_advance(streamid.bytes, ptr); |
| 193 | |
| 194 | hdr.length = ntohl(length_and_type.value) >> 8; |
| 195 | hdr.type = ntohl(length_and_type.value) & 0xff; |
| 196 | streamid.bytes[0] &= 0x7f; // Clear the high reserved bit |
| 197 | hdr.streamid = ntohl(streamid.value); |
| 198 | |
| 199 | return true; |
| 200 | } |
| 201 | |
| 202 | bool |
| 203 | http2_write_frame_header(const Http2FrameHeader &hdr, IOVec iov) |
no test coverage detected