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