toolmantim-zeroconf 0.0.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.
@@ -0,0 +1,111 @@
1
+ #!/usr/local/bin/ruby18 -w
2
+ # Author: Sam Roberts <sroberts@uniserve.com>
3
+ # Licence: this file is placed in the public domain
4
+
5
+ $:.unshift(File.dirname($0))
6
+
7
+ require 'getoptlong'
8
+ require 'net/dns/resolv-mdns'
9
+ require 'pp'
10
+
11
+ rrmap = {
12
+ 'a' => Resolv::DNS::Resource::IN::A,
13
+ 'any' => Resolv::DNS::Resource::IN::ANY,
14
+ 'ptr' => Resolv::DNS::Resource::IN::PTR,
15
+ 'srv' => Resolv::DNS::Resource::IN::SRV,
16
+ nil => Resolv::DNS::Resource::IN::ANY
17
+ }
18
+
19
+ rtypes = rrmap.keys.join ', '
20
+
21
+ HELP =<<EOF
22
+ Usage: mdns [options] name [service-type]
23
+
24
+ Options
25
+ -h,--help Print this helpful message.
26
+ -t,--type Query for this specific resource record type.
27
+ -r,--recur Recursive query.
28
+ -a,--addr Do an address lookup on name using mDNS-aware Resolv#getaddress.
29
+ -d,--debug Print debug information.
30
+
31
+ Supported record types are:
32
+ #{rrmap.keys.compact.join "\n "}
33
+
34
+ Default is 'any'.
35
+
36
+ Examples:
37
+ EOF
38
+
39
+ opt_debug = nil
40
+ opt_recur = nil
41
+ opt_addr = nil
42
+ opt_type = Resolv::DNS::Resource::IN::ANY
43
+
44
+ opts = GetoptLong.new(
45
+ [ "--help", "-h", GetoptLong::NO_ARGUMENT ],
46
+ [ "--type", "-t", GetoptLong::REQUIRED_ARGUMENT],
47
+ [ "--recur", "-r", GetoptLong::NO_ARGUMENT ],
48
+ [ "--addr", "-a", GetoptLong::NO_ARGUMENT ],
49
+ [ "--debug", "-d", GetoptLong::NO_ARGUMENT ]
50
+ )
51
+
52
+ opts.each do |opt, arg|
53
+ case opt
54
+ when "--help" then puts HELP; exit 0
55
+ when "--debug" then opt_debug = true
56
+ when "--recur" then opt_recur = true
57
+ when "--addr" then opt_addr = true
58
+ when "--type" then opt_type = rrmap[arg]
59
+ end
60
+ end
61
+
62
+ r = Resolv::MDNS.new
63
+
64
+ r.lazy_initialize
65
+
66
+ Name = Resolv::DNS::Name
67
+
68
+ ARGV.each do |n|
69
+ argv0 = Name.create(n)
70
+
71
+ unless argv0.absolute?
72
+ if argv0.to_s[0] == ?_
73
+ if argv0.length == 1
74
+ argv0 = Name.create(argv0.to_s + '._tcp')
75
+ end
76
+
77
+ if argv0.length == 2
78
+ argv0 = Name.create(argv0.to_s + '.local')
79
+ end
80
+ else
81
+ if argv0.length == 1
82
+ argv0 = Name.create(argv0.to_s + '.local')
83
+ end
84
+ end
85
+ end
86
+
87
+ puts "#{n} -> #{argv0}"
88
+
89
+ if( opt_addr )
90
+ pp Resolv.getaddress(argv0.to_s)
91
+ else
92
+
93
+ # r.each_resource(argv0, opt_type) do |rr| # BUG - this never times out...
94
+ r.getresources(argv0, opt_type).each do |rr|
95
+ pp rr
96
+
97
+ if opt_recur
98
+ case rr
99
+ when Resolv::DNS::Resource::IN::PTR
100
+ n = rr.name
101
+
102
+ r.each_resource(n, Resolv::DNS::Resource::IN::ANY) do |rr1|
103
+ pp rr1
104
+ end
105
+ # TODO - A query for SRV.target
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift '../../lib'
3
+ $:.unshift '../../ext'
4
+
5
+ require 'optparse'
6
+ require 'dnssd'
7
+
8
+ Thread.abort_on_exception = true
9
+
10
+ options = {}
11
+
12
+ ARGV.options do |opts|
13
+ opts.on('-nnumber_of_services', '--number=number_of_services',
14
+ 'Number of services to register') { |options[:number]| }
15
+ opts.on('-ttype', '--type=servicetype',
16
+ 'Type of service (e.g. _http._tcp)') { |options[:type]| }
17
+ opts.on('-pport','--port=port',
18
+ 'Base port on which to advertise (will increase by 1 for every advertisement)') { |options[:port]| }
19
+ opts.parse!
20
+ end
21
+
22
+
23
+ def register_stress(number, type)
24
+ registrars = []
25
+ 1.upto(number) do |num|
26
+ text_record = DNSSD::TextRecord.new("1st"=>"First#{num}", "last"=>"Last#{num}")
27
+ registrars << DNSSD.register( "ruby stress #{num}",
28
+ type, "local",
29
+ 8080 + num, text_record) do |service, register|
30
+ puts register.inspect
31
+ end
32
+ end
33
+ registrars
34
+ end
35
+
36
+ if __FILE__ == $0 then
37
+ number = options[:number] || 300
38
+ number = number.to_i
39
+ type = options[:type] || "_http._tcp"
40
+ port = options[:port] || 8080
41
+ registrars = register_stress(number, type)
42
+ puts "#{number} services registered...press enter to terminate"
43
+ gets
44
+ registrars.each do |reg|
45
+ reg.stop
46
+ end
47
+ end
48
+
@@ -0,0 +1,24 @@
1
+ begin
2
+ require 'dnssd'
3
+ rescue LoadError => error
4
+ #This is just in case you did not install, but want to test
5
+ $:.unshift '../lib'
6
+ $:.unshift '../ext'
7
+ require 'dnssd'
8
+ end
9
+
10
+ Thread.abort_on_exception = true
11
+
12
+ print "Press <return> to start (and <return to end): "
13
+ $stdin.gets
14
+
15
+
16
+ browse_service = DNSSD.browse('_presence._tcp') do |browse_reply|
17
+ puts browse_reply.inspect
18
+ end
19
+
20
+
21
+ $stdin.gets
22
+
23
+ browse_service.stop
24
+
@@ -0,0 +1,35 @@
1
+ if __FILE__ == $0
2
+ Thread.abort_on_exception = true
3
+ ## Our sample code
4
+ service = DNSSD::Service.advertise_http("Chad's server", 8808) do |service|
5
+ puts service.inspect
6
+ #service.name_changed? {|name| my_widget.update(name) }
7
+ end
8
+ sleep 4
9
+ service.stop
10
+
11
+ #browser = DNSSD::Browser.for_http do |service|
12
+ #host, port = service.resolve #optionally returns [host, port, iface]
13
+ #end
14
+ #sleep 4
15
+ #browser.stop
16
+ #if(browser.more_coming?)
17
+ #puts "blah"
18
+ #end
19
+ #browser.service_discovered? {|service|}
20
+ #browser.service_lost? {|service|}
21
+ #browser.on_changed {
22
+ # get current values for UI update
23
+ #}
24
+ #browser.all_current #=> [service1, service2]
25
+ #browser.changed?
26
+ end
27
+
28
+ =begin
29
+
30
+ collects the resolve results and trys each one (overlap)...when one succeeds, it cancels
31
+ the other checks and returns.
32
+
33
+ =end
34
+
35
+
@@ -0,0 +1,32 @@
1
+ begin
2
+ require 'dnssd'
3
+ rescue LoadError => error
4
+ #This is just in case you did not install, but want to test
5
+ $:.unshift '../lib'
6
+ $:.unshift '../ext'
7
+ require 'dnssd'
8
+ end
9
+
10
+ Thread.abort_on_exception = true
11
+
12
+ require 'dnssd'
13
+
14
+ print "Press <return> to start (and <return to end): "
15
+ $stdin.gets
16
+
17
+ #registrar_no_block = DNSSD.register("hey ruby", "_http._tcp", nil, 8081)
18
+ #registrar_no_block.stop
19
+
20
+ registrar = DNSSD.register("chad ruby", "_http._tcp", nil, 8080) do |register_reply|
21
+ puts "Registration: #{register_reply.inspect}"
22
+ end
23
+ sleep 4
24
+ browse_service = DNSSD.browse('_http._tcp') do |browse_reply|
25
+ puts "Browse: #{browse_reply.inspect}"
26
+ end
27
+
28
+ $stdin.gets
29
+
30
+ registrar.stop
31
+ browse_service.stop
32
+
@@ -0,0 +1,23 @@
1
+ begin
2
+ require 'dnssd'
3
+ rescue LoadError => error
4
+ #This is just in case you did not install, but want to test
5
+ $:.unshift '../lib'
6
+ $:.unshift '../ext'
7
+ require 'dnssd'
8
+ end
9
+
10
+ Thread.abort_on_exception = true
11
+
12
+ require 'dnssd'
13
+
14
+ print "Press <return> to start (and <return to end): "
15
+ $stdin.gets
16
+
17
+ rservice = DNSSD.resolve("foo bar", "_http._tcp", "local") do |resolve_reply|
18
+ puts resolve_reply.inspect
19
+ end
20
+
21
+ rservice.stop
22
+
23
+ $stdin.gets
@@ -0,0 +1,56 @@
1
+ begin
2
+ require 'dnssd'
3
+ rescue LoadError => error
4
+ #This is just in case you did not install, but want to test
5
+ $:.unshift '../lib'
6
+ $:.unshift '../ext'
7
+ require 'dnssd'
8
+ end
9
+
10
+ require 'pp'
11
+
12
+ Thread.abort_on_exception = true
13
+
14
+ class ChatNameResolver
15
+ def self.resolve_add(browse_reply)
16
+ Thread.new(browse_reply) do |browse_reply|
17
+ DNSSD.resolve(browse_reply.name, browse_reply.type, browse_reply.domain) do |resolve_reply|
18
+ puts "Adding: #{resolve_reply.inspect}"
19
+ #pp resolve_reply.text_record
20
+ resolve_reply.service.stop
21
+ end
22
+ end
23
+ end
24
+ def self.resolve_remove(browse_reply)
25
+ Thread.new(browse_reply) do |browse_reply|
26
+ DNSSD.resolve(browse_reply.name, browse_reply.type, browse_reply.domain) do |resolve_reply|
27
+ puts "Removing: #{resolve_reply.inspect}"
28
+ resolve_reply.service.stop
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ print "Press <return> to start (and <return to end): "
35
+ $stdin.gets
36
+
37
+ browse_service = nil
38
+
39
+ Thread.new {
40
+ browse_service = DNSSD.browse('_presence._tcp') do |browse_reply|
41
+ puts "Browsing: #{browse_reply.inspect}"
42
+ if (browse_reply.flags.add?)
43
+ ChatNameResolver.resolve_add(browse_reply)
44
+ else
45
+ ChatNameResolver.resolve_remove(browse_reply)
46
+ end
47
+ end
48
+ sleep 10
49
+ }
50
+
51
+ $stdin.gets
52
+
53
+ browse_service.stop
54
+
55
+ puts browse_service.inspect
56
+
@@ -0,0 +1,58 @@
1
+ #/usr/local/bin/ruby
2
+ #/usr/bin/ruby
3
+
4
+ require 'test/unit'
5
+ begin
6
+ require 'dnssd'
7
+ rescue LoadError => error
8
+ #This is just in case you did not install, but want to test
9
+ $:.unshift '../lib'
10
+ $:.unshift '../ext'
11
+ require 'dnssd'
12
+ end
13
+
14
+ include DNSSD
15
+
16
+ class Test_DNSSD < Test::Unit::TestCase
17
+
18
+ def test_text_record
19
+ tr = TextRecord.new
20
+ tr["key"]="value"
21
+ enc_str = ["key", "value"].join('=')
22
+ enc_str = enc_str.length.chr << enc_str
23
+ assert_equal(enc_str, tr.encode)
24
+
25
+ # should raise type error
26
+ assert_raise(TypeError) do
27
+ tr_new = TextRecord.decode(:HEY)
28
+ end
29
+ tr_new = TextRecord.decode(enc_str)
30
+ assert_equal(tr_new, tr)
31
+
32
+ # new called with just a string should be
33
+ # the same as decode.
34
+ tr_new = TextRecord.new(enc_str)
35
+ assert_equal(tr_new, tr)
36
+ end
37
+
38
+ def test_flags
39
+ f = Flags.new()
40
+ f.more_coming = true
41
+ assert(f.more_coming?)
42
+ assert_equal(Flags::MoreComing, f.to_i)
43
+ f.shared = true
44
+ assert(f.shared?)
45
+ assert_equal(Flags::MoreComing | Flags::Shared, f.to_i)
46
+
47
+ assert_equal(Flags.new(Flags::MoreComing | Flags::Shared), f.to_i)
48
+
49
+ assert_same(true, f.add = true)
50
+ assert(f.add?)
51
+ end
52
+
53
+ def test_browse
54
+ # how to test?
55
+ end
56
+
57
+ end
58
+
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: toolmantim-zeroconf
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Lachie Cox
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-12 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: "Cross-platform zeroconf (aka bonjour\xE2\x84\xA2) library."
17
+ email: lachiec@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ files:
25
+ - README.rdoc
26
+ - Rakefile
27
+ - lib/dnssd.rb
28
+ - lib/net
29
+ - lib/net/dns
30
+ - lib/net/dns/mdns-sd.rb
31
+ - lib/net/dns/mdns.rb
32
+ - lib/net/dns/resolv-mdns.rb
33
+ - lib/net/dns/resolv-replace.rb
34
+ - lib/net/dns/resolv.rb
35
+ - lib/net/dns/resolvx.rb
36
+ - lib/net/dns.rb
37
+ - lib/zeroconf
38
+ - lib/zeroconf/common.rb
39
+ - lib/zeroconf/ext.rb
40
+ - lib/zeroconf/pure.rb
41
+ - lib/zeroconf/version.rb
42
+ - lib/zeroconf.rb
43
+ - originals/dnssd-0.6.0
44
+ - originals/dnssd-0.6.0/COPYING
45
+ - originals/dnssd-0.6.0/README
46
+ - originals/net-mdns-0.4
47
+ - originals/net-mdns-0.4/COPYING
48
+ - originals/net-mdns-0.4/README
49
+ - originals/net-mdns-0.4/TODO
50
+ - samples/exhttp.rb
51
+ - samples/exhttpv1.rb
52
+ - samples/exwebrick.rb
53
+ - samples/mdns-watch.rb
54
+ - samples/mdns.rb
55
+ - samples/test_dns.rb
56
+ - samples/v1demo.rb
57
+ - samples/v1mdns.rb
58
+ - test/stress
59
+ - test/stress/stress_register.rb
60
+ - test/test_browse.rb
61
+ - test/test_highlevel_api.rb
62
+ - test/test_register.rb
63
+ - test/test_resolve.rb
64
+ - test/test_resolve_ichat.rb
65
+ - test/test_textrecord.rb
66
+ has_rdoc: true
67
+ homepage: http://github.com/lachie/zeroconf
68
+ post_install_message:
69
+ rdoc_options: []
70
+
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ version:
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: "0"
84
+ version:
85
+ requirements: []
86
+
87
+ rubyforge_project:
88
+ rubygems_version: 1.2.0
89
+ signing_key:
90
+ specification_version: 2
91
+ summary: "Cross-platform zeroconf (aka bonjour\xE2\x84\xA2) library."
92
+ test_files: []
93
+