summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSWindows/mDNSWin32.h
blob: 6b5b43566484cdc04ff5182f4fc723569c9e911c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/* -*- Mode: C; tab-width: 4 -*-
 *
 * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef	__MDNS_WIN32__
#define	__MDNS_WIN32__

#include	"CommonServices.h"

#if( !defined( _WIN32_WCE ) )
	#include	<mswsock.h>
#endif

#include	"mDNSEmbeddedAPI.h"
#include	"uDNS.h"

#ifdef	__cplusplus
	extern "C" {
#endif


typedef void ( *TCPUserCallback )();

struct TCPSocket_struct
{
	TCPSocketFlags				flags;		// MUST BE FIRST FIELD -- mDNSCore expects every TCPSocket_struct to begin with TCPSocketFlags flags
	SOCKET						fd;
	BOOL						connected;
	TCPUserCallback				userCallback;
	void					*	userContext;
	BOOL						closed;
	mDNS					*	m;
};


struct UDPSocket_struct
{
	mDNSIPPort					port; 		// MUST BE FIRST FIELD -- mDNSCoreReceive expects every UDPSocket_struct to begin with mDNSIPPort port
	mDNSAddr					addr;		// This is initialized by our code. If we don't get the 
											// dstAddr from WSARecvMsg we use this value instead.
	SOCKET						fd;
	LPFN_WSARECVMSG				recvMsgPtr;
	DNSMessage					packet;
	struct mDNSInterfaceData	*ifd;
	UDPSocket					*next;
	mDNS						*m;
};


//---------------------------------------------------------------------------------------------------------------------------
/*!	@struct		mDNSInterfaceData

	@abstract	Structure containing interface-specific data.
*/

typedef struct	mDNSInterfaceData	mDNSInterfaceData;
struct	mDNSInterfaceData
{
	char						name[ 128 ];
	uint32_t					index;
	uint32_t					scopeID;
	struct UDPSocket_struct		sock;
	NetworkInterfaceInfo		interfaceInfo;
	mDNSBool					hostRegistered;
	mDNSInterfaceData		*	next;
};


//---------------------------------------------------------------------------------------------------------------------------
/*!	@typedef	ReportStatusFunc
*/
typedef void		(*ReportStatusFunc)(int inType, const char *inFormat, ...);


//---------------------------------------------------------------------------------------------------------------------------
/*!	@struct		mDNS_PlatformSupport_struct

	@abstract	Structure containing platform-specific data.
*/

struct	mDNS_PlatformSupport_struct
{
	HANDLE						mainThread;
	HANDLE						checkFileSharesTimer;
	mDNSs32						checkFileSharesTimeout;
	ReportStatusFunc			reportStatusFunc;
	time_t						nextDHCPLeaseExpires;
	char						nbname[ 32 ];
	char						nbdomain[ 32 ];
	mDNSBool					smbFileSharing;
	mDNSBool					smbPrintSharing;
	ServiceRecordSet			smbSRS;
	AuthRecord					smbSubTypes[ 2 ];
	mDNSBool					registeredLoopback4;
	int							interfaceCount;
	mDNSInterfaceData *			interfaceList;
	mDNSInterfaceData *			inactiveInterfaceList;
	struct UDPSocket_struct		unicastSock4;
	struct UDPSocket_struct		unicastSock6;
	DWORD						osMajorVersion;
	DWORD						osMinorVersion;
};

//---------------------------------------------------------------------------------------------------------------------------
/*!	@struct		ifaddrs

	@abstract	Interface information
*/

struct ifaddrs
{
	struct ifaddrs *	ifa_next;
	char *				ifa_name;
	u_int				ifa_flags;
	struct sockaddr	*	ifa_addr;
	struct sockaddr	*	ifa_netmask;
	struct sockaddr	*	ifa_broadaddr;
	struct sockaddr	*	ifa_dstaddr;
	BYTE				ifa_physaddr[6];
	BOOL				ifa_dhcpEnabled;
	time_t				ifa_dhcpLeaseExpires;
	mDNSu8				ifa_womp;
	void *				ifa_data;
	
	struct
	{
		uint32_t		index;
	
	}	ifa_extra;
};


extern void		InterfaceListDidChange( mDNS * const inMDNS );
extern void		ComputerDescriptionDidChange( mDNS * const inMDNS );
extern void		TCPIPConfigDidChange( mDNS * const inMDNS );
extern void		DynDNSConfigDidChange( mDNS * const inMDNS );
extern void		FileSharingDidChange( mDNS * const inMDNS );
extern void		FirewallDidChange( mDNS * const inMDNS );
extern mStatus  TCPAddSocket( mDNS * const inMDNS, TCPSocket *sock );
extern mStatus	SetupInterfaceList( mDNS * const inMDNS );
extern mStatus	TearDownInterfaceList( mDNS * const inMDNS );
extern BOOL		IsWOMPEnabled();
extern void     DispatchSocketEvents( mDNS * const inMDNS );


#ifdef	__cplusplus
	}
#endif

#endif	// __MDNS_WIN32__