Skip to content

Commit b273b07

Browse files
authored
Pass end_of_stream to header callbacks. (proxy-wasm#25)
This adds the same end_of_stream flag to the on_request_headers and on_response_headers callbacks that Envoy makes for non-WASM filters. This way it is possible to write a filter that can operate on the request or response body but still be resilient if no body is present. Signed-off-by: Gregory Brail <[email protected]>
1 parent a96408d commit b273b07

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed

proxy_wasm_api.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ class RootContext : public ContextBase {
310310
// Called once when the VM loads and once when each hook loads and whenever
311311
// configuration changes. Returns false if the configuration is invalid.
312312
virtual bool onConfigure(size_t /* configuration_size */) { return true; }
313-
// Called when each hook loads. Returns false if the configuration is
313+
// Called when each hook loads. Returns false if the configuration is
314314
// invalid.
315315
virtual bool onStart(size_t /* vm_configuration_size */) { return true; }
316316
// Called when the timer goes off.
@@ -329,7 +329,7 @@ class RootContext : public ContextBase {
329329
virtual void onGrpcReceive(uint32_t token, size_t body_size);
330330
virtual void onGrpcClose(uint32_t token, GrpcStatus status);
331331

332-
// Default high level HTTP/gRPC interface. NB: overriding the low level
332+
// Default high level HTTP/gRPC interface. NB: overriding the low level
333333
// interface will disable this interface. Returns false on setup error.
334334
WasmResult httpCall(StringView uri, const HeaderStringPairs &request_headers,
335335
StringView request_body, const HeaderStringPairs &request_trailers,
@@ -417,7 +417,7 @@ class RootContext : public ContextBase {
417417

418418
RootContext *getRoot(StringView root_id);
419419

420-
// Context for a stream. The distinguished context id == 0 is used for
420+
// Context for a stream. The distinguished context id == 0 is used for
421421
// non-stream calls.
422422
class Context : public ContextBase {
423423
public:
@@ -435,7 +435,9 @@ class Context : public ContextBase {
435435
virtual void onDownstreamConnectionClose(PeerType) {}
436436
virtual void onUpstreamConnectionClose(PeerType) {}
437437

438-
virtual FilterHeadersStatus onRequestHeaders(uint32_t) { return FilterHeadersStatus::Continue; }
438+
virtual FilterHeadersStatus onRequestHeaders(uint32_t, bool) {
439+
return FilterHeadersStatus::Continue;
440+
}
439441
virtual FilterMetadataStatus onRequestMetadata(uint32_t) {
440442
return FilterMetadataStatus::Continue;
441443
}
@@ -446,7 +448,9 @@ class Context : public ContextBase {
446448
virtual FilterTrailersStatus onRequestTrailers(uint32_t) {
447449
return FilterTrailersStatus::Continue;
448450
}
449-
virtual FilterHeadersStatus onResponseHeaders(uint32_t) { return FilterHeadersStatus::Continue; }
451+
virtual FilterHeadersStatus onResponseHeaders(uint32_t, bool) {
452+
return FilterHeadersStatus::Continue;
453+
}
450454
virtual FilterMetadataStatus onResponseMetadata(uint32_t) {
451455
return FilterMetadataStatus::Continue;
452456
}

proxy_wasm_externs.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,14 @@ extern "C" void proxy_on_queue_ready(uint32_t root_context_id, uint32_t token);
163163

164164
// Stream calls.
165165
extern "C" void proxy_on_context_create(uint32_t context_id, uint32_t parent_context_id);
166-
extern "C" FilterHeadersStatus proxy_on_request_headers(uint32_t context_id, uint32_t headers);
166+
extern "C" FilterHeadersStatus proxy_on_request_headers(uint32_t context_id, uint32_t headers,
167+
uint32_t end_of_stream);
167168
extern "C" FilterDataStatus proxy_on_request_body(uint32_t context_id, uint32_t body_buffer_length,
168169
uint32_t end_of_stream);
169170
extern "C" FilterTrailersStatus proxy_on_request_trailers(uint32_t context_id, uint32_t trailers);
170171
extern "C" FilterMetadataStatus proxy_on_request_metadata(uint32_t context_id, uint32_t nelements);
171-
extern "C" FilterHeadersStatus proxy_on_response_headers(uint32_t context_id, uint32_t headers);
172+
extern "C" FilterHeadersStatus proxy_on_response_headers(uint32_t context_id, uint32_t headers,
173+
uint32_t end_of_stream);
172174
extern "C" FilterDataStatus proxy_on_response_body(uint32_t context_id, uint32_t body_buffer_length,
173175
uint32_t end_of_stream);
174176
extern "C" FilterTrailersStatus proxy_on_response_trailers(uint32_t context_id, uint32_t trailers);

proxy_wasm_intrinsics.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,9 @@ extern "C" PROXY_WASM_KEEPALIVE void proxy_on_upstream_connection_close(uint32_t
178178
return getContext(context_id)->onUpstreamConnectionClose(static_cast<PeerType>(peer_type));
179179
}
180180

181-
extern "C" PROXY_WASM_KEEPALIVE FilterHeadersStatus proxy_on_request_headers(uint32_t context_id,
182-
uint32_t headers) {
183-
return getContext(context_id)->onRequestHeaders(headers);
181+
extern "C" PROXY_WASM_KEEPALIVE FilterHeadersStatus
182+
proxy_on_request_headers(uint32_t context_id, uint32_t headers, uint32_t end_of_stream) {
183+
return getContext(context_id)->onRequestHeaders(headers, end_of_stream != 0);
184184
}
185185

186186
extern "C" PROXY_WASM_KEEPALIVE FilterMetadataStatus proxy_on_request_metadata(uint32_t context_id,
@@ -200,9 +200,9 @@ extern "C" PROXY_WASM_KEEPALIVE FilterTrailersStatus proxy_on_request_trailers(u
200200
return getContext(context_id)->onRequestTrailers(trailers);
201201
}
202202

203-
extern "C" PROXY_WASM_KEEPALIVE FilterHeadersStatus proxy_on_response_headers(uint32_t context_id,
204-
uint32_t headers) {
205-
return getContext(context_id)->onResponseHeaders(headers);
203+
extern "C" PROXY_WASM_KEEPALIVE FilterHeadersStatus
204+
proxy_on_response_headers(uint32_t context_id, uint32_t headers, uint32_t end_of_stream) {
205+
return getContext(context_id)->onResponseHeaders(headers, end_of_stream != 0);
206206
}
207207

208208
extern "C" PROXY_WASM_KEEPALIVE FilterMetadataStatus proxy_on_response_metadata(uint32_t context_id,

0 commit comments

Comments
 (0)