@@ -25,6 +25,9 @@ namespace proxy_wasm {
25
25
26
26
class ContextBase ;
27
27
28
+ // Any currently executing Wasm call context.
29
+ ::proxy_wasm::ContextBase *contextOrEffectiveContext ();
30
+
28
31
extern thread_local ContextBase *current_context_;
29
32
30
33
namespace exports {
@@ -61,100 +64,87 @@ template <typename Pairs> void marshalPairs(const Pairs &result, char *buffer) {
61
64
62
65
// ABI functions exported from host to wasm.
63
66
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,
76
78
Word response_code_details_size, Word body_ptr, Word body_size,
77
79
Word additional_response_header_pairs_ptr,
78
80
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,
87
87
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);
135
129
136
130
// Runtime environment functions exported from envoy to wasm.
137
131
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);
152
145
153
146
// Support for embedders, not exported to Wasm.
154
147
155
- // Any currently executing Wasm call context.
156
- ::proxy_wasm::ContextBase *ContextOrEffectiveContext (::proxy_wasm::ContextBase *context);
157
-
158
148
#define FOR_ALL_HOST_FUNCTIONS (_f ) \
159
149
_f (log) _f(get_status) _f(set_property) _f(get_property) _f(send_local_response) \
160
150
_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 *
181
171
// Helpers to generate a stub to pass to VM, in place of a restricted proxy-wasm capability.
182
172
#define _CREATE_PROXY_WASM_STUB (_fn ) \
183
173
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 (); \
188
177
context->wasmVm ()->integration ()->error ( \
189
178
" Attempted call to restricted proxy-wasm capability: proxy_" #_fn); \
190
179
return WasmResult::InternalFailure; \
@@ -197,19 +186,17 @@ FOR_ALL_HOST_FUNCTIONS_ABI_SPECIFIC(_CREATE_PROXY_WASM_STUB)
197
186
// Helpers to generate a stub to pass to VM, in place of a restricted WASI capability.
198
187
#define _CREATE_WASI_STUB (_fn ) \
199
188
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 (); \
204
192
context->wasmVm ()->integration ()->error ( \
205
193
" Attempted call to restricted WASI capability: " #_fn); \
206
194
return 76 ; /* __WASI_ENOTCAPABLE */ \
207
195
} \
208
196
}; \
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 (); \
213
200
context->wasmVm ()->integration ()->error ( \
214
201
" Attempted call to restricted WASI capability: " #_fn); \
215
202
} \
0 commit comments