diff --git a/source/extensions/filters/listener/http_inspector/http_inspector.cc b/source/extensions/filters/listener/http_inspector/http_inspector.cc index 5b1b8a4fa67b..43eb25573c66 100644 --- a/source/extensions/filters/listener/http_inspector/http_inspector.cc +++ b/source/extensions/filters/listener/http_inspector/http_inspector.cc @@ -24,10 +24,10 @@ Config::Config(Stats::Scope& scope) const absl::string_view Filter::HTTP2_CONNECTION_PREFACE = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"; Filter::Filter(const ConfigSharedPtr config) : config_(config) { - // Filter for only HTTP_REQUEST and as callbacks are not used with the http_parser initializing as - // nullptr + // Filter for only Request Message types with NoOp callbacks + no_op_callbacks_ = std::make_unique(); parser_ = std::make_unique(Http::Http1::MessageType::Request, - nullptr); + no_op_callbacks_.get()); } Network::FilterStatus Filter::onData(Network::ListenerFilterBuffer& buffer) { diff --git a/source/extensions/filters/listener/http_inspector/http_inspector.h b/source/extensions/filters/listener/http_inspector/http_inspector.h index 338c0e1dfecb..6064660304f9 100644 --- a/source/extensions/filters/listener/http_inspector/http_inspector.h +++ b/source/extensions/filters/listener/http_inspector/http_inspector.h @@ -58,6 +58,41 @@ class Config { HttpInspectorStats stats_; }; +class NoOpParserCallbacks : public Http::Http1::ParserCallbacks { +public: + Http::Http1::CallbackResult onMessageBegin() override { + return Http::Http1::CallbackResult::Success; + } + + Http::Http1::CallbackResult onUrl(const char* /*data*/, size_t /*length*/) override { + return Http::Http1::CallbackResult::Success; + } + + Http::Http1::CallbackResult onStatus(const char* /*data*/, size_t /*length*/) override { + return Http::Http1::CallbackResult::Success; + } + + Http::Http1::CallbackResult onHeaderField(const char* /*data*/, size_t /*length*/) override { + return Http::Http1::CallbackResult::Success; + } + + Http::Http1::CallbackResult onHeaderValue(const char* /*data*/, size_t /*length*/) override { + return Http::Http1::CallbackResult::Success; + } + + Http::Http1::CallbackResult onHeadersComplete() override { + return Http::Http1::CallbackResult::Success; + } + + void bufferBody(const char* /*data*/, size_t /*length*/) override {} + + Http::Http1::CallbackResult onMessageComplete() override { + return Http::Http1::CallbackResult::Success; + } + + void onChunkHeader(bool /*is_final_chunk*/) override {} +}; + using ConfigSharedPtr = std::shared_ptr; /** @@ -87,6 +122,7 @@ class Filter : public Network::ListenerFilter, Logger::Loggable parser_; + std::unique_ptr no_op_callbacks_; ssize_t nread_ = 0; };