dnssd 1.2 → 1.3
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/.autotest +14 -0
- data/History.txt +22 -3
- data/Manifest.txt +15 -0
- data/README.txt +27 -3
- data/Rakefile +5 -4
- data/ext/dnssd/dnssd.c +4 -0
- data/ext/dnssd/dnssd.h +13 -18
- data/ext/dnssd/errors.c +9 -3
- data/ext/dnssd/extconf.rb +51 -44
- data/ext/dnssd/flags.c +68 -14
- data/ext/dnssd/record.c +218 -0
- data/ext/dnssd/service.c +341 -121
- data/lib/dnssd.rb +46 -11
- data/lib/dnssd/record.rb +97 -0
- data/lib/dnssd/reply.rb +39 -92
- data/lib/dnssd/reply/addr_info.rb +47 -0
- data/lib/dnssd/reply/browse.rb +52 -0
- data/lib/dnssd/reply/domain.rb +22 -0
- data/lib/dnssd/reply/query_record.rb +183 -0
- data/lib/dnssd/reply/register.rb +37 -0
- data/lib/dnssd/reply/resolve.rb +105 -0
- data/lib/dnssd/service.rb +123 -16
- data/lib/dnssd/text_record.rb +28 -19
- data/sample/browse.rb +24 -6
- data/sample/enumerate_domains.rb +7 -1
- data/sample/getaddrinfo.rb +28 -0
- data/sample/growl.rb +2 -0
- data/sample/query_record.rb +15 -0
- data/sample/register.rb +19 -20
- data/sample/resolve.rb +31 -7
- data/sample/resolve_ichat.rb +5 -6
- data/sample/server.rb +2 -0
- data/sample/socket.rb +4 -0
- data/test/test_dnssd.rb +6 -4
- data/test/test_dnssd_flags.rb +1 -15
- data/test/test_dnssd_record.rb +92 -0
- data/test/test_dnssd_reply.rb +13 -79
- data/test/test_dnssd_reply_browse.rb +28 -0
- data/test/test_dnssd_reply_query_record.rb +92 -0
- data/test/test_dnssd_reply_resolve.rb +47 -0
- data/test/test_dnssd_service.rb +12 -0
- data/test/test_dnssd_text_record.rb +3 -3
- metadata +32 -11
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/.autotest
CHANGED
@@ -1,10 +1,24 @@
|
|
1
|
+
require 'autotest/restart'
|
1
2
|
begin
|
2
3
|
require 'autotest/fsevent'
|
3
4
|
rescue LoadError
|
4
5
|
end
|
5
6
|
|
7
|
+
Autotest.add_hook :initialize do |at|
|
8
|
+
at.testlib = 'minitest/unit'
|
9
|
+
|
10
|
+
def at.path_to_classname(s)
|
11
|
+
sep = File::SEPARATOR
|
12
|
+
f = s.sub(/^test#{sep}/, '').sub(/\.rb$/, '').split(sep)
|
13
|
+
f = f.map { |path| path.split(/_|(\d+)/).map { |seg| seg.capitalize }.join }
|
14
|
+
f = f.map { |path| path =~ /^Test/ ? path : "Test#{path}" }
|
15
|
+
f.join('::').sub 'Dnssd', 'DNSSD'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
6
19
|
Autotest.add_hook :run_command do |at|
|
7
20
|
at.unit_diff = 'cat'
|
21
|
+
|
8
22
|
if ENV['ONENINE']
|
9
23
|
system "rake1.9 compile"
|
10
24
|
else
|
data/History.txt
CHANGED
@@ -1,12 +1,31 @@
|
|
1
|
-
=== 1.
|
1
|
+
=== 1.3 / 2009-08-18
|
2
2
|
|
3
|
-
*
|
3
|
+
* 4 major enhancements
|
4
|
+
* Added DNSSD::Service.get_property
|
5
|
+
* Added DNSSD::Service#getaddrinfo
|
6
|
+
* Added DNSSD::Service#add_record
|
7
|
+
* Added DNSSD::Service#query_record
|
8
|
+
|
9
|
+
* 5 minor enhancements
|
10
|
+
* DNSSD::Reply#connect now uses DNSSD::Service#getaddrinfo (faster)
|
11
|
+
* DNSSD::Service#register behaves properly when blockless
|
12
|
+
* Broke up DNSSD::Reply into specific subclasses
|
13
|
+
* Added sample/query_record.rb
|
14
|
+
* sample/*.rb work with each other now for clarity of implementation
|
15
|
+
|
16
|
+
* 2 bug fixes
|
17
|
+
* Fix hierarchical domains like <tt>\.mac\.name.members.mac.com.</tt>
|
18
|
+
* Fix compilation against avahi 0.6.25
|
19
|
+
|
20
|
+
=== 1.2 / 2009-08-11
|
21
|
+
|
22
|
+
* 4 major enhancements
|
4
23
|
* DNSSD::Service is now directly instantiable
|
5
24
|
* DNSSD.announce which registers a server socket you've created
|
6
25
|
* DNSSD::Reply.connect which connects to a browsed service
|
7
26
|
* Fix asynchronous service shutdown crash
|
8
27
|
|
9
|
-
*
|
28
|
+
* 8 minor enhancements
|
10
29
|
* DNSSD.resolve now optionally accepts a DNSSD::Reply from DNSSD.browse
|
11
30
|
* Use rb_thread_wait_fd instead of custom rb_thread_select code
|
12
31
|
* DNSSD::Reply#protocol and DNSSD::Reply#service_name
|
data/Manifest.txt
CHANGED
@@ -8,15 +8,25 @@ ext/dnssd/dnssd.h
|
|
8
8
|
ext/dnssd/errors.c
|
9
9
|
ext/dnssd/extconf.rb
|
10
10
|
ext/dnssd/flags.c
|
11
|
+
ext/dnssd/record.c
|
11
12
|
ext/dnssd/service.c
|
12
13
|
lib/dnssd.rb
|
13
14
|
lib/dnssd/flags.rb
|
15
|
+
lib/dnssd/record.rb
|
14
16
|
lib/dnssd/reply.rb
|
17
|
+
lib/dnssd/reply/addr_info.rb
|
18
|
+
lib/dnssd/reply/browse.rb
|
19
|
+
lib/dnssd/reply/domain.rb
|
20
|
+
lib/dnssd/reply/query_record.rb
|
21
|
+
lib/dnssd/reply/register.rb
|
22
|
+
lib/dnssd/reply/resolve.rb
|
15
23
|
lib/dnssd/service.rb
|
16
24
|
lib/dnssd/text_record.rb
|
17
25
|
sample/browse.rb
|
18
26
|
sample/enumerate_domains.rb
|
27
|
+
sample/getaddrinfo.rb
|
19
28
|
sample/growl.rb
|
29
|
+
sample/query_record.rb
|
20
30
|
sample/register.rb
|
21
31
|
sample/resolve.rb
|
22
32
|
sample/resolve_ichat.rb
|
@@ -24,5 +34,10 @@ sample/server.rb
|
|
24
34
|
sample/socket.rb
|
25
35
|
test/test_dnssd.rb
|
26
36
|
test/test_dnssd_flags.rb
|
37
|
+
test/test_dnssd_record.rb
|
27
38
|
test/test_dnssd_reply.rb
|
39
|
+
test/test_dnssd_reply_browse.rb
|
40
|
+
test/test_dnssd_reply_query_record.rb
|
41
|
+
test/test_dnssd_reply_resolve.rb
|
42
|
+
test/test_dnssd_service.rb
|
28
43
|
test/test_dnssd_text_record.rb
|
data/README.txt
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
|
3
3
|
* http://rubyforge.org/projects/dnssd
|
4
4
|
* http://github.com/tenderlove/dnssd
|
5
|
+
* http://developer.apple.com/documentation/Networking/Conceptual/dns_discovery_api/Introduction.html
|
5
6
|
|
6
7
|
== DESCRIPTION:
|
7
8
|
|
8
9
|
DNS Service Discovery (aka Bonjour, MDNS) API for Ruby. Implements browsing,
|
9
|
-
resolving, registration and domain enumeration.
|
10
|
+
resolving, registration and domain enumeration. Supports avahi's DNSSD
|
11
|
+
compatibility layer for avahi 0.6.25 or newer.
|
10
12
|
|
11
13
|
== FEATURES/PROBLEMS:
|
12
14
|
|
@@ -16,7 +18,7 @@ resolving, registration and domain enumeration.
|
|
16
18
|
|
17
19
|
== SYNOPSIS:
|
18
20
|
|
19
|
-
See the sample directory (Hint: gem contents --prefix dnssd)
|
21
|
+
See the sample directory (Hint: <tt>gem contents --prefix dnssd</tt>)
|
20
22
|
|
21
23
|
Registering a service:
|
22
24
|
|
@@ -35,15 +37,37 @@ Browsing services:
|
|
35
37
|
== REQUIREMENTS:
|
36
38
|
|
37
39
|
* OS X
|
38
|
-
* The dns-sd library on other operating systems
|
40
|
+
* The dns-sd library on other operating systems
|
41
|
+
* avahi 0.6.25+
|
39
42
|
|
40
43
|
== INSTALL:
|
41
44
|
|
42
45
|
sudo gem install dnssd
|
43
46
|
|
47
|
+
If you have dnssd installed in a non-standard location you can use the build
|
48
|
+
options --with-dnssd-dir and --with-dnssd-lib:
|
49
|
+
|
50
|
+
sudo gem install dnssd -- \
|
51
|
+
--with-dnssd-dir=/path/to/dnssd \
|
52
|
+
--with-dnssd-lib=/path/to/lib/dnssd
|
53
|
+
|
54
|
+
Using the default Bonjour SDK install for Windows, the command to build
|
55
|
+
the Ruby dnssd extension will look like this:
|
56
|
+
|
57
|
+
# Windows 2000 or Windows XP
|
58
|
+
sudo gem install dnssd -- \
|
59
|
+
--with-dnssd-dir=c:/progra~1/bonjou~1 \
|
60
|
+
--with-dnssd-lib=c:/progra~1/bonjou~1/lib/win32
|
61
|
+
|
62
|
+
# Windows Vista and later
|
63
|
+
sudo gem install dnssd -- \
|
64
|
+
--with-dnssd-dir=c:/progra~2/bonjou~1 \
|
65
|
+
--with-dnssd-lib=c:/progra~2/bonjou~1/lib/win32
|
66
|
+
|
44
67
|
== LICENSE:
|
45
68
|
|
46
69
|
Copyright (c) 2004 Chad Fowler, Charles Mills, Rich Kilmer
|
70
|
+
|
47
71
|
Copyright (c) 2009 Phil Hagelberg, Aaron Patterson, Eric Hodel
|
48
72
|
|
49
73
|
Licensed under the ruby license
|
data/Rakefile
CHANGED
@@ -10,12 +10,12 @@ Hoe.plugin :git
|
|
10
10
|
HOE = Hoe.spec 'dnssd' do
|
11
11
|
self.rubyforge_name = 'dnssd'
|
12
12
|
|
13
|
+
developer 'Eric Hodel', 'drbrain@segment.net'
|
14
|
+
developer 'Aaron Patterson', 'aaronp@rubyforge.org'
|
15
|
+
developer 'Phil Hagelberg', 'phil@hagelb.org'
|
13
16
|
developer 'Chad Fowler', 'chad@chadfowler.com'
|
14
17
|
developer 'Charles Mills', ''
|
15
18
|
developer 'Rich Kilmer', ''
|
16
|
-
developer 'Phil Hagelberg', 'phil@hagelb.org'
|
17
|
-
developer 'Aaron Patterson', 'aaronp@rubyforge.org'
|
18
|
-
developer 'Eric Hodel', 'drbrain@segment.net'
|
19
19
|
|
20
20
|
spec_extras[:extensions] = 'ext/dnssd/extconf.rb'
|
21
21
|
|
@@ -23,13 +23,14 @@ HOE = Hoe.spec 'dnssd' do
|
|
23
23
|
|
24
24
|
extra_dev_deps << ['hoe-seattlerb', '~> 1.2']
|
25
25
|
extra_dev_deps << ['minitest', '~> 1.4']
|
26
|
-
extra_dev_deps << ['rake-
|
26
|
+
extra_dev_deps << ['rake-compiler', '~> 0.6']
|
27
27
|
end
|
28
28
|
|
29
29
|
require 'rake/extensiontask'
|
30
30
|
|
31
31
|
Rake::ExtensionTask.new 'dnssd', HOE.spec do |ext|
|
32
32
|
ext.lib_dir = File.join 'lib', 'dnssd'
|
33
|
+
ext.config_options << '--with-warnings'
|
33
34
|
end
|
34
35
|
|
35
36
|
task :test => :compile
|
data/ext/dnssd/dnssd.c
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
void Init_DNSSD_Errors(void);
|
4
4
|
void Init_DNSSD_Flags(void);
|
5
|
+
void Init_DNSSD_Record(void);
|
5
6
|
void Init_DNSSD_Service(void);
|
6
7
|
|
7
8
|
/*
|
@@ -82,9 +83,11 @@ Init_dnssd(void) {
|
|
82
83
|
rb_define_const(mDNSSD, "InterfaceLocalOnly",
|
83
84
|
ULONG2NUM(kDNSServiceInterfaceIndexLocalOnly));
|
84
85
|
|
86
|
+
#ifdef kDNSServiceInterfaceIndexUnicast
|
85
87
|
/* Unicast interfaces */
|
86
88
|
rb_define_const(mDNSSD, "InterfaceUnicast",
|
87
89
|
ULONG2NUM(kDNSServiceInterfaceIndexUnicast));
|
90
|
+
#endif
|
88
91
|
|
89
92
|
rb_define_singleton_method(mDNSSD, "getservbyport", dnssd_getservbyport, -1);
|
90
93
|
|
@@ -93,6 +96,7 @@ Init_dnssd(void) {
|
|
93
96
|
|
94
97
|
Init_DNSSD_Errors();
|
95
98
|
Init_DNSSD_Flags();
|
99
|
+
Init_DNSSD_Record();
|
96
100
|
Init_DNSSD_Service();
|
97
101
|
}
|
98
102
|
|
data/ext/dnssd/dnssd.h
CHANGED
@@ -4,27 +4,22 @@
|
|
4
4
|
#include <ruby.h>
|
5
5
|
#include <dns_sd.h>
|
6
6
|
|
7
|
-
/*
|
8
|
-
#
|
9
|
-
#include <
|
10
|
-
|
11
|
-
|
7
|
+
#include <arpa/inet.h> /* htons ntohs */
|
8
|
+
#include <sys/socket.h> /* struct sockaddr_in */
|
9
|
+
#include <netdb.h> /* getservbyport */
|
10
|
+
|
11
|
+
/* if_indextoname and if_nametoindex */
|
12
|
+
#ifdef HAVE_IPHLPAPI_H
|
13
|
+
#include <iphlpapi.h> /* Vista and newer */
|
14
|
+
#else
|
12
15
|
#include <sys/types.h>
|
13
|
-
#endif
|
14
|
-
#ifdef HAVE_SYS_SOCKET_H
|
15
|
-
#include <sys/socket.h>
|
16
|
-
#endif
|
17
|
-
#ifdef HAVE_SYS_PARAM_H
|
18
|
-
#include <sys/param.h>
|
19
|
-
#endif
|
20
|
-
#ifdef HAVE_NET_IF_H
|
21
16
|
#include <net/if.h>
|
22
17
|
#endif
|
23
|
-
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
18
|
+
|
19
|
+
#ifdef HAVE_ST_SIN_LEN
|
20
|
+
#define SIN_LEN(si) (si)->sin_len
|
21
|
+
#else
|
22
|
+
#define SIN_LEN(si) sizeof(struct sockaddr_in)
|
28
23
|
#endif
|
29
24
|
|
30
25
|
extern VALUE eDNSSDError;
|
data/ext/dnssd/errors.c
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
#include "dnssd.h"
|
2
|
-
#include <assert.h>
|
3
2
|
|
4
3
|
VALUE eDNSSDError;
|
5
4
|
static VALUE eDNSSDUnknownError;
|
@@ -11,8 +10,13 @@ static VALUE dnssd_errors[DNSSD_ERROR_END - DNSSD_ERROR_START];
|
|
11
10
|
|
12
11
|
static void
|
13
12
|
dnssd_errors_store(VALUE error, DNSServiceErrorType err) {
|
14
|
-
|
15
|
-
|
13
|
+
if (DNSSD_ERROR_START <= err && err <= DNSSD_ERROR_END) {
|
14
|
+
dnssd_errors[err - DNSSD_ERROR_START] = error;
|
15
|
+
} else {
|
16
|
+
rb_raise(eDNSSDError,
|
17
|
+
"invalid error number %d (expected between %d and %d)",
|
18
|
+
err, DNSSD_ERROR_START, DNSSD_ERROR_END);
|
19
|
+
}
|
16
20
|
}
|
17
21
|
|
18
22
|
void
|
@@ -107,6 +111,7 @@ Init_DNSSD_Errors(void) {
|
|
107
111
|
error_class = rb_define_class_under(mDNSSD, "BadTimeError", eDNSSDError);
|
108
112
|
dnssd_errors_store(error_class, kDNSServiceErr_BadTime);
|
109
113
|
|
114
|
+
#ifdef HAVE_KDNSSERVICEERR_BADSIG
|
110
115
|
error_class = rb_define_class_under(mDNSSD, "BadSigError", eDNSSDError);
|
111
116
|
dnssd_errors_store(error_class, kDNSServiceErr_BadSig);
|
112
117
|
|
@@ -124,4 +129,5 @@ Init_DNSSD_Errors(void) {
|
|
124
129
|
|
125
130
|
error_class = rb_define_class_under(mDNSSD, "NATPortMappingDisabled", eDNSSDError);
|
126
131
|
dnssd_errors_store(error_class, kDNSServiceErr_NATPortMappingDisabled);
|
132
|
+
#endif
|
127
133
|
}
|
data/ext/dnssd/extconf.rb
CHANGED
@@ -1,59 +1,66 @@
|
|
1
|
-
|
2
|
-
# :stopdoc:
|
3
|
-
#
|
4
|
-
# Extension configuration script for DNS_SD C Extension.
|
1
|
+
require 'mkmf'
|
5
2
|
|
6
|
-
|
7
|
-
funcs.flatten!
|
8
|
-
funcs.each do |f|
|
9
|
-
abort("need function #{f}") unless have_func(f)
|
10
|
-
end
|
11
|
-
end
|
3
|
+
$CFLAGS << ' -Wall' if with_config 'warnings'
|
12
4
|
|
13
|
-
|
5
|
+
dir_config 'dnssd'
|
14
6
|
|
15
|
-
|
16
|
-
$CFLAGS << " -DDEBUG" if $DEBUG
|
7
|
+
abort 'unable to find dnssd header' unless have_header 'dns_sd.h'
|
17
8
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
9
|
+
have_library('dnssd') ||
|
10
|
+
have_library('dns_sd') ||
|
11
|
+
have_library('mdns') ||
|
12
|
+
have_library('System') ||
|
13
|
+
abort('unable to find dnssd library')
|
23
14
|
|
24
|
-
|
25
|
-
|
26
|
-
|
15
|
+
have_macro('htons', 'arpa/inet.h') ||
|
16
|
+
have_func('htons', 'arpa/inet.h') ||
|
17
|
+
abort("couldn't find htons")
|
27
18
|
|
28
|
-
|
29
|
-
|
30
|
-
|
19
|
+
have_macro('ntohs', 'arpa/inet.h') ||
|
20
|
+
have_func('ntohs', 'arpa/inet.h') ||
|
21
|
+
abort("couldn't find ntohs")
|
31
22
|
|
32
|
-
|
23
|
+
# These functions live in netioapi.h on Windows, not net/if.h. The MSDN
|
24
|
+
# documentation says to include iphlpapi.h, not netioapi.h directly.
|
25
|
+
#
|
26
|
+
# Note, however, that these functions only exist on Vista/Server 2008 or later.
|
27
|
+
# On Windows XP and earlier you will have to define a custom version of each
|
28
|
+
# function using native functions, such as ConvertInterfaceIndexToLuid() and
|
29
|
+
# ConvertInterfaceLuidToNameA().
|
30
|
+
#
|
31
|
+
if have_header 'iphlpapi.h' then
|
32
|
+
have_func('if_indextoname', %w[iphlpapi.h netioapi.h]) &&
|
33
|
+
have_func('if_nametoindex', %w[iphlpapi.h netioapi.h]) ||
|
34
|
+
abort('unable to find if_indextoname or if_nametoindex')
|
35
|
+
else
|
36
|
+
have_func('if_indextoname', %w[sys/types.h sys/socket.h net/if.h]) &&
|
37
|
+
have_func('if_nametoindex', %w[sys/types.h sys/socket.h net/if.h]) ||
|
38
|
+
abort('unable to find if_indextoname or if_nametoindex')
|
39
|
+
end
|
33
40
|
|
34
|
-
|
35
|
-
|
36
|
-
have_header "sys/socket.h"
|
37
|
-
have_header "sys/param.h"
|
38
|
-
have_header "sys/if.h"
|
39
|
-
have_header "net/if.h"
|
40
|
-
have_header "arpa/inet.h"
|
41
|
-
have_header "netdb.h"
|
41
|
+
have_func('getservbyport', 'netdb.h') ||
|
42
|
+
abort('unable to find getservbyport')
|
42
43
|
|
43
|
-
|
44
|
-
abort
|
44
|
+
have_type('struct sockaddr_in', 'netinet/in.h') ||
|
45
|
+
abort('unable to find struct sockaddr_in')
|
45
46
|
|
46
|
-
|
47
|
-
|
47
|
+
have_struct_member 'struct sockaddr_in', 'sin_len', 'netinet/in.h'
|
48
|
+
# otherwise, use sizeof()
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
50
|
+
puts
|
51
|
+
puts 'checking for missing avahi features'
|
52
|
+
# avahi 0.6.25 is missing these functions
|
53
|
+
have_func 'DNSServiceGetProperty', 'dns_sd.h'
|
54
|
+
have_func 'DNSServiceGetAddrInfo', 'dns_sd.h'
|
52
55
|
|
53
|
-
#
|
54
|
-
|
56
|
+
# avahi 0.6.25 is missing these flags
|
57
|
+
have_func 'kDNSServiceFlagsForce', 'dns_sd.h'
|
58
|
+
have_func 'kDNSServiceFlagsNonBrowsable', 'dns_sd.h'
|
59
|
+
have_func 'kDNSServiceFlagsReturnIntermediates', 'dns_sd.h'
|
60
|
+
have_func 'kDNSServiceFlagsShareConnection', 'dns_sd.h'
|
55
61
|
|
56
|
-
|
62
|
+
# avahi 0.6.25 is missing errors after BadTime
|
63
|
+
have_func 'kDNSServiceErr_BadSig', 'dns_sd.h'
|
57
64
|
|
58
|
-
|
65
|
+
create_makefile 'dnssd'
|
59
66
|
|
data/ext/dnssd/flags.c
CHANGED
@@ -1,31 +1,43 @@
|
|
1
1
|
#include "dnssd.h"
|
2
2
|
|
3
3
|
/* dnssd flags, flag IDs, flag names */
|
4
|
-
#define DNSSD_MAX_FLAGS
|
4
|
+
#define DNSSD_MAX_FLAGS 15
|
5
5
|
|
6
6
|
static const DNSServiceFlags dnssd_flag[DNSSD_MAX_FLAGS] = {
|
7
7
|
kDNSServiceFlagsMoreComing,
|
8
|
-
|
9
8
|
kDNSServiceFlagsAdd,
|
10
9
|
kDNSServiceFlagsDefault,
|
11
|
-
|
12
10
|
kDNSServiceFlagsNoAutoRename,
|
13
|
-
|
14
11
|
kDNSServiceFlagsShared,
|
15
12
|
kDNSServiceFlagsUnique,
|
16
|
-
|
17
13
|
kDNSServiceFlagsBrowseDomains,
|
18
14
|
kDNSServiceFlagsRegistrationDomains,
|
19
|
-
|
20
15
|
kDNSServiceFlagsLongLivedQuery,
|
21
|
-
|
22
16
|
kDNSServiceFlagsAllowRemoteQuery,
|
17
|
+
kDNSServiceFlagsForceMulticast
|
18
|
+
#ifdef HAVE_KDNSSERVICEFLAGSFORCE
|
19
|
+
, kDNSServiceFlagsForce
|
20
|
+
#else
|
21
|
+
, (DNSServiceFlags)NULL
|
22
|
+
#endif
|
23
23
|
|
24
|
-
|
24
|
+
#ifdef HAVE_KDNSSERVICEFLAGSRETURNINTERMEDIATES
|
25
|
+
, kDNSServiceFlagsReturnIntermediates
|
26
|
+
#else
|
27
|
+
, (DNSServiceFlags)NULL
|
28
|
+
#endif
|
25
29
|
|
26
|
-
|
30
|
+
#ifdef HAVE_KDNSSERVICEFLAGSNONBROWSABLE
|
31
|
+
, kDNSServiceFlagsNonBrowsable
|
32
|
+
#else
|
33
|
+
, (DNSServiceFlags)NULL
|
34
|
+
#endif
|
27
35
|
|
28
|
-
|
36
|
+
#ifdef HAVE_KDNSSERVICEFLAGSSHARECONNECTION
|
37
|
+
, kDNSServiceFlagsShareConnection
|
38
|
+
#else
|
39
|
+
, (DNSServiceFlags)NULL
|
40
|
+
#endif
|
29
41
|
};
|
30
42
|
|
31
43
|
static const char *dnssd_flag_name[DNSSD_MAX_FLAGS] = {
|
@@ -41,7 +53,9 @@ static const char *dnssd_flag_name[DNSSD_MAX_FLAGS] = {
|
|
41
53
|
"allow_remote_query",
|
42
54
|
"force_multicast",
|
43
55
|
"force",
|
44
|
-
"return_intermediates"
|
56
|
+
"return_intermediates",
|
57
|
+
"non_browsable",
|
58
|
+
"share_connection"
|
45
59
|
};
|
46
60
|
|
47
61
|
void
|
@@ -54,7 +68,7 @@ Init_DNSSD_Flags(void) {
|
|
54
68
|
cDNSSDFlags = rb_define_class_under(mDNSSD, "Flags", rb_cObject);
|
55
69
|
|
56
70
|
/* flag constants */
|
57
|
-
#if DNSSD_MAX_FLAGS !=
|
71
|
+
#if DNSSD_MAX_FLAGS != 15
|
58
72
|
#error The code below needs to be updated.
|
59
73
|
#endif
|
60
74
|
|
@@ -96,6 +110,24 @@ Init_DNSSD_Flags(void) {
|
|
96
110
|
rb_define_const(cDNSSDFlags, "NoAutoRename",
|
97
111
|
ULONG2NUM(kDNSServiceFlagsNoAutoRename));
|
98
112
|
|
113
|
+
#ifdef kDNSServiceFlagsShareConnection
|
114
|
+
/* For efficiency, clients that perform many concurrent operations may want
|
115
|
+
* to use a single Unix Domain Socket connection with the background daemon,
|
116
|
+
* instead of having a separate connection for each independent operation. To
|
117
|
+
* use this mode, clients first call DNSServiceCreateConnection(&MainRef) to
|
118
|
+
* initialize the main DNSServiceRef. For each subsequent operation that is
|
119
|
+
* to share that same connection, the client copies the MainRef, and then
|
120
|
+
* passes the address of that copy, setting the ShareConnection flag to tell
|
121
|
+
* the library that this DNSServiceRef is not a typical uninitialized
|
122
|
+
* DNSServiceRef; it's a copy of an existing DNSServiceRef whose connection
|
123
|
+
* information should be reused.
|
124
|
+
*
|
125
|
+
* NOTE: Not currently supported
|
126
|
+
*/
|
127
|
+
rb_define_const(cDNSSDFlags, "ShareConnection",
|
128
|
+
ULONG2NUM(kDNSServiceFlagsShareConnection));
|
129
|
+
#endif
|
130
|
+
|
99
131
|
/* Flag for registering individual records on a connected DNSSD::Service.
|
100
132
|
*
|
101
133
|
* DNSSD::Flags::Shared indicates that there may be multiple records with
|
@@ -148,6 +180,7 @@ Init_DNSSD_Flags(void) {
|
|
148
180
|
rb_define_const(cDNSSDFlags, "ForceMulticast",
|
149
181
|
ULONG2NUM(kDNSServiceFlagsForceMulticast));
|
150
182
|
|
183
|
+
#ifdef HAVE_KDNSSERVICEFLAGSFORCE
|
151
184
|
/* Flag for signifying a "stronger" variant of an operation. Currently
|
152
185
|
* defined only for DNSSD.reconfirm_record, where it forces a record to
|
153
186
|
* be removed from the cache immediately, instead of querying for a few
|
@@ -158,7 +191,21 @@ Init_DNSSD_Flags(void) {
|
|
158
191
|
* instance will disappear, and then re-appear moments later.
|
159
192
|
*/
|
160
193
|
rb_define_const(cDNSSDFlags, "Force", ULONG2NUM(kDNSServiceFlagsForce));
|
194
|
+
#endif
|
195
|
+
|
196
|
+
#ifdef HAVE_KDNSSERVICEFLAGSNONBROWSABLE
|
197
|
+
/* A service registered with the NonBrowsable flag set can be resolved using
|
198
|
+
* DNSServiceResolve(), but will not be discoverable using
|
199
|
+
* DNSServiceBrowse(). This is for cases where the name is actually a GUID;
|
200
|
+
* it is found by other means; there is no end-user benefit to browsing to
|
201
|
+
* find a long list of opaque GUIDs. Using the NonBrowsable flag creates
|
202
|
+
* SRV+TXT without the cost of also advertising an associated PTR record.
|
203
|
+
*/
|
204
|
+
rb_define_const(cDNSSDFlags, "NonBrowsable",
|
205
|
+
ULONG2NUM(kDNSServiceFlagsNonBrowsable));
|
206
|
+
#endif
|
161
207
|
|
208
|
+
#ifdef HAVE_KDNSSERVICEFLAGSRETURNINTERMEDIATES
|
162
209
|
/* Flag for returning intermediate results. For example, if a query results
|
163
210
|
* in an authoritative NXDomain (name does not exist) then that result is
|
164
211
|
* returned to the client. However the query is not implicitly cancelled --
|
@@ -172,12 +219,19 @@ Init_DNSSD_Flags(void) {
|
|
172
219
|
*/
|
173
220
|
rb_define_const(cDNSSDFlags, "ReturnIntermediates",
|
174
221
|
ULONG2NUM(kDNSServiceFlagsReturnIntermediates));
|
222
|
+
#endif
|
223
|
+
|
224
|
+
#ifdef HAVE_KDNSSERVICEFLAGSSHARECONNECTION
|
225
|
+
rb_define_const(cDNSSDFlags, "ShareConnection",
|
226
|
+
ULONG2NUM(kDNSServiceFlagsShareConnection));
|
227
|
+
#endif
|
175
228
|
|
176
229
|
flags_hash = rb_hash_new();
|
177
230
|
|
178
231
|
for (i = 0; i < DNSSD_MAX_FLAGS; i++) {
|
179
|
-
|
180
|
-
|
232
|
+
if (dnssd_flag[i])
|
233
|
+
rb_hash_aset(flags_hash, rb_str_new2(dnssd_flag_name[i]),
|
234
|
+
ULONG2NUM(dnssd_flag[i]));
|
181
235
|
}
|
182
236
|
|
183
237
|
/* Hash of flags => flag_name */
|