@@ -50,6 +50,10 @@ static int (*get_req_headers_count) (ngx_http_request_t *r,
50
50
int max , int * truncated );
51
51
static int (* get_req_headers ) (ngx_http_request_t * r ,
52
52
ngx_http_wasm_table_elt_t * out , int count , int raw );
53
+ static int (* set_req_header ) (ngx_http_request_t * r ,
54
+ const char * key , size_t key_len , const char * value ,
55
+ size_t value_len , ngx_str_t * mvals , size_t mvals_len ,
56
+ int override , char * * errmsg );
53
57
54
58
static char * err_bad_ctx = "API disabled in the current context" ;
55
59
static char * err_no_req_ctx = "no request ctx found" ;
@@ -97,6 +101,7 @@ ngx_http_wasm_resolve_symbol(void)
97
101
must_resolve_symbol (get_resp_header , ngx_http_lua_ffi_get_resp_header );
98
102
must_resolve_symbol (get_req_headers_count , ngx_http_lua_ffi_req_get_headers_count );
99
103
must_resolve_symbol (get_req_headers , ngx_http_lua_ffi_req_get_headers );
104
+ must_resolve_symbol (set_req_header , ngx_http_lua_ffi_req_set_header );
100
105
101
106
return NGX_OK ;
102
107
}
@@ -183,6 +188,35 @@ ngx_http_wasm_get_buf_to_write(ngx_log_t *log, int32_t len,
183
188
}
184
189
185
190
191
+ static ngx_int_t
192
+ ngx_http_wasm_set_req_header (ngx_http_request_t * r ,
193
+ const char * key , size_t key_len ,
194
+ const char * val , size_t val_len ,
195
+ int override )
196
+ {
197
+ char * errmsg = NULL ;
198
+ ngx_int_t rc ;
199
+
200
+ rc = set_req_header (r , key , key_len , val , val_len , NULL , 0 ,
201
+ override , & errmsg );
202
+ if (rc != NGX_OK && rc != NGX_DECLINED ) {
203
+ if (rc == FFI_BAD_CONTEXT ) {
204
+ errmsg = err_bad_ctx ;
205
+ }
206
+
207
+ if (errmsg != NULL ) {
208
+ ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
209
+ "faied to set request header %*s to %*s: %s" ,
210
+ key_len , key , val_len , val , errmsg );
211
+ }
212
+
213
+ return NGX_ERROR ;
214
+ }
215
+
216
+ return NGX_OK ;
217
+ }
218
+
219
+
186
220
static ngx_int_t
187
221
ngx_http_wasm_set_resp_header (ngx_http_request_t * r ,
188
222
const char * key , size_t key_len , int is_nil ,
@@ -203,7 +237,7 @@ ngx_http_wasm_set_resp_header(ngx_http_request_t *r,
203
237
204
238
if (errmsg != NULL ) {
205
239
ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
206
- "faied to set header %*s to %*s: %s" ,
240
+ "faied to set response header %*s to %*s: %s" ,
207
241
key_len , key , val_len , val , errmsg );
208
242
}
209
243
@@ -867,11 +901,21 @@ proxy_replace_header_map_value(int32_t type, int32_t key_data, int32_t key_size,
867
901
must_get_memory (key , log , key_data , key_size );
868
902
must_get_memory (val , log , data , size );
869
903
870
- if (type == PROXY_MAP_TYPE_HTTP_RESPONSE_HEADERS ) {
904
+ switch (type ) {
905
+ case PROXY_MAP_TYPE_HTTP_REQUEST_HEADERS :
906
+ rc = ngx_http_wasm_set_req_header (r , key , key_size , val , size , 1 );
907
+ break ;
908
+
909
+ case PROXY_MAP_TYPE_HTTP_RESPONSE_HEADERS :
871
910
rc = ngx_http_wasm_set_resp_header (r , key , key_size , 0 , val , size , 1 );
872
- if (rc != NGX_OK ) {
873
- return PROXY_RESULT_BAD_ARGUMENT ;
874
- }
911
+ break ;
912
+
913
+ default :
914
+ return PROXY_RESULT_BAD_ARGUMENT ;
915
+ }
916
+
917
+ if (rc != NGX_OK ) {
918
+ return PROXY_RESULT_BAD_ARGUMENT ;
875
919
}
876
920
877
921
return PROXY_RESULT_OK ;
0 commit comments