@@ -6,107 +6,98 @@ local ffi = require "ffi"
66local os = require " os"
77
88
9- local FFI_OK = base .FFI_OK
10- local FFI_NO_REQ_CTX = base .FFI_NO_REQ_CTX
11- local FFI_BAD_CONTEXT = base .FFI_BAD_CONTEXT
12- local get_string_buf = base .get_string_buf
13- local get_string_buf_size = base .get_string_buf_size
14- local get_size_ptr = base .get_size_ptr
15- local new_tab = base .new_tab
169local C = ffi .C
1710local ffi_new = ffi .new
1811local ffi_str = ffi .string
19- local setmetatable = setmetatable
20- local rawget = rawget
21- local rawset = rawset
2212local ngx = ngx
23- local get_request = base .get_request
2413local type = type
2514local error = error
15+ local rawget = rawget
16+ local rawset = rawset
2617local tonumber = tonumber
18+ local setmetatable = setmetatable
19+ local FFI_OK = base .FFI_OK
20+ local FFI_NO_REQ_CTX = base .FFI_NO_REQ_CTX
21+ local FFI_BAD_CONTEXT = base .FFI_BAD_CONTEXT
22+ local new_tab = base .new_tab
23+ local get_request = base .get_request
24+ local get_size_ptr = base .get_size_ptr
25+ local get_string_buf = base .get_string_buf
26+ local get_string_buf_size = base .get_string_buf_size
2727local subsystem = ngx .config .subsystem
2828
2929
30- local _M
30+ local ngx_lua_ffi_get_resp_status
3131local ngx_lua_ffi_get_conf_env
32+ local ngx_magic_key_getters
33+ local ngx_magic_key_setters
3234
3335
34- if subsystem == ' http ' then
35- _M = new_tab (0 , 3 )
36+ local _M = new_tab ( 0 , 3 )
37+ local ngx_mt = new_tab (0 , 2 )
3638
3739
38- local ngx_magic_key_getters = new_tab (0 , 4 )
39- local ngx_magic_key_setters = new_tab (0 , 2 )
40+ if subsystem == " http" then
41+ ngx_magic_key_getters = new_tab (0 , 4 )
42+ ngx_magic_key_setters = new_tab (0 , 2 )
4043
41-
42- local function register_getter (key , func )
43- ngx_magic_key_getters [key ] = func
44- end
45- _M .register_ngx_magic_key_getter = register_getter
44+ elseif subsystem == " stream" then
45+ ngx_magic_key_getters = new_tab (0 , 2 )
46+ ngx_magic_key_setters = new_tab (0 , 1 )
47+ end
4648
4749
48- local function register_setter (key , func )
49- ngx_magic_key_setters [key ] = func
50- end
51- _M .register_ngx_magic_key_setter = register_setter
50+ local function register_getter (key , func )
51+ ngx_magic_key_getters [key ] = func
52+ end
53+ _M .register_ngx_magic_key_getter = register_getter
5254
5355
54- local mt = new_tab (0 , 2 )
56+ local function register_setter (key , func )
57+ ngx_magic_key_setters [key ] = func
58+ end
59+ _M .register_ngx_magic_key_setter = register_setter
5560
5661
57- mt .__index = function (tb , key )
58- local f = ngx_magic_key_getters [key ]
59- if f then
60- return f ()
61- end
62- return rawget (tb , key )
62+ ngx_mt .__index = function (tb , key )
63+ local f = ngx_magic_key_getters [key ]
64+ if f then
65+ return f ()
6366 end
67+ return rawget (tb , key )
68+ end
6469
6570
66- mt .__newindex = function (tb , key , ctx )
67- local f = ngx_magic_key_setters [key ]
68- if f then
69- return f (ctx )
70- end
71- return rawset (tb , key , ctx )
71+ ngx_mt .__newindex = function (tb , key , ctx )
72+ local f = ngx_magic_key_setters [key ]
73+ if f then
74+ return f (ctx )
7275 end
76+ return rawset (tb , key , ctx )
77+ end
7378
7479
75- setmetatable (ngx , mt )
80+ setmetatable (ngx , ngx_mt )
7681
7782
83+ if subsystem == " http" then
7884 ffi .cdef [[
79- int ngx_http_lua_ffi_get_resp_status (ngx_http_request_t * r );
80- int ngx_http_lua_ffi_set_resp_status (ngx_http_request_t * r , int r );
81- int ngx_http_lua_ffi_is_subrequest (ngx_http_request_t * r );
82- int ngx_http_lua_ffi_headers_sent (ngx_http_request_t * r );
83- int ngx_http_lua_ffi_get_conf_env (const unsigned char * name ,
84- unsigned char ** env_buf , size_t * name_len );
85+ int ngx_http_lua_ffi_get_resp_status (ngx_http_request_t * r );
86+ int ngx_http_lua_ffi_set_resp_status (ngx_http_request_t * r , int r );
87+ int ngx_http_lua_ffi_is_subrequest (ngx_http_request_t * r );
88+ int ngx_http_lua_ffi_headers_sent (ngx_http_request_t * r );
89+ int ngx_http_lua_ffi_get_conf_env (const unsigned char * name ,
90+ unsigned char ** env_buf ,
91+ size_t * name_len );
8592 ]]
8693
8794
95+ ngx_lua_ffi_get_resp_status = C .ngx_http_lua_ffi_get_resp_status
8896 ngx_lua_ffi_get_conf_env = C .ngx_http_lua_ffi_get_conf_env
8997
9098
9199 -- ngx.status
92100
93- local function get_status ()
94- local r = get_request ()
95-
96- if not r then
97- error (" no request found" )
98- end
99-
100- local rc = C .ngx_http_lua_ffi_get_resp_status (r )
101-
102- if rc == FFI_BAD_CONTEXT then
103- error (" API disabled in the current context" , 2 )
104- end
105-
106- return rc
107- end
108- register_getter (" status" , get_status )
109-
110101
111102 local function set_status (status )
112103 local r = get_request ()
@@ -132,6 +123,7 @@ int ngx_http_lua_ffi_get_conf_env(const unsigned char *name,
132123
133124 -- ngx.is_subrequest
134125
126+
135127 local function is_subreq ()
136128 local r = get_request ()
137129
@@ -152,6 +144,7 @@ int ngx_http_lua_ffi_get_conf_env(const unsigned char *name,
152144
153145 -- ngx.headers_sent
154146
147+
155148 local function headers_sent ()
156149 local r = get_request ()
157150
@@ -173,20 +166,40 @@ int ngx_http_lua_ffi_get_conf_env(const unsigned char *name,
173166 end
174167 register_getter (" headers_sent" , headers_sent )
175168
176- elseif subsystem == ' stream' then
177- _M = new_tab (0 , 1 )
178-
179-
169+ elseif subsystem == " stream" then
180170 ffi .cdef [[
181- int ngx_stream_lua_ffi_get_conf_env (const unsigned char * name ,
182- unsigned char ** env_buf , size_t * name_len );
171+ int ngx_stream_lua_ffi_get_resp_status (ngx_stream_lua_request_t * r );
172+ int ngx_stream_lua_ffi_get_conf_env (const unsigned char * name ,
173+ unsigned char ** env_buf ,
174+ size_t * name_len );
183175 ]]
184176
185-
177+ ngx_lua_ffi_get_resp_status = C . ngx_stream_lua_ffi_get_resp_status
186178 ngx_lua_ffi_get_conf_env = C .ngx_stream_lua_ffi_get_conf_env
187179end
188180
189181
182+ -- ngx.status
183+
184+
185+ local function get_status ()
186+ local r = get_request ()
187+
188+ if not r then
189+ error (" no request found" )
190+ end
191+
192+ local rc = ngx_lua_ffi_get_resp_status (r )
193+
194+ if rc == FFI_BAD_CONTEXT then
195+ error (" API disabled in the current context" , 2 )
196+ end
197+
198+ return rc
199+ end
200+ register_getter (" status" , get_status )
201+
202+
190203do
191204 local _getenv = os.getenv
192205 local env_ptr = ffi_new (" unsigned char *[1]" )
0 commit comments