Skip to content

Commit 760f707

Browse files
spacewanderthibaultcha
authored andcommitted
feature: implemented the FFI interface for the 'ngx_req.add_header()' API.
Signed-off-by: Thibault Charbonnier <[email protected]>
1 parent 7c5b11d commit 760f707

File tree

1 file changed

+55
-15
lines changed

1 file changed

+55
-15
lines changed

src/ngx_http_lua_headers.c

+55-15
Original file line numberDiff line numberDiff line change
@@ -955,11 +955,15 @@ ngx_http_lua_ffi_set_resp_header(ngx_http_request_t *r, const u_char *key_data,
955955

956956

957957
int
958-
ngx_http_lua_ffi_req_header_set_single_value(ngx_http_request_t *r,
959-
const u_char *key, size_t key_len, const u_char *value, size_t value_len)
958+
ngx_http_lua_ffi_req_set_header(ngx_http_request_t *r, const u_char *key,
959+
size_t key_len, const u_char *value, size_t value_len,
960+
ngx_http_lua_ffi_str_t *mvals, size_t mvals_len, int override,
961+
char **errmsg)
960962
{
961-
ngx_str_t k;
962-
ngx_str_t v;
963+
u_char *p;
964+
size_t len;
965+
ngx_uint_t i;
966+
ngx_str_t k, v;
963967

964968
if (r->connection->fd == (ngx_socket_t) -1) { /* fake request */
965969
return NGX_HTTP_LUA_FFI_BAD_CONTEXT;
@@ -971,35 +975,71 @@ ngx_http_lua_ffi_req_header_set_single_value(ngx_http_request_t *r,
971975

972976
k.data = ngx_palloc(r->pool, key_len + 1);
973977
if (k.data == NULL) {
974-
return NGX_ERROR;
978+
goto nomem;
975979
}
980+
976981
ngx_memcpy(k.data, key, key_len);
977982
k.data[key_len] = '\0';
978-
979983
k.len = key_len;
980984

981-
if (value_len == 0) {
985+
if (mvals) {
986+
if (mvals_len > 0) {
987+
for (i = 0; i < mvals_len; i++) {
988+
p = mvals[i].data;
989+
len = mvals[i].len;
990+
991+
v.data = ngx_palloc(r->pool, len + 1);
992+
if (v.data == NULL) {
993+
goto nomem;
994+
}
995+
996+
ngx_memcpy(v.data, p, len);
997+
v.data[len] = '\0';
998+
v.len = len;
999+
1000+
if (ngx_http_lua_set_input_header(r, k, v, override)
1001+
!= NGX_OK)
1002+
{
1003+
goto failed;
1004+
}
1005+
}
1006+
1007+
return NGX_OK;
1008+
}
1009+
9821010
v.data = NULL;
9831011
v.len = 0;
9841012

985-
} else {
1013+
} else if (value) {
9861014
v.data = ngx_palloc(r->pool, value_len + 1);
9871015
if (v.data == NULL) {
988-
return NGX_ERROR;
1016+
goto nomem;
9891017
}
1018+
9901019
ngx_memcpy(v.data, value, value_len);
9911020
v.data[value_len] = '\0';
992-
}
1021+
v.len = value_len;
9931022

994-
v.len = value_len;
1023+
} else {
1024+
v.data = NULL;
1025+
v.len = 0;
1026+
}
9951027

996-
if (ngx_http_lua_set_input_header(r, k, v, 1 /* override */)
997-
!= NGX_OK)
998-
{
999-
return NGX_ERROR;
1028+
if (ngx_http_lua_set_input_header(r, k, v, override) != NGX_OK) {
1029+
goto failed;
10001030
}
10011031

10021032
return NGX_OK;
1033+
1034+
nomem:
1035+
1036+
*errmsg = "no memory";
1037+
return NGX_ERROR;
1038+
1039+
failed:
1040+
1041+
*errmsg = "failed to set header";
1042+
return NGX_ERROR;
10031043
}
10041044

10051045

0 commit comments

Comments
 (0)