11-- Copyright (C) Yichun Zhang (agentzh)
22
33
4- local ffi = require ' ffi'
4+ local ffi = require " ffi"
55local base = require " resty.core.base"
66
7- local ffi_string = ffi . string
7+
88local C = ffi .C
9+ local ffi_string = ffi .string
910local ngx = ngx
1011local type = type
11- local tostring = tostring
1212local error = error
13+ local floor = math.floor
14+ local tostring = tostring
1315local get_string_buf = base .get_string_buf
1416local get_size_ptr = base .get_size_ptr
15- local floor = math.floor
17+ local subsystem = ngx . config . subsystem
1618
1719
18- ffi .cdef [[
20+ local ngx_lua_ffi_encode_base64
21+ local ngx_lua_ffi_decode_base64
22+
23+
24+ if subsystem == " http" then
25+ ffi .cdef [[
1926 size_t ngx_http_lua_ffi_encode_base64 (const unsigned char * src ,
2027 size_t len , unsigned char * dst ,
2128 int no_padding );
2229
2330 int ngx_http_lua_ffi_decode_base64 (const unsigned char * src ,
2431 size_t len , unsigned char * dst ,
2532 size_t * dlen );
26- ]]
33+ ]]
34+
35+ ngx_lua_ffi_encode_base64 = C .ngx_http_lua_ffi_encode_base64
36+ ngx_lua_ffi_decode_base64 = C .ngx_http_lua_ffi_decode_base64
37+
38+ elseif subsystem == " stream" then
39+ ffi .cdef [[
40+ size_t ngx_stream_lua_ffi_encode_base64 (const unsigned char * src ,
41+ size_t len , unsigned char * dst ,
42+ int no_padding );
43+
44+ int ngx_stream_lua_ffi_decode_base64 (const unsigned char * src ,
45+ size_t len , unsigned char * dst ,
46+ size_t * dlen );
47+ ]]
48+
49+ ngx_lua_ffi_encode_base64 = C .ngx_stream_lua_ffi_encode_base64
50+ ngx_lua_ffi_decode_base64 = C .ngx_stream_lua_ffi_decode_base64
51+ end
2752
2853
2954local function base64_encoded_length (len , no_padding )
@@ -57,8 +82,7 @@ ngx.encode_base64 = function (s, no_padding)
5782
5883 local dlen = base64_encoded_length (slen , no_padding_bool )
5984 local dst = get_string_buf (dlen )
60- local r_dlen = C .ngx_http_lua_ffi_encode_base64 (s , slen , dst ,
61- no_padding_int )
85+ local r_dlen = ngx_lua_ffi_encode_base64 (s , slen , dst , no_padding_int )
6286 -- if dlen ~= r_dlen then error("discrepancy in len") end
6387 return ffi_string (dst , r_dlen )
6488end
@@ -78,7 +102,7 @@ ngx.decode_base64 = function (s)
78102 -- print("dlen: ", tonumber(dlen))
79103 local dst = get_string_buf (dlen )
80104 local pdlen = get_size_ptr ()
81- local ok = C . ngx_http_lua_ffi_decode_base64 (s , slen , dst , pdlen )
105+ local ok = ngx_lua_ffi_decode_base64 (s , slen , dst , pdlen )
82106 if ok == 0 then
83107 return nil
84108 end
0 commit comments