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