#ifndef __mDNSOSX_h
#define __mDNSOSX_h
#ifdef __cplusplus
extern "C" {
#endif
#include <SystemConfiguration/SystemConfiguration.h>
#include <IOKit/pwr_mgt/IOPM.h>
#include <IOKit/pwr_mgt/IOPMLib.h>
#include <IOKit/pwr_mgt/IOPMLibPrivate.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "mDNSEmbeddedAPI.h" // for domain name structure
#ifdef MDNSRESPONDER_USES_LIB_DISPATCH_AS_PRIMARY_EVENT_LOOP_MECHANISM
#include <dispatch/dispatch.h>
#endif
typedef struct NetworkInterfaceInfoOSX_struct NetworkInterfaceInfoOSX;
typedef void (*KQueueEventCallback)(int fd, short filter, void *context);
typedef struct
{
KQueueEventCallback KQcallback;
void *KQcontext;
const char const *KQtask; #ifdef MDNSRESPONDER_USES_LIB_DISPATCH_AS_PRIMARY_EVENT_LOOP_MECHANISM
dispatch_source_t readSource;
dispatch_source_t writeSource;
mDNSBool fdClosed;
#endif
} KQueueEntry;
typedef struct
{
mDNSIPPort port; mDNS *m;
int sktv4;
KQueueEntry kqsv4;
#ifndef NO_IPV6
int sktv6;
KQueueEntry kqsv6;
#endif
int *closeFlag;
} KQSocketSet;
struct UDPSocket_struct
{
KQSocketSet ss; };
struct NetworkInterfaceInfoOSX_struct
{
NetworkInterfaceInfo ifinfo; NetworkInterfaceInfoOSX *next;
mDNS *m;
mDNSu8 Exists; mDNSu8 Flashing; mDNSu8 Occulting; mDNSs32 AppearanceTime; mDNSs32 LastSeen; unsigned int ifa_flags;
struct in_addr ifa_v4addr;
mDNSu32 scope_id; mDNSEthAddr BSSID; u_short sa_family;
int BPF_fd; int BPF_mcfd; u_int BPF_len;
#ifdef MDNSRESPONDER_USES_LIB_DISPATCH_AS_PRIMARY_EVENT_LOOP_MECHANISM
dispatch_source_t BPF_source;
#else
CFSocketRef BPF_cfs;
CFRunLoopSourceRef BPF_rls;
#endif
NetworkInterfaceInfoOSX *Registered; };
struct mDNS_PlatformSupport_struct
{
NetworkInterfaceInfoOSX *InterfaceList;
KQSocketSet permanentsockets;
domainlabel userhostlabel; domainlabel usernicelabel; domainlabel prevoldhostlabel; domainlabel prevnewhostlabel; domainlabel prevoldnicelabel; domainlabel prevnewnicelabel; mDNSs32 NotifyUser;
mDNSs32 HostNameConflict; mDNSs32 NetworkChanged;
mDNSs32 KeyChainTimer;
CFRunLoopRef CFRunLoop;
SCDynamicStoreRef Store;
CFRunLoopSourceRef StoreRLS;
CFRunLoopSourceRef PMRLS;
int SysEventNotifier;
KQueueEntry SysEventKQueue;
IONotificationPortRef PowerPortRef;
io_connect_t PowerConnection;
io_object_t PowerNotifier;
#ifdef kIOPMAcknowledgmentOptionSystemCapabilityRequirements
IOPMConnection IOPMConnection;
#endif
IOPMAssertionID IOPMAssertion;
SCPreferencesRef SCPrefs;
long SleepCookie; long WakeAtUTC;
mDNSs32 RequestReSleep;
#ifdef MDNSRESPONDER_USES_LIB_DISPATCH_AS_PRIMARY_EVENT_LOOP_MECHANISM
dispatch_source_t timer;
dispatch_source_t custom;
#else
pthread_mutex_t BigMutex;
#endif
mDNSs32 BigMutexStartTime;
int WakeKQueueLoopFD;
#if APPLE_OSX_mDNSResponder
CFDictionaryRef ConndBTMMDict; #endif
};
extern int OfferSleepProxyService;
extern int DisableSleepProxyClient;
extern int UseInternalSleepProxy;
extern int OSXVers, iOSVers;
extern mDNSBool DisableInboundRelayConnection;
#define OSXVers_Base 4
#define OSXVers_10_0_Cheetah 4
#define OSXVers_10_1_Puma 5
#define OSXVers_10_2_Jaguar 6
#define OSXVers_10_3_Panther 7
#define OSXVers_10_4_Tiger 8
#define OSXVers_10_5_Leopard 9
#define OSXVers_10_6_SnowLeopard 10
extern int KQueueFD;
extern void NotifyOfElusiveBug(const char *title, const char *msg); extern void SetDomainSecrets(mDNS *m);
extern void mDNSMacOSXNetworkChanged(mDNS *const m);
extern void mDNSMacOSXSystemBuildNumber(char *HINFO_SWstring);
extern NetworkInterfaceInfoOSX *IfindexToInterfaceInfoOSX(const mDNS *const m, mDNSInterfaceID ifindex);
#ifdef MDNSRESPONDER_USES_LIB_DISPATCH_AS_PRIMARY_EVENT_LOOP_MECHANISM
extern int KQueueSet(int fd, u_short flags, short filter, KQueueEntry *const entryRef);
mDNSexport void TriggerEventCompletion(void);
#else
extern int KQueueSet(int fd, u_short flags, short filter, const KQueueEntry *const entryRef);
#endif
extern void KQueueLock(mDNS *const m);
extern void KQueueUnlock(mDNS *const m, const char const *task);
extern void mDNSPlatformCloseFD(KQueueEntry *kq, int fd);
extern mDNSBool DictionaryIsEnabled(CFDictionaryRef dict);
extern int WatchDogReportingThreshold;
struct CompileTimeAssertionChecks_mDNSMacOSX
{
char sizecheck_NetworkInterfaceInfoOSX[(sizeof(NetworkInterfaceInfoOSX) <= 7000) ? 1 : -1];
char sizecheck_mDNS_PlatformSupport [(sizeof(mDNS_PlatformSupport) <= 768) ? 1 : -1];
};
#ifdef __cplusplus
}
#endif
#endif