2 * Copyright (c) 2002-2003 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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
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.
21 * @APPLE_LICENSE_HEADER_END@
23 Change History (most recent first):
26 Revision 1.32 2005/07/29 19:46:10 ksekar
27 <rdar://problem/4191860> reduce polling period on failed LLQs to 15 minutes
29 Revision 1.31 2005/03/31 02:19:56 cheshire
30 <rdar://problem/4021486> Fix build warnings
31 Reviewed by: Scott Herscher
33 Revision 1.30 2005/03/04 03:00:03 ksekar
34 <rdar://problem/4026546> Retransmissions happen too early, causing registrations to conflict with themselves
36 Revision 1.29 2005/01/11 22:50:53 ksekar
37 Fixed constant naming (was using kLLQ_DefLease for update leases)
39 Revision 1.28 2004/12/22 00:13:49 ksekar
40 <rdar://problem/3873993> Change version, port, and polling interval for LLQ
42 Revision 1.27 2004/11/23 04:06:50 cheshire
43 Get rid of floating point constant -- in a small embedded device, bringing in all
44 the floating point libraries just to halve an integer value is a bit too heavyweight.
46 Revision 1.26 2004/11/22 17:49:15 ksekar
47 Changed INIT_REFRESH from fraction to decimal
49 Revision 1.25 2004/11/22 17:16:20 ksekar
50 <rdar://problem/3854298> Unicast services don't disappear when you disable all networking
52 Revision 1.24 2004/11/19 04:24:08 ksekar
53 <rdar://problem/3682609> Security: Enforce a "window" on one-shot wide-area queries
55 Revision 1.23 2004/11/18 18:04:21 ksekar
56 Add INIT_REFRESH constant
58 Revision 1.22 2004/11/15 20:09:24 ksekar
59 <rdar://problem/3719050> Wide Area support for Add/Remove record
61 Revision 1.21 2004/11/11 20:14:55 ksekar
62 <rdar://problem/3719574> Wide-Area registrations not deregistered on sleep
64 Revision 1.20 2004/10/16 00:16:59 cheshire
65 <rdar://problem/3770558> Replace IP TTL 255 check with local subnet source address check
67 Revision 1.19 2004/09/17 01:08:49 cheshire
68 Renamed mDNSClientAPI.h to mDNSEmbeddedAPI.h
69 The name "mDNSClientAPI.h" is misleading to new developers looking at this code. The interfaces
70 declared in that file are ONLY appropriate to single-address-space embedded applications.
71 For clients on general-purpose computers, the interfaces defined in dns_sd.h should be used.
73 Revision 1.18 2004/09/03 19:23:05 ksekar
74 <rdar://problem/3788460>: Need retransmission mechanism for wide-area service registrations
76 Revision 1.17 2004/09/01 03:59:29 ksekar
77 <rdar://problem/3783453>: Conditionally compile out uDNS code on Windows
79 Revision 1.16 2004/08/25 00:37:27 ksekar
80 <rdar://problem/3774635>: Cleanup DynDNS hostname registration code
82 Revision 1.15 2004/07/30 17:40:06 ksekar
83 <rdar://problem/3739115>: TXT Record updates not available for wide-area services
85 Revision 1.14 2004/07/29 19:27:15 ksekar
86 NATPMP Support - minor fixes and cleanup
88 Revision 1.13 2004/07/29 02:03:35 ksekar
89 Delete unused #define and structure field
91 Revision 1.12 2004/07/26 22:49:30 ksekar
92 <rdar://problem/3651409>: Feature #9516: Need support for NATPMP in client
94 Revision 1.11 2004/06/17 01:13:11 ksekar
95 <rdar://problem/3696616>: polling interval too short
97 Revision 1.10 2004/06/11 05:45:03 ksekar
98 <rdar://problem/3682397>: Change SRV names for LLQ/Update port lookups
100 Revision 1.9 2004/06/01 23:46:50 ksekar
101 <rdar://problem/3675149>: DynDNS: dynamically look up LLQ/Update ports
103 Revision 1.8 2004/05/28 23:42:37 ksekar
104 <rdar://problem/3258021>: Feature: DNS server->client notification on record changes (#7805)
106 Revision 1.7 2004/05/18 23:51:25 cheshire
107 Tidy up all checkin comments to use consistent "<rdar://problem/xxxxxxx>" format for bug numbers
109 Revision 1.6 2004/03/13 01:57:33 ksekar
110 <rdar://problem/3192546>: DynDNS: Dynamic update of service records
112 Revision 1.5 2004/02/21 08:56:58 bradley
113 Wrap prototypes with extern "C" for C++ builds.
115 Revision 1.4 2004/02/06 23:04:19 ksekar
116 Basic Dynamic Update support via mDNS_Register (dissabled via
117 UNICAST_REGISTRATION #define)
119 Revision 1.3 2004/01/24 03:38:27 cheshire
120 Fix minor syntactic error: Headers should use "extern" declarations, not "mDNSexport"
122 Revision 1.2 2004/01/23 23:23:15 ksekar
123 Added TCP support for truncated unicast messages.
125 Revision 1.1 2003/12/13 03:05:27 ksekar
126 <rdar://problem/3192548>: DynDNS: Unicast query of service records
134 #include "mDNSEmbeddedAPI.h"
135 #include "DNSCommon.h"
141 #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)
142 #define MIN_UCAST_PERIODIC_EXEC (5 * mDNSPlatformOneSecond)
143 #define INIT_UCAST_POLL_INTERVAL (3 * mDNSPlatformOneSecond) // this interval is used after send failures on network transitions
144 // which typically heal quickly, so we start agressively and exponentially back off
145 #define MAX_UCAST_POLL_INTERVAL (60 * 60 * mDNSPlatformOneSecond)
146 #define LLQ_POLL_INTERVAL (15 * 60 * mDNSPlatformOneSecond) // Polling interval for zones w/ an advertised LLQ port (ie not static zones) if LLQ fails due to NAT, etc.
147 #define RESPONSE_WINDOW (60 * mDNSPlatformOneSecond) // require server responses within one minute of request
148 #define UPDATE_PORT_NAME "_dns-update._udp."
149 #define LLQ_PORT_NAME "_dns-llq._udp"
150 #define DEFAULT_UPDATE_LEASE 7200
152 // Entry points into unicast-specific routines
154 extern mStatus
uDNS_StartQuery(mDNS
*const m
, DNSQuestion
*const question
);
155 extern mDNSBool
uDNS_IsActiveQuery(DNSQuestion
*const question
, uDNS_GlobalInfo
*u
); // returns true if OK to call StopQuery
156 extern mStatus
uDNS_StopQuery(mDNS
*const m
, DNSQuestion
*const question
);
158 extern void uDNS_Init(mDNS
*const m
);
159 extern void uDNS_Sleep(mDNS
*const m
);
160 extern void uDNS_Wake(mDNS
*const m
);
161 #define uDNS_Close uDNS_Sleep
164 // following fields must be set, and the update validated, upon entry.
167 // rr->UpdateCallback
169 extern mStatus
uDNS_AddRecordToService(mDNS
*const m
, ServiceRecordSet
*sr
, ExtraResourceRecord
*extra
);
170 extern mStatus
uDNS_UpdateRecord(mDNS
*m
, AuthRecord
*rr
);
172 extern mStatus
uDNS_RegisterRecord(mDNS
*const m
, AuthRecord
*const rr
);
173 extern mStatus
uDNS_DeregisterRecord(mDNS
*const m
, AuthRecord
*const rr
);
175 extern mStatus
uDNS_RegisterService(mDNS
*const m
, ServiceRecordSet
*srs
);
176 extern mStatus
uDNS_DeregisterService(mDNS
*const m
, ServiceRecordSet
*srs
);
178 // integer fields of msg header must be in HOST byte order before calling this routine
179 extern void uDNS_ReceiveMsg(mDNS
*const m
, DNSMessage
*const msg
, const mDNSu8
*const end
,
180 const mDNSAddr
*const srcaddr
, const mDNSIPPort srcport
, const mDNSAddr
*const dstaddr
,
181 const mDNSIPPort dstport
, const mDNSInterfaceID InterfaceID
);
183 extern void uDNS_ReceiveNATMap(mDNS
*m
, mDNSu8
*pkt
, mDNSu16 len
);
185 // returns time of next scheduled event
186 extern void uDNS_Execute(mDNS
*const m
);