Loading src/httpd.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -1507,6 +1507,22 @@ void libhttppp::HttpEvent::RequestEvent(netplus::con &curcon,const int tid,ULONG } } // h2c: detect HTTP/2 client connection preface on cleartext connections // (e.g. behind reverse proxies like Envoy that speak h2c upstream) if (cureq.RecvData.size() >= H2_CLIENT_PREFACE_LEN && std::memcmp(cureq.RecvData.data(), H2_CLIENT_PREFACE, H2_CLIENT_PREFACE_LEN) == 0) { static const netplus::ssl::FramingCallback nullCb; Http2RequestEvent(curcon, tid, args, "h2c", nullCb); return; } // h2c continuation: connection already identified as HTTP/2 (cleartext) if (cureq._httpProtocol == 1) { static const netplus::ssl::FramingCallback nullCb; Http2RequestEvent(curcon, tid, args, "h2c", nullCb); return; } REQUESTHANDLING: // Guard: only loop for HTTP/1.x; HTTP/2 and HTTP/3 parse() always // returns 1, which would cause an infinite loop here. Loading Loading
src/httpd.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -1507,6 +1507,22 @@ void libhttppp::HttpEvent::RequestEvent(netplus::con &curcon,const int tid,ULONG } } // h2c: detect HTTP/2 client connection preface on cleartext connections // (e.g. behind reverse proxies like Envoy that speak h2c upstream) if (cureq.RecvData.size() >= H2_CLIENT_PREFACE_LEN && std::memcmp(cureq.RecvData.data(), H2_CLIENT_PREFACE, H2_CLIENT_PREFACE_LEN) == 0) { static const netplus::ssl::FramingCallback nullCb; Http2RequestEvent(curcon, tid, args, "h2c", nullCb); return; } // h2c continuation: connection already identified as HTTP/2 (cleartext) if (cureq._httpProtocol == 1) { static const netplus::ssl::FramingCallback nullCb; Http2RequestEvent(curcon, tid, args, "h2c", nullCb); return; } REQUESTHANDLING: // Guard: only loop for HTTP/1.x; HTTP/2 and HTTP/3 parse() always // returns 1, which would cause an infinite loop here. Loading