4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/ruby_home/hap/server.rb', line 4
def run(sock)
session = Session.new(sock)
while true
req = HAPRequest.new(@config, session: session)
res = HAPResponse.new(@config)
begin
while true
break if sock.to_io.wait_readable(0.5)
break if @status != :Running
end
raise ::WEBrick::HTTPStatus::EOFError if @status != :Running
raise ::WEBrick::HTTPStatus::EOFError if sock.eof?
req.parse(session.parse)
res.request_method = req.request_method
res.request_uri = req.request_uri
res.request_http_version = req.http_version
res.keep_alive = req.keep_alive?
service(req, res)
rescue ::WEBrick::HTTPStatus::EOFError, ::WEBrick::HTTPStatus::RequestTimeout => ex
res.set_error(ex)
rescue ::WEBrick::HTTPStatus::Error => ex
@logger.error(ex.message)
res.set_error(ex)
rescue ::WEBrick::HTTPStatus::Status => ex
res.status = ex.code
rescue StandardError => ex
@logger.error(ex)
res.set_error(ex, true)
ensure
if req.request_line
if req.keep_alive? && res.keep_alive?
req.fixup()
end
res.send_response(session)
access_log(@config, req, res)
end
end
break unless req.keep_alive?
break unless res.keep_alive?
end
end
|