346 lines
15 KiB
C
346 lines
15 KiB
C
#ifndef _DNSSD_H_
|
|
#define _DNSSD_H_
|
|
|
|
#include "typedef.h"
|
|
#include <stdint.h>
|
|
|
|
#define _DNS_SD_H 3331000
|
|
#define kDNSServiceProperty_DaemonVersion "DaemonVersion"
|
|
#define MAX_SERVNAME 256
|
|
|
|
#define kDNSServiceMaxServiceName 64
|
|
|
|
/* Maximum length, in bytes, of a domain name represented as an *escaped* C-String */
|
|
/* including the final trailing dot, and the C-String terminating NULL at the end. */
|
|
|
|
#define kDNSServiceMaxDomainName 1009
|
|
|
|
#define DNSSD_ERROR_NOERROR 0
|
|
#define DNSSD_ERROR_HWADDRLEN 1
|
|
#define DNSSD_ERROR_OUTOFMEM 2
|
|
#define DNSSD_ERROR_LIBNOTFOUND 3
|
|
#define DNSSD_ERROR_PROCNOTFOUND 4
|
|
|
|
#define kDNSServiceInterfaceIndexAny 0
|
|
#define kDNSServiceInterfaceIndexLocalOnly ((uint32_t)-1)
|
|
#define kDNSServiceInterfaceIndexUnicast ((uint32_t)-2)
|
|
#define kDNSServiceInterfaceIndexP2P ((uint32_t)-3)
|
|
/*****************************
|
|
Global Variables
|
|
*****************************/
|
|
//typedef long long int64_t;
|
|
//typedef unsigned long long uint64_t;
|
|
//typedef unsigned int uint32_t,u_int;
|
|
//typedef int int32_t;
|
|
//typedef unsigned short uint16_t;
|
|
//typedef signed short int16_t;
|
|
//typedef unsigned char uint8_t,u_char;
|
|
|
|
typedef uint32_t DNSServiceFlags;
|
|
typedef uint32_t DNSServiceProtocol;
|
|
typedef int32_t DNSServiceErrorType;
|
|
|
|
typedef struct dnssd_s dnssd_t;
|
|
typedef union _TXTRecordRef_t {
|
|
char PrivateData[16];
|
|
char *ForceNaturalAlignment;
|
|
} TXTRecordRef;
|
|
typedef struct _DNSServiceRef_t {
|
|
int dref;
|
|
void *ss;
|
|
} *DNSServiceRef;
|
|
typedef struct _DNSRecordRef_t {
|
|
int dnsref;
|
|
void *yy;
|
|
} *DNSRecordRef;
|
|
|
|
typedef void (*DNSServiceBrowseReply)
|
|
(
|
|
DNSServiceRef sdRef,
|
|
DNSServiceFlags flags,
|
|
uint32_t interfaceIndex,
|
|
DNSServiceErrorType errorCode,
|
|
const char *serviceName,
|
|
const char *regtype,
|
|
const char *replyDomain,
|
|
void *context
|
|
);
|
|
|
|
typedef void (*DNSServiceRegisterReply)
|
|
(
|
|
DNSServiceRef sdRef,
|
|
DNSServiceFlags flags,
|
|
DNSServiceErrorType errorCode,
|
|
const char *name,
|
|
const char *regtype,
|
|
const char *domain,
|
|
void *context
|
|
);
|
|
typedef void (*DNSServiceResolveReply)
|
|
(
|
|
DNSServiceRef sdRef,
|
|
DNSServiceFlags flags,
|
|
uint32_t interfaceIndex,
|
|
DNSServiceErrorType errorCode,
|
|
const char *fullname,
|
|
const char *hosttarget,
|
|
uint16_t port, /* In network byte order */
|
|
uint16_t txtLen,
|
|
const unsigned char *txtRecord,
|
|
void *context
|
|
);
|
|
typedef void (*DNSServiceQueryRecordReply)
|
|
(
|
|
DNSServiceRef sdRef,
|
|
DNSServiceFlags flags,
|
|
uint32_t interfaceIndex,
|
|
DNSServiceErrorType errorCode,
|
|
const char *fullname,
|
|
uint16_t rrtype,
|
|
uint16_t rrclass,
|
|
uint16_t rdlen,
|
|
const void *rdata,
|
|
uint32_t ttl,
|
|
void *context
|
|
);
|
|
|
|
typedef void (*DNSServiceDomainEnumReply)
|
|
(
|
|
DNSServiceRef sdRef,
|
|
DNSServiceFlags flags,
|
|
uint32_t interfaceIndex,
|
|
DNSServiceErrorType errorCode,
|
|
const char *replyDomain,
|
|
void *context
|
|
);
|
|
typedef void (*DNSServiceRefDeallocate_t)(DNSServiceRef sdRef);
|
|
typedef DNSServiceErrorType(*DNSServiceRegister_t)
|
|
(
|
|
DNSServiceRef *sdRef,
|
|
DNSServiceFlags flags,
|
|
uint32_t interfaceIndex,
|
|
const char *name,
|
|
const char *regtype,
|
|
const char *domain,
|
|
const char *host,
|
|
uint16_t port,
|
|
uint16_t txtLen,
|
|
const void *txtRecord,
|
|
DNSServiceRegisterReply callBack,
|
|
void *context
|
|
);
|
|
//typedef void ( *DNSServiceGetAddrInfoReply)
|
|
// (
|
|
// DNSServiceRef sdRef,
|
|
// DNSServiceFlags flags,
|
|
// uint32_t interfaceIndex,
|
|
// DNSServiceErrorType errorCode,
|
|
// const char *hostname,
|
|
// const struct sockaddr *address,
|
|
// uint32_t ttl,
|
|
// void *context
|
|
// );
|
|
typedef void (*TXTRecordCreate_t)
|
|
(
|
|
TXTRecordRef *txtRecord,
|
|
uint16_t bufferLen,
|
|
void *buffer
|
|
);
|
|
typedef DNSServiceErrorType(*TXTRecordSetValue_t)
|
|
(
|
|
TXTRecordRef *txtRecord,
|
|
const char *key,
|
|
uint8_t valueSize,
|
|
const void *value
|
|
);
|
|
typedef void (*DNSServiceRegisterRecordReply)
|
|
(
|
|
DNSServiceRef sdRef,
|
|
DNSRecordRef RecordRef,
|
|
DNSServiceFlags flags,
|
|
DNSServiceErrorType errorCode,
|
|
void *context
|
|
);
|
|
typedef void (*DNSServiceNATPortMappingReply)
|
|
(
|
|
DNSServiceRef sdRef,
|
|
DNSServiceFlags flags,
|
|
uint32_t interfaceIndex,
|
|
DNSServiceErrorType errorCode,
|
|
uint32_t externalAddress, /* four byte IPv4 address in network byte order */
|
|
DNSServiceProtocol protocol,
|
|
uint16_t internalPort, /* In network byte order */
|
|
uint16_t externalPort, /* In network byte order and may be different than the requested port */
|
|
uint32_t ttl, /* may be different than the requested ttl */
|
|
void *context
|
|
);
|
|
typedef uint16_t (*TXTRecordGetLength_t)(const TXTRecordRef *txtRecord);
|
|
typedef const void *(*TXTRecordGetBytesPtr_t)(const TXTRecordRef *txtRecord);
|
|
typedef void (*TXTRecordDeallocate_t)(TXTRecordRef *txtRecord);
|
|
struct dnssd_s {
|
|
DNSServiceRegister_t DNSServiceRegister;
|
|
DNSServiceRefDeallocate_t DNSServiceRefDeallocate;
|
|
TXTRecordCreate_t TXTRecordCreate;
|
|
TXTRecordSetValue_t TXTRecordSetValue;
|
|
TXTRecordGetLength_t TXTRecordGetLength;
|
|
TXTRecordGetBytesPtr_t TXTRecordGetBytesPtr;
|
|
TXTRecordDeallocate_t TXTRecordDeallocate;
|
|
|
|
DNSServiceRef raopService;
|
|
DNSServiceRef airplayService;
|
|
};
|
|
|
|
/* possible error code values */
|
|
enum {
|
|
kDNSServiceErr_NoError = 0,
|
|
kDNSServiceErr_Unknown = -65537, /* 0xFFFE FFFF */
|
|
kDNSServiceErr_NoSuchName = -65538,
|
|
kDNSServiceErr_NoMemory = -65539,
|
|
kDNSServiceErr_BadParam = -65540,
|
|
kDNSServiceErr_BadReference = -65541,
|
|
kDNSServiceErr_BadState = -65542,
|
|
kDNSServiceErr_BadFlags = -65543,
|
|
kDNSServiceErr_Unsupported = -65544,
|
|
kDNSServiceErr_NotInitialized = -65545,
|
|
kDNSServiceErr_AlreadyRegistered = -65547,
|
|
kDNSServiceErr_NameConflict = -65548,
|
|
kDNSServiceErr_Invalid = -65549,
|
|
kDNSServiceErr_Firewall = -65550,
|
|
kDNSServiceErr_Incompatible = -65551, /* client library incompatible with daemon */
|
|
kDNSServiceErr_BadInterfaceIndex = -65552,
|
|
kDNSServiceErr_Refused = -65553,
|
|
kDNSServiceErr_NoSuchRecord = -65554,
|
|
kDNSServiceErr_NoAuth = -65555,
|
|
kDNSServiceErr_NoSuchKey = -65556,
|
|
kDNSServiceErr_NATTraversal = -65557,
|
|
kDNSServiceErr_DoubleNAT = -65558,
|
|
kDNSServiceErr_BadTime = -65559, /* Codes up to here existed in Tiger */
|
|
kDNSServiceErr_BadSig = -65560,
|
|
kDNSServiceErr_BadKey = -65561,
|
|
kDNSServiceErr_Transient = -65562,
|
|
kDNSServiceErr_ServiceNotRunning = -65563, /* Background daemon not running */
|
|
kDNSServiceErr_NATPortMappingUnsupported = -65564, /* NAT doesn't support NAT-PMP or UPnP */
|
|
kDNSServiceErr_NATPortMappingDisabled = -65565, /* NAT supports NAT-PMP or UPnP but it's disabled by the administrator */
|
|
kDNSServiceErr_NoRouter = -65566, /* No router currently configured (probably no network connectivity) */
|
|
kDNSServiceErr_PollingMode = -65567,
|
|
kDNSServiceErr_Timeout = -65568
|
|
|
|
/* mDNS Error codes are in the range
|
|
* FFFE FF00 (-65792) to FFFE FFFF (-65537) */
|
|
};
|
|
enum {
|
|
kDNSServiceFlagsMoreComing = 0x1,
|
|
kDNSServiceFlagsAdd = 0x2,
|
|
kDNSServiceFlagsDefault = 0x4,
|
|
kDNSServiceFlagsNoAutoRename = 0x8,
|
|
kDNSServiceFlagsShared = 0x10,
|
|
kDNSServiceFlagsUnique = 0x20,
|
|
kDNSServiceFlagsBrowseDomains = 0x40,
|
|
kDNSServiceFlagsRegistrationDomains = 0x80,
|
|
kDNSServiceFlagsLongLivedQuery = 0x100,
|
|
kDNSServiceFlagsAllowRemoteQuery = 0x200,
|
|
kDNSServiceFlagsForceMulticast = 0x400,
|
|
kDNSServiceFlagsForce = 0x800,
|
|
kDNSServiceFlagsReturnIntermediates = 0x1000,
|
|
kDNSServiceFlagsNonBrowsable = 0x2000,
|
|
kDNSServiceFlagsShareConnection = 0x4000,
|
|
kDNSServiceFlagsSuppressUnusable = 0x8000,
|
|
kDNSServiceFlagsTimeout = 0x10000,
|
|
kDNSServiceFlagsIncludeP2P = 0x20000,
|
|
kDNSServiceFlagsWakeOnResolve = 0x40000
|
|
};
|
|
/* Possible protocols for DNSServiceNATPortMappingCreate(). */
|
|
enum {
|
|
kDNSServiceProtocol_IPv4 = 0x01,
|
|
kDNSServiceProtocol_IPv6 = 0x02,
|
|
/* 0x04 and 0x08 reserved for future internetwork protocols */
|
|
|
|
kDNSServiceProtocol_UDP = 0x10,
|
|
kDNSServiceProtocol_TCP = 0x20
|
|
};
|
|
|
|
enum {
|
|
kDNSServiceClass_IN = 1 /* Internet */
|
|
};
|
|
|
|
enum {
|
|
kDNSServiceType_A = 1, /* Host address. */
|
|
kDNSServiceType_NS = 2, /* Authoritative server. */
|
|
kDNSServiceType_MD = 3, /* Mail destination. */
|
|
kDNSServiceType_MF = 4, /* Mail forwarder. */
|
|
kDNSServiceType_CNAME = 5, /* Canonical name. */
|
|
kDNSServiceType_SOA = 6, /* Start of authority zone. */
|
|
kDNSServiceType_MB = 7, /* Mailbox domain name. */
|
|
kDNSServiceType_MG = 8, /* Mail group member. */
|
|
kDNSServiceType_MR = 9, /* Mail rename name. */
|
|
kDNSServiceType_NULL = 10, /* Null resource record. */
|
|
kDNSServiceType_WKS = 11, /* Well known service. */
|
|
kDNSServiceType_PTR = 12, /* Domain name pointer. */
|
|
kDNSServiceType_HINFO = 13, /* Host information. */
|
|
kDNSServiceType_MINFO = 14, /* Mailbox information. */
|
|
kDNSServiceType_MX = 15, /* Mail routing information. */
|
|
kDNSServiceType_TXT = 16, /* One or more text strings (NOT "zero or more..."). */
|
|
kDNSServiceType_RP = 17, /* Responsible person. */
|
|
kDNSServiceType_AFSDB = 18, /* AFS cell database. */
|
|
kDNSServiceType_X25 = 19, /* X_25 calling address. */
|
|
kDNSServiceType_ISDN = 20, /* ISDN calling address. */
|
|
kDNSServiceType_RT = 21, /* Router. */
|
|
kDNSServiceType_NSAP = 22, /* NSAP address. */
|
|
kDNSServiceType_NSAP_PTR = 23, /* Reverse NSAP lookup (deprecated). */
|
|
kDNSServiceType_SIG = 24, /* Security signature. */
|
|
kDNSServiceType_KEY = 25, /* Security key. */
|
|
kDNSServiceType_PX = 26, /* X.400 mail mapping. */
|
|
kDNSServiceType_GPOS = 27, /* Geographical position (withdrawn). */
|
|
kDNSServiceType_AAAA = 28, /* IPv6 Address. */
|
|
kDNSServiceType_LOC = 29, /* Location Information. */
|
|
kDNSServiceType_NXT = 30, /* Next domain (security). */
|
|
kDNSServiceType_EID = 31, /* Endpoint identifier. */
|
|
kDNSServiceType_NIMLOC = 32, /* Nimrod Locator. */
|
|
kDNSServiceType_SRV = 33, /* Server Selection. */
|
|
kDNSServiceType_ATMA = 34, /* ATM Address */
|
|
kDNSServiceType_NAPTR = 35, /* Naming Authority PoinTeR */
|
|
kDNSServiceType_KX = 36, /* Key Exchange */
|
|
kDNSServiceType_CERT = 37, /* Certification record */
|
|
kDNSServiceType_A6 = 38, /* IPv6 Address (deprecated) */
|
|
kDNSServiceType_DNAME = 39, /* Non-terminal DNAME (for IPv6) */
|
|
kDNSServiceType_SINK = 40, /* Kitchen sink (experimental) */
|
|
kDNSServiceType_OPT = 41, /* EDNS0 option (meta-RR) */
|
|
kDNSServiceType_APL = 42, /* Address Prefix List */
|
|
kDNSServiceType_DS = 43, /* Delegation Signer */
|
|
kDNSServiceType_SSHFP = 44, /* SSH Key Fingerprint */
|
|
kDNSServiceType_IPSECKEY = 45, /* IPSECKEY */
|
|
kDNSServiceType_RRSIG = 46, /* RRSIG */
|
|
kDNSServiceType_NSEC = 47, /* Denial of Existence */
|
|
kDNSServiceType_DNSKEY = 48, /* DNSKEY */
|
|
kDNSServiceType_DHCID = 49, /* DHCP Client Identifier */
|
|
kDNSServiceType_NSEC3 = 50, /* Hashed Authenticated Denial of Existence */
|
|
kDNSServiceType_NSEC3PARAM = 51, /* Hashed Authenticated Denial of Existence */
|
|
|
|
kDNSServiceType_HIP = 55, /* Host Identity Protocol */
|
|
|
|
kDNSServiceType_SPF = 99, /* Sender Policy Framework for E-Mail */
|
|
kDNSServiceType_UINFO = 100, /* IANA-Reserved */
|
|
kDNSServiceType_UID = 101, /* IANA-Reserved */
|
|
kDNSServiceType_GID = 102, /* IANA-Reserved */
|
|
kDNSServiceType_UNSPEC = 103, /* IANA-Reserved */
|
|
|
|
kDNSServiceType_TKEY = 249, /* Transaction key */
|
|
kDNSServiceType_TSIG = 250, /* Transaction signature. */
|
|
kDNSServiceType_IXFR = 251, /* Incremental zone transfer. */
|
|
kDNSServiceType_AXFR = 252, /* Transfer zone of authority. */
|
|
kDNSServiceType_MAILB = 253, /* Transfer mailbox records. */
|
|
kDNSServiceType_MAILA = 254, /* Transfer mail agent records. */
|
|
kDNSServiceType_ANY = 255 /* Wildcard match. */
|
|
};
|
|
|
|
/*****************************
|
|
Function Declare
|
|
*****************************/
|
|
dnssd_t *dnssd_init(int *error);
|
|
|
|
int dnssd_register_raop(dnssd_t *dnssd, const char *name,
|
|
unsigned short port, const char *hwaddr,
|
|
int hwaddrlen, int password);
|
|
|
|
#endif
|