Loading src/httpd.cpp +25 −0 Changes for src/httpd.cpp: 25 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -114,6 +114,31 @@ void libhttppp::Http3QuicSocket::sendControlStreams() { sendStreamData(dec_id, dec_data, false); } // ============================================================================ // TLS 1.3: ALPN extension (0x0010) for the QUIC EncryptedExtensions message // ============================================================================ std::vector<uint8_t> libhttppp::Http3QuicSocket::buildAlpnExtension(const std::string& alpn) { std::vector<uint8_t> ext_data; if (alpn.empty()) return ext_data; ext_data.push_back(0x00); ext_data.push_back(0x10); // ALPN extension type // Extension length: 2 (list len) + 1 (proto len) + proto.size() size_t alpn_ext_len = 2 + 1 + alpn.size(); ext_data.push_back(static_cast<uint8_t>(alpn_ext_len >> 8)); ext_data.push_back(static_cast<uint8_t>(alpn_ext_len)); // ALPN list length size_t alpn_list_len = 1 + alpn.size(); ext_data.push_back(static_cast<uint8_t>(alpn_list_len >> 8)); ext_data.push_back(static_cast<uint8_t>(alpn_list_len)); // Protocol length and value ext_data.push_back(static_cast<uint8_t>(alpn.size())); ext_data.insert(ext_data.end(), alpn.begin(), alpn.end()); return ext_data; } static std::string h2BuildFrame(uint8_t type, uint8_t flags, uint32_t stream_id, const std::string &payload) { std::string f(9 + payload.size(), '\0'); Loading src/httpd.h +1 −0 Changes for src/httpd.h: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -177,6 +177,7 @@ namespace libhttppp { public: using netplus::quic::quic; void sendControlStreams() override; std::vector<uint8_t> buildAlpnExtension(const std::string& alpn) override; private: bool _ctrlStreamsSent = false; }; Loading Loading
src/httpd.cpp +25 −0 Changes for src/httpd.cpp: 25 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -114,6 +114,31 @@ void libhttppp::Http3QuicSocket::sendControlStreams() { sendStreamData(dec_id, dec_data, false); } // ============================================================================ // TLS 1.3: ALPN extension (0x0010) for the QUIC EncryptedExtensions message // ============================================================================ std::vector<uint8_t> libhttppp::Http3QuicSocket::buildAlpnExtension(const std::string& alpn) { std::vector<uint8_t> ext_data; if (alpn.empty()) return ext_data; ext_data.push_back(0x00); ext_data.push_back(0x10); // ALPN extension type // Extension length: 2 (list len) + 1 (proto len) + proto.size() size_t alpn_ext_len = 2 + 1 + alpn.size(); ext_data.push_back(static_cast<uint8_t>(alpn_ext_len >> 8)); ext_data.push_back(static_cast<uint8_t>(alpn_ext_len)); // ALPN list length size_t alpn_list_len = 1 + alpn.size(); ext_data.push_back(static_cast<uint8_t>(alpn_list_len >> 8)); ext_data.push_back(static_cast<uint8_t>(alpn_list_len)); // Protocol length and value ext_data.push_back(static_cast<uint8_t>(alpn.size())); ext_data.insert(ext_data.end(), alpn.begin(), alpn.end()); return ext_data; } static std::string h2BuildFrame(uint8_t type, uint8_t flags, uint32_t stream_id, const std::string &payload) { std::string f(9 + payload.size(), '\0'); Loading
src/httpd.h +1 −0 Changes for src/httpd.h: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -177,6 +177,7 @@ namespace libhttppp { public: using netplus::quic::quic; void sendControlStreams() override; std::vector<uint8_t> buildAlpnExtension(const std::string& alpn) override; private: bool _ctrlStreamsSent = false; }; Loading