@@ -317,14 +317,21 @@ template <typename P> static uint32_t headerSize(const P &p) { return p ? p->siz
317317
318318FilterHeadersStatus ContextBase::onRequestHeaders (uint32_t headers, bool end_of_stream) {
319319 CHECK_FAIL_HTTP (FilterHeadersStatus::Continue, FilterHeadersStatus::StopAllIterationAndWatermark);
320- if (!wasm_->on_request_headers_abi_01_ && !wasm_->on_request_headers_abi_02_ ) {
320+ if (!wasm_->on_request_headers_abi_01_ && !wasm_->on_request_headers_abi_02_ &&
321+ !wasm_->on_request_headers_abi_03_ ) {
321322 return FilterHeadersStatus::Continue;
322323 }
323324 DeferAfterCallActions actions (this );
324- const auto result = wasm_->on_request_headers_abi_01_
325- ? wasm_->on_request_headers_abi_01_ (this , id_, headers)
326- : wasm_->on_request_headers_abi_02_ (this , id_, headers,
327- static_cast <uint32_t >(end_of_stream));
325+ uint64_t result;
326+ if (wasm_->on_request_headers_abi_01_ ) {
327+ result = wasm_->on_request_headers_abi_01_ (this , id_, headers);
328+ } else if (wasm_->on_request_headers_abi_02_ ) {
329+ result =
330+ wasm_->on_request_headers_abi_02_ (this , id_, headers, static_cast <uint32_t >(end_of_stream));
331+ } else if (wasm_->on_request_headers_abi_03_ ) {
332+ result =
333+ wasm_->on_request_headers_abi_03_ (this , id_, headers, static_cast <uint32_t >(end_of_stream));
334+ }
328335 CHECK_FAIL_HTTP (FilterHeadersStatus::Continue, FilterHeadersStatus::StopAllIterationAndWatermark);
329336 return convertVmCallResultToFilterHeadersStatus (result);
330337}
@@ -493,7 +500,8 @@ FilterHeadersStatus ContextBase::convertVmCallResultToFilterHeadersStatus(uint64
493500 result > static_cast <uint64_t >(FilterHeadersStatus::StopAllIterationAndWatermark)) {
494501 return FilterHeadersStatus::StopAllIterationAndWatermark;
495502 }
496- if (result == static_cast <uint64_t >(FilterHeadersStatus::StopIteration)) {
503+ if ((wasm_->on_request_headers_abi_01_ || wasm_->on_request_headers_abi_02_ ) &&
504+ result == static_cast <uint64_t >(FilterHeadersStatus::StopIteration)) {
497505 // Always convert StopIteration (pause processing headers, but continue processing body)
498506 // to StopAllIterationAndWatermark (pause all processing), since the former breaks all
499507 // assumptions about HTTP processing.
0 commit comments