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 void ( *TCPUserCallback )(); 36 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 BOOL connected; 42 TCPUserCallback userCallback; 43 void * userContext; 44 BOOL closed; 45 mDNS * m; 46}; 47 48 49struct UDPSocket_struct 50{ 51 mDNSIPPort port; // MUST BE FIRST FIELD -- mDNSCoreReceive expects every UDPSocket_struct to begin with mDNSIPPort port 52 mDNSAddr addr; // This is initialized by our code. If we don't get the 53 // dstAddr from WSARecvMsg we use this value instead. 54 SOCKET fd; 55 LPFN_WSARECVMSG recvMsgPtr; 56 DNSMessage packet; 57 struct mDNSInterfaceData *ifd; 58 UDPSocket *next; 59 mDNS *m; 60}; 61 62 63//--------------------------------------------------------------------------------------------------------------------------- 64/*! @struct mDNSInterfaceData 65 66 @abstract Structure containing interface-specific data. 67*/ 68 69typedef struct mDNSInterfaceData mDNSInterfaceData; 70struct mDNSInterfaceData 71{ 72 char name[ 128 ]; 73 uint32_t index; 74 uint32_t scopeID; 75 struct UDPSocket_struct sock; 76 NetworkInterfaceInfo interfaceInfo; 77 mDNSBool hostRegistered; 78 mDNSInterfaceData * next; 79}; 80 81 82//--------------------------------------------------------------------------------------------------------------------------- 83/*! @typedef ReportStatusFunc 84*/ 85typedef void (*ReportStatusFunc)(int inType, const char *inFormat, ...); 86 87 88//--------------------------------------------------------------------------------------------------------------------------- 89/*! @struct mDNS_PlatformSupport_struct 90 91 @abstract Structure containing platform-specific data. 92*/ 93 94struct mDNS_PlatformSupport_struct 95{ 96 HANDLE mainThread; 97 HANDLE checkFileSharesTimer; 98 mDNSs32 checkFileSharesTimeout; 99 ReportStatusFunc reportStatusFunc; 100 time_t nextDHCPLeaseExpires; 101 char nbname[ 32 ]; 102 char nbdomain[ 32 ]; 103 mDNSBool smbFileSharing; 104 mDNSBool smbPrintSharing; 105 ServiceRecordSet smbSRS; 106 AuthRecord smbSubTypes[ 2 ]; 107 mDNSBool registeredLoopback4; 108 int interfaceCount; 109 mDNSInterfaceData * interfaceList; 110 mDNSInterfaceData * inactiveInterfaceList; 111 struct UDPSocket_struct unicastSock4; 112 struct UDPSocket_struct unicastSock6; 113 DWORD osMajorVersion; 114 DWORD osMinorVersion; 115}; 116 117//--------------------------------------------------------------------------------------------------------------------------- 118/*! @struct ifaddrs 119 120 @abstract Interface information 121*/ 122 123struct ifaddrs 124{ 125 struct ifaddrs * ifa_next; 126 char * ifa_name; 127 u_int ifa_flags; 128 struct sockaddr * ifa_addr; 129 struct sockaddr * ifa_netmask; 130 struct sockaddr * ifa_broadaddr; 131 struct sockaddr * ifa_dstaddr; 132 BYTE ifa_physaddr[6]; 133 BOOL ifa_dhcpEnabled; 134 time_t ifa_dhcpLeaseExpires; 135 mDNSu8 ifa_womp; 136 void * ifa_data; 137 138 struct 139 { 140 uint32_t index; 141 142 } ifa_extra; 143}; 144 145 146extern void InterfaceListDidChange( mDNS * const inMDNS ); 147extern void ComputerDescriptionDidChange( mDNS * const inMDNS ); 148extern void TCPIPConfigDidChange( mDNS * const inMDNS ); 149extern void DynDNSConfigDidChange( mDNS * const inMDNS ); 150extern void FileSharingDidChange( mDNS * const inMDNS ); 151extern void FirewallDidChange( mDNS * const inMDNS ); 152extern mStatus TCPAddSocket( mDNS * const inMDNS, TCPSocket *sock ); 153extern mStatus SetupInterfaceList( mDNS * const inMDNS ); 154extern mStatus TearDownInterfaceList( mDNS * const inMDNS ); 155extern BOOL IsWOMPEnabled(); 156extern void DispatchSocketEvents( mDNS * const inMDNS ); 157 158 159#ifdef __cplusplus 160 } 161#endif 162 163#endif // __MDNS_WIN32__ 164