ruby_home 0.1.23 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8a06fe406af9a2d18a8cd3083e97dd84d10cf6ccc447ff3d46527ea5882c22d1
4
- data.tar.gz: 3893723e9f2ccf60561bc831a680b715f7216f32c1783bbc3b01bd290212d95a
3
+ metadata.gz: 6fb157eb26583418aa02ef31fe2b4ed2f8f40f8cb57e46f78e7603cdd531256b
4
+ data.tar.gz: 5ed756570a2e0f3992a0b4b53eb0521bc94d7c46f55e5318a80e6bf74da27304
5
5
  SHA512:
6
- metadata.gz: 613563189aaf7dedf4361b8bc8f3a59ed6b98527976c309ccd40ffafc6717cebfd1eb97d792507eddc751b151aaa5c1f047317038475e4a63c96c94da8012a7e
7
- data.tar.gz: ac7e43d2580b305a97d8b1354b940cb909cd2a4763bcf629898cb2a59cc817c53b049bd4745c597a80aa84a8072e3157583f1ee9975a4e542b00cb5c37d92d72
6
+ metadata.gz: a8732ab9a3caa1e9d61a371bbed0495eb523d6e0b1e0c248f1f7f1fc7d6ab6848ccaa8a5105a78214ad4375bb15df57e84df00d664cf4ad554bbab89a53e375d
7
+ data.tar.gz: 3f0b97b56c9785b1664a5fa7885407a37ae75bce6924f1b8c7dbee6b72ab3037b8037f5872c38e7fad6ed5bd88fa34f73f955a70138774b6b1fe18bfe218956a
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
+ dist: xenial
1
2
  cache: bundler
2
3
  language: ruby
3
4
  before_install:
@@ -1,11 +1,14 @@
1
1
  module RubyHome
2
2
  module HAP
3
3
  class HAPRequest < WEBrick::HTTPRequest
4
- attr_accessor :session
4
+ def initialize(config, session:)
5
+ @session = session
6
+ super(config)
7
+ end
5
8
 
6
9
  def meta_vars
7
10
  super.merge(
8
- { "REQUEST_SESSION" => session }
11
+ { "REQUEST_SESSION" => @session }
9
12
  )
10
13
  end
11
14
  end
@@ -1,90 +1,51 @@
1
1
  module RubyHome
2
2
  module HAP
3
- class Server
4
- def initialize(host, port)
5
- @port = port
6
- @host = host
7
- @selector = NIO::Selector.new
8
- @status = :running
9
- end
10
-
11
- attr_reader :port, :host
12
-
13
- def run
14
- puts "Listening on #{host}:#{port}"
15
- @server = TCPServer.new(host, port)
16
-
17
- monitor = @selector.register(@server, :r)
18
- monitor.value = proc { accept }
19
-
20
- loop do
21
- if @status == :running
22
- @selector.select { |monitor| monitor.value.call(monitor) }
23
- else
24
- @selector.close
3
+ class Server < ::WEBrick::HTTPServer
4
+ def run(sock)
5
+ session = Session.new(sock)
6
+
7
+ while true
8
+ req = HAPRequest.new(@config, session: session)
9
+ res = HAPResponse.new(@config)
10
+ begin
11
+ while true
12
+ break if sock.to_io.wait_readable(0.5)
13
+ break if @status != :Running
14
+ end
15
+ raise ::WEBrick::HTTPStatus::EOFError if @status != :Running
16
+ raise ::WEBrick::HTTPStatus::EOFError if sock.eof?
17
+
18
+ req.parse(session.parse)
19
+
20
+ res.request_method = req.request_method
21
+ res.request_uri = req.request_uri
22
+ res.request_http_version = req.http_version
23
+ res.keep_alive = req.keep_alive?
24
+
25
+ service(req, res)
26
+ rescue ::WEBrick::HTTPStatus::EOFError, ::WEBrick::HTTPStatus::RequestTimeout => ex
27
+ res.set_error(ex)
28
+ rescue ::WEBrick::HTTPStatus::Error => ex
29
+ @logger.error(ex.message)
30
+ res.set_error(ex)
31
+ rescue ::WEBrick::HTTPStatus::Status => ex
32
+ res.status = ex.code
33
+ rescue StandardError => ex
34
+ @logger.error(ex)
35
+ res.set_error(ex, true)
36
+ ensure
37
+ if req.request_line
38
+ if req.keep_alive? && res.keep_alive?
39
+ req.fixup()
40
+ end
41
+ res.send_response(session)
42
+ access_log(@config, req, res)
43
+ end
25
44
  end
45
+ break unless req.keep_alive?
46
+ break unless res.keep_alive?
26
47
  end
27
48
  end
28
-
29
- def shutdown
30
- @status = :shutdown
31
- end
32
-
33
- private
34
-
35
- SESSIONS = {}
36
-
37
- def accept
38
- socket = @server.accept
39
- monitor = @selector.register(socket, :r)
40
- monitor.value = proc { read(socket) }
41
- end
42
-
43
- def upstream
44
- @_upstream ||= HTTP::Application.run
45
- end
46
-
47
- def webrick_config
48
- @_webrick_config ||= WEBrick::Config::HTTP
49
- end
50
-
51
- def read(socket)
52
- return close(socket) if socket.eof?
53
-
54
- request = HAPRequest.new(webrick_config)
55
- response = HAPResponse.new(webrick_config)
56
-
57
- session = SESSIONS[socket] ||= Session.new(socket)
58
- request.session = session
59
-
60
- request.parse(session.parse)
61
- response.request_method = request.request_method
62
- response.request_uri = request.request_uri
63
- response.request_http_version = request.http_version
64
- response.keep_alive = request.keep_alive?
65
-
66
- upstream.service(request, response)
67
-
68
- if request.request_line
69
- if request.keep_alive? && response.keep_alive?
70
- request.fixup()
71
- end
72
- response.send_response(session)
73
- end
74
-
75
- return close(socket) unless request.keep_alive?
76
- return close(socket) unless response.keep_alive?
77
- rescue Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EHOSTUNREACH,
78
- Errno::EINVAL, Errno::ENOPROTOOPT, Errno::EPROTO, Errno::ETIMEDOUT
79
- close(socket)
80
- rescue EOFError
81
- close(socket)
82
- end
83
-
84
- def close(socket)
85
- @selector.deregister(socket)
86
- socket.close
87
- end
88
49
  end
89
50
  end
90
51
  end
@@ -0,0 +1,74 @@
1
+ module RubyHome
2
+ module HAP
3
+ class RackHandler < ::Rack::Handler::WEBrick
4
+ def self.run(app, options={})
5
+ @server = Server.new(options)
6
+ @server.mount "/", RackHandler, app
7
+ yield @server if block_given?
8
+ @server
9
+ end
10
+ end
11
+
12
+ class ServerHandler
13
+ def initialize(configuration: )
14
+ @configuration = configuration
15
+ end
16
+
17
+ def run
18
+ server.start
19
+ end
20
+
21
+ def shutdown
22
+ server.shutdown
23
+ end
24
+
25
+ def server
26
+ @server ||= RackHandler.run(
27
+ HTTP::Application.rack_builder,
28
+ server_options
29
+ )
30
+ end
31
+
32
+ def server_options
33
+ {
34
+ Port: port,
35
+ Host: bind_address,
36
+ ServerSoftware: 'RubyHome',
37
+ Logger: server_logger,
38
+ AccessLog: access_logger
39
+ }
40
+ end
41
+
42
+ def server_logger
43
+ if ENV['DEBUG']
44
+ WEBrick::Log::new(STDOUT, WEBrick::BasicLog::DEBUG)
45
+ else
46
+ WEBrick::Log::new("/dev/null", WEBrick::BasicLog::WARN)
47
+ end
48
+ end
49
+
50
+ def access_logger
51
+ if ENV['DEBUG']
52
+ [
53
+ [ STDOUT, WEBrick::AccessLog::COMMON_LOG_FORMAT ],
54
+ [ STDOUT, WEBrick::AccessLog::REFERER_LOG_FORMAT ]
55
+ ]
56
+ else
57
+ []
58
+ end
59
+ end
60
+
61
+ def bind_address
62
+ configuration.host
63
+ end
64
+
65
+ def port
66
+ configuration.port
67
+ end
68
+
69
+ attr_reader :configuration
70
+ end
71
+ end
72
+ end
73
+
74
+
@@ -3,23 +3,14 @@ Dir[File.dirname(__FILE__) + '/controllers/*.rb'].each { |file| require file }
3
3
  module RubyHome
4
4
  module HTTP
5
5
  class Application
6
- class << self
7
- def run
8
- ::Rack::Handler::WEBrick.new(
9
- ::WEBrick::HTTPServer.new(DoNotListen: true),
10
- rack_builder
11
- )
12
- end
13
-
14
- def rack_builder
15
- ::Rack::Builder.new do
16
- map('/accessories') { run AccessoriesController }
17
- map('/characteristics') { run CharacteristicsController }
18
- map('/identify') { run IdentifyController }
19
- map('/pair-setup') { run PairSetupsController }
20
- map('/pair-verify') { run PairVerifiesController }
21
- map('/pairings') { run PairingsController }
22
- end
6
+ def self.rack_builder
7
+ ::Rack::Builder.new do
8
+ map('/accessories') { run AccessoriesController }
9
+ map('/characteristics') { run CharacteristicsController }
10
+ map('/identify') { run IdentifyController }
11
+ map('/pair-setup') { run PairSetupsController }
12
+ map('/pair-verify') { run PairVerifiesController }
13
+ map('/pairings') { run PairingsController }
23
14
  end
24
15
  end
25
16
  end
@@ -1,3 +1,3 @@
1
1
  module RubyHome
2
- VERSION = '0.1.23'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/ruby_home.rb CHANGED
@@ -2,7 +2,6 @@ require 'bindata'
2
2
  require 'dnssd'
3
3
  require 'facets/hash/slice'
4
4
  require 'hkdf'
5
- require 'nio'
6
5
  require 'oj'
7
6
  require 'rack'
8
7
  require 'rbnacl'
@@ -16,7 +15,15 @@ require 'wisper'
16
15
  require 'yaml'
17
16
 
18
17
  module RubyHome
19
- Dir[File.dirname(__FILE__) + '/ruby_home/**/*.rb'].each { |file| require file }
18
+ [
19
+ '/ruby_home/hap/**/*.rb',
20
+ '/ruby_home/http/**/*.rb',
21
+ '/ruby_home/factories/**/*.rb',
22
+ '/ruby_home/dns/**/*.rb',
23
+ '/ruby_home/*.rb'
24
+ ].each do |pattern|
25
+ Dir[File.dirname(__FILE__) + pattern].each { |file| require file }
26
+ end
20
27
 
21
28
  class << self
22
29
  def configuration
@@ -58,7 +65,7 @@ module RubyHome
58
65
  end
59
66
 
60
67
  def hap_server
61
- @_hap_server ||= HAP::Server.new(configuration.host, configuration.port)
68
+ @_hap_server ||= HAP::ServerHandler.new(configuration: configuration)
62
69
  end
63
70
 
64
71
  def greet
data/rubyhome.gemspec CHANGED
@@ -30,7 +30,6 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency 'dnssd', '~> 3.0'
31
31
  spec.add_dependency 'facets', '~> 3.1'
32
32
  spec.add_dependency 'hkdf', '~> 0.3.0'
33
- spec.add_dependency 'nio4r', '~> 2.3', '>= 2.3.1'
34
33
  spec.add_dependency 'oj', '3.7.9'
35
34
  spec.add_dependency 'rbnacl', '~> 6.0'
36
35
  spec.add_dependency 'ruby_home-srp', '~> 1.3'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_home
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.23
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl Entwistle
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-28 00:00:00.000000000 Z
11
+ date: 2019-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bindata
@@ -72,26 +72,6 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: 0.3.0
75
- - !ruby/object:Gem::Dependency
76
- name: nio4r
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '2.3'
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- version: 2.3.1
85
- type: :runtime
86
- prerelease: false
87
- version_requirements: !ruby/object:Gem::Requirement
88
- requirements:
89
- - - "~>"
90
- - !ruby/object:Gem::Version
91
- version: '2.3'
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- version: 2.3.1
95
75
  - !ruby/object:Gem::Dependency
96
76
  name: oj
97
77
  requirement: !ruby/object:Gem::Requirement
@@ -296,6 +276,7 @@ files:
296
276
  - lib/ruby_home/hap/hap_request.rb
297
277
  - lib/ruby_home/hap/hap_response.rb
298
278
  - lib/ruby_home/hap/server.rb
279
+ - lib/ruby_home/hap/server_handler.rb
299
280
  - lib/ruby_home/hap/session.rb
300
281
  - lib/ruby_home/hap/values/base_value.rb
301
282
  - lib/ruby_home/hap/values/bool_value.rb