@@ -64,8 +64,11 @@ ngx_http_lua_ffi_get_resp_status(ngx_http_request_t *r)
6464
6565
6666int
67- ngx_http_lua_ffi_set_resp_status (ngx_http_request_t * r , int status )
67+ ngx_http_lua_ffi_set_resp_status_and_reason (ngx_http_request_t * r , int status ,
68+ const char * reason , size_t reason_len )
6869{
70+ u_char * buf ;
71+
6972 if (r -> connection -> fd == (ngx_socket_t ) - 1 ) {
7073 return NGX_HTTP_LUA_FFI_BAD_CONTEXT ;
7174 }
@@ -77,6 +80,14 @@ ngx_http_lua_ffi_set_resp_status(ngx_http_request_t *r, int status)
7780 return NGX_DECLINED ;
7881 }
7982
83+ /* per RFC-7230 sec 3.1.2, the status line must be 3 digits, it also makes
84+ * buffer size calculation easier */
85+ if (status < 100 || status > 999 ) {
86+ ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
87+ "invalid HTTP status code %d" , status );
88+ return NGX_DECLINED ;
89+ }
90+
8091 r -> headers_out .status = status ;
8192
8293 if (r -> err_status ) {
@@ -91,6 +102,18 @@ ngx_http_lua_ffi_set_resp_status(ngx_http_request_t *r, int status)
91102
92103 ngx_str_set (& r -> headers_out .status_line , "101 Switching Protocols" );
93104
105+ } else if (reason != NULL && reason_len > 0 ) {
106+ reason_len += 5 ; /* "ddd <reason>\0" */
107+ buf = ngx_palloc (r -> pool , reason_len );
108+ if (buf == NULL ) {
109+ ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 , "no memory" );
110+ return NGX_DECLINED ;
111+ }
112+
113+ ngx_snprintf (buf , reason_len , "%d %s" , status , reason );
114+ r -> headers_out .status_line .len = reason_len ;
115+ r -> headers_out .status_line .data = buf ;
116+
94117 } else {
95118 r -> headers_out .status_line .len = 0 ;
96119 }
@@ -99,6 +122,13 @@ ngx_http_lua_ffi_set_resp_status(ngx_http_request_t *r, int status)
99122}
100123
101124
125+ int
126+ ngx_http_lua_ffi_set_resp_status (ngx_http_request_t * r , int status )
127+ {
128+ return ngx_http_lua_ffi_set_resp_status_and_reason (r , status , NULL , 0 );
129+ }
130+
131+
102132int
103133ngx_http_lua_ffi_req_is_internal (ngx_http_request_t * r )
104134{
0 commit comments