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