]> git.saurik.com Git - apple/mdnsresponder.git/blob - mDNSCore/uDNS.h
85b68d577cce8955cd63c250a87c5579f22bc152
[apple/mdnsresponder.git] / mDNSCore / uDNS.h
1 /*
2 * Copyright (c) 2002-2003 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22
23 Change History (most recent first):
24
25 $Log: uDNS.h,v $
26 Revision 1.30 2005/03/04 03:00:03 ksekar
27 <rdar://problem/4026546> Retransmissions happen too early, causing registrations to conflict with themselves
28
29 Revision 1.29 2005/01/11 22:50:53 ksekar
30 Fixed constant naming (was using kLLQ_DefLease for update leases)
31
32 Revision 1.28 2004/12/22 00:13:49 ksekar
33 <rdar://problem/3873993> Change version, port, and polling interval for LLQ
34
35 Revision 1.27 2004/11/23 04:06:50 cheshire
36 Get rid of floating point constant -- in a small embedded device, bringing in all
37 the floating point libraries just to halve an integer value is a bit too heavyweight.
38
39 Revision 1.26 2004/11/22 17:49:15 ksekar
40 Changed INIT_REFRESH from fraction to decimal
41
42 Revision 1.25 2004/11/22 17:16:20 ksekar
43 <rdar://problem/3854298> Unicast services don't disappear when you disable all networking
44
45 Revision 1.24 2004/11/19 04:24:08 ksekar
46 <rdar://problem/3682609> Security: Enforce a "window" on one-shot wide-area queries
47
48 Revision 1.23 2004/11/18 18:04:21 ksekar
49 Add INIT_REFRESH constant
50
51 Revision 1.22 2004/11/15 20:09:24 ksekar
52 <rdar://problem/3719050> Wide Area support for Add/Remove record
53
54 Revision 1.21 2004/11/11 20:14:55 ksekar
55 <rdar://problem/3719574> Wide-Area registrations not deregistered on sleep
56
57 Revision 1.20 2004/10/16 00:16:59 cheshire
58 <rdar://problem/3770558> Replace IP TTL 255 check with local subnet source address check
59
60 Revision 1.19 2004/09/17 01:08:49 cheshire
61 Renamed mDNSClientAPI.h to mDNSEmbeddedAPI.h
62 The name "mDNSClientAPI.h" is misleading to new developers looking at this code. The interfaces
63 declared in that file are ONLY appropriate to single-address-space embedded applications.
64 For clients on general-purpose computers, the interfaces defined in dns_sd.h should be used.
65
66 Revision 1.18 2004/09/03 19:23:05 ksekar
67 <rdar://problem/3788460>: Need retransmission mechanism for wide-area service registrations
68
69 Revision 1.17 2004/09/01 03:59:29 ksekar
70 <rdar://problem/3783453>: Conditionally compile out uDNS code on Windows
71
72 Revision 1.16 2004/08/25 00:37:27 ksekar
73 <rdar://problem/3774635>: Cleanup DynDNS hostname registration code
74
75 Revision 1.15 2004/07/30 17:40:06 ksekar
76 <rdar://problem/3739115>: TXT Record updates not available for wide-area services
77
78 Revision 1.14 2004/07/29 19:27:15 ksekar
79 NATPMP Support - minor fixes and cleanup
80
81 Revision 1.13 2004/07/29 02:03:35 ksekar
82 Delete unused #define and structure field
83
84 Revision 1.12 2004/07/26 22:49:30 ksekar
85 <rdar://problem/3651409>: Feature #9516: Need support for NATPMP in client
86
87 Revision 1.11 2004/06/17 01:13:11 ksekar
88 <rdar://problem/3696616>: polling interval too short
89
90 Revision 1.10 2004/06/11 05:45:03 ksekar
91 <rdar://problem/3682397>: Change SRV names for LLQ/Update port lookups
92
93 Revision 1.9 2004/06/01 23:46:50 ksekar
94 <rdar://problem/3675149>: DynDNS: dynamically look up LLQ/Update ports
95
96 Revision 1.8 2004/05/28 23:42:37 ksekar
97 <rdar://problem/3258021>: Feature: DNS server->client notification on record changes (#7805)
98
99 Revision 1.7 2004/05/18 23:51:25 cheshire
100 Tidy up all checkin comments to use consistent "<rdar://problem/xxxxxxx>" format for bug numbers
101
102 Revision 1.6 2004/03/13 01:57:33 ksekar
103 <rdar://problem/3192546>: DynDNS: Dynamic update of service records
104
105 Revision 1.5 2004/02/21 08:56:58 bradley
106 Wrap prototypes with extern "C" for C++ builds.
107
108 Revision 1.4 2004/02/06 23:04:19 ksekar
109 Basic Dynamic Update support via mDNS_Register (dissabled via
110 UNICAST_REGISTRATION #define)
111
112 Revision 1.3 2004/01/24 03:38:27 cheshire
113 Fix minor syntactic error: Headers should use "extern" declarations, not "mDNSexport"
114
115 Revision 1.2 2004/01/23 23:23:15 ksekar
116 Added TCP support for truncated unicast messages.
117
118 Revision 1.1 2003/12/13 03:05:27 ksekar
119 <rdar://problem/3192548>: DynDNS: Unicast query of service records
120
121
122 */
123
124 #ifndef __UDNS_H_
125 #define __UDNS_H_
126
127 #include "mDNSEmbeddedAPI.h"
128 #include "DNSCommon.h"
129
130 #ifdef __cplusplus
131 extern "C" {
132 #endif
133
134 #define RESTART_GOODBYE_DELAY (6 * mDNSPlatformOneSecond) // delay after restarting LLQ before nuking previous known answers (avoids flutter if we restart before we have networking up)
135 #define MIN_UCAST_PERIODIC_EXEC (5 * mDNSPlatformOneSecond)
136 #define INIT_UCAST_POLL_INTERVAL (3 * mDNSPlatformOneSecond) // this interval is used after send failures on network transitions
137 // which typically heal quickly, so we start agressively and exponentially back off
138 #define MAX_UCAST_POLL_INTERVAL (60 * 60 * mDNSPlatformOneSecond)
139 #define RESPONSE_WINDOW (60 * mDNSPlatformOneSecond) // require server responses within one minute of request
140 #define UPDATE_PORT_NAME "_dns-update._udp."
141 #define LLQ_PORT_NAME "_dns-llq._udp"
142 #define DEFAULT_UPDATE_LEASE 7200
143
144 // Entry points into unicast-specific routines
145
146 extern mStatus uDNS_StartQuery(mDNS *const m, DNSQuestion *const question);
147 extern mDNSBool uDNS_IsActiveQuery(DNSQuestion *const question, uDNS_GlobalInfo *u); // returns true if OK to call StopQuery
148 extern mStatus uDNS_StopQuery(mDNS *const m, DNSQuestion *const question);
149
150 extern void uDNS_Init(mDNS *m);
151 extern void uDNS_Sleep(mDNS *m);
152 extern void uDNS_Wake(mDNS *m);
153 #define uDNS_Close uDNS_Sleep
154
155 // uDNS_UpdateRecord
156 // following fields must be set, and the update validated, upon entry.
157 // rr->NewRData
158 // rr->newrdlength
159 // rr->UpdateCallback
160
161 extern mStatus uDNS_AddRecordToService(mDNS *const m, ServiceRecordSet *sr, ExtraResourceRecord *extra);
162 extern mStatus uDNS_UpdateRecord(mDNS *m, AuthRecord *rr);
163
164 extern mStatus uDNS_RegisterRecord(mDNS *const m, AuthRecord *const rr);
165 extern mStatus uDNS_DeregisterRecord(mDNS *const m, AuthRecord *const rr);
166
167 extern mStatus uDNS_RegisterService(mDNS *const m, ServiceRecordSet *srs);
168 extern mStatus uDNS_DeregisterService(mDNS *const m, ServiceRecordSet *srs);
169
170 // integer fields of msg header must be in HOST byte order before calling this routine
171 extern void uDNS_ReceiveMsg(mDNS *const m, DNSMessage *const msg, const mDNSu8 *const end,
172 const mDNSAddr *const srcaddr, const mDNSIPPort srcport, const mDNSAddr *const dstaddr,
173 const mDNSIPPort dstport, const mDNSInterfaceID InterfaceID);
174
175 extern void uDNS_ReceiveNATMap(mDNS *m, mDNSu8 *pkt, mDNSu16 len);
176
177 // returns time of next scheduled event
178 extern void uDNS_Execute(mDNS *const m);
179
180
181 #ifdef __cplusplus
182 }
183 #endif
184
185 #endif // __UDNS_H_