easy_upnp 1.1.12 → 1.2.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6da8d74ad1d393322eabbd9230e30806db4f3d98c7ccbb80444335f8969e1a73
|
4
|
+
data.tar.gz: ca9b39475ba3a8aacb598361ca2d0e56185cd15b84e03ba35921aa4fb2aff9fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 460fae3cfe1f5c2e29420668d45d9a866599aaf959e730129d07af12167bce2409622cc5035e52d2771b18511376d2d7ef977f69174bbc281b7b426120f95aaf
|
7
|
+
data.tar.gz: d64e502edc4b242ecf80262533fe8314cb819dfaa2cfc17324869690198035ef0b209c67fbe191ee6cfdcc8ec58c6fce4557075fcd1309cf78682830ae3534c0
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
# easy_upnp
|
1
|
+
# easy_upnp [![Gem Version][shield-gem]][info-gem] [![Build Status][shield-travis]][info-travis]
|
2
|
+
|
2
3
|
A super simple UPnP control point client for Ruby
|
3
4
|
|
4
5
|
## Installing
|
@@ -26,7 +27,7 @@ The `search` method takes one argument -- the "search target". This controls a h
|
|
26
27
|
```ruby
|
27
28
|
require 'easy_upnp'
|
28
29
|
|
29
|
-
searcher = EasyUpnp::SsdpSearcher.new
|
30
|
+
searcher = EasyUpnp::SsdpSearcher.new
|
30
31
|
devices = searcher.search 'ssdp:all'
|
31
32
|
```
|
32
33
|
|
@@ -79,8 +80,8 @@ By default, logs will be printed to `$stdout` at the `:error` level. To change t
|
|
79
80
|
|
80
81
|
```ruby
|
81
82
|
service = client.service(
|
82
|
-
'urn:schemas-upnp-org:service:ContentDirectory:1',
|
83
|
-
log_enabled: true,
|
83
|
+
'urn:schemas-upnp-org:service:ContentDirectory:1',
|
84
|
+
log_enabled: true,
|
84
85
|
log_level: :info
|
85
86
|
)
|
86
87
|
|
@@ -164,7 +165,7 @@ There are two ways you can subscribe to events with easy_upnp:
|
|
164
165
|
1. Registering a custom HTTP endpoint.
|
165
166
|
2. Providing a callback `lambda` or `Proc` which is called each time an event is fired.
|
166
167
|
|
167
|
-
In the case of (2), easy_upnp behind the scenes starts a WEBrick HTTP server, which calls the provided callback whenever it receives an HTTP `NOTIFY` request.
|
168
|
+
In the case of (2), easy_upnp behind the scenes starts a WEBrick HTTP server, which calls the provided callback whenever it receives an HTTP `NOTIFY` request.
|
168
169
|
|
169
170
|
Because event subscriptions expire, easy_upnp starts a background thread to renew the subscription on an interval.
|
170
171
|
|
@@ -177,7 +178,7 @@ To add a URL to be called on events:
|
|
177
178
|
# URL will be called with HTTP NOTIFY requests from the service.
|
178
179
|
manager = service.add_event_callback('http://myserver/path/to/callback')
|
179
180
|
|
180
|
-
# The object that's returned allows you to manage the event subscription. To
|
181
|
+
# The object that's returned allows you to manage the event subscription. To
|
181
182
|
# cancel the subscription, for example:
|
182
183
|
manager.unsubscribe
|
183
184
|
|
@@ -199,7 +200,7 @@ end
|
|
199
200
|
|
200
201
|
#### Calling ruby code
|
201
202
|
|
202
|
-
If you don't want to have to set up an HTTP endpoint to listen to events, you can have easy_upnp do it for you. The `on_event` starts an internal HTTP server on an ephemeral port behind the scenes and triggers the provided callback each time a request is recieved.
|
203
|
+
If you don't want to have to set up an HTTP endpoint to listen to events, you can have easy_upnp do it for you. The `on_event` starts an internal HTTP server on an ephemeral port behind the scenes and triggers the provided callback each time a request is recieved.
|
203
204
|
|
204
205
|
```ruby
|
205
206
|
# Parse and print the XML body of the request
|
@@ -239,8 +240,11 @@ manager = service.on_event(callback) do |c|
|
|
239
240
|
c.configure_http_listener do |l|
|
240
241
|
l.listen_port = 8888
|
241
242
|
l.bind_address = '192.168.1.100'
|
243
|
+
|
244
|
+
# Don't parse XML body, pass raw contents to callback
|
245
|
+
l.event_parser = EasyUpnp::NoOpEventParser
|
242
246
|
end
|
243
|
-
|
247
|
+
|
244
248
|
c.configure_subscription_manager do |m|
|
245
249
|
m.requested_timeout = 1800
|
246
250
|
m.resubscription_interval_buffer = 60
|
@@ -249,3 +253,12 @@ manager = service.on_event(callback) do |c|
|
|
249
253
|
end
|
250
254
|
end
|
251
255
|
```
|
256
|
+
|
257
|
+
[info-gem]: https://rubygems.org/gems/easy_upnp
|
258
|
+
[shield-gem]: https://img.shields.io/gem/v/easy_upnp.svg
|
259
|
+
|
260
|
+
[info-travis]: https://travis-ci.org/sidoh/easy_upnp
|
261
|
+
[shield-travis]: https://img.shields.io/travis/sidoh/easy_upnp.svg
|
262
|
+
|
263
|
+
[info-coveralls]: https://coveralls.io/github/sidoh/easy_upnp
|
264
|
+
[shield-coveralls]: https://img.shields.io/coveralls/github/sidoh/easy_upnp.svg
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
|
3
3
|
module EasyUpnp
|
4
|
-
class
|
4
|
+
class DefaultEventParser
|
5
5
|
def parse(event_xml)
|
6
6
|
x = Nokogiri::XML(event_xml)
|
7
7
|
prop_changes = x.xpath('//e:propertyset/e:property/*', e: 'urn:schemas-upnp-org:event-1-0').map do |n|
|
@@ -11,4 +11,10 @@ module EasyUpnp
|
|
11
11
|
Hash[prop_changes]
|
12
12
|
end
|
13
13
|
end
|
14
|
+
|
15
|
+
class NoOpEventParser
|
16
|
+
def parse(event_xml)
|
17
|
+
event_xml
|
18
|
+
end
|
19
|
+
end
|
14
20
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'webrick'
|
2
2
|
require 'thread'
|
3
3
|
|
4
|
-
require 'easy_upnp/events/
|
4
|
+
require 'easy_upnp/events/event_parsers'
|
5
5
|
|
6
6
|
module EasyUpnp
|
7
7
|
class HttpListener
|
@@ -18,7 +18,11 @@ module EasyUpnp
|
|
18
18
|
# By default, event callback just prints the changed state vars
|
19
19
|
callback: ->(state_vars) {
|
20
20
|
puts state_vars.inspect
|
21
|
-
}
|
21
|
+
},
|
22
|
+
|
23
|
+
# Parses event bodies. By default parse the XML into a hash. Use
|
24
|
+
# EasyUpnp::NoOpEventParser to skip parsing
|
25
|
+
event_parser: EasyUpnp::DefaultEventParser
|
22
26
|
}
|
23
27
|
|
24
28
|
def initialize(options)
|
@@ -37,7 +41,7 @@ module EasyUpnp
|
|
37
41
|
AccessLog: [],
|
38
42
|
BindAddress: @options.bind_address
|
39
43
|
)
|
40
|
-
@server.mount('/', NotifyServlet, @options.callback)
|
44
|
+
@server.mount('/', NotifyServlet, @options.callback, @options.event_parser.new)
|
41
45
|
end
|
42
46
|
|
43
47
|
@listen_thread ||= Thread.new do
|
@@ -67,9 +71,9 @@ module EasyUpnp
|
|
67
71
|
end
|
68
72
|
|
69
73
|
class NotifyServlet < WEBrick::HTTPServlet::AbstractServlet
|
70
|
-
def initialize(_server, block)
|
74
|
+
def initialize(_server, block, parser)
|
71
75
|
@callback = block
|
72
|
-
@parser =
|
76
|
+
@parser = parser
|
73
77
|
end
|
74
78
|
|
75
79
|
def do_NOTIFY(request, response)
|
data/lib/easy_upnp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_upnp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Mullins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -87,7 +87,7 @@ files:
|
|
87
87
|
- lib/easy_upnp/control_point/service_method.rb
|
88
88
|
- lib/easy_upnp/control_point/validator_provider.rb
|
89
89
|
- lib/easy_upnp/events/event_client.rb
|
90
|
-
- lib/easy_upnp/events/
|
90
|
+
- lib/easy_upnp/events/event_parsers.rb
|
91
91
|
- lib/easy_upnp/events/http_listener.rb
|
92
92
|
- lib/easy_upnp/events/subscription_manager.rb
|
93
93
|
- lib/easy_upnp/options_base.rb
|
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
version: '0'
|
115
115
|
requirements: []
|
116
116
|
rubyforge_project:
|
117
|
-
rubygems_version: 2.7.
|
117
|
+
rubygems_version: 2.7.4
|
118
118
|
signing_key:
|
119
119
|
specification_version: 4
|
120
120
|
summary: A super easy to use UPnP control point client
|