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