| /* -*- 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 struct Overlapped |
| { |
| BOOL pending; |
| OVERLAPPED data; |
| WSABUF wbuf; |
| DWORD error; |
| DWORD bytesTransferred; |
| mDNSAddr srcAddr; |
| mDNSIPPort srcPort; |
| mDNSAddr dstAddr; |
| mDNSIPPort dstPort; |
| } Overlapped; |
| |
| |
| typedef void ( *TCPReadEventHandler )( TCPSocket * sock ); |
| typedef void ( *TCPUserCallback )(); |
| |
| struct TCPSocket_struct |
| { |
| TCPSocketFlags flags; // MUST BE FIRST FIELD -- mDNSCore expects every TCPSocket_struct to begin with TCPSocketFlags flags |
| SOCKET fd; |
| TCPReadEventHandler readEventHandler; |
| HANDLE connectEvent; |
| BOOL connected; |
| TCPUserCallback userCallback; |
| void * userContext; |
| Overlapped overlapped; |
| DWORD lastError; |
| BOOL closed;
|
| uint8_t bbuf[ 4192 ]; |
| uint8_t * bptr; |
| uint8_t * eptr; |
| uint8_t * ebuf; |
| TCPSocket * nextDispatchable; |
| 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; |
| Overlapped overlapped; |
| WSAMSG wmsg; |
| DNSMessage packet; |
| uint8_t controlBuffer[ 128 ]; |
| struct sockaddr_storage srcAddr; // This is filled in by the WSARecv* function |
| INT srcAddrLen; // See above |
| struct mDNSInterfaceData * ifd; |
| UDPSocket * nextDispatchable; |
| 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 RegisterWaitableEventHandler |
| */ |
| typedef void (*RegisterWaitableEventHandler)(mDNS * const inMDNS, HANDLE event, void * context ); |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| /*! @typedef RegisterWaitableEventFunc |
| */ |
| typedef mStatus (*RegisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event, void * context, RegisterWaitableEventHandler handler ); |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| /*! @typedef UnregisterWaitableEventHandler |
| */ |
| typedef void (*UnregisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event ); |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| /*! @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; |
| RegisterWaitableEventFunc registerWaitableEventFunc; |
| UnregisterWaitableEventFunc unregisterWaitableEventFunc; |
| 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; |
| }; |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| /*! @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__ |