Skip to content

Commit 1fadcc6

Browse files
authored
feat: full response support fetching status (#84)
1 parent c1321f5 commit 1fadcc6

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/http/ngx_http_wasm_api.c

+23
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,8 @@ ngx_http_wasm_resp_get_headers(ngx_http_request_t *r, int32_t addr, int32_t size
812812
ngx_uint_t i;
813813
u_char *content_length_hdr = NULL;
814814
u_char content_length_hdr_len = 0;
815+
u_char *status_length_hdr = NULL;
816+
u_char status_length_hdr_len = 0;
815817
char *lowcase_key;
816818
char *val;
817819
ngx_list_part_t *part;
@@ -885,6 +887,20 @@ ngx_http_wasm_resp_get_headers(ngx_http_request_t *r, int32_t addr, int32_t size
885887
size += sizeof("transfer-encoding") + sizeof("chunked");
886888
}
887889

890+
if (r->headers_out.status) {
891+
count++;
892+
status_length_hdr = ngx_pcalloc(r->pool, NGX_INT_T_LEN);
893+
if (status_length_hdr == NULL) {
894+
ngx_log_error(NGX_LOG_ERR, log, 0, "no memory");
895+
return PROXY_RESULT_INTERNAL_FAILURE;
896+
}
897+
898+
status_length_hdr_len = ngx_snprintf(status_length_hdr, NGX_INT_T_LEN, "%ui",
899+
r->headers_out.status) - status_length_hdr;
900+
901+
size += sizeof(":status") + status_length_hdr_len + 1;
902+
}
903+
888904
size += 4 + count * 2 * 4;
889905
buf = ngx_http_wasm_get_buf_to_write(log, size, addr, size_addr);
890906
if (buf == NULL) {
@@ -953,6 +969,13 @@ ngx_http_wasm_resp_get_headers(ngx_http_request_t *r, int32_t addr, int32_t size
953969
proxy_wasm_map_reserve_literal(&it, "transfer-encoding", "chunked");
954970
}
955971

972+
if (status_length_hdr != NULL) {
973+
proxy_wasm_map_reserve(&it, &lowcase_key, sizeof(":status") -1,
974+
&val, status_length_hdr_len);
975+
ngx_memcpy(lowcase_key, ":status", sizeof(":status") - 1);
976+
ngx_memcpy(val, status_length_hdr, status_length_hdr_len);
977+
}
978+
956979
return PROXY_RESULT_OK;
957980
}
958981

t/http_resp_header.t

+4
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ qr/get response header \S+ \S+/
173173
get response header content-type text/plain,
174174
get response header content-length 0,
175175
get response header connection close,
176+
get response header :status 200,
176177

177178

178179

@@ -198,6 +199,7 @@ get response header x-foo bar,
198199
get response header content-type text/plain,
199200
get response header content-length 4,
200201
get response header connection close,
202+
get response header :status 200,
201203

202204

203205

@@ -225,6 +227,7 @@ get response header x-wasm false,
225227
get response header content-type text/html,
226228
get response header content-length 4,
227229
get response header connection close,
230+
get response header :status 200,
228231

229232

230233

@@ -253,6 +256,7 @@ qr/get response header \S+ \S+/
253256
get response header content-type text/plain,
254257
get response header content-length 0,
255258
get response header connection keep-alive,
259+
get response header :status 200,
256260

257261

258262

0 commit comments

Comments
 (0)