dnssd 1.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +15 -0
- data/History.txt +12 -0
- data/Manifest.txt +17 -3
- data/Rakefile +3 -0
- data/ext/dnssd/dnssd.c +8 -128
- data/ext/dnssd/dnssd.h +0 -27
- data/ext/dnssd/errors.c +105 -0
- data/ext/dnssd/extconf.rb +12 -7
- data/ext/dnssd/flags.c +124 -0
- data/ext/dnssd/{dnssd_service.c → service.c} +350 -248
- data/lib/dnssd.rb +4 -1
- data/lib/dnssd/flags.rb +104 -0
- data/lib/dnssd/reply.rb +87 -0
- data/lib/dnssd/service.rb +15 -0
- data/lib/dnssd/text_record.rb +69 -0
- data/sample/browse.rb +11 -0
- data/sample/growl.rb +14 -0
- data/sample/highlevel_api.rb +30 -0
- data/sample/register.rb +30 -0
- data/sample/resolve.rb +13 -0
- data/sample/resolve_ichat.rb +36 -0
- data/test/test_dnssd_reply.rb +64 -0
- data/test/test_dnssd_text_record.rb +83 -0
- metadata +23 -28
- data.tar.gz.sig +0 -0
- data/ext/dnssd/dnssd_structs.c +0 -397
- data/ext/dnssd/dnssd_tr.c +0 -248
- metadata.gz.sig +0 -0
data/.autotest
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'autotest/restart'
|
2
|
+
|
3
|
+
Autotest.add_hook :initialize do |at|
|
4
|
+
at.testlib = 'minitest/unit'
|
5
|
+
|
6
|
+
def at.path_to_classname(s)
|
7
|
+
sep = File::SEPARATOR
|
8
|
+
f = s.sub(/^test#{sep}/, '').sub(/\.rb$/, '').split(sep)
|
9
|
+
f = f.map { |path| path.split(/_|(\d+)/).map { |seg| seg.capitalize }.join }
|
10
|
+
f = f.map { |path| path =~ /^Test/ ? path : "Test#{path}" }
|
11
|
+
f.join('::').sub 'Dnssd', 'DNSSD'
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
=== 1.1.0 / 2009-08-10
|
2
|
+
|
3
|
+
* 2 Major enhancements
|
4
|
+
* Packaging files that need to be here
|
5
|
+
* Increased the version number
|
6
|
+
|
7
|
+
* 1 Minor enhancement
|
8
|
+
* Less C codes
|
9
|
+
|
10
|
+
* 1 Bugfix
|
11
|
+
* Increased INTERNET!
|
12
|
+
|
1
13
|
=== 0.7.2 / 2009-08-05
|
2
14
|
|
3
15
|
* 1 major enhancement
|
data/Manifest.txt
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
.autotest
|
1
2
|
History.txt
|
2
3
|
Manifest.txt
|
3
4
|
README.txt
|
@@ -5,8 +6,21 @@ Rakefile
|
|
5
6
|
ext/dnssd/dns_sd.h
|
6
7
|
ext/dnssd/dnssd.c
|
7
8
|
ext/dnssd/dnssd.h
|
8
|
-
ext/dnssd/
|
9
|
-
ext/dnssd/dnssd_structs.c
|
10
|
-
ext/dnssd/dnssd_tr.c
|
9
|
+
ext/dnssd/errors.c
|
11
10
|
ext/dnssd/extconf.rb
|
11
|
+
ext/dnssd/flags.c
|
12
|
+
ext/dnssd/service.c
|
12
13
|
lib/dnssd.rb
|
14
|
+
lib/dnssd/flags.rb
|
15
|
+
lib/dnssd/reply.rb
|
16
|
+
lib/dnssd/service.rb
|
17
|
+
lib/dnssd/text_record.rb
|
18
|
+
sample/browse.rb
|
19
|
+
sample/growl.rb
|
20
|
+
sample/highlevel_api.rb
|
21
|
+
sample/register.rb
|
22
|
+
sample/resolve.rb
|
23
|
+
sample/resolve_ichat.rb
|
24
|
+
test/test_dnssd_flags.rb
|
25
|
+
test/test_dnssd_reply.rb
|
26
|
+
test/test_dnssd_text_record.rb
|
data/Rakefile
CHANGED
@@ -5,6 +5,7 @@ require 'hoe'
|
|
5
5
|
|
6
6
|
Hoe.plugin :minitest
|
7
7
|
Hoe.plugin :email
|
8
|
+
Hoe.plugin :git
|
8
9
|
|
9
10
|
HOE = Hoe.spec 'dnssd' do
|
10
11
|
self.rubyforge_name = 'dnssd'
|
@@ -31,4 +32,6 @@ Rake::ExtensionTask.new 'dnssd', HOE.spec do |ext|
|
|
31
32
|
ext.lib_dir = File.join 'lib', 'dnssd'
|
32
33
|
end
|
33
34
|
|
35
|
+
task :test => :compile
|
36
|
+
|
34
37
|
# vim: syntax=Ruby
|
data/ext/dnssd/dnssd.c
CHANGED
@@ -1,141 +1,21 @@
|
|
1
|
-
/*
|
2
|
-
* == Authors
|
3
|
-
* Chad Fowler, Charles Mills, Rich Kilmer
|
4
|
-
*
|
5
|
-
* == Copyright
|
6
|
-
* Copyright (c) 2004 Chad Fowler, Charles Mills, Rich Kilmer
|
7
|
-
* Licensed under the same terms as Ruby.
|
8
|
-
* This software has absolutely no warranty.
|
9
|
-
*/
|
10
|
-
|
11
1
|
#include "dnssd.h"
|
12
|
-
#include <assert.h>
|
13
|
-
|
14
|
-
VALUE mDNSSD;
|
15
|
-
VALUE eDNSSDError;
|
16
|
-
static VALUE eDNSSDUnknownError;
|
17
|
-
|
18
|
-
#define DNSSD_ERROR_START (-65556)
|
19
|
-
#define DNSSD_ERROR_END (-65536)
|
20
|
-
|
21
|
-
static VALUE dnssd_errors[DNSSD_ERROR_END - DNSSD_ERROR_START];
|
22
|
-
|
23
|
-
static void
|
24
|
-
dnssd_errors_store(VALUE error, int num) {
|
25
|
-
assert(DNSSD_ERROR_START <= num && num < DNSSD_ERROR_END);
|
26
|
-
dnssd_errors[num - DNSSD_ERROR_START] = error;
|
27
|
-
}
|
28
2
|
|
29
|
-
void
|
30
|
-
|
31
|
-
|
32
|
-
if (num) {
|
33
|
-
if(DNSSD_ERROR_START <= num && num < DNSSD_ERROR_END) {
|
34
|
-
rb_raise(dnssd_errors[num - DNSSD_ERROR_START],
|
35
|
-
"DNSSD operation failed with error code: %d", num);
|
36
|
-
} else {
|
37
|
-
rb_raise(eDNSSDUnknownError,
|
38
|
-
"DNSSD operation failed with unrecognized error code: %d", num);
|
39
|
-
}
|
40
|
-
}
|
41
|
-
}
|
3
|
+
void Init_DNSSD_Errors(void);
|
4
|
+
void Init_DNSSD_Flags(void);
|
5
|
+
void Init_DNSSD_Service(void);
|
42
6
|
|
43
7
|
void
|
44
|
-
|
45
|
-
|
46
|
-
"cannot instantiate %s, use DNSSD "
|
47
|
-
"enumerate_domains(), browse(), resolve() or register() instead",
|
48
|
-
what);
|
49
|
-
}
|
50
|
-
|
51
|
-
/*
|
52
|
-
* Document-module: DNSSD
|
53
|
-
*
|
54
|
-
*/
|
55
|
-
|
56
|
-
static void
|
57
|
-
Init_DNSSD(void) {
|
58
|
-
VALUE error_class;
|
59
|
-
mDNSSD = rb_define_module("DNSSD");
|
60
|
-
eDNSSDError = rb_define_class_under(mDNSSD, "Error", rb_eStandardError);
|
8
|
+
Init_dnssd(void) {
|
9
|
+
VALUE mDNSSD = rb_define_module("DNSSD");
|
61
10
|
|
62
11
|
/* Specifies all interfaces. */
|
63
12
|
rb_define_const(mDNSSD, "InterfaceAny", ULONG2NUM(kDNSServiceInterfaceIndexAny));
|
13
|
+
|
64
14
|
/* Specifies local interfaces only. */
|
65
15
|
rb_define_const(mDNSSD, "InterfaceLocalOnly", ULONG2NUM(kDNSServiceInterfaceIndexLocalOnly));
|
66
16
|
|
67
|
-
|
68
|
-
|
69
|
-
dnssd_errors_store(eDNSSDUnknownError, -65537);
|
70
|
-
|
71
|
-
error_class = rb_define_class_under(mDNSSD, "NoSuchNameError", eDNSSDError);
|
72
|
-
dnssd_errors_store(error_class, -65538);
|
73
|
-
|
74
|
-
dnssd_errors_store(rb_eNoMemError, -65539);
|
75
|
-
|
76
|
-
error_class = rb_define_class_under(mDNSSD, "BadParamError", eDNSSDError);
|
77
|
-
dnssd_errors_store(error_class, -65540);
|
78
|
-
|
79
|
-
error_class = rb_define_class_under(mDNSSD, "BadReferenceError", eDNSSDError);
|
80
|
-
dnssd_errors_store(error_class, -65541);
|
81
|
-
|
82
|
-
error_class = rb_define_class_under(mDNSSD, "BadStateError", eDNSSDError);
|
83
|
-
dnssd_errors_store(error_class, -65542);
|
84
|
-
|
85
|
-
error_class = rb_define_class_under(mDNSSD, "BadFlagsError", eDNSSDError);
|
86
|
-
dnssd_errors_store(error_class, -65543);
|
87
|
-
|
88
|
-
error_class = rb_define_class_under(mDNSSD, "UnsupportedError", eDNSSDError);
|
89
|
-
dnssd_errors_store(error_class, -65544);
|
90
|
-
|
91
|
-
error_class = rb_define_class_under(mDNSSD, "NotInitializedError", eDNSSDError);
|
92
|
-
dnssd_errors_store(error_class, -65545);
|
93
|
-
|
94
|
-
error_class = rb_define_class_under(mDNSSD, "AlreadyRegisteredError", eDNSSDError);
|
95
|
-
dnssd_errors_store(error_class, -65547);
|
96
|
-
|
97
|
-
error_class = rb_define_class_under(mDNSSD, "NameConflictError", eDNSSDError);
|
98
|
-
dnssd_errors_store(error_class, -65548);
|
99
|
-
|
100
|
-
error_class = rb_define_class_under(mDNSSD, "InvalidError", eDNSSDError);
|
101
|
-
dnssd_errors_store(error_class, -65549);
|
102
|
-
|
103
|
-
error_class = rb_define_class_under(mDNSSD, "ClientIncompatibleError", eDNSSDError);
|
104
|
-
dnssd_errors_store(error_class, -65551);
|
105
|
-
|
106
|
-
error_class = rb_define_class_under(mDNSSD, "BadInterfaceIndexError", eDNSSDError);
|
107
|
-
dnssd_errors_store(error_class, -65552);
|
108
|
-
|
109
|
-
error_class = rb_define_class_under(mDNSSD, "ReferenceUsedError", eDNSSDError);
|
110
|
-
dnssd_errors_store(error_class, -65553);
|
111
|
-
|
112
|
-
error_class = rb_define_class_under(mDNSSD, "NoSuchRecordError", eDNSSDError);
|
113
|
-
dnssd_errors_store(error_class, -65554);
|
114
|
-
|
115
|
-
error_class = rb_define_class_under(mDNSSD, "NoAuthenticationError", eDNSSDError);
|
116
|
-
dnssd_errors_store(error_class, -65555);
|
117
|
-
|
118
|
-
error_class = rb_define_class_under(mDNSSD, "NoSuchKeyError", eDNSSDError);
|
119
|
-
dnssd_errors_store(error_class, -65556);
|
120
|
-
}
|
121
|
-
|
122
|
-
/* Document-class: DNSSD::Error
|
123
|
-
*
|
124
|
-
* Base class of all DNS Service Discovery related errors.
|
125
|
-
*
|
126
|
-
*/
|
127
|
-
|
128
|
-
/* defined in other .c files */
|
129
|
-
void Init_DNSSD_Service(void);
|
130
|
-
void Init_DNSSD_TextRecord(void);
|
131
|
-
void Init_DNSSD_Replies(void);
|
132
|
-
|
133
|
-
void
|
134
|
-
Init_dnssd(void) {
|
135
|
-
/* called when library is required */
|
136
|
-
Init_DNSSD();
|
17
|
+
Init_DNSSD_Errors();
|
18
|
+
Init_DNSSD_Flags();
|
137
19
|
Init_DNSSD_Service();
|
138
|
-
Init_DNSSD_TextRecord();
|
139
|
-
Init_DNSSD_Replies();
|
140
20
|
}
|
141
21
|
|
data/ext/dnssd/dnssd.h
CHANGED
@@ -1,8 +1,3 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright (c) 2004 Chad Fowler, Charles Mills, Rich Kilmer
|
3
|
-
* Licenced under the same terms as Ruby.
|
4
|
-
* This software has absolutely no warrenty.
|
5
|
-
*/
|
6
1
|
#ifndef RDNSSD_INCLUDED
|
7
2
|
#define RDNSSD_INCLUDED
|
8
3
|
|
@@ -29,32 +24,10 @@
|
|
29
24
|
#include <sys/if.h>
|
30
25
|
#endif
|
31
26
|
|
32
|
-
extern VALUE mDNSSD;
|
33
27
|
extern VALUE eDNSSDError;
|
34
28
|
|
35
29
|
void dnssd_check_error_code(DNSServiceErrorType e);
|
36
30
|
void dnssd_instantiation_error(const char *what);
|
37
31
|
|
38
|
-
VALUE dnssd_create_fullname(const char *name, const char *regtype, const char *domain, int err_flag);
|
39
|
-
VALUE dnssd_split_fullname(VALUE fullname);
|
40
|
-
|
41
|
-
/* decodes a buffer, creating a new text record */
|
42
|
-
VALUE dnssd_tr_new(long len, const char *buf);
|
43
|
-
|
44
|
-
VALUE dnssd_tr_to_encoded_str(VALUE v);
|
45
|
-
|
46
|
-
VALUE dnssd_domain_enum_new(VALUE service, DNSServiceFlags flags,
|
47
|
-
uint32_t interface, const char *domain);
|
48
|
-
|
49
|
-
VALUE dnssd_browse_new(VALUE service, DNSServiceFlags flags, uint32_t interface,
|
50
|
-
const char *name, const char *regtype, const char *domain);
|
51
|
-
|
52
|
-
VALUE dnssd_register_new(VALUE service, DNSServiceFlags flags, const char *name,
|
53
|
-
const char *regtype, const char *domain);
|
54
|
-
|
55
|
-
VALUE dnssd_resolve_new(VALUE service, DNSServiceFlags flags, uint32_t interface,
|
56
|
-
const char *fullname, const char *host_target,
|
57
|
-
uint16_t opaqueport, uint16_t txt_len, const char *txt_rec);
|
58
|
-
|
59
32
|
#endif /* RDNSSD_INCLUDED */
|
60
33
|
|
data/ext/dnssd/errors.c
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
#include "dnssd.h"
|
2
|
+
#include <assert.h>
|
3
|
+
|
4
|
+
VALUE eDNSSDError;
|
5
|
+
static VALUE eDNSSDUnknownError;
|
6
|
+
|
7
|
+
#define DNSSD_ERROR_START (-65556)
|
8
|
+
#define DNSSD_ERROR_END (-65536)
|
9
|
+
|
10
|
+
static VALUE dnssd_errors[DNSSD_ERROR_END - DNSSD_ERROR_START];
|
11
|
+
|
12
|
+
static void
|
13
|
+
dnssd_errors_store(VALUE error, int num) {
|
14
|
+
assert(DNSSD_ERROR_START <= num && num < DNSSD_ERROR_END);
|
15
|
+
dnssd_errors[num - DNSSD_ERROR_START] = error;
|
16
|
+
}
|
17
|
+
|
18
|
+
void
|
19
|
+
dnssd_check_error_code(DNSServiceErrorType e) {
|
20
|
+
int num = (int)e;
|
21
|
+
if (num) {
|
22
|
+
if(DNSSD_ERROR_START <= num && num < DNSSD_ERROR_END) {
|
23
|
+
rb_raise(dnssd_errors[num - DNSSD_ERROR_START],
|
24
|
+
"DNSSD operation failed with error code: %d", num);
|
25
|
+
} else {
|
26
|
+
rb_raise(eDNSSDUnknownError,
|
27
|
+
"DNSSD operation failed with unrecognized error code: %d", num);
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
void
|
33
|
+
dnssd_instantiation_error(const char *what) {
|
34
|
+
rb_raise(rb_eRuntimeError,
|
35
|
+
"cannot instantiate %s, use DNSSD "
|
36
|
+
"enumerate_domains(), browse(), resolve() or register() instead",
|
37
|
+
what);
|
38
|
+
}
|
39
|
+
|
40
|
+
/* Document-class: DNSSD::Error
|
41
|
+
*
|
42
|
+
* Base class of all DNS Service Discovery related errors.
|
43
|
+
*
|
44
|
+
*/
|
45
|
+
|
46
|
+
void
|
47
|
+
Init_DNSSD_Errors(void) {
|
48
|
+
VALUE error_class;
|
49
|
+
VALUE mDNSSD = rb_define_module("DNSSD");
|
50
|
+
|
51
|
+
eDNSSDError = rb_define_class_under(mDNSSD, "Error", rb_eStandardError);
|
52
|
+
|
53
|
+
eDNSSDUnknownError = rb_define_class_under(mDNSSD, "UnknownError", eDNSSDError);
|
54
|
+
dnssd_errors_store(eDNSSDUnknownError, -65537);
|
55
|
+
|
56
|
+
error_class = rb_define_class_under(mDNSSD, "NoSuchNameError", eDNSSDError);
|
57
|
+
dnssd_errors_store(error_class, -65538);
|
58
|
+
|
59
|
+
dnssd_errors_store(rb_eNoMemError, -65539);
|
60
|
+
|
61
|
+
error_class = rb_define_class_under(mDNSSD, "BadParamError", eDNSSDError);
|
62
|
+
dnssd_errors_store(error_class, -65540);
|
63
|
+
|
64
|
+
error_class = rb_define_class_under(mDNSSD, "BadReferenceError", eDNSSDError);
|
65
|
+
dnssd_errors_store(error_class, -65541);
|
66
|
+
|
67
|
+
error_class = rb_define_class_under(mDNSSD, "BadStateError", eDNSSDError);
|
68
|
+
dnssd_errors_store(error_class, -65542);
|
69
|
+
|
70
|
+
error_class = rb_define_class_under(mDNSSD, "BadFlagsError", eDNSSDError);
|
71
|
+
dnssd_errors_store(error_class, -65543);
|
72
|
+
|
73
|
+
error_class = rb_define_class_under(mDNSSD, "UnsupportedError", eDNSSDError);
|
74
|
+
dnssd_errors_store(error_class, -65544);
|
75
|
+
|
76
|
+
error_class = rb_define_class_under(mDNSSD, "NotInitializedError", eDNSSDError);
|
77
|
+
dnssd_errors_store(error_class, -65545);
|
78
|
+
|
79
|
+
error_class = rb_define_class_under(mDNSSD, "AlreadyRegisteredError", eDNSSDError);
|
80
|
+
dnssd_errors_store(error_class, -65547);
|
81
|
+
|
82
|
+
error_class = rb_define_class_under(mDNSSD, "NameConflictError", eDNSSDError);
|
83
|
+
dnssd_errors_store(error_class, -65548);
|
84
|
+
|
85
|
+
error_class = rb_define_class_under(mDNSSD, "InvalidError", eDNSSDError);
|
86
|
+
dnssd_errors_store(error_class, -65549);
|
87
|
+
|
88
|
+
error_class = rb_define_class_under(mDNSSD, "ClientIncompatibleError", eDNSSDError);
|
89
|
+
dnssd_errors_store(error_class, -65551);
|
90
|
+
|
91
|
+
error_class = rb_define_class_under(mDNSSD, "BadInterfaceIndexError", eDNSSDError);
|
92
|
+
dnssd_errors_store(error_class, -65552);
|
93
|
+
|
94
|
+
error_class = rb_define_class_under(mDNSSD, "ReferenceUsedError", eDNSSDError);
|
95
|
+
dnssd_errors_store(error_class, -65553);
|
96
|
+
|
97
|
+
error_class = rb_define_class_under(mDNSSD, "NoSuchRecordError", eDNSSDError);
|
98
|
+
dnssd_errors_store(error_class, -65554);
|
99
|
+
|
100
|
+
error_class = rb_define_class_under(mDNSSD, "NoAuthenticationError", eDNSSDError);
|
101
|
+
dnssd_errors_store(error_class, -65555);
|
102
|
+
|
103
|
+
error_class = rb_define_class_under(mDNSSD, "NoSuchKeyError", eDNSSDError);
|
104
|
+
dnssd_errors_store(error_class, -65556);
|
105
|
+
}
|
data/ext/dnssd/extconf.rb
CHANGED
@@ -15,16 +15,21 @@ require "mkmf"
|
|
15
15
|
$CFLAGS << " -Wall"
|
16
16
|
$CFLAGS << " -DDEBUG" if $DEBUG
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
libraries = {
|
19
|
+
'mdns' => 'DNSServiceRefSockFD',
|
20
|
+
'dns_sd' => 'DNSServiceRefSockFD',
|
21
|
+
'System' => 'DNSServiceRefSockFD'
|
22
|
+
}.sort
|
23
|
+
|
24
|
+
dnssd_found = libraries.any? do |library, function|
|
25
|
+
have_library library, function
|
22
26
|
end
|
23
27
|
|
24
|
-
|
25
|
-
|
28
|
+
unless dnssd_found then
|
29
|
+
abort "Couldn't find DNSSD in libraries #{libraries.keys.join ', '}"
|
30
|
+
end
|
26
31
|
|
27
|
-
have_header
|
32
|
+
have_header "dns_sd.h" or abort "can't find the rendezvous client headers"
|
28
33
|
|
29
34
|
have_header "unistd.h"
|
30
35
|
have_header "sys/types.h"
|
data/ext/dnssd/flags.c
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
#include "dnssd.h"
|
2
|
+
|
3
|
+
/* dns sd flags, flag ID's, flag names */
|
4
|
+
#define DNSSD_MAX_FLAGS 9
|
5
|
+
|
6
|
+
static const DNSServiceFlags dnssd_flag[DNSSD_MAX_FLAGS] = {
|
7
|
+
kDNSServiceFlagsMoreComing,
|
8
|
+
|
9
|
+
kDNSServiceFlagsAdd,
|
10
|
+
kDNSServiceFlagsDefault,
|
11
|
+
|
12
|
+
kDNSServiceFlagsNoAutoRename,
|
13
|
+
|
14
|
+
kDNSServiceFlagsShared,
|
15
|
+
kDNSServiceFlagsUnique,
|
16
|
+
|
17
|
+
kDNSServiceFlagsBrowseDomains,
|
18
|
+
kDNSServiceFlagsRegistrationDomains,
|
19
|
+
|
20
|
+
kDNSServiceFlagsLongLivedQuery
|
21
|
+
};
|
22
|
+
|
23
|
+
static const char *dnssd_flag_name[DNSSD_MAX_FLAGS] = {
|
24
|
+
"more_coming",
|
25
|
+
"add",
|
26
|
+
"default",
|
27
|
+
"no_auto_rename",
|
28
|
+
"shared",
|
29
|
+
"unique",
|
30
|
+
"browse_domains",
|
31
|
+
"registration_domains",
|
32
|
+
"long_lived_query"
|
33
|
+
};
|
34
|
+
|
35
|
+
void
|
36
|
+
Init_DNSSD_Flags(void) {
|
37
|
+
int i;
|
38
|
+
VALUE flags_hash;
|
39
|
+
VALUE cDNSSDFlags;
|
40
|
+
VALUE mDNSSD = rb_define_module("DNSSD");
|
41
|
+
|
42
|
+
cDNSSDFlags = rb_define_class_under(mDNSSD, "Flags", rb_cObject);
|
43
|
+
|
44
|
+
/* flag constants */
|
45
|
+
#if DNSSD_MAX_FLAGS != 9
|
46
|
+
#error The code below needs to be updated.
|
47
|
+
#endif
|
48
|
+
|
49
|
+
/* MoreComing indicates that at least one more result is queued and will be
|
50
|
+
* delivered following immediately after this one.
|
51
|
+
*
|
52
|
+
* Applications should not update their UI to display browse results when the
|
53
|
+
* MoreComing flag is set, because this would result in a great deal of ugly
|
54
|
+
* flickering on the screen. Applications should instead wait until
|
55
|
+
* MoreComing is not set, and then update their UI.
|
56
|
+
*
|
57
|
+
* When MoreComing is not set, that doesn't mean there will be no more
|
58
|
+
* answers EVER, just that there are no more answers immediately available
|
59
|
+
* right now at this instant. If more answers become available in the future
|
60
|
+
* they will be delivered as usual.
|
61
|
+
*/
|
62
|
+
rb_define_const(cDNSSDFlags, "MoreComing",
|
63
|
+
ULONG2NUM(kDNSServiceFlagsMoreComing));
|
64
|
+
|
65
|
+
/* Applies only to enumeration. An enumeration callback with the
|
66
|
+
* DNSSD::Flags::Add flag NOT set indicates a DNSSD::Flags::Remove, i.e. the
|
67
|
+
* domain is no longer valid.
|
68
|
+
*/
|
69
|
+
rb_define_const(cDNSSDFlags, "Add", ULONG2NUM(kDNSServiceFlagsAdd));
|
70
|
+
|
71
|
+
/* Applies only to enumeration and is only valid in conjunction with Add
|
72
|
+
*/
|
73
|
+
rb_define_const(cDNSSDFlags, "Default", ULONG2NUM(kDNSServiceFlagsDefault));
|
74
|
+
|
75
|
+
/* Flag for specifying renaming behavior on name conflict when registering
|
76
|
+
* non-shared records.
|
77
|
+
*
|
78
|
+
* By default, name conflicts are automatically handled by renaming the
|
79
|
+
* service. DNSSD::Flags::NoAutoRename overrides this behavior - with this
|
80
|
+
* flag set, name conflicts will result in a callback. The NoAutoRename flag
|
81
|
+
* is only valid if a name is explicitly specified when registering a service
|
82
|
+
* (ie the default name is not used.)
|
83
|
+
*/
|
84
|
+
rb_define_const(cDNSSDFlags, "NoAutoRename",
|
85
|
+
ULONG2NUM(kDNSServiceFlagsNoAutoRename));
|
86
|
+
|
87
|
+
/* Flag for registering individual records on a connected DNSServiceRef.
|
88
|
+
*
|
89
|
+
* DNSSD::Flags::Shared indicates that there may be multiple records with
|
90
|
+
* this name on the network (e.g. PTR records). DNSSD::Flags::Unique
|
91
|
+
* indicates that the record's name is to be unique on the network (e.g. SRV
|
92
|
+
* records). (DNSSD::Flags::Shared and DNSSD::Flags::Unique are currently
|
93
|
+
* not used by the Ruby API.)
|
94
|
+
*/
|
95
|
+
rb_define_const(cDNSSDFlags, "Shared", ULONG2NUM(kDNSServiceFlagsShared));
|
96
|
+
rb_define_const(cDNSSDFlags, "Unique", ULONG2NUM(kDNSServiceFlagsUnique));
|
97
|
+
|
98
|
+
/* DNSSD::Flags::BrowseDomains enumerates domains recommended for browsing
|
99
|
+
*/
|
100
|
+
rb_define_const(cDNSSDFlags, "BrowseDomains",
|
101
|
+
ULONG2NUM(kDNSServiceFlagsBrowseDomains));
|
102
|
+
|
103
|
+
/* DNSSD::Flags::RegistrationDomains enumerates domains recommended for
|
104
|
+
* registration.
|
105
|
+
*/
|
106
|
+
|
107
|
+
rb_define_const(cDNSSDFlags, "RegistrationDomains",
|
108
|
+
ULONG2NUM(kDNSServiceFlagsRegistrationDomains));
|
109
|
+
|
110
|
+
/* Flag for creating a long-lived unicast query for the DNSDS.query_record()
|
111
|
+
* (currently not part of the Ruby API). */
|
112
|
+
rb_define_const(cDNSSDFlags, "LongLivedQuery",
|
113
|
+
ULONG2NUM(kDNSServiceFlagsLongLivedQuery));
|
114
|
+
|
115
|
+
flags_hash = rb_hash_new();
|
116
|
+
|
117
|
+
for (i = 0; i < DNSSD_MAX_FLAGS; i++) {
|
118
|
+
rb_hash_aset(flags_hash, rb_str_new2(dnssd_flag_name[i]),
|
119
|
+
ULONG2NUM(dnssd_flag[i]));
|
120
|
+
}
|
121
|
+
|
122
|
+
rb_define_const(cDNSSDFlags, "FLAGS", flags_hash);
|
123
|
+
}
|
124
|
+
|