blob: c9adaecc977480f6f7437947e4211c88aaadc1c6 [file] [log] [blame]
/*
* Copyright (c) 2018-2022 Apple 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
*
* https://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 __ClientRequests_h
#define __ClientRequests_h
#include "mDNSEmbeddedAPI.h"
#include "dns_sd_internal.h"
typedef void (*QueryRecordResultHandler)(mDNS *const m, DNSQuestion *question, const ResourceRecord *const answer, QC_result AddRecord,
DNSServiceErrorType error, void *context);
typedef struct
{
DNSQuestion q; // DNSQuestion for record query.
domainname * qname; // Name of the original record.
mDNSInterfaceID interfaceID; // Interface over which to perform query.
QueryRecordResultHandler resultHandler; // Handler for query record operation results.
void * resultContext; // Context to pass to result handler.
mDNSu32 reqID; // Client request ID.
int searchListIndex; // Index that indicates the next search domain to try.
#if MDNSRESPONDER_SUPPORTS(APPLE, UNICAST_DOTLOCAL)
DNSQuestion * q2; // DNSQuestion for unicast version of a record with a dot-local name.
mDNSu16 q2Type; // q2's original qtype value.
mDNSBool q2LongLived; // q2's original LongLived value.
mDNSBool q2ReturnIntermed; // q2's original ReturnIntermed value.
mDNSBool q2TimeoutQuestion; // q2's original TimeoutQuestion value.
mDNSBool q2AppendSearchDomains; // q2's original AppendSearchDomains value.
#endif
#if MDNSRESPONDER_SUPPORTS(APPLE, REACHABILITY_TRIGGER)
mDNSBool answered; // True if the query was answered.
#endif
mDNSBool useAAAAFallback; // If a AAAA question gets a negative answer, it's restarted as an A.
#if MDNSRESPONDER_SUPPORTS(APPLE, QUERIER)
mDNSu16 qtype; // Original QTYPE.
mDNSBool useFailover; // Use DNS service failover if applicable.
mDNSBool failoverMode; // Use DNS service failover immediately.
mDNSBool prohibitEncryptedDNS; // Prohibit use of encrypted DNS protocols.
#endif
} QueryRecordOp;
typedef struct
{
mDNSInterfaceID interfaceID; // InterfaceID being used for query record operations.
mDNSu32 protocols; // Protocols (IPv4, IPv6) specified by client.
QueryRecordOp * op4; // Query record operation object for A record.
QueryRecordOp * op6; // Query record operation object for AAAA record.
} GetAddrInfoClientRequest;
typedef struct
{
QueryRecordOp op; // Query record operation object.
} QueryRecordClientRequest;
typedef struct
{
mDNSu32 requestID;
const char * hostnameStr;
mDNSu32 interfaceIndex;
DNSServiceFlags flags;
mDNSu32 protocols;
mDNSs32 effectivePID;
const mDNSu8 * effectiveUUID;
mDNSu32 peerUID;
#if MDNSRESPONDER_SUPPORTS(APPLE, QUERIER)
const mDNSu8 * resolverUUID;
mdns_dns_service_id_t customID;
mDNSBool needEncryption;
mDNSBool useFailover;
mDNSBool failoverMode;
mDNSBool prohibitEncryptedDNS;
#endif
#if MDNSRESPONDER_SUPPORTS(APPLE, AUDIT_TOKEN)
const audit_token_t * peerAuditToken;
const audit_token_t * delegatorAuditToken;
mDNSBool isInAppBrowserRequest;
#endif
#if MDNSRESPONDER_SUPPORTS(APPLE, LOG_PRIVACY_LEVEL)
dnssd_log_privacy_level_t logPrivacyLevel;
#endif
} GetAddrInfoClientRequestParams;
typedef struct
{
mDNSu32 requestID;
const char * qnameStr;
mDNSu32 interfaceIndex;
DNSServiceFlags flags;
mDNSu16 qtype;
mDNSu16 qclass;
mDNSs32 effectivePID;
const mDNSu8 * effectiveUUID;
mDNSu32 peerUID;
#if MDNSRESPONDER_SUPPORTS(APPLE, QUERIER)
const mDNSu8 * resolverUUID;
mdns_dns_service_id_t customID;
mDNSBool needEncryption;
mDNSBool useFailover;
mDNSBool failoverMode;
mDNSBool prohibitEncryptedDNS;
#endif
#if MDNSRESPONDER_SUPPORTS(APPLE, AUDIT_TOKEN)
const audit_token_t * peerAuditToken;
const audit_token_t * delegatorAuditToken;
mDNSBool isInAppBrowserRequest;
#endif
mDNSBool useAAAAFallback;
#if MDNSRESPONDER_SUPPORTS(APPLE, LOG_PRIVACY_LEVEL)
dnssd_log_privacy_level_t logPrivacyLevel;
#endif
} QueryRecordClientRequestParams;
#ifdef __cplusplus
extern "C" {
#endif
mDNSexport void GetAddrInfoClientRequestParamsInit(GetAddrInfoClientRequestParams *inParams);
mDNSexport mStatus GetAddrInfoClientRequestStart(GetAddrInfoClientRequest *inRequest,
const GetAddrInfoClientRequestParams *inParams, QueryRecordResultHandler inResultHandler, void *inResultContext);
mDNSexport void GetAddrInfoClientRequestStop(GetAddrInfoClientRequest *inRequest);
mDNSexport const domainname * GetAddrInfoClientRequestGetQName(const GetAddrInfoClientRequest *inRequest);
mDNSexport mDNSBool GetAddrInfoClientRequestIsMulticast(const GetAddrInfoClientRequest *inRequest);
mDNSexport void QueryRecordClientRequestParamsInit(QueryRecordClientRequestParams *inParams);
mDNSexport mStatus QueryRecordClientRequestStart(QueryRecordClientRequest *inRequest,
const QueryRecordClientRequestParams *inParams, QueryRecordResultHandler inResultHandler, void *inResultContext);
mDNSexport void QueryRecordClientRequestStop(QueryRecordClientRequest *inRequest);
mDNSexport const domainname * QueryRecordClientRequestGetQName(const QueryRecordClientRequest *inRequest);
mDNSexport mDNSu16 QueryRecordClientRequestGetType(const QueryRecordClientRequest *inRequest);
mDNSexport mDNSBool QueryRecordClientRequestIsMulticast(QueryRecordClientRequest *inRequest);
#ifdef __cplusplus
}
#endif
#endif // __ClientRequests_h