forked from calabash/run_loop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdnssd
executable file
·69 lines (52 loc) · 1.21 KB
/
dnssd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env ruby
require "socket"
require "ap"
require "json"
Thread.abort_on_exception = true
trap 'INT' do exit end
trap 'TERM' do exit end
if defined?(Bundler)
raise "This tool cannot be called in the context of bundle exec"
elsif RUBY_PLATFORM[/darwin/]
begin
require "dnssd"
rescue LoadError => _
raise %Q[
This tool requires the dnssd gem which is not installed. Install it:
gem install dnssd --version 2.0
and try again.
]
end
else
raise "This tool is not available on #{RUBY_PLATFORM}"
end
services = []
addresses = []
DNSSD.browse("_calabus._tcp") do |reply|
services << reply
next if reply.flags.more_coming?
added = services.select do |service|
service.flags.add?
end
added.each do |service|
resolved = service.resolve
addr = Socket.getaddrinfo(resolved.target, nil, Socket::AF_INET)
addr.each do |address|
match = addresses.find do |hash|
hash[:service] == service.name
end
if !match
addresses << {
:service => service.name,
:ip => addr[0][2],
:port => resolved.port,
:txt => resolved.text_record
}
end
end
end
json = JSON.generate(addresses)
puts json
exit
end
sleep