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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a6933171abe1ab052bf99d2bdb6efa5bd0378f536859e0cf812f2dd68b23461
4
- data.tar.gz: 9c016607692b33ed3a516a872aa80117a119f3ac138a997a19a845684914890c
3
+ metadata.gz: 7f58175fb721fb08fa2a5abb36b0b2165d9b38592bb7ff66bd3a3f4c303ed2f9
4
+ data.tar.gz: afd32fb72b31c90e84aaea02db2f81e603b872f8f81c1f6f147d15c13ce3713e
5
5
  SHA512:
6
- metadata.gz: bdc315b09c4ada48b56f6f102c24b5c0a51740c6163ccb3b9a96e67c7f262a35e95126c950bb1efd394b4cbea06ec0b29e1ae3e55bd02bbd63b42b4159faa06f
7
- data.tar.gz: 663cc13801926e626a61aea7aebe75d51e92e07ab5133723c53be48259dc19bec30c42cbe10348c3a6881028fac9124afb8c50a697203736f8e394060b479b99
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 'webrick'
111
+ require "webrick"
112
112
 
113
113
  port = 8080
114
114
  host = "test-hostname"
115
115
 
116
- Thread.new { ZeroConf.service "_http._tcp.local.", port, host }
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,
@@ -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
- @hostname = hostname
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
- @service_name = "#{hostname}.#{service}"
19
- @qualified_host = "#{hostname}.local."
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
@@ -69,8 +69,8 @@ module ZeroConf
69
69
  sock
70
70
  end
71
71
 
72
- BROADCAST_V4 = Addrinfo.new Socket.sockaddr_in(Resolv::MDNS::Port, Resolv::MDNS::AddressV4)
73
- BROADCAST_V6 = Addrinfo.new Socket.sockaddr_in(Resolv::MDNS::Port, Resolv::MDNS::AddressV6)
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)
@@ -1,3 +1,3 @@
1
1
  module ZeroConf
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
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.1.0
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: 2024-12-13 00:00:00.000000000 Z
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.5.11
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: