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.30 2005/03/04 03:00:03 ksekar
27 <rdar://problem/4026546> Retransmissions happen too early, causing registrations to conflict with themselves
29 Revision 1.29 2005/01/11 22:50:53 ksekar
30 Fixed constant naming (was using kLLQ_DefLease for update leases)
32 Revision 1.28 2004/12/22 00:13:49 ksekar
33 <rdar://problem/3873993> Change version, port, and polling interval for LLQ
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.
39 Revision 1.26 2004/11/22 17:49:15 ksekar
40 Changed INIT_REFRESH from fraction to decimal
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
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
48 Revision 1.23 2004/11/18 18:04:21 ksekar
49 Add INIT_REFRESH constant
51 Revision 1.22 2004/11/15 20:09:24 ksekar
52 <rdar://problem/3719050> Wide Area support for Add/Remove record
54 Revision 1.21 2004/11/11 20:14:55 ksekar
55 <rdar://problem/3719574> Wide-Area registrations not deregistered on sleep
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
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.
66 Revision 1.18 2004/09/03 19:23:05 ksekar
67 <rdar://problem/3788460>: Need retransmission mechanism for wide-area service registrations
69 Revision 1.17 2004/09/01 03:59:29 ksekar
70 <rdar://problem/3783453>: Conditionally compile out uDNS code on Windows
72 Revision 1.16 2004/08/25 00:37:27 ksekar
73 <rdar://problem/3774635>: Cleanup DynDNS hostname registration code
75 Revision 1.15 2004/07/30 17:40:06 ksekar
76 <rdar://problem/3739115>: TXT Record updates not available for wide-area services
78 Revision 1.14 2004/07/29 19:27:15 ksekar
79 NATPMP Support - minor fixes and cleanup
81 Revision 1.13 2004/07/29 02:03:35 ksekar
82 Delete unused #define and structure field
84 Revision 1.12 2004/07/26 22:49:30 ksekar
85 <rdar://problem/3651409>: Feature #9516: Need support for NATPMP in client
87 Revision 1.11 2004/06/17 01:13:11 ksekar
88 <rdar://problem/3696616>: polling interval too short
90 Revision 1.10 2004/06/11 05:45:03 ksekar
91 <rdar://problem/3682397>: Change SRV names for LLQ/Update port lookups
93 Revision 1.9 2004/06/01 23:46:50 ksekar
94 <rdar://problem/3675149>: DynDNS: dynamically look up LLQ/Update ports
96 Revision 1.8 2004/05/28 23:42:37 ksekar
97 <rdar://problem/3258021>: Feature: DNS server->client notification on record changes (#7805)
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
102 Revision 1.6 2004/03/13 01:57:33 ksekar
103 <rdar://problem/3192546>: DynDNS: Dynamic update of service records
105 Revision 1.5 2004/02/21 08:56:58 bradley
106 Wrap prototypes with extern "C" for C++ builds.
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)
112 Revision 1.3 2004/01/24 03:38:27 cheshire
113 Fix minor syntactic error: Headers should use "extern" declarations, not "mDNSexport"
115 Revision 1.2 2004/01/23 23:23:15 ksekar
116 Added TCP support for truncated unicast messages.
118 Revision 1.1 2003/12/13 03:05:27 ksekar
119 <rdar://problem/3192548>: DynDNS: Unicast query of service records
127 #include "mDNSEmbeddedAPI.h"
128 #include "DNSCommon.h"
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
144 // Entry points into unicast-specific routines
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
);
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
156 // following fields must be set, and the update validated, upon entry.
159 // rr->UpdateCallback
161 extern mStatus
uDNS_AddRecordToService(mDNS
*const m
, ServiceRecordSet
*sr
, ExtraResourceRecord
*extra
);
162 extern mStatus
uDNS_UpdateRecord(mDNS
*m
, AuthRecord
*rr
);
164 extern mStatus
uDNS_RegisterRecord(mDNS
*const m
, AuthRecord
*const rr
);
165 extern mStatus
uDNS_DeregisterRecord(mDNS
*const m
, AuthRecord
*const rr
);
167 extern mStatus
uDNS_RegisterService(mDNS
*const m
, ServiceRecordSet
*srs
);
168 extern mStatus
uDNS_DeregisterService(mDNS
*const m
, ServiceRecordSet
*srs
);
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
);
175 extern void uDNS_ReceiveNATMap(mDNS
*m
, mDNSu8
*pkt
, mDNSu16 len
);
177 // returns time of next scheduled event
178 extern void uDNS_Execute(mDNS
*const m
);