# HG changeset patch # User jbe # Date 1427026794 -3600 # Node ID aaf67ef45c2272c19440d644438a0c7bce7d7081 # Parent 042bb4854aa687be092398378d4a67f93fbe60c3 Timeout management diff -r 042bb4854aa6 -r aaf67ef45c22 moonbridge_http.lua --- a/moonbridge_http.lua Sun Mar 22 11:56:47 2015 +0100 +++ b/moonbridge_http.lua Sun Mar 22 13:19:54 2015 +0100 @@ -181,10 +181,29 @@ -- desired chunk sizes: local input_chunk_size = options.maximum_input_chunk_size or options.chunk_size or 16384 local output_chunk_size = options.minimum_output_chunk_size or options.chunk_size or 1024 + -- timeouts: + local request_header_timeout = options.http_request_header_timeout + local request_body_timeout = options.http_request_body_timeout + local request_timeout = options.http_request_timeout + local response_timeout = options.http_timeout + if request_header_timeout == nil then + request_header_timeout = 60 + end + if response_timeout == nil then + response_timeout = 60 + end -- return connect handler: return function(socket) local survive = true -- set to false if process shall be terminated later repeat + -- timeout management: + if request_header_timeout then + timeout(request_header_timeout) + elseif request_timeout then + timeout(request_timeout) + else + timeout(0) + end -- process named arguments "request_header_size_limit" and "request_body_size_limit": local remaining_header_size_limit = options.request_header_size_limit or 1024*1024 local remaining_body_size_limit = options.request_body_size_limit or 64*1024*1024 @@ -970,6 +989,15 @@ request.cookies[decode_uri(rawkey)] = decode_uri(rawvalue) end end + -- timeout management: + if request_body_timeout then + timeout(request_body_timeout) + request:process_request_body() + elseif request_timeout then + timeout(request_timeout) + request:process_request_body() + end + timeout(response_timeout or 0) -- call underlying handler and remember boolean result: if handler(request) ~= true then survive = false end -- finish request (unless already done by underlying handler):