easy_upnp 1.1.12 → 1.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:
|
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
|