2 * Copyright (c) 2018-2019 Apple Inc. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef __ClientRequests_h
18 #define __ClientRequests_h
20 #include "mDNSEmbeddedAPI.h"
21 #include "dns_sd_internal.h"
23 typedef void (*QueryRecordResultHandler
)(mDNS
*const m
, DNSQuestion
*question
, const ResourceRecord
*const answer
, QC_result AddRecord
,
24 DNSServiceErrorType error
, void *context
);
28 DNSQuestion q
; // DNSQuestion for record query.
29 domainname
* qname
; // Name of the original record.
30 mDNSInterfaceID interfaceID
; // Interface over which to perform query.
31 QueryRecordResultHandler resultHandler
; // Handler for query record operation results.
32 void * resultContext
; // Context to pass to result handler.
34 int searchListIndex
; // Index that indicates the next search domain to try.
35 #if MDNSRESPONDER_SUPPORTS(APPLE, UNICAST_DOTLOCAL)
36 DNSQuestion
* q2
; // DNSQuestion for unicast version of a record with a dot-local name.
37 mDNSu16 q2Type
; // q2's original qtype value.
38 mDNSBool q2LongLived
; // q2's original LongLived value.
39 mDNSBool q2ReturnIntermed
; // q2's original ReturnIntermed value.
40 mDNSBool q2TimeoutQuestion
; // q2's original TimeoutQuestion value.
41 mDNSBool q2AppendSearchDomains
; // q2's original AppendSearchDomains value.
43 #if MDNSRESPONDER_SUPPORTS(APPLE, REACHABILITY_TRIGGER)
44 mDNSBool answered
; // True if the query was answered.
51 mDNSInterfaceID interfaceID
; // InterfaceID being used for query record operations.
52 mDNSu32 protocols
; // Protocols (IPv4, IPv6) specified by client.
53 QueryRecordOp
* op4
; // Query record operation object for A record.
54 QueryRecordOp
* op6
; // Query record operation object for AAAA record.
56 } GetAddrInfoClientRequest
;
60 QueryRecordOp op
; // Query record operation object.
62 } QueryRecordClientRequest
;
67 const char * hostnameStr
;
68 mDNSu32 interfaceIndex
;
69 DNSServiceFlags flags
;
72 const mDNSu8
* effectiveUUID
;
74 #if MDNSRESPONDER_SUPPORTS(APPLE, QUERIER)
75 mDNSBool needEncryption
;
76 const mDNSu8
* resolverUUID
;
77 mdns_dns_service_id_t customID
;
79 #if MDNSRESPONDER_SUPPORTS(APPLE, AUDIT_TOKEN)
80 const audit_token_t
* peerAuditToken
;
81 const audit_token_t
* delegatorAuditToken
;
82 mDNSBool isInAppBrowserRequest
;
85 } GetAddrInfoClientRequestParams
;
90 const char * qnameStr
;
91 mDNSu32 interfaceIndex
;
92 DNSServiceFlags flags
;
96 const mDNSu8
* effectiveUUID
;
98 #if MDNSRESPONDER_SUPPORTS(APPLE, QUERIER)
99 mDNSBool needEncryption
;
100 const mDNSu8
* resolverUUID
;
101 mdns_dns_service_id_t customID
;
103 #if MDNSRESPONDER_SUPPORTS(APPLE, AUDIT_TOKEN)
104 const audit_token_t
* peerAuditToken
;
105 const audit_token_t
* delegatorAuditToken
;
106 mDNSBool isInAppBrowserRequest
;
109 } QueryRecordClientRequestParams
;
115 mDNSexport
void GetAddrInfoClientRequestParamsInit(GetAddrInfoClientRequestParams
*inParams
);
116 mDNSexport mStatus
GetAddrInfoClientRequestStart(GetAddrInfoClientRequest
*inRequest
,
117 const GetAddrInfoClientRequestParams
*inParams
, QueryRecordResultHandler inResultHandler
, void *inResultContext
);
118 mDNSexport
void GetAddrInfoClientRequestStop(GetAddrInfoClientRequest
*inRequest
);
119 mDNSexport
const domainname
* GetAddrInfoClientRequestGetQName(const GetAddrInfoClientRequest
*inRequest
);
120 mDNSexport mDNSBool
GetAddrInfoClientRequestIsMulticast(const GetAddrInfoClientRequest
*inRequest
);
122 mDNSexport
void QueryRecordClientRequestParamsInit(QueryRecordClientRequestParams
*inParams
);
123 mDNSexport mStatus
QueryRecordClientRequestStart(QueryRecordClientRequest
*inRequest
,
124 const QueryRecordClientRequestParams
*inParams
, QueryRecordResultHandler inResultHandler
, void *inResultContext
);
125 mDNSexport
void QueryRecordClientRequestStop(QueryRecordClientRequest
*inRequest
);
126 mDNSexport
const domainname
* QueryRecordClientRequestGetQName(const QueryRecordClientRequest
*inRequest
);
127 mDNSexport mDNSu16
QueryRecordClientRequestGetType(const QueryRecordClientRequest
*inRequest
);
128 mDNSexport mDNSBool
QueryRecordClientRequestIsMulticast(QueryRecordClientRequest
*inRequest
);
130 #if MDNSRESPONDER_SUPPORTS(APPLE, DNSSECv2)
131 // This is a "mDNSexport" wrapper around the "static" QueryRecordOpStart that cannot be called by outside, which can be
132 // called by the outside(dnssec related function).
133 mDNSexport mStatus
QueryRecordOpStartForClientRequest(
134 QueryRecordOp
* inOp
,
136 const domainname
* inQName
,
139 mDNSInterfaceID inInterfaceID
,
142 mDNSBool inAppendSearchDomains
,
144 const mDNSu8 inUUID
[UUID_SIZE
],
146 #if MDNSRESPONDER_SUPPORTS(APPLE, AUDIT_TOKEN)
147 const audit_token_t
* inPeerAuditTokenPtr
,
148 const audit_token_t
* inDelegateAuditTokenPtr
,
150 #if MDNSRESPONDER_SUPPORTS(APPLE, QUERIER)
151 const mDNSu8 inResolverUUID
[UUID_SIZE
],
152 mDNSBool inNeedEncryption
,
153 const mdns_dns_service_id_t inCustomID
,
155 QueryRecordResultHandler inResultHandler
,
156 void * inResultContext
);
158 mDNSexport
void QueryRecordOpStopForClientRequest(QueryRecordOp
*op
);
159 #endif // MDNSRESPONDER_SUPPORTS(APPLE, DNSSECv2)
165 #endif // __ClientRequests_h