@@ -311,14 +311,21 @@ template <typename P> static uint32_t headerSize(const P &p) { return p ? p->siz
311
311
312
312
FilterHeadersStatus ContextBase::onRequestHeaders (uint32_t headers, bool end_of_stream) {
313
313
CHECK_FAIL_HTTP (FilterHeadersStatus::Continue, FilterHeadersStatus::StopAllIterationAndWatermark);
314
- if (!wasm_->on_request_headers_abi_01_ && !wasm_->on_request_headers_abi_02_ ) {
314
+ if (!wasm_->on_request_headers_abi_01_ && !wasm_->on_request_headers_abi_02_ &&
315
+ !wasm_->on_request_headers_abi_03_ ) {
315
316
return FilterHeadersStatus::Continue;
316
317
}
317
318
DeferAfterCallActions actions (this );
318
- const auto result = wasm_->on_request_headers_abi_01_
319
- ? wasm_->on_request_headers_abi_01_ (this , id_, headers)
320
- : wasm_->on_request_headers_abi_02_ (this , id_, headers,
321
- static_cast <uint32_t >(end_of_stream));
319
+ uint64_t result;
320
+ if (wasm_->on_request_headers_abi_01_ ) {
321
+ result = wasm_->on_request_headers_abi_01_ (this , id_, headers);
322
+ } else if (wasm_->on_request_headers_abi_02_ ) {
323
+ result =
324
+ wasm_->on_request_headers_abi_02_ (this , id_, headers, static_cast <uint32_t >(end_of_stream));
325
+ } else if (wasm_->on_request_headers_abi_03_ ) {
326
+ result =
327
+ wasm_->on_request_headers_abi_03_ (this , id_, headers, static_cast <uint32_t >(end_of_stream));
328
+ }
322
329
CHECK_FAIL_HTTP (FilterHeadersStatus::Continue, FilterHeadersStatus::StopAllIterationAndWatermark);
323
330
return convertVmCallResultToFilterHeadersStatus (result);
324
331
}
@@ -487,7 +494,8 @@ FilterHeadersStatus ContextBase::convertVmCallResultToFilterHeadersStatus(uint64
487
494
result > static_cast <uint64_t >(FilterHeadersStatus::StopAllIterationAndWatermark)) {
488
495
return FilterHeadersStatus::StopAllIterationAndWatermark;
489
496
}
490
- if (result == static_cast <uint64_t >(FilterHeadersStatus::StopIteration)) {
497
+ if ((wasm_->on_request_headers_abi_01_ || wasm_->on_request_headers_abi_02_ ) &&
498
+ result == static_cast <uint64_t >(FilterHeadersStatus::StopIteration)) {
491
499
// Always convert StopIteration (pause processing headers, but continue processing body)
492
500
// to StopAllIterationAndWatermark (pause all processing), since the former breaks all
493
501
// assumptions about HTTP processing.
0 commit comments