Commit be5acfc3 authored by jan.koester's avatar jan.koester
Browse files

alpn set added

parent 3b200727
Loading
Loading
Loading
Loading
+25 −0
Changes for src/httpd.cpp: 25 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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');
+1 −0
Changes for src/httpd.h: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -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;
    };