@@ -317,14 +317,21 @@ template <typename P> static uint32_t headerSize(const P &p) { return p ? p->siz
317
317
318
318
FilterHeadersStatus ContextBase::onRequestHeaders (uint32_t headers, bool end_of_stream) {
319
319
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_ ) {
321
322
return FilterHeadersStatus::Continue;
322
323
}
323
324
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
+ }
328
335
CHECK_FAIL_HTTP (FilterHeadersStatus::Continue, FilterHeadersStatus::StopAllIterationAndWatermark);
329
336
return convertVmCallResultToFilterHeadersStatus (result);
330
337
}
@@ -493,7 +500,8 @@ FilterHeadersStatus ContextBase::convertVmCallResultToFilterHeadersStatus(uint64
493
500
result > static_cast <uint64_t >(FilterHeadersStatus::StopAllIterationAndWatermark)) {
494
501
return FilterHeadersStatus::StopAllIterationAndWatermark;
495
502
}
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)) {
497
505
// Always convert StopIteration (pause processing headers, but continue processing body)
498
506
// to StopAllIterationAndWatermark (pause all processing), since the former breaks all
499
507
// assumptions about HTTP processing.
0 commit comments