@@ -25,6 +25,9 @@ namespace proxy_wasm {
2525
2626class ContextBase ;
2727
28+ // Any currently executing Wasm call context.
29+ ::proxy_wasm::ContextBase *contextOrEffectiveContext ();
30+
2831extern thread_local ContextBase *current_context_;
2932
3033namespace exports {
@@ -61,100 +64,87 @@ template <typename Pairs> void marshalPairs(const Pairs &result, char *buffer) {
6164
6265// ABI functions exported from host to wasm.
6366
64- Word get_configuration (void *raw_context, Word address, Word size);
65- Word get_status (void *raw_context, Word status_code, Word address, Word size);
66- Word log (void *raw_context, Word level, Word address, Word size);
67- Word get_log_level (void *raw_context, Word result_level_uint32_ptr);
68- Word get_property (void *raw_context, Word path_ptr, Word path_size, Word value_ptr_ptr,
69- Word value_size_ptr);
70- Word set_property (void *raw_context, Word key_ptr, Word key_size, Word value_ptr, Word value_size);
71- Word continue_request (void *raw_context);
72- Word continue_response (void *raw_context);
73- Word continue_stream (void *raw_context, Word stream_type);
74- Word close_stream (void *raw_context, Word stream_type);
75- Word send_local_response (void *raw_context, Word response_code, Word response_code_details_ptr,
67+ Word get_configuration (Word address, Word size);
68+ Word get_status (Word status_code, Word address, Word size);
69+ Word log (Word level, Word address, Word size);
70+ Word get_log_level (Word result_level_uint32_ptr);
71+ Word get_property (Word path_ptr, Word path_size, Word value_ptr_ptr, Word value_size_ptr);
72+ Word set_property (Word key_ptr, Word key_size, Word value_ptr, Word value_size);
73+ Word continue_request ();
74+ Word continue_response ();
75+ Word continue_stream (Word stream_type);
76+ Word close_stream (Word stream_type);
77+ Word send_local_response (Word response_code, Word response_code_details_ptr,
7678 Word response_code_details_size, Word body_ptr, Word body_size,
7779 Word additional_response_header_pairs_ptr,
7880 Word additional_response_header_pairs_size, Word grpc_status);
79- Word clear_route_cache (void *raw_context);
80- Word get_shared_data (void *raw_context, Word key_ptr, Word key_size, Word value_ptr_ptr,
81- Word value_size_ptr, Word cas_ptr);
82- Word set_shared_data (void *raw_context, Word key_ptr, Word key_size, Word value_ptr,
83- Word value_size, Word cas);
84- Word register_shared_queue (void *raw_context, Word queue_name_ptr, Word queue_name_size,
85- Word token_ptr);
86- Word resolve_shared_queue (void *raw_context, Word vm_id_ptr, Word vm_id_size, Word queue_name_ptr,
81+ Word clear_route_cache ();
82+ Word get_shared_data (Word key_ptr, Word key_size, Word value_ptr_ptr, Word value_size_ptr,
83+ Word cas_ptr);
84+ Word set_shared_data (Word key_ptr, Word key_size, Word value_ptr, Word value_size, Word cas);
85+ Word register_shared_queue (Word queue_name_ptr, Word queue_name_size, Word token_ptr);
86+ Word resolve_shared_queue (Word vm_id_ptr, Word vm_id_size, Word queue_name_ptr,
8787 Word queue_name_size, Word token_ptr);
88- Word dequeue_shared_queue (void *raw_context, Word token, Word data_ptr_ptr, Word data_size_ptr);
89- Word enqueue_shared_queue (void *raw_context, Word token, Word data_ptr, Word data_size);
90- Word get_buffer_bytes (void *raw_context, Word type, Word start, Word length, Word ptr_ptr,
91- Word size_ptr);
92- Word get_buffer_status (void *raw_context, Word type, Word length_ptr, Word flags_ptr);
93- Word set_buffer_bytes (void *raw_context, Word type, Word start, Word length, Word data_ptr,
94- Word data_size);
95- Word add_header_map_value (void *raw_context, Word type, Word key_ptr, Word key_size, Word value_ptr,
96- Word value_size);
97- Word get_header_map_value (void *raw_context, Word type, Word key_ptr, Word key_size,
98- Word value_ptr_ptr, Word value_size_ptr);
99- Word replace_header_map_value (void *raw_context, Word type, Word key_ptr, Word key_size,
100- Word value_ptr, Word value_size);
101- Word remove_header_map_value (void *raw_context, Word type, Word key_ptr, Word key_size);
102- Word get_header_map_pairs (void *raw_context, Word type, Word ptr_ptr, Word size_ptr);
103- Word set_header_map_pairs (void *raw_context, Word type, Word ptr, Word size);
104- Word get_header_map_size (void *raw_context, Word type, Word result_ptr);
105- Word getRequestBodyBufferBytes (void *raw_context, Word start, Word length, Word ptr_ptr,
106- Word size_ptr);
107- Word get_response_body_buffer_bytes (void *raw_context, Word start, Word length, Word ptr_ptr,
108- Word size_ptr);
109- Word http_call (void *raw_context, Word uri_ptr, Word uri_size, Word header_pairs_ptr,
110- Word header_pairs_size, Word body_ptr, Word body_size, Word trailer_pairs_ptr,
111- Word trailer_pairs_size, Word timeout_milliseconds, Word token_ptr);
112- Word define_metric (void *raw_context, Word metric_type, Word name_ptr, Word name_size,
113- Word result_ptr);
114- Word increment_metric (void *raw_context, Word metric_id, int64_t offset);
115- Word record_metric (void *raw_context, Word metric_id, uint64_t value);
116- Word get_metric (void *raw_context, Word metric_id, Word result_uint64_ptr);
117- Word grpc_call (void *raw_context, Word service_ptr, Word service_size, Word service_name_ptr,
118- Word service_name_size, Word method_name_ptr, Word method_name_size,
119- Word initial_metadata_ptr, Word initial_metadata_size, Word request_ptr,
120- Word request_size, Word timeout_milliseconds, Word token_ptr);
121- Word grpc_stream (void *raw_context, Word service_ptr, Word service_size, Word service_name_ptr,
122- Word service_name_size, Word method_name_ptr, Word method_name_size,
123- Word initial_metadata_ptr, Word initial_metadata_size, Word token_ptr);
124- Word grpc_cancel (void *raw_context, Word token);
125- Word grpc_close (void *raw_context, Word token);
126- Word grpc_send (void *raw_context, Word token, Word message_ptr, Word message_size, Word end_stream);
127-
128- Word set_tick_period_milliseconds (void *raw_context, Word tick_period_milliseconds);
129- Word get_current_time_nanoseconds (void *raw_context, Word result_uint64_ptr);
130-
131- Word set_effective_context (void *raw_context, Word context_id);
132- Word done (void *raw_context);
133- Word call_foreign_function (void *raw_context, Word function_name, Word function_name_size,
134- Word arguments, Word warguments_size, Word results, Word results_size);
88+ Word dequeue_shared_queue (Word token, Word data_ptr_ptr, Word data_size_ptr);
89+ Word enqueue_shared_queue (Word token, Word data_ptr, Word data_size);
90+ Word get_buffer_bytes (Word type, Word start, Word length, Word ptr_ptr, Word size_ptr);
91+ Word get_buffer_status (Word type, Word length_ptr, Word flags_ptr);
92+ Word set_buffer_bytes (Word type, Word start, Word length, Word data_ptr, Word data_size);
93+ Word add_header_map_value (Word type, Word key_ptr, Word key_size, Word value_ptr, Word value_size);
94+ Word get_header_map_value (Word type, Word key_ptr, Word key_size, Word value_ptr_ptr,
95+ Word value_size_ptr);
96+ Word replace_header_map_value (Word type, Word key_ptr, Word key_size, Word value_ptr,
97+ Word value_size);
98+ Word remove_header_map_value (Word type, Word key_ptr, Word key_size);
99+ Word get_header_map_pairs (Word type, Word ptr_ptr, Word size_ptr);
100+ Word set_header_map_pairs (Word type, Word ptr, Word size);
101+ Word get_header_map_size (Word type, Word result_ptr);
102+ Word getRequestBodyBufferBytes (Word start, Word length, Word ptr_ptr, Word size_ptr);
103+ Word get_response_body_buffer_bytes (Word start, Word length, Word ptr_ptr, Word size_ptr);
104+ Word http_call (Word uri_ptr, Word uri_size, Word header_pairs_ptr, Word header_pairs_size,
105+ Word body_ptr, Word body_size, Word trailer_pairs_ptr, Word trailer_pairs_size,
106+ Word timeout_milliseconds, Word token_ptr);
107+ Word define_metric (Word metric_type, Word name_ptr, Word name_size, Word result_ptr);
108+ Word increment_metric (Word metric_id, int64_t offset);
109+ Word record_metric (Word metric_id, uint64_t value);
110+ Word get_metric (Word metric_id, Word result_uint64_ptr);
111+ Word grpc_call (Word service_ptr, Word service_size, Word service_name_ptr, Word service_name_size,
112+ Word method_name_ptr, Word method_name_size, Word initial_metadata_ptr,
113+ Word initial_metadata_size, Word request_ptr, Word request_size,
114+ Word timeout_milliseconds, Word token_ptr);
115+ Word grpc_stream (Word service_ptr, Word service_size, Word service_name_ptr, Word service_name_size,
116+ Word method_name_ptr, Word method_name_size, Word initial_metadata_ptr,
117+ Word initial_metadata_size, Word token_ptr);
118+ Word grpc_cancel (Word token);
119+ Word grpc_close (Word token);
120+ Word grpc_send (Word token, Word message_ptr, Word message_size, Word end_stream);
121+
122+ Word set_tick_period_milliseconds (Word tick_period_milliseconds);
123+ Word get_current_time_nanoseconds (Word result_uint64_ptr);
124+
125+ Word set_effective_context (Word context_id);
126+ Word done ();
127+ Word call_foreign_function (Word function_name, Word function_name_size, Word arguments,
128+ Word warguments_size, Word results, Word results_size);
135129
136130// Runtime environment functions exported from envoy to wasm.
137131
138- Word wasi_unstable_fd_write (void *raw_context, Word fd, Word iovs, Word iovs_len,
139- Word nwritten_ptr);
140- Word wasi_unstable_fd_read (void *, Word, Word, Word, Word);
141- Word wasi_unstable_fd_seek (void *, Word, int64_t , Word, Word);
142- Word wasi_unstable_fd_close (void *, Word);
143- Word wasi_unstable_fd_fdstat_get (void *, Word fd, Word statOut);
144- Word wasi_unstable_environ_get (void *, Word, Word);
145- Word wasi_unstable_environ_sizes_get (void *raw_context, Word count_ptr, Word buf_size_ptr);
146- Word wasi_unstable_args_get (void *raw_context, Word argc_ptr, Word argv_buf_size_ptr);
147- Word wasi_unstable_args_sizes_get (void *raw_context, Word argc_ptr, Word argv_buf_size_ptr);
148- void wasi_unstable_proc_exit (void *, Word);
149- Word wasi_unstable_clock_time_get (void *, Word, uint64_t , Word);
150- Word wasi_unstable_random_get (void *, Word, Word);
151- Word pthread_equal (void *, Word left, Word right);
132+ Word wasi_unstable_fd_write (Word fd, Word iovs, Word iovs_len, Word nwritten_ptr);
133+ Word wasi_unstable_fd_read (Word, Word, Word, Word);
134+ Word wasi_unstable_fd_seek (Word, int64_t , Word, Word);
135+ Word wasi_unstable_fd_close (Word);
136+ Word wasi_unstable_fd_fdstat_get (Word fd, Word statOut);
137+ Word wasi_unstable_environ_get (Word, Word);
138+ Word wasi_unstable_environ_sizes_get (Word count_ptr, Word buf_size_ptr);
139+ Word wasi_unstable_args_get (Word argc_ptr, Word argv_buf_size_ptr);
140+ Word wasi_unstable_args_sizes_get (Word argc_ptr, Word argv_buf_size_ptr);
141+ void wasi_unstable_proc_exit (Word);
142+ Word wasi_unstable_clock_time_get (Word, uint64_t , Word);
143+ Word wasi_unstable_random_get (Word, Word);
144+ Word pthread_equal (Word left, Word right);
152145
153146// Support for embedders, not exported to Wasm.
154147
155- // Any currently executing Wasm call context.
156- ::proxy_wasm::ContextBase *ContextOrEffectiveContext (::proxy_wasm::ContextBase *context);
157-
158148#define FOR_ALL_HOST_FUNCTIONS (_f ) \
159149 _f (log) _f(get_status) _f(set_property) _f(get_property) _f(send_local_response) \
160150 _f (get_shared_data) _f(set_shared_data) _f(register_shared_queue) _f(resolve_shared_queue) \
@@ -181,10 +171,9 @@ ::proxy_wasm::ContextBase *ContextOrEffectiveContext(::proxy_wasm::ContextBase *
181171// Helpers to generate a stub to pass to VM, in place of a restricted proxy-wasm capability.
182172#define _CREATE_PROXY_WASM_STUB (_fn ) \
183173 template <typename F> struct _fn ##Stub; \
184- template <typename ... Args> struct _fn ##Stub<Word(void *, Args...)> { \
185- static Word stub (void *raw_context, Args...) { \
186- auto context = exports::ContextOrEffectiveContext ( \
187- static_cast <ContextBase *>((void )raw_context, current_context_)); \
174+ template <typename ... Args> struct _fn ##Stub<Word(Args...)> { \
175+ static Word stub (Args...) { \
176+ auto context = contextOrEffectiveContext (); \
188177 context->wasmVm ()->integration ()->error ( \
189178 " Attempted call to restricted proxy-wasm capability: proxy_" #_fn); \
190179 return WasmResult::InternalFailure; \
@@ -197,19 +186,17 @@ FOR_ALL_HOST_FUNCTIONS_ABI_SPECIFIC(_CREATE_PROXY_WASM_STUB)
197186// Helpers to generate a stub to pass to VM, in place of a restricted WASI capability.
198187#define _CREATE_WASI_STUB (_fn ) \
199188 template <typename F> struct _fn ##Stub; \
200- template <typename ... Args> struct _fn ##Stub<Word(void *, Args...)> { \
201- static Word stub (void *raw_context, Args...) { \
202- auto context = exports::ContextOrEffectiveContext ( \
203- static_cast <ContextBase *>((void )raw_context, current_context_)); \
189+ template <typename ... Args> struct _fn ##Stub<Word(Args...)> { \
190+ static Word stub (Args...) { \
191+ auto context = contextOrEffectiveContext (); \
204192 context->wasmVm ()->integration ()->error ( \
205193 " Attempted call to restricted WASI capability: " #_fn); \
206194 return 76 ; /* __WASI_ENOTCAPABLE */ \
207195 } \
208196 }; \
209- template <typename ... Args> struct _fn ##Stub<void (void *, Args...)> { \
210- static void stub (void *raw_context, Args...) { \
211- auto context = exports::ContextOrEffectiveContext ( \
212- static_cast <ContextBase *>((void )raw_context, current_context_)); \
197+ template <typename ... Args> struct _fn ##Stub<void (Args...)> { \
198+ static void stub (Args...) { \
199+ auto context = contextOrEffectiveContext (); \
213200 context->wasmVm ()->integration ()->error ( \
214201 " Attempted call to restricted WASI capability: " #_fn); \
215202 } \
0 commit comments