1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- local socket = require "http.sockethelper"
- local c = require "ltls.c"
- local tlshelper = {}
- function tlshelper.init_requestfunc(fd, tls_ctx)
- local readfunc = socket.readfunc(fd)
- local writefunc = socket.writefunc(fd)
- return function ()
- local ds1 = tls_ctx:handshake()
- writefunc(ds1)
- while not tls_ctx:finished() do
- local ds2 = readfunc()
- local ds3 = tls_ctx:handshake(ds2)
- if ds3 then
- writefunc(ds3)
- end
- end
- end
- end
- function tlshelper.init_responsefunc(fd, tls_ctx)
- local readfunc = socket.readfunc(fd)
- local writefunc = socket.writefunc(fd)
- return function ()
- while not tls_ctx:finished() do
- local ds1 = readfunc()
- local ds2 = tls_ctx:handshake(ds1)
- if ds2 then
- writefunc(ds2)
- end
- end
- local ds3 = tls_ctx:write()
- writefunc(ds3)
- end
- end
- function tlshelper.closefunc(tls_ctx)
- return function ()
- tls_ctx:close()
- end
- end
- function tlshelper.readfunc(fd, tls_ctx)
- local function readfunc()
- readfunc = socket.readfunc(fd)
- return ""
- end
- local read_buff = ""
- return function (sz)
- if not sz then
- local s = ""
- if #read_buff == 0 then
- local ds = readfunc()
- s = tls_ctx:read(ds)
- end
- s = read_buff .. s
- read_buff = ""
- return s
- else
- while #read_buff < sz do
- local ds = readfunc()
- local s = tls_ctx:read(ds)
- read_buff = read_buff .. s
- end
- local s = string.sub(read_buff, 1, sz)
- read_buff = string.sub(read_buff, sz+1, #read_buff)
- return s
- end
- end
- end
- function tlshelper.writefunc(fd, tls_ctx)
- local writefunc = socket.writefunc(fd)
- return function (s)
- local ds = tls_ctx:write(s)
- return writefunc(ds)
- end
- end
- function tlshelper.readallfunc(fd, tls_ctx)
- return function ()
- local ds = socket.readall(fd)
- local s = tls_ctx:read(ds)
- return s
- end
- end
- function tlshelper.newctx()
- return c.newctx()
- end
- function tlshelper.newtls(method, ssl_ctx, hostname)
- return c.newtls(method, ssl_ctx, hostname)
- end
- return tlshelper
|