ruby_home 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +64 -5
- data/bin/rubyhome +4 -4
- data/lib/ruby_home/accessory_info.rb +45 -30
- data/lib/ruby_home/factories/characteristic_factory.rb +27 -19
- data/lib/ruby_home/factories/default_values/float_value.rb +1 -1
- data/lib/ruby_home/factories/service_factory.rb +89 -0
- data/lib/ruby_home/factories/templates/characteristic_template.rb +6 -2
- data/lib/ruby_home/hap/accessory.rb +24 -3
- data/lib/ruby_home/hap/accessory_collection.rb +38 -0
- data/lib/ruby_home/hap/characteristic.rb +25 -19
- data/lib/ruby_home/hap/crypto/session_key.rb +31 -0
- data/lib/ruby_home/hap/ev_response.rb +64 -0
- data/lib/ruby_home/{http → hap}/hap_request.rb +12 -5
- data/lib/ruby_home/{http → hap}/hap_response.rb +7 -4
- data/lib/ruby_home/hap/server.rb +81 -0
- data/lib/ruby_home/hap/service.rb +11 -15
- data/lib/ruby_home/http/application.rb +17 -22
- data/lib/ruby_home/http/controllers/application_controller.rb +8 -4
- data/lib/ruby_home/http/controllers/characteristics_controller.rb +19 -4
- data/lib/ruby_home/http/controllers/pair_verifies_controller.rb +3 -5
- data/lib/ruby_home/http/serializers/object_serializer.rb +1 -1
- data/lib/ruby_home/http/services/socket_notifier.rb +40 -0
- data/lib/ruby_home/http/services/start_srp_service.rb +36 -34
- data/lib/ruby_home/http/services/verify_srp_service.rb +55 -53
- data/lib/ruby_home/identifier_cache.rb +22 -49
- data/lib/ruby_home/persistable.rb +36 -0
- data/lib/ruby_home/version.rb +1 -1
- data/lib/ruby_home.rb +14 -5
- data/rubyhome.gemspec +3 -3
- metadata +35 -38
- data/lib/ruby_home/factories/accessory_factory.rb +0 -73
- data/lib/ruby_home/http/hap_server.rb +0 -60
- data/lib/ruby_home/rack/handler/hap_server.rb +0 -21
- data/lib/ruby_home/yaml_record.rb +0 -440
    
        data/lib/ruby_home.rb
    CHANGED
    
    | @@ -1,14 +1,19 @@ | |
| 1 | 
            +
            require 'active_support'
         | 
| 2 | 
            +
            require 'active_support/core_ext/hash'
         | 
| 1 3 | 
             
            require 'bindata'
         | 
| 2 4 | 
             
            require 'dnssd'
         | 
| 3 5 | 
             
            require 'hkdf'
         | 
| 6 | 
            +
            require 'nio'
         | 
| 4 7 | 
             
            require 'oj'
         | 
| 5 8 | 
             
            require 'rack'
         | 
| 6 9 | 
             
            require 'rbnacl/libsodium'
         | 
| 7 | 
            -
            require 'request_store'
         | 
| 8 10 | 
             
            require 'ruby_home-srp'
         | 
| 11 | 
            +
            require 'securerandom'
         | 
| 9 12 | 
             
            require 'sinatra/base'
         | 
| 13 | 
            +
            require 'socket'
         | 
| 10 14 | 
             
            require 'webrick'
         | 
| 11 15 | 
             
            require 'wisper'
         | 
| 16 | 
            +
            require 'yaml'
         | 
| 12 17 |  | 
| 13 18 | 
             
            module RubyHome
         | 
| 14 19 | 
             
              Dir[File.dirname(__FILE__) + '/ruby_home/**/*.rb'].each { |file| require file }
         | 
| @@ -24,7 +29,7 @@ module RubyHome | |
| 24 29 |  | 
| 25 30 | 
             
                def start
         | 
| 26 31 | 
             
                  threads << Thread.start { dns_service.register }
         | 
| 27 | 
            -
                  threads << Thread.start {  | 
| 32 | 
            +
                  threads << Thread.start { hap_server.run }
         | 
| 28 33 | 
             
                  threads.each(&:join)
         | 
| 29 34 | 
             
                end
         | 
| 30 35 |  | 
| @@ -37,11 +42,15 @@ module RubyHome | |
| 37 42 | 
             
                end
         | 
| 38 43 |  | 
| 39 44 | 
             
                def dns_service
         | 
| 40 | 
            -
                  @@_dns_service ||=  | 
| 45 | 
            +
                  @@_dns_service ||= DNS::Service.new(hap_server.port)
         | 
| 41 46 | 
             
                end
         | 
| 42 47 |  | 
| 43 | 
            -
                def  | 
| 44 | 
            -
                  @@ | 
| 48 | 
            +
                def hap_server
         | 
| 49 | 
            +
                  @@_hap_server ||= HAP::Server.new('0.0.0.0', 4567, socket_store)
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                def socket_store
         | 
| 53 | 
            +
                  @@_socket_store ||= {}
         | 
| 45 54 | 
             
                end
         | 
| 46 55 |  | 
| 47 56 | 
             
                def greet
         | 
    
        data/rubyhome.gemspec
    CHANGED
    
    | @@ -29,13 +29,13 @@ Gem::Specification.new do |spec| | |
| 29 29 | 
             
              spec.add_dependency 'bindata', '~> 2.4', '>= 2.4.3'
         | 
| 30 30 | 
             
              spec.add_dependency 'dnssd', '~> 3.0'
         | 
| 31 31 | 
             
              spec.add_dependency 'hkdf', '~> 0.3.0'
         | 
| 32 | 
            +
              spec.add_dependency 'nio4r', '~> 2.3', '>= 2.3.1'
         | 
| 32 33 | 
             
              spec.add_dependency 'oj', '~> 3.4'
         | 
| 33 34 | 
             
              spec.add_dependency 'rbnacl', '~> 5.0'
         | 
| 34 35 | 
             
              spec.add_dependency 'rbnacl-libsodium', '~> 1.0', '>= 1.0.16'
         | 
| 35 | 
            -
              spec.add_dependency 'request_store', '~> 1.4', '>= 1.4.1'
         | 
| 36 36 | 
             
              spec.add_dependency 'ruby_home-srp', '~> 1.2'
         | 
| 37 | 
            -
              spec.add_dependency 'sinatra', '2.0. | 
| 38 | 
            -
              spec.add_dependency 'wisper', '~>  | 
| 37 | 
            +
              spec.add_dependency 'sinatra', '2.0.4'
         | 
| 38 | 
            +
              spec.add_dependency 'wisper', '~> 2.0'
         | 
| 39 39 | 
             
              spec.add_development_dependency 'bundler', '~> 1.16'
         | 
| 40 40 | 
             
              spec.add_development_dependency 'byebug', '~> 10.0'
         | 
| 41 41 | 
             
              spec.add_development_dependency 'plist', '~> 3.4'
         | 
    
        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. | 
| 4 | 
            +
              version: 0.1.7
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Karl Entwistle
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018- | 
| 11 | 
            +
            date: 2018-10-28 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -73,73 +73,73 @@ dependencies: | |
| 73 73 | 
             
                  - !ruby/object:Gem::Version
         | 
| 74 74 | 
             
                    version: 0.3.0
         | 
| 75 75 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 76 | 
            -
              name:  | 
| 76 | 
            +
              name: nio4r
         | 
| 77 77 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 78 78 | 
             
                requirements:
         | 
| 79 79 | 
             
                - - "~>"
         | 
| 80 80 | 
             
                  - !ruby/object:Gem::Version
         | 
| 81 | 
            -
                    version: '3 | 
| 81 | 
            +
                    version: '2.3'
         | 
| 82 | 
            +
                - - ">="
         | 
| 83 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 84 | 
            +
                    version: 2.3.1
         | 
| 82 85 | 
             
              type: :runtime
         | 
| 83 86 | 
             
              prerelease: false
         | 
| 84 87 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 85 88 | 
             
                requirements:
         | 
| 86 89 | 
             
                - - "~>"
         | 
| 87 90 | 
             
                  - !ruby/object:Gem::Version
         | 
| 88 | 
            -
                    version: '3 | 
| 91 | 
            +
                    version: '2.3'
         | 
| 92 | 
            +
                - - ">="
         | 
| 93 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 94 | 
            +
                    version: 2.3.1
         | 
| 89 95 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 90 | 
            -
              name:  | 
| 96 | 
            +
              name: oj
         | 
| 91 97 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 92 98 | 
             
                requirements:
         | 
| 93 99 | 
             
                - - "~>"
         | 
| 94 100 | 
             
                  - !ruby/object:Gem::Version
         | 
| 95 | 
            -
                    version: ' | 
| 101 | 
            +
                    version: '3.4'
         | 
| 96 102 | 
             
              type: :runtime
         | 
| 97 103 | 
             
              prerelease: false
         | 
| 98 104 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 99 105 | 
             
                requirements:
         | 
| 100 106 | 
             
                - - "~>"
         | 
| 101 107 | 
             
                  - !ruby/object:Gem::Version
         | 
| 102 | 
            -
                    version: ' | 
| 108 | 
            +
                    version: '3.4'
         | 
| 103 109 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 104 | 
            -
              name: rbnacl | 
| 110 | 
            +
              name: rbnacl
         | 
| 105 111 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 106 112 | 
             
                requirements:
         | 
| 107 113 | 
             
                - - "~>"
         | 
| 108 114 | 
             
                  - !ruby/object:Gem::Version
         | 
| 109 | 
            -
                    version: ' | 
| 110 | 
            -
                - - ">="
         | 
| 111 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 112 | 
            -
                    version: 1.0.16
         | 
| 115 | 
            +
                    version: '5.0'
         | 
| 113 116 | 
             
              type: :runtime
         | 
| 114 117 | 
             
              prerelease: false
         | 
| 115 118 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 116 119 | 
             
                requirements:
         | 
| 117 120 | 
             
                - - "~>"
         | 
| 118 121 | 
             
                  - !ruby/object:Gem::Version
         | 
| 119 | 
            -
                    version: ' | 
| 120 | 
            -
                - - ">="
         | 
| 121 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 122 | 
            -
                    version: 1.0.16
         | 
| 122 | 
            +
                    version: '5.0'
         | 
| 123 123 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 124 | 
            -
              name:  | 
| 124 | 
            +
              name: rbnacl-libsodium
         | 
| 125 125 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 126 126 | 
             
                requirements:
         | 
| 127 127 | 
             
                - - "~>"
         | 
| 128 128 | 
             
                  - !ruby/object:Gem::Version
         | 
| 129 | 
            -
                    version: '1. | 
| 129 | 
            +
                    version: '1.0'
         | 
| 130 130 | 
             
                - - ">="
         | 
| 131 131 | 
             
                  - !ruby/object:Gem::Version
         | 
| 132 | 
            -
                    version: 1. | 
| 132 | 
            +
                    version: 1.0.16
         | 
| 133 133 | 
             
              type: :runtime
         | 
| 134 134 | 
             
              prerelease: false
         | 
| 135 135 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 136 136 | 
             
                requirements:
         | 
| 137 137 | 
             
                - - "~>"
         | 
| 138 138 | 
             
                  - !ruby/object:Gem::Version
         | 
| 139 | 
            -
                    version: '1. | 
| 139 | 
            +
                    version: '1.0'
         | 
| 140 140 | 
             
                - - ">="
         | 
| 141 141 | 
             
                  - !ruby/object:Gem::Version
         | 
| 142 | 
            -
                    version: 1. | 
| 142 | 
            +
                    version: 1.0.16
         | 
| 143 143 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 144 144 | 
             
              name: ruby_home-srp
         | 
| 145 145 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -160,34 +160,28 @@ dependencies: | |
| 160 160 | 
             
                requirements:
         | 
| 161 161 | 
             
                - - '='
         | 
| 162 162 | 
             
                  - !ruby/object:Gem::Version
         | 
| 163 | 
            -
                    version: 2.0. | 
| 163 | 
            +
                    version: 2.0.4
         | 
| 164 164 | 
             
              type: :runtime
         | 
| 165 165 | 
             
              prerelease: false
         | 
| 166 166 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 167 167 | 
             
                requirements:
         | 
| 168 168 | 
             
                - - '='
         | 
| 169 169 | 
             
                  - !ruby/object:Gem::Version
         | 
| 170 | 
            -
                    version: 2.0. | 
| 170 | 
            +
                    version: 2.0.4
         | 
| 171 171 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 172 172 | 
             
              name: wisper
         | 
| 173 173 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 174 174 | 
             
                requirements:
         | 
| 175 175 | 
             
                - - "~>"
         | 
| 176 176 | 
             
                  - !ruby/object:Gem::Version
         | 
| 177 | 
            -
                    version: ' | 
| 178 | 
            -
                - - ">="
         | 
| 179 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 180 | 
            -
                    version: 1.6.1
         | 
| 177 | 
            +
                    version: '2.0'
         | 
| 181 178 | 
             
              type: :runtime
         | 
| 182 179 | 
             
              prerelease: false
         | 
| 183 180 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 184 181 | 
             
                requirements:
         | 
| 185 182 | 
             
                - - "~>"
         | 
| 186 183 | 
             
                  - !ruby/object:Gem::Version
         | 
| 187 | 
            -
                    version: ' | 
| 188 | 
            -
                - - ">="
         | 
| 189 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 190 | 
            -
                    version: 1.6.1
         | 
| 184 | 
            +
                    version: '2.0'
         | 
| 191 185 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 192 186 | 
             
              name: bundler
         | 
| 193 187 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -302,7 +296,6 @@ files: | |
| 302 296 | 
             
            - lib/ruby_home/device_id.rb
         | 
| 303 297 | 
             
            - lib/ruby_home/dns/service.rb
         | 
| 304 298 | 
             
            - lib/ruby_home/dns/text_record.rb
         | 
| 305 | 
            -
            - lib/ruby_home/factories/accessory_factory.rb
         | 
| 306 299 | 
             
            - lib/ruby_home/factories/characteristic_factory.rb
         | 
| 307 300 | 
             
            - lib/ruby_home/factories/default_values/base_value.rb
         | 
| 308 301 | 
             
            - lib/ruby_home/factories/default_values/bool_value.rb
         | 
| @@ -312,15 +305,22 @@ files: | |
| 312 305 | 
             
            - lib/ruby_home/factories/default_values/string_value.rb
         | 
| 313 306 | 
             
            - lib/ruby_home/factories/default_values/uint32_value.rb
         | 
| 314 307 | 
             
            - lib/ruby_home/factories/default_values/uint8_value.rb
         | 
| 308 | 
            +
            - lib/ruby_home/factories/service_factory.rb
         | 
| 315 309 | 
             
            - lib/ruby_home/factories/templates/characteristic_template.rb
         | 
| 316 310 | 
             
            - lib/ruby_home/factories/templates/service_template.rb
         | 
| 317 311 | 
             
            - lib/ruby_home/greeter.rb
         | 
| 318 312 | 
             
            - lib/ruby_home/hap/accessory.rb
         | 
| 313 | 
            +
            - lib/ruby_home/hap/accessory_collection.rb
         | 
| 319 314 | 
             
            - lib/ruby_home/hap/characteristic.rb
         | 
| 320 315 | 
             
            - lib/ruby_home/hap/crypto/chacha20poly1305.rb
         | 
| 321 316 | 
             
            - lib/ruby_home/hap/crypto/hkdf.rb
         | 
| 317 | 
            +
            - lib/ruby_home/hap/crypto/session_key.rb
         | 
| 318 | 
            +
            - lib/ruby_home/hap/ev_response.rb
         | 
| 319 | 
            +
            - lib/ruby_home/hap/hap_request.rb
         | 
| 320 | 
            +
            - lib/ruby_home/hap/hap_response.rb
         | 
| 322 321 | 
             
            - lib/ruby_home/hap/http_decryption.rb
         | 
| 323 322 | 
             
            - lib/ruby_home/hap/http_encryption.rb
         | 
| 323 | 
            +
            - lib/ruby_home/hap/server.rb
         | 
| 324 324 | 
             
            - lib/ruby_home/hap/service.rb
         | 
| 325 325 | 
             
            - lib/ruby_home/hap/tlv.rb
         | 
| 326 326 | 
             
            - lib/ruby_home/hex_helper.rb
         | 
| @@ -331,21 +331,18 @@ files: | |
| 331 331 | 
             
            - lib/ruby_home/http/controllers/pair_setups_controller.rb
         | 
| 332 332 | 
             
            - lib/ruby_home/http/controllers/pair_verifies_controller.rb
         | 
| 333 333 | 
             
            - lib/ruby_home/http/controllers/pairings_controller.rb
         | 
| 334 | 
            -
            - lib/ruby_home/http/hap_request.rb
         | 
| 335 | 
            -
            - lib/ruby_home/http/hap_response.rb
         | 
| 336 | 
            -
            - lib/ruby_home/http/hap_server.rb
         | 
| 337 334 | 
             
            - lib/ruby_home/http/serializers/accessory_serializer.rb
         | 
| 338 335 | 
             
            - lib/ruby_home/http/serializers/characteristic_serializer.rb
         | 
| 339 336 | 
             
            - lib/ruby_home/http/serializers/characteristic_value_serializer.rb
         | 
| 340 337 | 
             
            - lib/ruby_home/http/serializers/object_serializer.rb
         | 
| 341 338 | 
             
            - lib/ruby_home/http/serializers/service_serializer.rb
         | 
| 339 | 
            +
            - lib/ruby_home/http/services/socket_notifier.rb
         | 
| 342 340 | 
             
            - lib/ruby_home/http/services/start_srp_service.rb
         | 
| 343 341 | 
             
            - lib/ruby_home/http/services/verify_srp_service.rb
         | 
| 344 342 | 
             
            - lib/ruby_home/identifier_cache.rb
         | 
| 345 343 | 
             
            - lib/ruby_home/password.rb
         | 
| 346 | 
            -
            - lib/ruby_home/ | 
| 344 | 
            +
            - lib/ruby_home/persistable.rb
         | 
| 347 345 | 
             
            - lib/ruby_home/version.rb
         | 
| 348 | 
            -
            - lib/ruby_home/yaml_record.rb
         | 
| 349 346 | 
             
            - rubyhome.gemspec
         | 
| 350 347 | 
             
            - sbin/characteristic_generator.rb
         | 
| 351 348 | 
             
            - sbin/service_generator.rb
         | 
| @@ -1,73 +0,0 @@ | |
| 1 | 
            -
            module RubyHome
         | 
| 2 | 
            -
              class AccessoryFactory
         | 
| 3 | 
            -
                def self.create(service_name, characteristics: {}, **options)
         | 
| 4 | 
            -
                  new(service_name, options, characteristics).create
         | 
| 5 | 
            -
                end
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def initialize(service_name, accessory_options, characteristic_options)
         | 
| 8 | 
            -
                  @service_name = service_name
         | 
| 9 | 
            -
                  @accessory_options = accessory_options
         | 
| 10 | 
            -
                  @characteristic_options = characteristic_options
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                def create
         | 
| 14 | 
            -
                  yield service if block_given?
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                  create_accessory_information
         | 
| 17 | 
            -
                  service.save
         | 
| 18 | 
            -
                  create_required_characteristics
         | 
| 19 | 
            -
                  create_optional_characteristics
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  service
         | 
| 22 | 
            -
                end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                private
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                  attr_reader :service_name, :accessory_options, :characteristic_options
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  def template
         | 
| 29 | 
            -
                    @template ||= ServiceTemplate.find_by(name: service_name.to_sym)
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                  def create_accessory_information
         | 
| 33 | 
            -
                    unless service_name == :accessory_information
         | 
| 34 | 
            -
                      AccessoryFactory.create(:accessory_information, accessory_information_params)
         | 
| 35 | 
            -
                    end
         | 
| 36 | 
            -
                  end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                  def accessory_information_params
         | 
| 39 | 
            -
                    accessory_options.merge(accessory: service.accessory)
         | 
| 40 | 
            -
                  end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                  def create_required_characteristics
         | 
| 43 | 
            -
                    template.required_characteristics.map do |characteristic_template|
         | 
| 44 | 
            -
                      CharacteristicFactory.create(characteristic_template.name, service: service) do |characteristic|
         | 
| 45 | 
            -
                        value = characteristic_options[characteristic.name]
         | 
| 46 | 
            -
                        next unless value
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                        characteristic.value = value
         | 
| 49 | 
            -
                      end
         | 
| 50 | 
            -
                    end
         | 
| 51 | 
            -
                  end
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                  def create_optional_characteristics
         | 
| 54 | 
            -
                    template.optional_characteristics.map do |characteristic_template|
         | 
| 55 | 
            -
                      value = characteristic_options[characteristic_template.name]
         | 
| 56 | 
            -
                      next unless value
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                      CharacteristicFactory.create(characteristic_template.name, service: service) do |characteristic|
         | 
| 59 | 
            -
                        characteristic.value = value
         | 
| 60 | 
            -
                      end
         | 
| 61 | 
            -
                    end
         | 
| 62 | 
            -
                  end
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                  def service
         | 
| 65 | 
            -
                    @service ||= Service.new(service_params)
         | 
| 66 | 
            -
                  end
         | 
| 67 | 
            -
             | 
| 68 | 
            -
                  def service_params
         | 
| 69 | 
            -
                    accessory_options[:accessory] ||= Accessory.new
         | 
| 70 | 
            -
                    accessory_options.merge(template.to_hash)
         | 
| 71 | 
            -
                  end
         | 
| 72 | 
            -
              end
         | 
| 73 | 
            -
            end
         | 
| @@ -1,60 +0,0 @@ | |
| 1 | 
            -
            module RubyHome
         | 
| 2 | 
            -
              module HTTP
         | 
| 3 | 
            -
                class HAPServer < WEBrick::HTTPServer
         | 
| 4 | 
            -
                  def run(socket)
         | 
| 5 | 
            -
                    while true
         | 
| 6 | 
            -
                      res = RubyHome::HTTP::HAPResponse.new(@config)
         | 
| 7 | 
            -
                      req = RubyHome::HTTP::HAPRequest.new(@config)
         | 
| 8 | 
            -
                      server = self
         | 
| 9 | 
            -
                      begin
         | 
| 10 | 
            -
                        timeout = @config[:RequestTimeout]
         | 
| 11 | 
            -
                        while timeout > 0
         | 
| 12 | 
            -
                          break if socket.to_io.wait_readable(0.5)
         | 
| 13 | 
            -
                          break if @status != :Running
         | 
| 14 | 
            -
                          timeout -= 0.5
         | 
| 15 | 
            -
                        end
         | 
| 16 | 
            -
                        raise WEBrick::HTTPStatus::EOFError if timeout <= 0 || @status != :Running
         | 
| 17 | 
            -
                        raise WEBrick::HTTPStatus::EOFError if socket.eof?
         | 
| 18 | 
            -
                        req.parse(socket)
         | 
| 19 | 
            -
                        res.received_encrypted_request = req.received_encrypted_request?
         | 
| 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 | 
            -
                        server = lookup_server(req) || self
         | 
| 25 | 
            -
                        if callback = server[:RequestCallback]
         | 
| 26 | 
            -
                          callback.call(req, res)
         | 
| 27 | 
            -
                        elsif callback = server[:RequestHandler]
         | 
| 28 | 
            -
                          msg = ':RequestHandler is deprecated, please use :RequestCallback'
         | 
| 29 | 
            -
                          @logger.warn(msg)
         | 
| 30 | 
            -
                          callback.call(req, res)
         | 
| 31 | 
            -
                        end
         | 
| 32 | 
            -
                        server.service(req, res)
         | 
| 33 | 
            -
                      rescue WEBrick::HTTPStatus::EOFError, WEBrick::HTTPStatus::RequestTimeout => ex
         | 
| 34 | 
            -
                        res.set_error(ex)
         | 
| 35 | 
            -
                      rescue WEBrick::HTTPStatus::Error => ex
         | 
| 36 | 
            -
                        @logger.error(ex.message)
         | 
| 37 | 
            -
                        res.set_error(ex)
         | 
| 38 | 
            -
                      rescue WEBrick::HTTPStatus::Status => ex
         | 
| 39 | 
            -
                        res.status = ex.code
         | 
| 40 | 
            -
                      rescue StandardError => ex
         | 
| 41 | 
            -
                        @logger.error(ex)
         | 
| 42 | 
            -
                        res.set_error(ex, true)
         | 
| 43 | 
            -
                      ensure
         | 
| 44 | 
            -
                        if req.request_line
         | 
| 45 | 
            -
                          if req.keep_alive? && res.keep_alive?
         | 
| 46 | 
            -
                            req.fixup()
         | 
| 47 | 
            -
                          end
         | 
| 48 | 
            -
                          res.send_response(socket)
         | 
| 49 | 
            -
                          server.access_log(@config, req, res)
         | 
| 50 | 
            -
                        end
         | 
| 51 | 
            -
                      end
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                      break if @http_version < '1.1'
         | 
| 54 | 
            -
                      break unless req.keep_alive?
         | 
| 55 | 
            -
                      break unless res.keep_alive?
         | 
| 56 | 
            -
                    end
         | 
| 57 | 
            -
                  end
         | 
| 58 | 
            -
                end
         | 
| 59 | 
            -
              end
         | 
| 60 | 
            -
            end
         | 
| @@ -1,21 +0,0 @@ | |
| 1 | 
            -
            module RubyHome
         | 
| 2 | 
            -
              module Rack
         | 
| 3 | 
            -
                module Handler
         | 
| 4 | 
            -
                  class HAPServer < ::Rack::Handler::WEBrick
         | 
| 5 | 
            -
                    def self.run(app, options={})
         | 
| 6 | 
            -
                      environment  = ENV['RACK_ENV'] || 'development'
         | 
| 7 | 
            -
                      default_host = environment == 'development' ? 'localhost' : nil
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                      options[:BindAddress] = options.delete(:Host) || default_host
         | 
| 10 | 
            -
                      options[:Port] ||= 8080
         | 
| 11 | 
            -
                      options[:Logger] = WEBrick::Log.new("/dev/null")
         | 
| 12 | 
            -
                      options[:AccessLog] = []
         | 
| 13 | 
            -
                      @server = HTTP::HAPServer.new(options)
         | 
| 14 | 
            -
                      @server.mount '/', Handler::HAPServer, app
         | 
| 15 | 
            -
                      yield @server  if block_given?
         | 
| 16 | 
            -
                      @server.start
         | 
| 17 | 
            -
                    end
         | 
| 18 | 
            -
                  end
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
            end
         |