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