| 500 | } |
| 501 | |
| 502 | Http3FrameUPtr |
| 503 | Http3FrameFactory::create(IOBufferReader &reader) |
| 504 | { |
| 505 | ts::Http3Config::scoped_config params; |
| 506 | Http3Frame *frame = nullptr; |
| 507 | |
| 508 | uint8_t type_buf[FRAME_TYPE_MAX_BYTES]; |
| 509 | reader.memcpy(type_buf, sizeof(type_buf)); |
| 510 | Http3FrameType type = Http3Frame::type(type_buf, sizeof(type_buf)); |
| 511 | |
| 512 | switch (type) { |
| 513 | case Http3FrameType::HEADERS: |
| 514 | frame = http3HeadersFrameAllocator.alloc(); |
| 515 | new (frame) Http3HeadersFrame(reader); |
| 516 | return Http3FrameUPtr(frame, &Http3FrameDeleter::delete_headers_frame); |
| 517 | case Http3FrameType::DATA: |
| 518 | frame = http3DataFrameAllocator.alloc(); |
| 519 | new (frame) Http3DataFrame(reader); |
| 520 | return Http3FrameUPtr(frame, &Http3FrameDeleter::delete_data_frame); |
| 521 | case Http3FrameType::SETTINGS: |
| 522 | frame = http3SettingsFrameAllocator.alloc(); |
| 523 | new (frame) Http3SettingsFrame(reader, params->max_settings()); |
| 524 | return Http3FrameUPtr(frame, &Http3FrameDeleter::delete_settings_frame); |
| 525 | default: |
| 526 | // Unknown frame |
| 527 | Dbg(dbg_ctl_http3_frame_factory, "Unknown frame type %hhx", static_cast<uint8_t>(type)); |
| 528 | frame = http3FrameAllocator.alloc(); |
| 529 | new (frame) Http3Frame(reader); |
| 530 | return Http3FrameUPtr(frame, &Http3FrameDeleter::delete_frame); |
| 531 | } |
| 532 | } |
| 533 | |
| 534 | std::shared_ptr<Http3Frame> |
| 535 | Http3FrameFactory::fast_create(IOBufferReader &reader) |