zeroconf 1.1.0 → 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 +4 -4
- data/README.md +4 -2
- data/lib/zeroconf/service.rb +11 -4
- data/lib/zeroconf/utils.rb +6 -2
- data/lib/zeroconf/version.rb +1 -1
- data/test/service_test.rb +31 -0
- metadata +3 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f58175fb721fb08fa2a5abb36b0b2165d9b38592bb7ff66bd3a3f4c303ed2f9
|
4
|
+
data.tar.gz: afd32fb72b31c90e84aaea02db2f81e603b872f8f81c1f6f147d15c13ce3713e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e4faed4b18775a5fec2faf0b4064556356699b049c6ca1d6d2d4c03b685cd8702e3ba8591d098799d3ec6ee54efdb9aee1f0e5ea68578b92c1df7ea8fbbba7b
|
7
|
+
data.tar.gz: 210e338f7d21bbe98df962e4785e0716e2364e538fb44c1029217465fca0fe6ea2f414986d4bb7ce0f3588efd5bfbbd8caeb140ef5f1028b5e75b58648de57e6
|
data/README.md
CHANGED
@@ -108,12 +108,14 @@ to run an HTTP server and simultaneously advertise the server:
|
|
108
108
|
|
109
109
|
```ruby
|
110
110
|
require "zeroconf"
|
111
|
-
require
|
111
|
+
require "webrick"
|
112
112
|
|
113
113
|
port = 8080
|
114
114
|
host = "test-hostname"
|
115
115
|
|
116
|
-
|
116
|
+
Ractor.new(port, host) { |port, host|
|
117
|
+
ZeroConf.service "_http._tcp.local.", port, host
|
118
|
+
}
|
117
119
|
|
118
120
|
server = WEBrick::HTTPServer.new(:Port => port,
|
119
121
|
:SSLEnable => false,
|
data/lib/zeroconf/service.rb
CHANGED
@@ -9,14 +9,21 @@ module ZeroConf
|
|
9
9
|
attr_reader :service, :service_port, :hostname, :service_interfaces,
|
10
10
|
:service_name, :qualified_host, :text, :abort_on_malformed_requests
|
11
11
|
|
12
|
-
def initialize service, service_port, hostname = Socket.gethostname, service_interfaces: ZeroConf.service_interfaces, text: [""], abort_on_malformed_requests: false, started_callback: nil
|
12
|
+
def initialize service, service_port, hostname = Socket.gethostname, service_interfaces: ZeroConf.service_interfaces, instance_name: nil, text: [""], abort_on_malformed_requests: false, started_callback: nil
|
13
13
|
@service = service
|
14
14
|
@service_port = service_port
|
15
|
-
|
15
|
+
|
16
|
+
@hostname = strip_dot_local(hostname) # We re-add .local anyway, later on
|
16
17
|
@service_interfaces = service_interfaces
|
17
18
|
@abort_on_malformed_requests = abort_on_malformed_requests
|
18
|
-
|
19
|
-
|
19
|
+
|
20
|
+
instance_name ||= @hostname
|
21
|
+
if instance_name.include?(".")
|
22
|
+
raise ArgumentError, "instance_name must not contain dots (is #{instance_name.inspect})"
|
23
|
+
end
|
24
|
+
|
25
|
+
@service_name = "#{instance_name}.#{@service}"
|
26
|
+
@qualified_host = "#{@hostname}.local."
|
20
27
|
@started_callback = started_callback
|
21
28
|
@text = text
|
22
29
|
@started = false
|
data/lib/zeroconf/utils.rb
CHANGED
@@ -69,8 +69,8 @@ module ZeroConf
|
|
69
69
|
sock
|
70
70
|
end
|
71
71
|
|
72
|
-
BROADCAST_V4 = Addrinfo.new
|
73
|
-
BROADCAST_V6 = Addrinfo.new
|
72
|
+
BROADCAST_V4 = Addrinfo.new(Socket.sockaddr_in(Resolv::MDNS::Port, Resolv::MDNS::AddressV4)).freeze
|
73
|
+
BROADCAST_V6 = Addrinfo.new(Socket.sockaddr_in(Resolv::MDNS::Port, Resolv::MDNS::AddressV6)).freeze
|
74
74
|
|
75
75
|
def multicast_send sock, query
|
76
76
|
dest = if sock.local_address.ipv4?
|
@@ -94,6 +94,10 @@ module ZeroConf
|
|
94
94
|
sock.send(data, 0, Addrinfo.new(to))
|
95
95
|
end
|
96
96
|
|
97
|
+
def strip_dot_local(from_string)
|
98
|
+
from_string.to_s.gsub(/\.local\.?$/, "")
|
99
|
+
end
|
100
|
+
|
97
101
|
def open_ipv6 saddr, port
|
98
102
|
sock = UDPSocket.new Socket::AF_INET6
|
99
103
|
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true)
|
data/lib/zeroconf/version.rb
CHANGED
data/test/service_test.rb
CHANGED
@@ -26,6 +26,37 @@ module ZeroConf
|
|
26
26
|
assert_equal [""], s.text
|
27
27
|
end
|
28
28
|
|
29
|
+
def test_raises_when_creating_a_service_with_dot_in_the_name
|
30
|
+
assert_raises ArgumentError do
|
31
|
+
Service.new "_test-mdns._tcp.local.", 42424,
|
32
|
+
"some.subdomain.workstation"
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_raises ArgumentError do
|
36
|
+
Service.new "_test-mdns._tcp.local.", 42424,
|
37
|
+
"ruby-mdns", instance_name: "ruby.test"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_sets_correct_service_name_from_instance_name
|
42
|
+
s = Service.new "_test-mdns._tcp.local.", 42424,
|
43
|
+
"my-rb-service", instance_name: "My RB service"
|
44
|
+
assert_equal "my-rb-service.local.", s.qualified_host
|
45
|
+
assert_equal "My RB service._test-mdns._tcp.local.", s.service_name
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_removes_dot_local_tld_from_passed_hostname
|
49
|
+
s = Service.new "_test-mdns._tcp.local.", 42424,
|
50
|
+
"ThisMac.local"
|
51
|
+
assert_equal "ThisMac.local.", s.qualified_host
|
52
|
+
assert_equal "ThisMac._test-mdns._tcp.local.", s.service_name
|
53
|
+
|
54
|
+
s = Service.new "_test-mdns._tcp.local.", 42424,
|
55
|
+
"ThisMac.local."
|
56
|
+
assert_equal "ThisMac.local.", s.qualified_host
|
57
|
+
assert_equal "ThisMac._test-mdns._tcp.local.", s.service_name
|
58
|
+
end
|
59
|
+
|
29
60
|
def test_unicast_service_instance_answer
|
30
61
|
latch = Queue.new
|
31
62
|
s = make_server iface, started_callback: -> { latch << :start }
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zeroconf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: resolv
|
@@ -80,7 +79,6 @@ homepage: https://github.com/tenderlove/zeroconf
|
|
80
79
|
licenses:
|
81
80
|
- Apache-2.0
|
82
81
|
metadata: {}
|
83
|
-
post_install_message:
|
84
82
|
rdoc_options: []
|
85
83
|
require_paths:
|
86
84
|
- lib
|
@@ -95,8 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
93
|
- !ruby/object:Gem::Version
|
96
94
|
version: '0'
|
97
95
|
requirements: []
|
98
|
-
rubygems_version: 3.
|
99
|
-
signing_key:
|
96
|
+
rubygems_version: 3.7.0.dev
|
100
97
|
specification_version: 4
|
101
98
|
summary: Multicast DNS client and server
|
102
99
|
test_files:
|