dnssd 1.2 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.autotest +14 -0
  3. data/History.txt +22 -3
  4. data/Manifest.txt +15 -0
  5. data/README.txt +27 -3
  6. data/Rakefile +5 -4
  7. data/ext/dnssd/dnssd.c +4 -0
  8. data/ext/dnssd/dnssd.h +13 -18
  9. data/ext/dnssd/errors.c +9 -3
  10. data/ext/dnssd/extconf.rb +51 -44
  11. data/ext/dnssd/flags.c +68 -14
  12. data/ext/dnssd/record.c +218 -0
  13. data/ext/dnssd/service.c +341 -121
  14. data/lib/dnssd.rb +46 -11
  15. data/lib/dnssd/record.rb +97 -0
  16. data/lib/dnssd/reply.rb +39 -92
  17. data/lib/dnssd/reply/addr_info.rb +47 -0
  18. data/lib/dnssd/reply/browse.rb +52 -0
  19. data/lib/dnssd/reply/domain.rb +22 -0
  20. data/lib/dnssd/reply/query_record.rb +183 -0
  21. data/lib/dnssd/reply/register.rb +37 -0
  22. data/lib/dnssd/reply/resolve.rb +105 -0
  23. data/lib/dnssd/service.rb +123 -16
  24. data/lib/dnssd/text_record.rb +28 -19
  25. data/sample/browse.rb +24 -6
  26. data/sample/enumerate_domains.rb +7 -1
  27. data/sample/getaddrinfo.rb +28 -0
  28. data/sample/growl.rb +2 -0
  29. data/sample/query_record.rb +15 -0
  30. data/sample/register.rb +19 -20
  31. data/sample/resolve.rb +31 -7
  32. data/sample/resolve_ichat.rb +5 -6
  33. data/sample/server.rb +2 -0
  34. data/sample/socket.rb +4 -0
  35. data/test/test_dnssd.rb +6 -4
  36. data/test/test_dnssd_flags.rb +1 -15
  37. data/test/test_dnssd_record.rb +92 -0
  38. data/test/test_dnssd_reply.rb +13 -79
  39. data/test/test_dnssd_reply_browse.rb +28 -0
  40. data/test/test_dnssd_reply_query_record.rb +92 -0
  41. data/test/test_dnssd_reply_resolve.rb +47 -0
  42. data/test/test_dnssd_service.rb +12 -0
  43. data/test/test_dnssd_text_record.rb +3 -3
  44. metadata +32 -11
  45. metadata.gz.sig +0 -0
@@ -4,72 +4,10 @@ require 'dnssd'
4
4
  class TestDNSSDReply < MiniTest::Unit::TestCase
5
5
 
6
6
  def setup
7
- @reply = DNSSD::Reply.new
7
+ @reply = DNSSD::Reply.new nil, 0, 0
8
8
  @fullname = "Eric\\032Hodel._http._tcp.local."
9
9
  end
10
10
 
11
- def test_class_from_service
12
- reply = DNSSD::Reply.from_service :service, 4
13
-
14
- assert_equal :service, reply.service
15
- assert_equal DNSSD::Flags::Default, reply.flags
16
- end
17
-
18
- def test_connect_tcp
19
- port = Socket.getservbyname 'blackjack'
20
- @reply.set_fullname 'blackjack._http._tcp.local.'
21
- @reply.instance_variable_set :@port, port
22
- @reply.instance_variable_set :@target, 'localhost'
23
-
24
- server = TCPServer.new 'localhost', port
25
-
26
- socket = @reply.connect
27
-
28
- assert_instance_of TCPSocket, socket
29
- assert_equal port, socket.peeraddr[1]
30
- assert_equal 'localhost', socket.peeraddr[2]
31
- ensure
32
- socket.close
33
- server.close
34
- end
35
-
36
- def test_connect_tcp_no_port_target
37
- port = Socket.getservbyname 'blackjack'
38
- server = TCPServer.new nil, port
39
- Thread.start do server.accept end
40
-
41
- DNSSD.announce server, 'blackjack no port'
42
-
43
- @reply.set_fullname "blackjack\\032no\\032port._blackjack._tcp.local."
44
-
45
- socket = @reply.connect
46
-
47
- assert_instance_of TCPSocket, socket
48
- assert_equal port, socket.peeraddr[1]
49
- ensure
50
- socket.close if socket
51
- server.close if server
52
- end
53
-
54
- def test_connect_udp
55
- port = Socket.getservbyname 'blackjack'
56
- @reply.set_fullname 'blackjack._http._udp.local.'
57
- @reply.instance_variable_set :@port, port
58
- @reply.instance_variable_set :@target, 'localhost'
59
-
60
- server = UDPSocket.new
61
- server.bind 'localhost', port
62
-
63
- socket = @reply.connect
64
-
65
- assert_instance_of UDPSocket, socket
66
- assert_equal port, socket.peeraddr[1]
67
- assert_equal 'localhost', socket.peeraddr[2]
68
- ensure
69
- socket.close
70
- server.close
71
- end
72
-
73
11
  def test_fullname
74
12
  @reply.set_fullname @fullname
75
13
 
@@ -81,15 +19,11 @@ class TestDNSSDReply < MiniTest::Unit::TestCase
81
19
  end
82
20
 
83
21
  def test_inspect
84
- flags = DNSSD::Flags.new
85
- @reply.instance_variable_set :@fullname, 'blah'
86
- @reply.instance_variable_set :@name, 'drbrain@pincer-tip'
87
- @reply.instance_variable_set :@interface, 'en2'
88
- @reply.instance_variable_set :@domain, 'local'
22
+ flags = DNSSD::Flags.new DNSSD::Flags::MoreComing
23
+ @reply.instance_variable_set :@interface, 'lo0'
89
24
  @reply.instance_variable_set :@flags, flags
90
- @reply.instance_variable_set :@type, '_presence._tcp'
91
25
 
92
- expected = "#<DNSSD::Reply:0x#{@reply.object_id.to_s 16} \"drbrain@pincer-tip\" type: _presence._tcp domain: local interface: en2 flags: #{flags}>"
26
+ expected = "#<DNSSD::Reply:0x#{@reply.object_id.to_s 16} interface: lo0 flags: #{flags.inspect}>"
93
27
  assert_equal expected, @reply.inspect
94
28
  end
95
29
 
@@ -108,23 +42,23 @@ class TestDNSSDReply < MiniTest::Unit::TestCase
108
42
  def test_set_fullname
109
43
  @reply.set_fullname @fullname
110
44
 
111
- assert_equal 'Eric Hodel', @reply.name
112
- assert_equal '_http._tcp', @reply.type
113
- assert_equal 'local.', @reply.domain
45
+ assert_equal "Eric Hodel", @reply.instance_variable_get(:@name)
46
+ assert_equal '_http._tcp', @reply.instance_variable_get(:@type)
47
+ assert_equal 'local.', @reply.instance_variable_get(:@domain)
114
48
 
115
49
  @reply.set_fullname "Dr\\.\\032Pepper._http._tcp.local."
116
50
 
117
- assert_equal 'Dr. Pepper', @reply.name
118
- assert_equal '_http._tcp', @reply.type
119
- assert_equal 'local.', @reply.domain
51
+ assert_equal "Dr. Pepper", @reply.instance_variable_get(:@name)
52
+ assert_equal '_http._tcp', @reply.instance_variable_get(:@type)
53
+ assert_equal 'local.', @reply.instance_variable_get(:@domain)
120
54
  end
121
55
 
122
56
  def test_set_names
123
57
  @reply.set_names "Dr\\.\032Pepper", '_http._tcp', 'local.'
124
58
 
125
- assert_equal "Dr.\032Pepper", @reply.name
126
- assert_equal '_http._tcp', @reply.type
127
- assert_equal 'local.', @reply.domain
59
+ assert_equal "Dr.\032Pepper", @reply.instance_variable_get(:@name)
60
+ assert_equal '_http._tcp', @reply.instance_variable_get(:@type)
61
+ assert_equal 'local.', @reply.instance_variable_get(:@domain)
128
62
  end
129
63
 
130
64
  end
@@ -0,0 +1,28 @@
1
+ require 'minitest/autorun'
2
+ require 'dnssd'
3
+
4
+ class TestDNSSDReplyBrowse < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @reply = DNSSD::Reply::Browse.new nil, 0, 0, "blackjack\\032no\\032port",
8
+ '_blackjack._tcp', 'local'
9
+ end
10
+
11
+ def test_connect
12
+ port = Socket.getservbyname 'blackjack'
13
+ server = TCPServer.new nil, port
14
+ Thread.start do server.accept end
15
+
16
+ DNSSD.announce server, 'blackjack no port'
17
+
18
+ socket = @reply.connect
19
+
20
+ assert_instance_of TCPSocket, socket
21
+ assert_equal port, socket.peeraddr[1]
22
+ ensure
23
+ socket.close if socket
24
+ server.close if server
25
+ end
26
+
27
+ end
28
+
@@ -0,0 +1,92 @@
1
+ require 'minitest/autorun'
2
+ require 'dnssd'
3
+
4
+ class TestDNSSDReplyQueryRecord < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @fullname = 'blackjack._blackjack._tcp.test.'
8
+ @IN = DNSSD::Record::IN
9
+ @ipv4 = "\300\000\002\001"
10
+ @ipv6 = " \001\r\270\000\000\000\000\000\000\000\000\000\000\000\001"
11
+ @nowhere = "\007nowhere\007example\000"
12
+ end
13
+
14
+ def test_record_data_A
15
+ qr = util_qr DNSSD::Record::A, @ipv4
16
+
17
+ assert_equal IPAddr.new_ntoh(@ipv4), qr.record_data
18
+ end
19
+
20
+ def test_record_data_AAAA
21
+ qr = util_qr DNSSD::Record::A, @ipv6
22
+
23
+ assert_equal IPAddr.new_ntoh(@ipv6), qr.record_data
24
+ end
25
+
26
+ def test_record_data_CNAME
27
+ qr = util_qr DNSSD::Record::CNAME, @nowhere
28
+
29
+ assert_equal 'nowhere.example.', qr.record_data
30
+ end
31
+
32
+ def test_record_data_MX
33
+ qr = util_qr DNSSD::Record::MX, "\000\010#{@nowhere}"
34
+
35
+ assert_equal [8, 'nowhere.example.'], qr.record_data
36
+ end
37
+
38
+ def test_record_data_NS
39
+ qr = util_qr DNSSD::Record::NS, @nowhere
40
+
41
+ assert_equal 'nowhere.example.', qr.record_data
42
+ end
43
+
44
+ def test_record_data_PTR
45
+ qr = util_qr DNSSD::Record::PTR, @nowhere
46
+
47
+ assert_equal 'nowhere.example.', qr.record_data
48
+ end
49
+
50
+ def test_record_data_SOA
51
+ serial = 1
52
+ refresh = 86400
53
+ rtry = 3600
54
+ expire = 86400 * 2
55
+ minimum = 3600 * 12
56
+
57
+ data = "#{@nowhere}\002me#{@nowhere}#{[serial, refresh, rtry, expire, minimum].pack 'NNNNN'}"
58
+
59
+ qr = util_qr DNSSD::Record::SOA, data
60
+
61
+ expected = [
62
+ 'nowhere.example.', 'me.nowhere.example.',
63
+ serial, refresh, rtry, expire, minimum
64
+ ]
65
+
66
+ assert_equal expected, qr.record_data
67
+ end
68
+
69
+ def test_record_data_SRV
70
+ priority = 1
71
+ weight = 5
72
+ port = 1025
73
+
74
+ data = "#{[priority, weight, port].pack 'nnn'}#{@nowhere}"
75
+
76
+ qr = util_qr DNSSD::Record::SRV, data
77
+
78
+ assert_equal [1, 5, 1025, 'nowhere.example.'], qr.record_data
79
+ end
80
+
81
+ def test_record_data_TXT
82
+ qr = util_qr DNSSD::Record::TXT, "\005Hello\006World!"
83
+
84
+ assert_equal %w[Hello World!], qr.record_data
85
+ end
86
+
87
+ def util_qr(rtype, rdata)
88
+ DNSSD::Reply::QueryRecord.new nil, 0, 0, @fullname, rtype, @IN, rdata, 120
89
+ end
90
+
91
+ end
92
+
@@ -0,0 +1,47 @@
1
+ require 'minitest/autorun'
2
+ require 'dnssd'
3
+
4
+ class TestDNSSDReplyResolve < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @port = Socket.getservbyname 'blackjack'
8
+ @interface = DNSSD::InterfaceAny
9
+ end
10
+
11
+ def test_connect_tcp
12
+ fullname = "blackjack\\032no\\032port._blackjack._tcp.local."
13
+ reply = DNSSD::Reply::Resolve.new nil, 0, @interface, fullname,
14
+ 'localhost', @port, nil
15
+
16
+ server = TCPServer.new nil, @port
17
+
18
+ socket = reply.connect
19
+
20
+ assert_instance_of TCPSocket, socket
21
+ assert_equal @port, socket.peeraddr[1]
22
+ assert_equal 'localhost', socket.peeraddr[2]
23
+ ensure
24
+ socket.close if socket
25
+ server.close if server
26
+ end
27
+
28
+ def test_connect_udp
29
+ fullname = "blackjack\\032no\\032port._blackjack._udp.local."
30
+ reply = DNSSD::Reply::Resolve.new nil, 0, @interface, fullname,
31
+ 'localhost', @port, nil
32
+
33
+ server = UDPSocket.new
34
+ server.bind 'localhost', @port
35
+
36
+ socket = reply.connect
37
+
38
+ assert_instance_of UDPSocket, socket
39
+ assert_equal @port, socket.peeraddr[1]
40
+ assert_equal 'localhost', socket.peeraddr[2]
41
+ ensure
42
+ socket.close if socket
43
+ server.close if server
44
+ end
45
+
46
+ end
47
+
@@ -0,0 +1,12 @@
1
+ require 'minitest/autorun'
2
+ require 'dnssd'
3
+
4
+ class TestDNSSDService < MiniTest::Unit::TestCase
5
+
6
+ def test_class_get_property
7
+ assert_kind_of Numeric,
8
+ DNSSD::Service.get_property(DNSSD::Service::DaemonVersion)
9
+ end if DNSSD::Service.respond_to? :get_property
10
+
11
+ end
12
+
@@ -68,9 +68,9 @@ class TestDNSSDTextRecord < MiniTest::Unit::TestCase
68
68
  end
69
69
 
70
70
  def test_decode_empty
71
- assert_equal({}, @TR.new("").to_hash)
72
- assert_equal({}, @TR.new("\x00").to_hash)
73
- assert_equal({}, @TR.new("\x00\x00").to_hash)
71
+ assert_equal({}, @TR.new(""))
72
+ assert_equal({}, @TR.new("\x00"))
73
+ assert_equal({}, @TR.new("\x00\x00"))
74
74
  end
75
75
 
76
76
  def test_decode_value
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnssd
3
3
  version: !ruby/object:Gem::Version
4
- version: "1.2"
4
+ version: "1.3"
5
5
  platform: ruby
6
6
  authors:
7
+ - Eric Hodel
8
+ - Aaron Patterson
9
+ - Phil Hagelberg
7
10
  - Chad Fowler
8
11
  - Charles Mills
9
12
  - Rich Kilmer
10
- - Phil Hagelberg
11
- - Aaron Patterson
12
- - Eric Hodel
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain:
@@ -35,7 +35,7 @@ cert_chain:
35
35
  x52qPcexcYZR7w==
36
36
  -----END CERTIFICATE-----
37
37
 
38
- date: 2009-08-12 00:00:00 -07:00
38
+ date: 2009-08-18 00:00:00 -07:00
39
39
  default_executable:
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
@@ -59,7 +59,7 @@ dependencies:
59
59
  version: "1.4"
60
60
  version:
61
61
  - !ruby/object:Gem::Dependency
62
- name: rake-complier
62
+ name: rake-compiler
63
63
  type: :development
64
64
  version_requirement:
65
65
  version_requirements: !ruby/object:Gem::Requirement
@@ -76,18 +76,19 @@ dependencies:
76
76
  requirements:
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 2.3.2
79
+ version: 2.3.3
80
80
  version:
81
81
  description: |-
82
82
  DNS Service Discovery (aka Bonjour, MDNS) API for Ruby. Implements browsing,
83
- resolving, registration and domain enumeration.
83
+ resolving, registration and domain enumeration. Supports avahi's DNSSD
84
+ compatibility layer for avahi 0.6.25 or newer.
84
85
  email:
86
+ - drbrain@segment.net
87
+ - aaronp@rubyforge.org
88
+ - phil@hagelb.org
85
89
  - chad@chadfowler.com
86
90
  - ""
87
91
  - ""
88
- - phil@hagelb.org
89
- - aaronp@rubyforge.org
90
- - drbrain@segment.net
91
92
  executables: []
92
93
 
93
94
  extensions:
@@ -107,15 +108,25 @@ files:
107
108
  - ext/dnssd/errors.c
108
109
  - ext/dnssd/extconf.rb
109
110
  - ext/dnssd/flags.c
111
+ - ext/dnssd/record.c
110
112
  - ext/dnssd/service.c
111
113
  - lib/dnssd.rb
112
114
  - lib/dnssd/flags.rb
115
+ - lib/dnssd/record.rb
113
116
  - lib/dnssd/reply.rb
117
+ - lib/dnssd/reply/addr_info.rb
118
+ - lib/dnssd/reply/browse.rb
119
+ - lib/dnssd/reply/domain.rb
120
+ - lib/dnssd/reply/query_record.rb
121
+ - lib/dnssd/reply/register.rb
122
+ - lib/dnssd/reply/resolve.rb
114
123
  - lib/dnssd/service.rb
115
124
  - lib/dnssd/text_record.rb
116
125
  - sample/browse.rb
117
126
  - sample/enumerate_domains.rb
127
+ - sample/getaddrinfo.rb
118
128
  - sample/growl.rb
129
+ - sample/query_record.rb
119
130
  - sample/register.rb
120
131
  - sample/resolve.rb
121
132
  - sample/resolve_ichat.rb
@@ -123,7 +134,12 @@ files:
123
134
  - sample/socket.rb
124
135
  - test/test_dnssd.rb
125
136
  - test/test_dnssd_flags.rb
137
+ - test/test_dnssd_record.rb
126
138
  - test/test_dnssd_reply.rb
139
+ - test/test_dnssd_reply_browse.rb
140
+ - test/test_dnssd_reply_query_record.rb
141
+ - test/test_dnssd_reply_resolve.rb
142
+ - test/test_dnssd_service.rb
127
143
  - test/test_dnssd_text_record.rb
128
144
  has_rdoc: true
129
145
  homepage: http://rubyforge.org/projects/dnssd
@@ -158,5 +174,10 @@ summary: DNS Service Discovery (aka Bonjour, MDNS) API for Ruby
158
174
  test_files:
159
175
  - test/test_dnssd.rb
160
176
  - test/test_dnssd_flags.rb
177
+ - test/test_dnssd_record.rb
161
178
  - test/test_dnssd_reply.rb
179
+ - test/test_dnssd_reply_browse.rb
180
+ - test/test_dnssd_reply_query_record.rb
181
+ - test/test_dnssd_reply_resolve.rb
182
+ - test/test_dnssd_service.rb
162
183
  - test/test_dnssd_text_record.rb
metadata.gz.sig CHANGED
Binary file