]> git.saurik.com Git - apple/mdnsresponder.git/blob - mDNSWindows/mDNSWin32.h
mDNSResponder-320.14.tar.gz
[apple/mdnsresponder.git] / mDNSWindows / mDNSWin32.h
1 /* -*- Mode: C; tab-width: 4 -*-
2 *
3 * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 #ifndef __MDNS_WIN32__
19 #define __MDNS_WIN32__
20
21 #include "CommonServices.h"
22
23 #if( !defined( _WIN32_WCE ) )
24 #include <mswsock.h>
25 #endif
26
27 #include "mDNSEmbeddedAPI.h"
28 #include "uDNS.h"
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34
35 typedef struct Overlapped
36 {
37 BOOL pending;
38 OVERLAPPED data;
39 WSABUF wbuf;
40 DWORD error;
41 DWORD bytesTransferred;
42 mDNSAddr srcAddr;
43 mDNSIPPort srcPort;
44 mDNSAddr dstAddr;
45 mDNSIPPort dstPort;
46 } Overlapped;
47
48
49 typedef void ( *TCPReadEventHandler )( TCPSocket * sock );
50 typedef void ( *TCPUserCallback )();
51
52 struct TCPSocket_struct
53 {
54 TCPSocketFlags flags; // MUST BE FIRST FIELD -- mDNSCore expects every TCPSocket_struct to begin with TCPSocketFlags flags
55 SOCKET fd;
56 TCPReadEventHandler readEventHandler;
57 HANDLE connectEvent;
58 BOOL connected;
59 TCPUserCallback userCallback;
60 void * userContext;
61 Overlapped overlapped;
62 DWORD lastError;
63 BOOL closed;
64 uint8_t bbuf[ 4192 ];
65 uint8_t * bptr;
66 uint8_t * eptr;
67 uint8_t * ebuf;
68 TCPSocket * nextDispatchable;
69 mDNS * m;
70 };
71
72
73 struct UDPSocket_struct
74 {
75 mDNSIPPort port; // MUST BE FIRST FIELD -- mDNSCoreReceive expects every UDPSocket_struct to begin with mDNSIPPort port
76 mDNSAddr addr; // This is initialized by our code. If we don't get the
77 // dstAddr from WSARecvMsg we use this value instead.
78 SOCKET fd;
79 LPFN_WSARECVMSG recvMsgPtr;
80 Overlapped overlapped;
81 WSAMSG wmsg;
82 DNSMessage packet;
83 uint8_t controlBuffer[ 128 ];
84 struct sockaddr_storage srcAddr; // This is filled in by the WSARecv* function
85 INT srcAddrLen; // See above
86 struct mDNSInterfaceData * ifd;
87 UDPSocket * nextDispatchable;
88 UDPSocket * next;
89 mDNS * m;
90 };
91
92
93 //---------------------------------------------------------------------------------------------------------------------------
94 /*! @struct mDNSInterfaceData
95
96 @abstract Structure containing interface-specific data.
97 */
98
99 typedef struct mDNSInterfaceData mDNSInterfaceData;
100 struct mDNSInterfaceData
101 {
102 char name[ 128 ];
103 uint32_t index;
104 uint32_t scopeID;
105 struct UDPSocket_struct sock;
106 NetworkInterfaceInfo interfaceInfo;
107 mDNSBool hostRegistered;
108 mDNSInterfaceData * next;
109 };
110
111
112 //---------------------------------------------------------------------------------------------------------------------------
113 /*! @typedef RegisterWaitableEventHandler
114 */
115 typedef void (*RegisterWaitableEventHandler)(mDNS * const inMDNS, HANDLE event, void * context );
116
117 //---------------------------------------------------------------------------------------------------------------------------
118 /*! @typedef RegisterWaitableEventFunc
119 */
120 typedef mStatus (*RegisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event, void * context, RegisterWaitableEventHandler handler );
121
122 //---------------------------------------------------------------------------------------------------------------------------
123 /*! @typedef UnregisterWaitableEventHandler
124 */
125 typedef void (*UnregisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event );
126
127 //---------------------------------------------------------------------------------------------------------------------------
128 /*! @typedef ReportStatusFunc
129 */
130 typedef void (*ReportStatusFunc)(int inType, const char *inFormat, ...);
131
132
133 //---------------------------------------------------------------------------------------------------------------------------
134 /*! @struct mDNS_PlatformSupport_struct
135
136 @abstract Structure containing platform-specific data.
137 */
138
139 struct mDNS_PlatformSupport_struct
140 {
141 HANDLE mainThread;
142 HANDLE checkFileSharesTimer;
143 mDNSs32 checkFileSharesTimeout;
144 RegisterWaitableEventFunc registerWaitableEventFunc;
145 UnregisterWaitableEventFunc unregisterWaitableEventFunc;
146 ReportStatusFunc reportStatusFunc;
147 time_t nextDHCPLeaseExpires;
148 char nbname[ 32 ];
149 char nbdomain[ 32 ];
150 mDNSBool smbFileSharing;
151 mDNSBool smbPrintSharing;
152 ServiceRecordSet smbSRS;
153 AuthRecord smbSubTypes[ 2 ];
154 mDNSBool registeredLoopback4;
155 int interfaceCount;
156 mDNSInterfaceData * interfaceList;
157 mDNSInterfaceData * inactiveInterfaceList;
158 struct UDPSocket_struct unicastSock4;
159 struct UDPSocket_struct unicastSock6;
160 };
161
162 //---------------------------------------------------------------------------------------------------------------------------
163 /*! @struct ifaddrs
164
165 @abstract Interface information
166 */
167
168 struct ifaddrs
169 {
170 struct ifaddrs * ifa_next;
171 char * ifa_name;
172 u_int ifa_flags;
173 struct sockaddr * ifa_addr;
174 struct sockaddr * ifa_netmask;
175 struct sockaddr * ifa_broadaddr;
176 struct sockaddr * ifa_dstaddr;
177 BYTE ifa_physaddr[6];
178 BOOL ifa_dhcpEnabled;
179 time_t ifa_dhcpLeaseExpires;
180 mDNSu8 ifa_womp;
181 void * ifa_data;
182
183 struct
184 {
185 uint32_t index;
186
187 } ifa_extra;
188 };
189
190
191 extern void InterfaceListDidChange( mDNS * const inMDNS );
192 extern void ComputerDescriptionDidChange( mDNS * const inMDNS );
193 extern void TCPIPConfigDidChange( mDNS * const inMDNS );
194 extern void DynDNSConfigDidChange( mDNS * const inMDNS );
195 extern void FileSharingDidChange( mDNS * const inMDNS );
196 extern void FirewallDidChange( mDNS * const inMDNS );
197 extern mStatus TCPAddSocket( mDNS * const inMDNS, TCPSocket *sock );
198 extern mStatus SetupInterfaceList( mDNS * const inMDNS );
199 extern mStatus TearDownInterfaceList( mDNS * const inMDNS );
200 extern BOOL IsWOMPEnabled();
201 extern void DispatchSocketEvents( mDNS * const inMDNS );
202
203
204 #ifdef __cplusplus
205 }
206 #endif
207
208 #endif // __MDNS_WIN32__