Skip to main content

cidre/
dns_sd.rs

1use std::ffi::c_void;
2
3use crate::{define_opts, os};
4
5pub type Sock = i32;
6
7#[repr(transparent)]
8pub struct Service(c_void);
9
10#[repr(transparent)]
11pub struct Record(c_void);
12
13#[repr(transparent)]
14pub struct ServiceAttribute(c_void);
15
16impl Service {
17    /// Maximum length, in bytes, of a service name represented as a
18    /// literal C-String, including the terminating NULL at the end.
19    pub const MAX_SERVICE_NAME: usize = 64;
20
21    /// Maximum length, in bytes, of a domain name represented as an *escaped* C-String
22    /// including the final trailing dot, and the C-String terminating NULL at the end.
23    pub const MAX_DOMAIN_NAME: usize = 1009;
24
25    /// Access underlying Unix domain socket for an initialized DNSServiceRef.
26    #[doc(alias = "DNSServiceRefSockFD")]
27    pub fn sock_fd(&self) -> Sock {
28        unsafe { DNSServiceRefSockFD(self) }
29    }
30
31    #[doc(alias = "DNSServiceProcessResult")]
32    pub fn process_result(&self) -> os::Result {
33        unsafe { DNSServiceProcessResult(self).result() }
34    }
35
36    #[doc(alias = "DNSServiceRefDeallocate")]
37    pub fn deallocate(self) {
38        unsafe { DNSServiceRefDeallocate(&self) }
39    }
40}
41
42#[derive(Debug, Eq, PartialEq)]
43#[repr(i32)]
44pub enum ServiceAaaaPolicyName {
45    #[doc(alias = "kDNSServiceAAAAPolicyNone")]
46    None = 0,
47    /// If AAAA record doesn't exist, query for A.
48    #[doc(alias = "kDNSServiceAAAAPolicyFallback")]
49    Fallback = 1,
50}
51
52define_opts!(pub ServiceFlags(u32));
53
54define_opts!(pub ServiceProtocol(u32));
55
56#[doc(alias = "DNSServiceErrorType")]
57pub type ServiceErrorType = os::Status;
58
59/// kDNSServiceErr codes
60pub mod err {
61    use crate::os::Error;
62
63    #[doc(alias = "kDNSServiceErr_Unknown")]
64    pub const UKNOWN: Error = Error::new_unchecked(-65537);
65
66    #[doc(alias = "kDNSServiceErr_NoSuchName")]
67    pub const NO_SUCH_NAME: Error = Error::new_unchecked(-65538);
68
69    #[doc(alias = "kDNSServiceErr_NoMemory")]
70    pub const NO_MEMORY: Error = Error::new_unchecked(-65539);
71
72    #[doc(alias = "kDNSServiceErr_BadParam")]
73    pub const BAD_PARAM: Error = Error::new_unchecked(-65540);
74
75    #[doc(alias = "kDNSServiceErr_BadReference")]
76    pub const BAD_REFERENCE: Error = Error::new_unchecked(-65541);
77
78    #[doc(alias = "kDNSServiceErr_BadState")]
79    pub const BAD_STATE: Error = Error::new_unchecked(-65542);
80
81    #[doc(alias = "kDNSServiceErr_BadFlags")]
82    pub const BAD_FLAGS: Error = Error::new_unchecked(-65543);
83
84    #[doc(alias = "kDNSServiceErr_Unsupported")]
85    pub const UNSUPPORTED: Error = Error::new_unchecked(-65544);
86
87    #[doc(alias = "kDNSServiceErr_NotInitialized")]
88    pub const NOT_INITIALIZED: Error = Error::new_unchecked(-65545);
89
90    #[doc(alias = "kDNSServiceErr_AlreadyRegistered")]
91    pub const ALREADY_REGISTERED: Error = Error::new_unchecked(-65547);
92
93    #[doc(alias = "kDNSServiceErr_NameConflict")]
94    pub const NAME_CONFLICT: Error = Error::new_unchecked(-65548);
95
96    #[doc(alias = "kDNSServiceErr_Invalid")]
97    pub const INVALID: Error = Error::new_unchecked(-65549);
98
99    #[doc(alias = "kDNSServiceErr_Firewall")]
100    pub const FIREWALL: Error = Error::new_unchecked(-65550);
101
102    /// Client library incompatible with daemon
103    #[doc(alias = "kDNSServiceErr_Incompatible")]
104    pub const INCOMPATIBLE: Error = Error::new_unchecked(-65551);
105
106    #[doc(alias = "kDNSServiceErr_BadInterfaceIndex")]
107    pub const BAD_INTERFACE_INDEX: Error = Error::new_unchecked(-65552);
108
109    #[doc(alias = "kDNSServiceErr_Refused")]
110    pub const REFUSED: Error = Error::new_unchecked(-65553);
111
112    #[doc(alias = "kDNSServiceErr_NoSuchRecord")]
113    pub const NO_SUCH_RECORD: Error = Error::new_unchecked(-65554);
114
115    #[doc(alias = "kDNSServiceErr_NoAuth")]
116    pub const NO_AUTH: Error = Error::new_unchecked(-65555);
117
118    #[doc(alias = "kDNSServiceErr_NoSuchKey")]
119    pub const NO_SUCH_KEY: Error = Error::new_unchecked(-65556);
120
121    #[doc(alias = "kDNSServiceErr_NATTraversal")]
122    pub const NAT_TRAVERSAL: Error = Error::new_unchecked(-65557);
123
124    #[doc(alias = "kDNSServiceErr_DoubleNAT")]
125    pub const DOUBLE_NAT: Error = Error::new_unchecked(-65558);
126
127    #[doc(alias = "kDNSServiceErr_BadTime")]
128    pub const BAD_TIME: Error = Error::new_unchecked(-65559);
129
130    #[doc(alias = "kDNSServiceErr_BadSig")]
131    pub const BAD_SIG: Error = Error::new_unchecked(-65560);
132
133    #[doc(alias = "kDNSServiceErr_BadKey")]
134    pub const BAD_KEY: Error = Error::new_unchecked(-65561);
135
136    #[doc(alias = "kDNSServiceErr_Transient")]
137    pub const TRANSIENT: Error = Error::new_unchecked(-65562);
138
139    /// Background daemon not running
140    #[doc(alias = "kDNSServiceErr_ServiceNotRunning")]
141    pub const SERVICE_NOT_RUNNING: Error = Error::new_unchecked(-65563);
142
143    /// NAT doesn't support PCP, NAT-PMP or UPnP
144    #[doc(alias = "kDNSServiceErr_NATPortMappingUnsupported")]
145    pub const NAT_PORT_MAPPING_UNSUPPORTED: Error = Error::new_unchecked(-65564);
146
147    /// NAT supports PCP, NAT-PMP or UPnP, but it's disabled by the administrator
148    #[doc(alias = "kDNSServiceErr_NATPortMappingDisabled")]
149    pub const NAT_PORT_MAPPING_DISABLED: Error = Error::new_unchecked(-65565);
150
151    /// No router currently configured (probably no network connectivity)
152    #[doc(alias = "kDNSServiceErr_NoRouter")]
153    pub const NO_ROUTER: Error = Error::new_unchecked(-65566);
154
155    #[doc(alias = "kDNSServiceErr_PollingMode")]
156    pub const POLLING_MODE: Error = Error::new_unchecked(-65567);
157
158    #[doc(alias = "kDNSServiceErr_Timeout")]
159    pub const TIMEOUT: Error = Error::new_unchecked(-65568);
160
161    /// Connection to daemon returned a SO_ISDEFUNCT error result
162    #[doc(alias = "kDNSServiceErr_DefunctConnection")]
163    pub const DEFUNCT_CONNECTION: Error = Error::new_unchecked(-65569);
164
165    #[doc(alias = "kDNSServiceErr_PolicyDenied")]
166    pub const POLICY_DENIED: Error = Error::new_unchecked(-65570);
167
168    #[doc(alias = "kDNSServiceErr_NotPermitted")]
169    pub const NOT_PERMITTED: Error = Error::new_unchecked(-65571);
170
171    #[doc(alias = "kDNSServiceErr_StaleData")]
172    pub const STALE_DATA: Error = Error::new_unchecked(-65572);
173}
174
175unsafe extern "C-unwind" {
176    fn DNSServiceRefSockFD(service: &Service) -> Sock;
177    fn DNSServiceProcessResult(service: &Service) -> ServiceErrorType;
178    fn DNSServiceRefDeallocate(service: &Service);
179}