#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 void ( *TCPReadEventHandler )( TCPSocket * sock );
typedef void ( *TCPUserCallback )();
struct TCPSocket_struct
{
TCPSocketFlags flags; SOCKET fd;
TCPReadEventHandler readEventHandler;
HANDLE connectEvent;
BOOL connected;
TCPUserCallback userCallback;
void * userContext;
DWORD lastError;
BOOL closed;
OVERLAPPED overlapped;
WSABUF wbuf;
uint8_t buf[ 4192 ];
uint8_t * bptr;
uint8_t * eptr;
mDNS * m;
};
struct UDPSocket_struct
{
mDNSIPPort port; mDNSAddr addr; SOCKET fd;
LPFN_WSARECVMSG recvMsgPtr;
OVERLAPPED overlapped;
WSAMSG wmsg;
WSABUF wbuf;
DNSMessage packet;
uint8_t controlBuffer[ 128 ];
struct sockaddr_storage srcAddr; INT srcAddrLen; struct mDNSInterfaceData * ifd;
UDPSocket * next;
mDNS * m;
};
typedef void ( *SocketEventHandler )( mDNS * const inMDNS, void * v );
typedef struct SocketEvent
{
void * sock;
SocketEventHandler handler;
struct SocketEvent * next;
} SocketEvent;
typedef struct TCPSocketEvent
{
struct SocketEvent super;
DWORD error;
DWORD bytesTransferred;
uint8_t buf[ 4192 ];
} TCPSocketEvent;
typedef struct UDPSocketEvent
{
struct SocketEvent super;
mDNSInterfaceID iid;
DNSMessage packet;
mDNSu8 * end;
mDNSAddr srcAddr;
mDNSIPPort srcPort;
mDNSAddr dstAddr;
mDNSIPPort dstPort;
} UDPSocketEvent;
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 void (*RegisterWaitableEventHandler)(mDNS * const inMDNS, HANDLE event, void * context );
typedef mStatus (*RegisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event, void * context, RegisterWaitableEventHandler handler );
typedef void (*UnregisterWaitableEventFunc)(mDNS * const inMDNS, HANDLE event );
typedef void (*ReportStatusFunc)(int inType, const char *inFormat, ...);
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
{
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 SetSocketEventsEnabled( mDNS * const inMDNS, BOOL val );
#ifdef __cplusplus
}
#endif
#endif // __MDNS_WIN32__