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 35typedef 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 49typedef void ( *TCPReadEventHandler )( TCPSocket * sock ); 50typedef void ( *TCPUserCallback )(); 51 52struct 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 73struct 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 99typedef struct mDNSInterfaceData mDNSInterfaceData; 100struct 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*/ 115typedef void (*RegisterWaitableEventHandler)(mDNS * const inMDNS, HANDLE event, void * context ); 116 117//--------------------------------------------------------------------------------------------------------------------------- 118/*! @typedef RegisterWaitableEventFunc 119*/ 120typedef mStatus (*RegisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event, void * context, RegisterWaitableEventHandler handler ); 121 122//--------------------------------------------------------------------------------------------------------------------------- 123/*! @typedef UnregisterWaitableEventHandler 124*/ 125typedef void (*UnregisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event ); 126 127//--------------------------------------------------------------------------------------------------------------------------- 128/*! @typedef ReportStatusFunc 129*/ 130typedef 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 139struct 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 168struct 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 191extern void InterfaceListDidChange( mDNS * const inMDNS ); 192extern void ComputerDescriptionDidChange( mDNS * const inMDNS ); 193extern void TCPIPConfigDidChange( mDNS * const inMDNS ); 194extern void DynDNSConfigDidChange( mDNS * const inMDNS ); 195extern void FileSharingDidChange( mDNS * const inMDNS ); 196extern void FirewallDidChange( mDNS * const inMDNS ); 197extern mStatus TCPAddSocket( mDNS * const inMDNS, TCPSocket *sock ); 198extern mStatus SetupInterfaceList( mDNS * const inMDNS ); 199extern mStatus TearDownInterfaceList( mDNS * const inMDNS ); 200extern BOOL IsWOMPEnabled(); 201extern void DispatchSocketEvents( mDNS * const inMDNS ); 202 203 204#ifdef __cplusplus 205 } 206#endif 207 208#endif // __MDNS_WIN32__ 209