Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 44 additions & 28 deletions lib/resty/core/socket.lua
Original file line number Diff line number Diff line change
Expand Up @@ -424,52 +424,68 @@ local function sslhandshake(cosocket, reused_session, server_name, ssl_verify,
error("no request ctx found", 2)
end

if rc == FFI_OK then
if reused_session == false then
return true
local res

if rc == FFI_ERROR then
res = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u,
session_ptr, errmsg, openssl_error_code)

assert(res == FFI_ERROR)

if openssl_error_code[0] ~= 0 then
return nil, openssl_error_code[0] .. ": " .. ffi_str(errmsg[0])
end

rc = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u,
session_ptr, errmsg, openssl_error_code)
return nil, ffi_str(errmsg[0])
end

while true do
if rc == FFI_ERROR then
if openssl_error_code[0] ~= 0 then
return nil, openssl_error_code[0] .. ": " .. ffi_str(errmsg[0])
end
if rc == FFI_DONE then
return reused_session
end

return nil, ffi_str(errmsg[0])
if rc == FFI_OK then
if reused_session == false then
return true
end

if rc == FFI_DONE then
return reused_session
res = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u,
session_ptr, errmsg, openssl_error_code)

assert(res == FFI_OK)

if session_ptr[0] == nil then
return session_ptr[0]
end

if rc == FFI_OK then
if reused_session == false then
return true
end
return ffi_gc(session_ptr[0], C.ngx_http_lua_ffi_ssl_free_session)
end

rc = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u,
session_ptr, errmsg, openssl_error_code)
assert(rc == FFI_AGAIN)

assert(rc == FFI_OK)
co_yield()

if session_ptr[0] == nil then
return session_ptr[0]
end
res = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u,
session_ptr, errmsg, openssl_error_code)

return ffi_gc(session_ptr[0], C.ngx_http_lua_ffi_ssl_free_session)
if res == FFI_ERROR then
if openssl_error_code[0] ~= 0 then
return nil, openssl_error_code[0] .. ": " .. ffi_str(errmsg[0])
end

assert(rc == FFI_AGAIN)
return nil, ffi_str(errmsg[0])
end

co_yield()
assert(res == FFI_OK)

rc = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u,
session_ptr, errmsg, openssl_error_code)
if reused_session == false then
return true
end

if session_ptr[0] == nil then
return session_ptr[0]
end

return ffi_gc(session_ptr[0], C.ngx_http_lua_ffi_ssl_free_session)
end


Expand Down
Loading