mirror of
				https://github.com/onionltd/EndGame.git
				synced 2025-10-30 14:09:02 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			159 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- Copyright (C) Yichun Zhang (agentzh)
 | |
| 
 | |
| 
 | |
| local ffi = require 'ffi'
 | |
| local base = require "resty.core.base"
 | |
| 
 | |
| 
 | |
| local error = error
 | |
| local tonumber = tonumber
 | |
| local type = type
 | |
| local C = ffi.C
 | |
| local ffi_new = ffi.new
 | |
| local ffi_str = ffi.string
 | |
| local time_val = ffi_new("long[1]")
 | |
| local get_string_buf = base.get_string_buf
 | |
| local ngx = ngx
 | |
| local FFI_ERROR = base.FFI_ERROR
 | |
| local subsystem = ngx.config.subsystem
 | |
| 
 | |
| 
 | |
| local ngx_lua_ffi_now
 | |
| local ngx_lua_ffi_time
 | |
| local ngx_lua_ffi_today
 | |
| local ngx_lua_ffi_localtime
 | |
| local ngx_lua_ffi_utctime
 | |
| local ngx_lua_ffi_update_time
 | |
| 
 | |
| 
 | |
| if subsystem == 'http' then
 | |
|     ffi.cdef[[
 | |
| double ngx_http_lua_ffi_now(void);
 | |
| long ngx_http_lua_ffi_time(void);
 | |
| void ngx_http_lua_ffi_today(unsigned char *buf);
 | |
| void ngx_http_lua_ffi_localtime(unsigned char *buf);
 | |
| void ngx_http_lua_ffi_utctime(unsigned char *buf);
 | |
| void ngx_http_lua_ffi_update_time(void);
 | |
| int ngx_http_lua_ffi_cookie_time(unsigned char *buf, long t);
 | |
| void ngx_http_lua_ffi_http_time(unsigned char *buf, long t);
 | |
| void ngx_http_lua_ffi_parse_http_time(const unsigned char *str, size_t len,
 | |
|     long *time);
 | |
|     ]]
 | |
| 
 | |
|     ngx_lua_ffi_now = C.ngx_http_lua_ffi_now
 | |
|     ngx_lua_ffi_time = C.ngx_http_lua_ffi_time
 | |
|     ngx_lua_ffi_today = C.ngx_http_lua_ffi_today
 | |
|     ngx_lua_ffi_localtime = C.ngx_http_lua_ffi_localtime
 | |
|     ngx_lua_ffi_utctime = C.ngx_http_lua_ffi_utctime
 | |
|     ngx_lua_ffi_update_time = C.ngx_http_lua_ffi_update_time
 | |
| 
 | |
| elseif subsystem == 'stream' then
 | |
|     ffi.cdef[[
 | |
| double ngx_stream_lua_ffi_now(void);
 | |
| long ngx_stream_lua_ffi_time(void);
 | |
| void ngx_stream_lua_ffi_today(unsigned char *buf);
 | |
| void ngx_stream_lua_ffi_localtime(unsigned char *buf);
 | |
| void ngx_stream_lua_ffi_utctime(unsigned char *buf);
 | |
| void ngx_stream_lua_ffi_update_time(void);
 | |
|     ]]
 | |
| 
 | |
|     ngx_lua_ffi_now = C.ngx_stream_lua_ffi_now
 | |
|     ngx_lua_ffi_time = C.ngx_stream_lua_ffi_time
 | |
|     ngx_lua_ffi_today = C.ngx_stream_lua_ffi_today
 | |
|     ngx_lua_ffi_localtime = C.ngx_stream_lua_ffi_localtime
 | |
|     ngx_lua_ffi_utctime = C.ngx_stream_lua_ffi_utctime
 | |
|     ngx_lua_ffi_update_time = C.ngx_stream_lua_ffi_update_time
 | |
| end
 | |
| 
 | |
| 
 | |
| function ngx.now()
 | |
|     return tonumber(ngx_lua_ffi_now())
 | |
| end
 | |
| 
 | |
| 
 | |
| function ngx.time()
 | |
|     return tonumber(ngx_lua_ffi_time())
 | |
| end
 | |
| 
 | |
| 
 | |
| function ngx.update_time()
 | |
|     ngx_lua_ffi_update_time()
 | |
| end
 | |
| 
 | |
| 
 | |
| function ngx.today()
 | |
|     -- the format of today is 2010-11-19
 | |
|     local today_buf_size = 10
 | |
|     local buf = get_string_buf(today_buf_size)
 | |
|     ngx_lua_ffi_today(buf)
 | |
|     return ffi_str(buf, today_buf_size)
 | |
| end
 | |
| 
 | |
| 
 | |
| function ngx.localtime()
 | |
|     -- the format of localtime is 2010-11-19 20:56:31
 | |
|     local localtime_buf_size = 19
 | |
|     local buf = get_string_buf(localtime_buf_size)
 | |
|     ngx_lua_ffi_localtime(buf)
 | |
|     return ffi_str(buf, localtime_buf_size)
 | |
| end
 | |
| 
 | |
| 
 | |
| function ngx.utctime()
 | |
|     -- the format of utctime is 2010-11-19 20:56:31
 | |
|     local utctime_buf_size = 19
 | |
|     local buf = get_string_buf(utctime_buf_size)
 | |
|     ngx_lua_ffi_utctime(buf)
 | |
|     return ffi_str(buf, utctime_buf_size)
 | |
| end
 | |
| 
 | |
| 
 | |
| if subsystem == 'http' then
 | |
| 
 | |
| function ngx.cookie_time(sec)
 | |
|     if type(sec) ~= "number" then
 | |
|         error("number argument only", 2)
 | |
|     end
 | |
| 
 | |
|     -- the format of cookie time is Mon, 28-Sep-2038 06:00:00 GMT
 | |
|     -- or Mon, 28-Sep-18 06:00:00 GMT
 | |
|     local cookie_time_buf_size = 29
 | |
|     local buf = get_string_buf(cookie_time_buf_size)
 | |
|     local used_size = C.ngx_http_lua_ffi_cookie_time(buf, sec)
 | |
|     return ffi_str(buf, used_size)
 | |
| end
 | |
| 
 | |
| 
 | |
| function ngx.http_time(sec)
 | |
|     if type(sec) ~= "number" then
 | |
|         error("number argument only", 2)
 | |
|     end
 | |
| 
 | |
|     -- the format of http time is Mon, 28 Sep 1970 06:00:00 GMT
 | |
|     local http_time_buf_size = 29
 | |
|     local buf = get_string_buf(http_time_buf_size)
 | |
|     C.ngx_http_lua_ffi_http_time(buf, sec)
 | |
|     return ffi_str(buf, http_time_buf_size)
 | |
| end
 | |
| 
 | |
| 
 | |
| function ngx.parse_http_time(time_str)
 | |
|     if type(time_str) ~= "string" then
 | |
|         error("string argument only", 2)
 | |
|     end
 | |
| 
 | |
|     C.ngx_http_lua_ffi_parse_http_time(time_str, #time_str, time_val)
 | |
| 
 | |
|     local res = time_val[0]
 | |
|     if res == FFI_ERROR then
 | |
|         return nil
 | |
|     end
 | |
| 
 | |
|     return tonumber(res)
 | |
| end
 | |
| 
 | |
| end
 | |
| 
 | |
| return {
 | |
|     version = base.version
 | |
| }
 | 
