@@ -955,11 +955,15 @@ ngx_http_lua_ffi_set_resp_header(ngx_http_request_t *r, const u_char *key_data,
955
955
956
956
957
957
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 )
960
962
{
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 ;
963
967
964
968
if (r -> connection -> fd == (ngx_socket_t ) - 1 ) { /* fake request */
965
969
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,
971
975
972
976
k .data = ngx_palloc (r -> pool , key_len + 1 );
973
977
if (k .data == NULL ) {
974
- return NGX_ERROR ;
978
+ goto nomem ;
975
979
}
980
+
976
981
ngx_memcpy (k .data , key , key_len );
977
982
k .data [key_len ] = '\0' ;
978
-
979
983
k .len = key_len ;
980
984
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
+
982
1010
v .data = NULL ;
983
1011
v .len = 0 ;
984
1012
985
- } else {
1013
+ } else if ( value ) {
986
1014
v .data = ngx_palloc (r -> pool , value_len + 1 );
987
1015
if (v .data == NULL ) {
988
- return NGX_ERROR ;
1016
+ goto nomem ;
989
1017
}
1018
+
990
1019
ngx_memcpy (v .data , value , value_len );
991
1020
v .data [value_len ] = '\0' ;
992
- }
1021
+ v . len = value_len ;
993
1022
994
- v .len = value_len ;
1023
+ } else {
1024
+ v .data = NULL ;
1025
+ v .len = 0 ;
1026
+ }
995
1027
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 ;
1000
1030
}
1001
1031
1002
1032
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 ;
1003
1043
}
1004
1044
1005
1045
0 commit comments