13dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin/* -*- Mode: C; tab-width: 4 -*- 23dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * 33dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved. 43dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * 53dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * Licensed under the Apache License, Version 2.0 (the "License"); 63dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * you may not use this file except in compliance with the License. 73dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * You may obtain a copy of the License at 83dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * 93dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * http://www.apache.org/licenses/LICENSE-2.0 103dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * 113dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * Unless required by applicable law or agreed to in writing, software 123dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * distributed under the License is distributed on an "AS IS" BASIS, 133dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 143dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * See the License for the specific language governing permissions and 153dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin * limitations under the License. 163dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin */ 173dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 183dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#ifndef __MDNS_WIN32__ 193dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#define __MDNS_WIN32__ 203dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 213dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#include "CommonServices.h" 223dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 233dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#if( !defined( _WIN32_WCE ) ) 243dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin #include <mswsock.h> 253dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#endif 263dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 273dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#include "mDNSEmbeddedAPI.h" 283dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#include "uDNS.h" 293dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 303dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#ifdef __cplusplus 313dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin extern "C" { 323dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#endif 333dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 343dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 353dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlintypedef struct Overlapped 363dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin{ 373dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin BOOL pending; 383dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin OVERLAPPED data; 393dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin WSABUF wbuf; 403dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin DWORD error; 413dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin DWORD bytesTransferred; 423dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSAddr srcAddr; 433dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSIPPort srcPort; 443dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSAddr dstAddr; 453dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSIPPort dstPort; 463dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin} Overlapped; 473dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 483dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 493dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlintypedef void ( *TCPReadEventHandler )( TCPSocket * sock ); 503dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlintypedef void ( *TCPUserCallback )(); 513dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 523dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinstruct TCPSocket_struct 533dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin{ 543dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin TCPSocketFlags flags; // MUST BE FIRST FIELD -- mDNSCore expects every TCPSocket_struct to begin with TCPSocketFlags flags 553dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin SOCKET fd; 563dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin TCPReadEventHandler readEventHandler; 573dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin HANDLE connectEvent; 583dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin BOOL connected; 593dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin TCPUserCallback userCallback; 603dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin void * userContext; 613dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin Overlapped overlapped; 623dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin DWORD lastError; 633dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin BOOL closed; 643dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin uint8_t bbuf[ 4192 ]; 653dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin uint8_t * bptr; 663dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin uint8_t * eptr; 673dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin uint8_t * ebuf; 683dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin TCPSocket * nextDispatchable; 693dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNS * m; 703dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin}; 713dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 723dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 733dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinstruct UDPSocket_struct 743dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin{ 753dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSIPPort port; // MUST BE FIRST FIELD -- mDNSCoreReceive expects every UDPSocket_struct to begin with mDNSIPPort port 763dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSAddr addr; // This is initialized by our code. If we don't get the 773dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin // dstAddr from WSARecvMsg we use this value instead. 783dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin SOCKET fd; 793dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin LPFN_WSARECVMSG recvMsgPtr; 803dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin Overlapped overlapped; 813dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin WSAMSG wmsg; 823dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin DNSMessage packet; 833dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin uint8_t controlBuffer[ 128 ]; 843dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct sockaddr_storage srcAddr; // This is filled in by the WSARecv* function 853dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin INT srcAddrLen; // See above 863dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct mDNSInterfaceData * ifd; 873dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin UDPSocket * nextDispatchable; 883dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin UDPSocket * next; 893dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNS * m; 903dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin}; 913dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 923dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 933dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin//--------------------------------------------------------------------------------------------------------------------------- 943dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin/*! @struct mDNSInterfaceData 953dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 963dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin @abstract Structure containing interface-specific data. 973dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin*/ 983dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 993dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlintypedef struct mDNSInterfaceData mDNSInterfaceData; 1003dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinstruct mDNSInterfaceData 1013dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin{ 1023dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin char name[ 128 ]; 1033dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin uint32_t index; 1043dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin uint32_t scopeID; 1053dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct UDPSocket_struct sock; 1063dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin NetworkInterfaceInfo interfaceInfo; 1073dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSBool hostRegistered; 1083dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSInterfaceData * next; 1093dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin}; 1103dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1113dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1123dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin//--------------------------------------------------------------------------------------------------------------------------- 1133dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin/*! @typedef RegisterWaitableEventHandler 1143dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin*/ 1153dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlintypedef void (*RegisterWaitableEventHandler)(mDNS * const inMDNS, HANDLE event, void * context ); 1163dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1173dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin//--------------------------------------------------------------------------------------------------------------------------- 1183dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin/*! @typedef RegisterWaitableEventFunc 1193dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin*/ 1203dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlintypedef mStatus (*RegisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event, void * context, RegisterWaitableEventHandler handler ); 1213dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1223dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin//--------------------------------------------------------------------------------------------------------------------------- 1233dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin/*! @typedef UnregisterWaitableEventHandler 1243dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin*/ 1253dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlintypedef void (*UnregisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event ); 1263dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1273dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin//--------------------------------------------------------------------------------------------------------------------------- 1283dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin/*! @typedef ReportStatusFunc 1293dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin*/ 1303dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlintypedef void (*ReportStatusFunc)(int inType, const char *inFormat, ...); 1313dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1323dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1333dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin//--------------------------------------------------------------------------------------------------------------------------- 1343dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin/*! @struct mDNS_PlatformSupport_struct 1353dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1363dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin @abstract Structure containing platform-specific data. 1373dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin*/ 1383dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1393dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinstruct mDNS_PlatformSupport_struct 1403dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin{ 1413dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin HANDLE mainThread; 1423dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin HANDLE checkFileSharesTimer; 1433dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSs32 checkFileSharesTimeout; 1443dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin RegisterWaitableEventFunc registerWaitableEventFunc; 1453dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin UnregisterWaitableEventFunc unregisterWaitableEventFunc; 1463dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin ReportStatusFunc reportStatusFunc; 1473dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin time_t nextDHCPLeaseExpires; 1483dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin char nbname[ 32 ]; 1493dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin char nbdomain[ 32 ]; 1503dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSBool smbFileSharing; 1513dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSBool smbPrintSharing; 1523dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin ServiceRecordSet smbSRS; 1533dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin AuthRecord smbSubTypes[ 2 ]; 1543dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSBool registeredLoopback4; 1553dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin int interfaceCount; 1563dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSInterfaceData * interfaceList; 1573dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSInterfaceData * inactiveInterfaceList; 1583dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct UDPSocket_struct unicastSock4; 1593dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct UDPSocket_struct unicastSock6; 1603dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin}; 1613dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1623dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin//--------------------------------------------------------------------------------------------------------------------------- 1633dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin/*! @struct ifaddrs 1643dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1653dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin @abstract Interface information 1663dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin*/ 1673dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1683dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinstruct ifaddrs 1693dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin{ 1703dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct ifaddrs * ifa_next; 1713dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin char * ifa_name; 1723dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin u_int ifa_flags; 1733dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct sockaddr * ifa_addr; 1743dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct sockaddr * ifa_netmask; 1753dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct sockaddr * ifa_broadaddr; 1763dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct sockaddr * ifa_dstaddr; 1773dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin BYTE ifa_physaddr[6]; 1783dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin BOOL ifa_dhcpEnabled; 1793dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin time_t ifa_dhcpLeaseExpires; 1803dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin mDNSu8 ifa_womp; 1813dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin void * ifa_data; 1823dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1833dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin struct 1843dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin { 1853dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin uint32_t index; 1863dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1873dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin } ifa_extra; 1883dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin}; 1893dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1903dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 1913dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern void InterfaceListDidChange( mDNS * const inMDNS ); 1923dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern void ComputerDescriptionDidChange( mDNS * const inMDNS ); 1933dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern void TCPIPConfigDidChange( mDNS * const inMDNS ); 1943dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern void DynDNSConfigDidChange( mDNS * const inMDNS ); 1953dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern void FileSharingDidChange( mDNS * const inMDNS ); 1963dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern void FirewallDidChange( mDNS * const inMDNS ); 1973dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern mStatus TCPAddSocket( mDNS * const inMDNS, TCPSocket *sock ); 1983dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern mStatus SetupInterfaceList( mDNS * const inMDNS ); 1993dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern mStatus TearDownInterfaceList( mDNS * const inMDNS ); 2003dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern BOOL IsWOMPEnabled(); 2013dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlinextern void DispatchSocketEvents( mDNS * const inMDNS ); 2023dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 2033dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 2043dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#ifdef __cplusplus 2053dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin } 2063dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#endif 2073dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin 2083dfdc952a3e125868a0a4123e40e1f7fd868af21Casey Dahlin#endif // __MDNS_WIN32__ 209