1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
/*
* Copyright (c) 2018-2019 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
*
* http://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; //
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
} 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)
mDNSBool needEncryption;
const mDNSu8 * resolverUUID;
mdns_dns_service_id_t customID;
#endif
#if MDNSRESPONDER_SUPPORTS(APPLE, AUDIT_TOKEN)
const audit_token_t * peerAuditToken;
const audit_token_t * delegatorAuditToken;
mDNSBool isInAppBrowserRequest;
#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)
mDNSBool needEncryption;
const mDNSu8 * resolverUUID;
mdns_dns_service_id_t customID;
#endif
#if MDNSRESPONDER_SUPPORTS(APPLE, AUDIT_TOKEN)
const audit_token_t * peerAuditToken;
const audit_token_t * delegatorAuditToken;
mDNSBool isInAppBrowserRequest;
#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);
#if MDNSRESPONDER_SUPPORTS(APPLE, DNSSECv2)
// This is a "mDNSexport" wrapper around the "static" QueryRecordOpStart that cannot be called by outside, which can be
// called by the outside(dnssec related function).
mDNSexport mStatus QueryRecordOpStartForClientRequest(
QueryRecordOp * inOp,
mDNSu32 inReqID,
const domainname * inQName,
mDNSu16 inQType,
mDNSu16 inQClass,
mDNSInterfaceID inInterfaceID,
mDNSs32 inServiceID,
mDNSu32 inFlags,
mDNSBool inAppendSearchDomains,
mDNSs32 inPID,
const mDNSu8 inUUID[UUID_SIZE],
mDNSu32 inUID,
#if MDNSRESPONDER_SUPPORTS(APPLE, AUDIT_TOKEN)
const audit_token_t * inPeerAuditTokenPtr,
const audit_token_t * inDelegateAuditTokenPtr,
#endif
#if MDNSRESPONDER_SUPPORTS(APPLE, QUERIER)
const mDNSu8 inResolverUUID[UUID_SIZE],
mDNSBool inNeedEncryption,
const mdns_dns_service_id_t inCustomID,
#endif
QueryRecordResultHandler inResultHandler,
void * inResultContext);
mDNSexport void QueryRecordOpStopForClientRequest(QueryRecordOp *op);
#endif // MDNSRESPONDER_SUPPORTS(APPLE, DNSSECv2)
#ifdef __cplusplus
}
#endif
#endif // __ClientRequests_h
|