ssdp 1.1.1 → 1.1.2
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/lib/ssdp.rb +0 -1
- data/lib/ssdp/consumer.rb +13 -14
- data/lib/ssdp/producer.rb +6 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f03eee0dcccb30c07cbfd0c3de98dc9c64cb62a3
|
4
|
+
data.tar.gz: d09d282461776840021fa715b597d6d584baf08f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e918f1d49fa782311a04e99208e83b6708184294d923205f5d944519e7e23a689fcabc6ac7486fa7a423379cffa795c593dd3af0ab06e17bdf70b206483b86a
|
7
|
+
data.tar.gz: 33b923a275f71806812722350e1d5f25a05a2694fb33e47a26d947c6cd2d93736969f1a00bd65b69b8e406bb5fb33d0427aef2c39d5e8e74b9c05e9d48fb7c66
|
data/lib/ssdp.rb
CHANGED
data/lib/ssdp/consumer.rb
CHANGED
@@ -3,7 +3,7 @@ require 'ssdp'
|
|
3
3
|
|
4
4
|
module SSDP
|
5
5
|
class Consumer
|
6
|
-
def initialize(options
|
6
|
+
def initialize(options={})
|
7
7
|
@options = SSDP::DEFAULTS.merge options
|
8
8
|
@search_socket = SSDP.create_broadcaster
|
9
9
|
@watch = {
|
@@ -13,13 +13,13 @@ module SSDP
|
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
16
|
-
def search(options
|
16
|
+
def search(options={}, &block)
|
17
17
|
options = @options.merge options
|
18
18
|
options[:callback] ||= block unless block.nil?
|
19
|
-
fail
|
20
|
-
fail
|
21
|
-
warn
|
22
|
-
warn
|
19
|
+
fail 'SSDP consumer async search missing callback.' if (options[:synchronous] == false) && options[:callback].nil?
|
20
|
+
fail 'SSDP consumer search accepting multiple responses must specify a timeout value.' if (options[:first_only] == false) && (options[:timeout].to_i < 1)
|
21
|
+
warn 'Warning: Calling SSDP search without a service specified.' if options[:service].nil? && (options[:no_warnings] != true)
|
22
|
+
warn 'Warning: Calling SSDP search without a timeout value.' if (options[:timeout].to_i < 1) && (options[:no_warnings] != true)
|
23
23
|
|
24
24
|
@search_socket.send compose_search(options), 0, options[:broadcast], options[:port]
|
25
25
|
|
@@ -37,12 +37,12 @@ module SSDP
|
|
37
37
|
|
38
38
|
def stop_watching_type(type)
|
39
39
|
@watch[:services].delete type
|
40
|
-
stop_watch if (@watch[:services].count == 0) &&
|
40
|
+
stop_watch if (@watch[:services].count == 0) && @watch[:thread]
|
41
41
|
end
|
42
42
|
|
43
43
|
def stop_watching_all
|
44
44
|
@watch[:services] = {}
|
45
|
-
stop_watch if @watch[:thread]
|
45
|
+
stop_watch if @watch[:thread]
|
46
46
|
end
|
47
47
|
|
48
48
|
private
|
@@ -52,7 +52,7 @@ module SSDP
|
|
52
52
|
"Host: #{options[:broadcast]}:#{options[:port]}\n" \
|
53
53
|
"Man: \"ssdp:discover\"\n"
|
54
54
|
query += "ST: #{options[:service]}\n" if options[:service]
|
55
|
-
options[:params].each { |key, val| query += "#{key}: #{
|
55
|
+
options[:params].each { |key, val| query += "#{key}: #{val}\n" } if options[:params]
|
56
56
|
query + "\n"
|
57
57
|
end
|
58
58
|
|
@@ -80,7 +80,7 @@ module SSDP
|
|
80
80
|
began = Time.now
|
81
81
|
remaining = options[:timeout]
|
82
82
|
while !found && remaining > 0
|
83
|
-
ready = IO
|
83
|
+
ready = IO.select [@search_socket], nil, nil, remaining
|
84
84
|
if ready
|
85
85
|
message, producer = @search_socket.recvfrom options[:maxpack]
|
86
86
|
result = process_ssdp_packet message, producer
|
@@ -89,7 +89,7 @@ module SSDP
|
|
89
89
|
remaining = options[:timeout] - (Time.now - began).to_i
|
90
90
|
end
|
91
91
|
else
|
92
|
-
|
92
|
+
until found
|
93
93
|
message, producer = @search_socket.recvfrom options[:maxpack]
|
94
94
|
result = process_ssdp_packet message, producer
|
95
95
|
found = options[:filter].nil? ? true : options[:filter].call(result)
|
@@ -109,7 +109,7 @@ module SSDP
|
|
109
109
|
|
110
110
|
while remaining > 0
|
111
111
|
start_time = Time.now
|
112
|
-
ready = IO
|
112
|
+
ready = IO.select [@search_socket], nil, nil, remaining
|
113
113
|
if ready
|
114
114
|
message, producer = @search_socket.recvfrom options[:maxpack]
|
115
115
|
if options[:filter].nil?
|
@@ -138,7 +138,7 @@ module SSDP
|
|
138
138
|
@watch[:socket] = SSDP.create_listener @options
|
139
139
|
@watch[:thread] = Thread.new do
|
140
140
|
begin
|
141
|
-
|
141
|
+
loop do
|
142
142
|
message, producer = @watch[:socket].recvfrom @options[:maxpack]
|
143
143
|
notification = process_ssdp_packet message, producer
|
144
144
|
notification_type = notification[:params]['NT']
|
@@ -154,6 +154,5 @@ module SSDP
|
|
154
154
|
@watch[:thread].exit
|
155
155
|
@watch[:thread] = nil
|
156
156
|
end
|
157
|
-
|
158
157
|
end
|
159
158
|
end
|
data/lib/ssdp/producer.rb
CHANGED
@@ -7,7 +7,7 @@ module SSDP
|
|
7
7
|
attr_accessor :services
|
8
8
|
attr_accessor :uuid
|
9
9
|
|
10
|
-
def initialize(options
|
10
|
+
def initialize(options={})
|
11
11
|
@uuid = SecureRandom.uuid
|
12
12
|
@services = {}
|
13
13
|
@listener = { :socket => nil, :thread => nil }
|
@@ -24,14 +24,14 @@ module SSDP
|
|
24
24
|
start_listener if @listener[:thread].nil?
|
25
25
|
end
|
26
26
|
|
27
|
-
def stop(bye_bye
|
27
|
+
def stop(bye_bye=true)
|
28
28
|
was_running = running?
|
29
29
|
|
30
|
-
if @listener[:thread]
|
30
|
+
if @listener[:thread]
|
31
31
|
@listener[:thread].exit
|
32
32
|
@listener[:thread] = nil
|
33
33
|
end
|
34
|
-
if @notifier[:thread]
|
34
|
+
if @notifier[:thread]
|
35
35
|
@notifier[:thread].exit
|
36
36
|
@notifier[:thread] = nil
|
37
37
|
end
|
@@ -123,7 +123,7 @@ module SSDP
|
|
123
123
|
@listener[:socket] = SSDP.create_listener @options
|
124
124
|
@listener[:thread] = Thread.new do
|
125
125
|
begin
|
126
|
-
|
126
|
+
loop do
|
127
127
|
message, consumer = @listener[:socket].recvfrom @options[:maxpack]
|
128
128
|
process_ssdp message, { :address => consumer[3], :port => consumer[1] } unless @services.count == 0
|
129
129
|
end
|
@@ -135,12 +135,11 @@ module SSDP
|
|
135
135
|
|
136
136
|
def start_notifier
|
137
137
|
@notifier[:thread] = Thread.new do
|
138
|
-
|
138
|
+
loop do
|
139
139
|
sleep @options[:interval]
|
140
140
|
@services.each { |type, params| send_notification type, params }
|
141
141
|
end
|
142
142
|
end
|
143
143
|
end
|
144
|
-
|
145
144
|
end
|
146
145
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ssdp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dillon Aumiller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: SSDP client/server library. Server notify/part/respond; client search/listen.
|
14
14
|
email: dillonaumiller@gmail.com
|