xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/GRPCClient/GRPCCallOptions.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker /*
2*cc02d7e2SAndroid Build Coastguard Worker  *
3*cc02d7e2SAndroid Build Coastguard Worker  * Copyright 2018 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker  *
5*cc02d7e2SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker  *
9*cc02d7e2SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker  *
11*cc02d7e2SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker  * limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker  *
17*cc02d7e2SAndroid Build Coastguard Worker  */
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker #import <Foundation/Foundation.h>
20*cc02d7e2SAndroid Build Coastguard Worker 
21*cc02d7e2SAndroid Build Coastguard Worker #import "GRPCTypes.h"
22*cc02d7e2SAndroid Build Coastguard Worker 
23*cc02d7e2SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_BEGIN
24*cc02d7e2SAndroid Build Coastguard Worker 
25*cc02d7e2SAndroid Build Coastguard Worker @protocol GRPCInterceptorFactory;
26*cc02d7e2SAndroid Build Coastguard Worker 
27*cc02d7e2SAndroid Build Coastguard Worker /**
28*cc02d7e2SAndroid Build Coastguard Worker  * Immutable user configurable options for a gRPC call.
29*cc02d7e2SAndroid Build Coastguard Worker  * Caller can obtain a mutable copy of type \b GRPCMutableCallOptions by calling [option
30*cc02d7e2SAndroid Build Coastguard Worker  * mutableCopy]
31*cc02d7e2SAndroid Build Coastguard Worker  */
32*cc02d7e2SAndroid Build Coastguard Worker @interface GRPCCallOptions : NSObject <NSCopying, NSMutableCopying>
33*cc02d7e2SAndroid Build Coastguard Worker 
34*cc02d7e2SAndroid Build Coastguard Worker // Call parameters
35*cc02d7e2SAndroid Build Coastguard Worker /**
36*cc02d7e2SAndroid Build Coastguard Worker  * The authority for the RPC. If nil, the default authority will be used.
37*cc02d7e2SAndroid Build Coastguard Worker  *
38*cc02d7e2SAndroid Build Coastguard Worker  * Note: This property does not have effect on Cronet transport and will be ignored.
39*cc02d7e2SAndroid Build Coastguard Worker  * Note: This property cannot be used to validate a self-signed server certificate. It control the
40*cc02d7e2SAndroid Build Coastguard Worker  *       :authority header field of the call and performs an extra check that server's certificate
41*cc02d7e2SAndroid Build Coastguard Worker  *       matches the :authority header.
42*cc02d7e2SAndroid Build Coastguard Worker  */
43*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) NSString *serverAuthority;
44*cc02d7e2SAndroid Build Coastguard Worker 
45*cc02d7e2SAndroid Build Coastguard Worker /**
46*cc02d7e2SAndroid Build Coastguard Worker  * The timeout for the RPC call in seconds. If set to 0, the call will not timeout. If set to
47*cc02d7e2SAndroid Build Coastguard Worker  * positive, the gRPC call returns with status GRPCErrorCodeDeadlineExceeded if it is not completed
48*cc02d7e2SAndroid Build Coastguard Worker  * within \a timeout seconds. A negative value is not allowed.
49*cc02d7e2SAndroid Build Coastguard Worker  */
50*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSTimeInterval timeout;
51*cc02d7e2SAndroid Build Coastguard Worker 
52*cc02d7e2SAndroid Build Coastguard Worker /**
53*cc02d7e2SAndroid Build Coastguard Worker  * Enable flow control of a gRPC call. The option is default to NO. If set to YES, writeData: method
54*cc02d7e2SAndroid Build Coastguard Worker  * should only be called at most once before a didWriteData callback is issued, and
55*cc02d7e2SAndroid Build Coastguard Worker  * receiveNextMessage: must be called each time before gRPC call issues a didReceiveMessage
56*cc02d7e2SAndroid Build Coastguard Worker  * callback.
57*cc02d7e2SAndroid Build Coastguard Worker  */
58*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) BOOL flowControlEnabled;
59*cc02d7e2SAndroid Build Coastguard Worker 
60*cc02d7e2SAndroid Build Coastguard Worker /**
61*cc02d7e2SAndroid Build Coastguard Worker  * An array of interceptor factories. When a call starts, interceptors are created
62*cc02d7e2SAndroid Build Coastguard Worker  * by these factories and chained together with the same order as the factories in
63*cc02d7e2SAndroid Build Coastguard Worker  * this array. This parameter should not be modified by any interceptor and will
64*cc02d7e2SAndroid Build Coastguard Worker  * not take effect if done so.
65*cc02d7e2SAndroid Build Coastguard Worker  */
66*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly) NSArray<id<GRPCInterceptorFactory>> *interceptorFactories;
67*cc02d7e2SAndroid Build Coastguard Worker 
68*cc02d7e2SAndroid Build Coastguard Worker // OAuth2 parameters. Users of gRPC may specify one of the following two parameters.
69*cc02d7e2SAndroid Build Coastguard Worker 
70*cc02d7e2SAndroid Build Coastguard Worker /**
71*cc02d7e2SAndroid Build Coastguard Worker  * The OAuth2 access token string. The string is prefixed with "Bearer " then used as value of the
72*cc02d7e2SAndroid Build Coastguard Worker  * request's "authorization" header field. This parameter should not be used simultaneously with
73*cc02d7e2SAndroid Build Coastguard Worker  * \a authTokenProvider.
74*cc02d7e2SAndroid Build Coastguard Worker  */
75*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) NSString *oauth2AccessToken;
76*cc02d7e2SAndroid Build Coastguard Worker 
77*cc02d7e2SAndroid Build Coastguard Worker /**
78*cc02d7e2SAndroid Build Coastguard Worker  * The interface to get the OAuth2 access token string. gRPC will attempt to acquire token when
79*cc02d7e2SAndroid Build Coastguard Worker  * initiating the call. This parameter should not be used simultaneously with \a oauth2AccessToken.
80*cc02d7e2SAndroid Build Coastguard Worker  */
81*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly, nullable) id<GRPCAuthorizationProtocol> authTokenProvider;
82*cc02d7e2SAndroid Build Coastguard Worker 
83*cc02d7e2SAndroid Build Coastguard Worker /**
84*cc02d7e2SAndroid Build Coastguard Worker  * Initial metadata key-value pairs that should be included in the request.
85*cc02d7e2SAndroid Build Coastguard Worker  * Dictionary key is of type NSString, value should be either NSString or NSData containing binary
86*cc02d7e2SAndroid Build Coastguard Worker  * bytes data.
87*cc02d7e2SAndroid Build Coastguard Worker  */
88*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) GRPCMetadataDictionary *initialMetadata;
89*cc02d7e2SAndroid Build Coastguard Worker 
90*cc02d7e2SAndroid Build Coastguard Worker // Channel parameters; take into account of channel signature.
91*cc02d7e2SAndroid Build Coastguard Worker 
92*cc02d7e2SAndroid Build Coastguard Worker /**
93*cc02d7e2SAndroid Build Coastguard Worker  * Custom string that is prefixed to a request's user-agent header field before gRPC's internal
94*cc02d7e2SAndroid Build Coastguard Worker  * user-agent string.
95*cc02d7e2SAndroid Build Coastguard Worker  */
96*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) NSString *userAgentPrefix;
97*cc02d7e2SAndroid Build Coastguard Worker 
98*cc02d7e2SAndroid Build Coastguard Worker /**
99*cc02d7e2SAndroid Build Coastguard Worker  * Custom string that is suffixed to a request's user-agent header field after gRPC's internal
100*cc02d7e2SAndroid Build Coastguard Worker  * user-agent string.
101*cc02d7e2SAndroid Build Coastguard Worker  */
102*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) NSString *userAgentSuffix;
103*cc02d7e2SAndroid Build Coastguard Worker 
104*cc02d7e2SAndroid Build Coastguard Worker /**
105*cc02d7e2SAndroid Build Coastguard Worker  * The size limit for the response received from server. If it is exceeded, an error with status
106*cc02d7e2SAndroid Build Coastguard Worker  * code GRPCErrorCodeResourceExhausted is returned.
107*cc02d7e2SAndroid Build Coastguard Worker  */
108*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSUInteger responseSizeLimit;
109*cc02d7e2SAndroid Build Coastguard Worker 
110*cc02d7e2SAndroid Build Coastguard Worker /**
111*cc02d7e2SAndroid Build Coastguard Worker  * The compression algorithm to be used by the gRPC call. For more details refer to
112*cc02d7e2SAndroid Build Coastguard Worker  * https://github.com/grpc/grpc/blob/master/doc/compression.md
113*cc02d7e2SAndroid Build Coastguard Worker  */
114*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) GRPCCompressionAlgorithm compressionAlgorithm;
115*cc02d7e2SAndroid Build Coastguard Worker 
116*cc02d7e2SAndroid Build Coastguard Worker /**
117*cc02d7e2SAndroid Build Coastguard Worker  * Enable/Disable gRPC call's retry feature. The default is enabled. For details of this feature
118*cc02d7e2SAndroid Build Coastguard Worker  * refer to
119*cc02d7e2SAndroid Build Coastguard Worker  * https://github.com/grpc/proposal/blob/master/A6-client-retries.md
120*cc02d7e2SAndroid Build Coastguard Worker  */
121*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) BOOL retryEnabled;
122*cc02d7e2SAndroid Build Coastguard Worker 
123*cc02d7e2SAndroid Build Coastguard Worker /**
124*cc02d7e2SAndroid Build Coastguard Worker  * Maximum interval in seconds between two consecutive retries.
125*cc02d7e2SAndroid Build Coastguard Worker  * Internal-only property used for GTMSessionFetcher transport retry policy.
126*cc02d7e2SAndroid Build Coastguard Worker  */
127*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSTimeInterval maxRetryInterval;
128*cc02d7e2SAndroid Build Coastguard Worker 
129*cc02d7e2SAndroid Build Coastguard Worker /**
130*cc02d7e2SAndroid Build Coastguard Worker  * Minimum interval in seconds between two consecutive retries.
131*cc02d7e2SAndroid Build Coastguard Worker  * Internal-only property used for GTMSessionFetcher transport retry policy.
132*cc02d7e2SAndroid Build Coastguard Worker  */
133*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSTimeInterval minRetryInterval;
134*cc02d7e2SAndroid Build Coastguard Worker 
135*cc02d7e2SAndroid Build Coastguard Worker /**
136*cc02d7e2SAndroid Build Coastguard Worker  * Multiplier used to increase the interval between retries.
137*cc02d7e2SAndroid Build Coastguard Worker  * Internal-only property used for GTMSessionFetcher transport retry policy.
138*cc02d7e2SAndroid Build Coastguard Worker  */
139*cc02d7e2SAndroid Build Coastguard Worker @property(readonly) double retryFactor;
140*cc02d7e2SAndroid Build Coastguard Worker 
141*cc02d7e2SAndroid Build Coastguard Worker // HTTP/2 keep-alive feature. The parameter \a keepaliveInterval specifies the interval between two
142*cc02d7e2SAndroid Build Coastguard Worker // PING frames. The parameter \a keepaliveTimeout specifies the length of the period for which the
143*cc02d7e2SAndroid Build Coastguard Worker // call should wait for PING ACK. If PING ACK is not received after this period, the call fails.
144*cc02d7e2SAndroid Build Coastguard Worker // Negative values are not allowed.
145*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSTimeInterval keepaliveInterval;
146*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSTimeInterval keepaliveTimeout;
147*cc02d7e2SAndroid Build Coastguard Worker 
148*cc02d7e2SAndroid Build Coastguard Worker // Parameters for connection backoff. Negative values are not allowed.
149*cc02d7e2SAndroid Build Coastguard Worker // For details of gRPC's backoff behavior, refer to
150*cc02d7e2SAndroid Build Coastguard Worker // https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md
151*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSTimeInterval connectMinTimeout;
152*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSTimeInterval connectInitialBackoff;
153*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSTimeInterval connectMaxBackoff;
154*cc02d7e2SAndroid Build Coastguard Worker 
155*cc02d7e2SAndroid Build Coastguard Worker /**
156*cc02d7e2SAndroid Build Coastguard Worker  * Specify channel args to be used for this call. For a list of channel args available, see
157*cc02d7e2SAndroid Build Coastguard Worker  * grpc/grpc_types.h
158*cc02d7e2SAndroid Build Coastguard Worker  */
159*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) GRPCMetadataDictionary *additionalChannelArgs;
160*cc02d7e2SAndroid Build Coastguard Worker 
161*cc02d7e2SAndroid Build Coastguard Worker // Parameters for SSL authentication.
162*cc02d7e2SAndroid Build Coastguard Worker 
163*cc02d7e2SAndroid Build Coastguard Worker /**
164*cc02d7e2SAndroid Build Coastguard Worker  * PEM format root certifications that is trusted. If set to nil, gRPC uses a list of default
165*cc02d7e2SAndroid Build Coastguard Worker  * root certificates.
166*cc02d7e2SAndroid Build Coastguard Worker  */
167*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) NSString *PEMRootCertificates;
168*cc02d7e2SAndroid Build Coastguard Worker 
169*cc02d7e2SAndroid Build Coastguard Worker /**
170*cc02d7e2SAndroid Build Coastguard Worker  * PEM format private key for client authentication, if required by the server.
171*cc02d7e2SAndroid Build Coastguard Worker  */
172*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) NSString *PEMPrivateKey;
173*cc02d7e2SAndroid Build Coastguard Worker 
174*cc02d7e2SAndroid Build Coastguard Worker /**
175*cc02d7e2SAndroid Build Coastguard Worker  * PEM format certificate chain for client authentication, if required by the server.
176*cc02d7e2SAndroid Build Coastguard Worker  */
177*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) NSString *PEMCertificateChain;
178*cc02d7e2SAndroid Build Coastguard Worker 
179*cc02d7e2SAndroid Build Coastguard Worker /**
180*cc02d7e2SAndroid Build Coastguard Worker  * Deprecated: this option is deprecated. Please use the property \a transport
181*cc02d7e2SAndroid Build Coastguard Worker  * instead.
182*cc02d7e2SAndroid Build Coastguard Worker  *
183*cc02d7e2SAndroid Build Coastguard Worker  * Select the transport type to be used for this call.
184*cc02d7e2SAndroid Build Coastguard Worker  */
185*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) GRPCTransportType transportType;
186*cc02d7e2SAndroid Build Coastguard Worker 
187*cc02d7e2SAndroid Build Coastguard Worker /**
188*cc02d7e2SAndroid Build Coastguard Worker  * The transport to be used for this call. Users may choose a native transport
189*cc02d7e2SAndroid Build Coastguard Worker  * identifier defined in \a GRPCTransport or provided by a non-native transport
190*cc02d7e2SAndroid Build Coastguard Worker  * implementation. If the option is left to be NULL, gRPC will use its default
191*cc02d7e2SAndroid Build Coastguard Worker  * transport.
192*cc02d7e2SAndroid Build Coastguard Worker  *
193*cc02d7e2SAndroid Build Coastguard Worker  * This is currently an experimental option.
194*cc02d7e2SAndroid Build Coastguard Worker  */
195*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) GRPCTransportID transport;
196*cc02d7e2SAndroid Build Coastguard Worker 
197*cc02d7e2SAndroid Build Coastguard Worker /**
198*cc02d7e2SAndroid Build Coastguard Worker  * Override the hostname during the TLS hostname validation process.
199*cc02d7e2SAndroid Build Coastguard Worker  */
200*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) NSString *hostNameOverride;
201*cc02d7e2SAndroid Build Coastguard Worker 
202*cc02d7e2SAndroid Build Coastguard Worker /**
203*cc02d7e2SAndroid Build Coastguard Worker  * A string that specify the domain where channel is being cached. Channels with different domains
204*cc02d7e2SAndroid Build Coastguard Worker  * will not get cached to the same connection.
205*cc02d7e2SAndroid Build Coastguard Worker  */
206*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readonly, nullable) NSString *channelPoolDomain;
207*cc02d7e2SAndroid Build Coastguard Worker 
208*cc02d7e2SAndroid Build Coastguard Worker /**
209*cc02d7e2SAndroid Build Coastguard Worker  * Channel id allows control of channel caching within a channelPoolDomain. A call with a unique
210*cc02d7e2SAndroid Build Coastguard Worker  * channelID will create a new channel (connection) instead of reusing an existing one. Multiple
211*cc02d7e2SAndroid Build Coastguard Worker  * calls in the same channelPoolDomain using identical channelID are allowed to share connection
212*cc02d7e2SAndroid Build Coastguard Worker  * if other channel options are also the same.
213*cc02d7e2SAndroid Build Coastguard Worker  */
214*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSUInteger channelID;
215*cc02d7e2SAndroid Build Coastguard Worker 
216*cc02d7e2SAndroid Build Coastguard Worker /**
217*cc02d7e2SAndroid Build Coastguard Worker  * Hash for channel options.
218*cc02d7e2SAndroid Build Coastguard Worker  */
219*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSUInteger channelOptionsHash;
220*cc02d7e2SAndroid Build Coastguard Worker 
221*cc02d7e2SAndroid Build Coastguard Worker /**
222*cc02d7e2SAndroid Build Coastguard Worker  * Return if the channel options are equal to another object.
223*cc02d7e2SAndroid Build Coastguard Worker  */
224*cc02d7e2SAndroid Build Coastguard Worker - (BOOL)hasChannelOptionsEqualTo:(GRPCCallOptions *)callOptions;
225*cc02d7e2SAndroid Build Coastguard Worker 
226*cc02d7e2SAndroid Build Coastguard Worker @end
227*cc02d7e2SAndroid Build Coastguard Worker 
228*cc02d7e2SAndroid Build Coastguard Worker /**
229*cc02d7e2SAndroid Build Coastguard Worker  * Mutable user configurable options for a gRPC call.
230*cc02d7e2SAndroid Build Coastguard Worker  * Caller can obtain an immutable copy of type \b GRPCCallOptions by calling [option copy]
231*cc02d7e2SAndroid Build Coastguard Worker  */
232*cc02d7e2SAndroid Build Coastguard Worker @interface GRPCMutableCallOptions : GRPCCallOptions <NSCopying, NSMutableCopying>
233*cc02d7e2SAndroid Build Coastguard Worker 
234*cc02d7e2SAndroid Build Coastguard Worker // Call parameters
235*cc02d7e2SAndroid Build Coastguard Worker /**
236*cc02d7e2SAndroid Build Coastguard Worker  * The authority for the RPC. If nil, the default authority will be used.
237*cc02d7e2SAndroid Build Coastguard Worker  *
238*cc02d7e2SAndroid Build Coastguard Worker  * Note: This property does not have effect on Cronet transport and will be ignored.
239*cc02d7e2SAndroid Build Coastguard Worker  * Note: This property cannot be used to validate a self-signed server certificate. It control the
240*cc02d7e2SAndroid Build Coastguard Worker  *       :authority header field of the call and performs an extra check that server's certificate
241*cc02d7e2SAndroid Build Coastguard Worker  *       matches the :authority header.
242*cc02d7e2SAndroid Build Coastguard Worker  */
243*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) NSString *serverAuthority;
244*cc02d7e2SAndroid Build Coastguard Worker 
245*cc02d7e2SAndroid Build Coastguard Worker /**
246*cc02d7e2SAndroid Build Coastguard Worker  * The timeout for the RPC call in seconds. If set to 0, the call will not timeout. If set to
247*cc02d7e2SAndroid Build Coastguard Worker  * positive, the gRPC call returns with status GRPCErrorCodeDeadlineExceeded if it is not completed
248*cc02d7e2SAndroid Build Coastguard Worker  * within \a timeout seconds. Negative value is invalid; setting the parameter to negative value
249*cc02d7e2SAndroid Build Coastguard Worker  * will reset the parameter to 0.
250*cc02d7e2SAndroid Build Coastguard Worker  */
251*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSTimeInterval timeout;
252*cc02d7e2SAndroid Build Coastguard Worker 
253*cc02d7e2SAndroid Build Coastguard Worker /**
254*cc02d7e2SAndroid Build Coastguard Worker  * Enable flow control of a gRPC call. The option is default to NO. If set to YES, writeData: method
255*cc02d7e2SAndroid Build Coastguard Worker  * should only be called at most once before a didWriteData callback is issued, and
256*cc02d7e2SAndroid Build Coastguard Worker  * receiveNextMessage: must be called each time before gRPC call can issue a didReceiveMessage
257*cc02d7e2SAndroid Build Coastguard Worker  * callback.
258*cc02d7e2SAndroid Build Coastguard Worker  *
259*cc02d7e2SAndroid Build Coastguard Worker  * If writeData: method is called more than once before issuance of a didWriteData callback, gRPC
260*cc02d7e2SAndroid Build Coastguard Worker  * will continue to queue the message and write them to gRPC core in order. However, the user
261*cc02d7e2SAndroid Build Coastguard Worker  * assumes their own responsibility of flow control by keeping tracking of the pending writes in
262*cc02d7e2SAndroid Build Coastguard Worker  * the call.
263*cc02d7e2SAndroid Build Coastguard Worker  */
264*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) BOOL flowControlEnabled;
265*cc02d7e2SAndroid Build Coastguard Worker 
266*cc02d7e2SAndroid Build Coastguard Worker /**
267*cc02d7e2SAndroid Build Coastguard Worker  * An array of interceptor factories. When a call starts, interceptors are created
268*cc02d7e2SAndroid Build Coastguard Worker  * by these factories and chained together with the same order as the factories in
269*cc02d7e2SAndroid Build Coastguard Worker  * this array. This parameter should not be modified by any interceptor and will
270*cc02d7e2SAndroid Build Coastguard Worker  * not take effect if done so.
271*cc02d7e2SAndroid Build Coastguard Worker  */
272*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite) NSArray<id<GRPCInterceptorFactory>> *interceptorFactories;
273*cc02d7e2SAndroid Build Coastguard Worker 
274*cc02d7e2SAndroid Build Coastguard Worker // OAuth2 parameters. Users of gRPC may specify one of the following two parameters.
275*cc02d7e2SAndroid Build Coastguard Worker 
276*cc02d7e2SAndroid Build Coastguard Worker /**
277*cc02d7e2SAndroid Build Coastguard Worker  * The OAuth2 access token string. The string is prefixed with "Bearer " then used as value of the
278*cc02d7e2SAndroid Build Coastguard Worker  * request's "authorization" header field. This parameter should not be used simultaneously with
279*cc02d7e2SAndroid Build Coastguard Worker  * \a authTokenProvider.
280*cc02d7e2SAndroid Build Coastguard Worker  */
281*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) NSString *oauth2AccessToken;
282*cc02d7e2SAndroid Build Coastguard Worker 
283*cc02d7e2SAndroid Build Coastguard Worker /**
284*cc02d7e2SAndroid Build Coastguard Worker  * The interface to get the OAuth2 access token string. gRPC will attempt to acquire token when
285*cc02d7e2SAndroid Build Coastguard Worker  * initiating the call. This parameter should not be used simultaneously with \a oauth2AccessToken.
286*cc02d7e2SAndroid Build Coastguard Worker  */
287*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite, nullable) id<GRPCAuthorizationProtocol> authTokenProvider;
288*cc02d7e2SAndroid Build Coastguard Worker 
289*cc02d7e2SAndroid Build Coastguard Worker /**
290*cc02d7e2SAndroid Build Coastguard Worker  * Initial metadata key-value pairs that should be included in the request.
291*cc02d7e2SAndroid Build Coastguard Worker  * Dictionary key is of type NSString, value should be either NSString or NSData containing binary
292*cc02d7e2SAndroid Build Coastguard Worker  * bytes data.
293*cc02d7e2SAndroid Build Coastguard Worker  */
294*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, nonatomic, copy, readwrite, nullable) GRPCMetadataDictionary *initialMetadata;
295*cc02d7e2SAndroid Build Coastguard Worker 
296*cc02d7e2SAndroid Build Coastguard Worker // Channel parameters; take into account of channel signature.
297*cc02d7e2SAndroid Build Coastguard Worker 
298*cc02d7e2SAndroid Build Coastguard Worker /**
299*cc02d7e2SAndroid Build Coastguard Worker  * Custom string that is prefixed to a request's user-agent header field before gRPC's internal
300*cc02d7e2SAndroid Build Coastguard Worker  * user-agent string.
301*cc02d7e2SAndroid Build Coastguard Worker  */
302*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) NSString *userAgentPrefix;
303*cc02d7e2SAndroid Build Coastguard Worker 
304*cc02d7e2SAndroid Build Coastguard Worker /**
305*cc02d7e2SAndroid Build Coastguard Worker  * Custom string that is suffixed to a request's user-agent header field after gRPC's internal
306*cc02d7e2SAndroid Build Coastguard Worker  * user-agent string.
307*cc02d7e2SAndroid Build Coastguard Worker  */
308*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) NSString *userAgentSuffix;
309*cc02d7e2SAndroid Build Coastguard Worker 
310*cc02d7e2SAndroid Build Coastguard Worker /**
311*cc02d7e2SAndroid Build Coastguard Worker  * The size limit for the response received from server. If it is exceeded, an error with status
312*cc02d7e2SAndroid Build Coastguard Worker  * code GRPCErrorCodeResourceExhausted is returned.
313*cc02d7e2SAndroid Build Coastguard Worker  */
314*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSUInteger responseSizeLimit;
315*cc02d7e2SAndroid Build Coastguard Worker 
316*cc02d7e2SAndroid Build Coastguard Worker /**
317*cc02d7e2SAndroid Build Coastguard Worker  * The compression algorithm to be used by the gRPC call. For more details refer to
318*cc02d7e2SAndroid Build Coastguard Worker  * https://github.com/grpc/grpc/blob/master/doc/compression.md
319*cc02d7e2SAndroid Build Coastguard Worker  */
320*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) GRPCCompressionAlgorithm compressionAlgorithm;
321*cc02d7e2SAndroid Build Coastguard Worker 
322*cc02d7e2SAndroid Build Coastguard Worker /**
323*cc02d7e2SAndroid Build Coastguard Worker  * Enable/Disable gRPC call's retry feature. The default is enabled. For details of this feature
324*cc02d7e2SAndroid Build Coastguard Worker  * refer to
325*cc02d7e2SAndroid Build Coastguard Worker  * https://github.com/grpc/proposal/blob/master/A6-client-retries.md
326*cc02d7e2SAndroid Build Coastguard Worker  */
327*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) BOOL retryEnabled;
328*cc02d7e2SAndroid Build Coastguard Worker 
329*cc02d7e2SAndroid Build Coastguard Worker /**
330*cc02d7e2SAndroid Build Coastguard Worker  * Maximum interval in seconds between two consecutive retries. Pass 0 to use default.
331*cc02d7e2SAndroid Build Coastguard Worker  * Internal-only property used for GTMSessionFetcher transport retry policy.
332*cc02d7e2SAndroid Build Coastguard Worker  */
333*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSTimeInterval maxRetryInterval;
334*cc02d7e2SAndroid Build Coastguard Worker 
335*cc02d7e2SAndroid Build Coastguard Worker /**
336*cc02d7e2SAndroid Build Coastguard Worker  * Minimum interval in seconds between two consecutive retries. Pass 0 to use default.
337*cc02d7e2SAndroid Build Coastguard Worker  * Internal-only property used for GTMSessionFetcher transport retry policy.
338*cc02d7e2SAndroid Build Coastguard Worker  */
339*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSTimeInterval minRetryInterval;
340*cc02d7e2SAndroid Build Coastguard Worker 
341*cc02d7e2SAndroid Build Coastguard Worker /**
342*cc02d7e2SAndroid Build Coastguard Worker  * Multiplier used to increase the interval between retries. Pass 0 to use default.
343*cc02d7e2SAndroid Build Coastguard Worker  * Internal-only property used for GTMSessionFetcher transport retry policy.
344*cc02d7e2SAndroid Build Coastguard Worker  */
345*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) double retryFactor;
346*cc02d7e2SAndroid Build Coastguard Worker 
347*cc02d7e2SAndroid Build Coastguard Worker // HTTP/2 keep-alive feature. The parameter \a keepaliveInterval specifies the interval between two
348*cc02d7e2SAndroid Build Coastguard Worker // PING frames. The parameter \a keepaliveTimeout specifies the length of the period for which the
349*cc02d7e2SAndroid Build Coastguard Worker // call should wait for PING ACK. If PING ACK is not received after this period, the call fails.
350*cc02d7e2SAndroid Build Coastguard Worker // Negative values are invalid; setting these parameters to negative value will reset the
351*cc02d7e2SAndroid Build Coastguard Worker // corresponding parameter to 0.
352*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSTimeInterval keepaliveInterval;
353*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSTimeInterval keepaliveTimeout;
354*cc02d7e2SAndroid Build Coastguard Worker 
355*cc02d7e2SAndroid Build Coastguard Worker // Parameters for connection backoff. Negative value is invalid; setting the parameters to negative
356*cc02d7e2SAndroid Build Coastguard Worker // value will reset corresponding parameter to 0.
357*cc02d7e2SAndroid Build Coastguard Worker // For details of gRPC's backoff behavior, refer to
358*cc02d7e2SAndroid Build Coastguard Worker // https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md
359*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSTimeInterval connectMinTimeout;
360*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSTimeInterval connectInitialBackoff;
361*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSTimeInterval connectMaxBackoff;
362*cc02d7e2SAndroid Build Coastguard Worker 
363*cc02d7e2SAndroid Build Coastguard Worker /**
364*cc02d7e2SAndroid Build Coastguard Worker  * Specify channel args to be used for this call. For a list of channel args available, see
365*cc02d7e2SAndroid Build Coastguard Worker  * grpc/grpc_types.h
366*cc02d7e2SAndroid Build Coastguard Worker  */
367*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) GRPCMetadataDictionary *additionalChannelArgs;
368*cc02d7e2SAndroid Build Coastguard Worker 
369*cc02d7e2SAndroid Build Coastguard Worker // Parameters for SSL authentication.
370*cc02d7e2SAndroid Build Coastguard Worker 
371*cc02d7e2SAndroid Build Coastguard Worker /**
372*cc02d7e2SAndroid Build Coastguard Worker  * PEM format root certifications that is trusted. If set to nil, gRPC uses a list of default
373*cc02d7e2SAndroid Build Coastguard Worker  * root certificates.
374*cc02d7e2SAndroid Build Coastguard Worker  */
375*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) NSString *PEMRootCertificates;
376*cc02d7e2SAndroid Build Coastguard Worker 
377*cc02d7e2SAndroid Build Coastguard Worker /**
378*cc02d7e2SAndroid Build Coastguard Worker  * PEM format private key for client authentication, if required by the server.
379*cc02d7e2SAndroid Build Coastguard Worker  */
380*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) NSString *PEMPrivateKey;
381*cc02d7e2SAndroid Build Coastguard Worker 
382*cc02d7e2SAndroid Build Coastguard Worker /**
383*cc02d7e2SAndroid Build Coastguard Worker  * PEM format certificate chain for client authentication, if required by the server.
384*cc02d7e2SAndroid Build Coastguard Worker  */
385*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) NSString *PEMCertificateChain;
386*cc02d7e2SAndroid Build Coastguard Worker 
387*cc02d7e2SAndroid Build Coastguard Worker /**
388*cc02d7e2SAndroid Build Coastguard Worker  * Deprecated: this option is deprecated. Please use the property \a transport
389*cc02d7e2SAndroid Build Coastguard Worker  * instead.
390*cc02d7e2SAndroid Build Coastguard Worker  *
391*cc02d7e2SAndroid Build Coastguard Worker  * Select the transport type to be used for this call.
392*cc02d7e2SAndroid Build Coastguard Worker  */
393*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) GRPCTransportType transportType;
394*cc02d7e2SAndroid Build Coastguard Worker 
395*cc02d7e2SAndroid Build Coastguard Worker /**
396*cc02d7e2SAndroid Build Coastguard Worker  * The transport to be used for this call. Users may choose a native transport
397*cc02d7e2SAndroid Build Coastguard Worker  * identifier defined in \a GRPCTransport or provided by a non-native ttransport
398*cc02d7e2SAndroid Build Coastguard Worker  * implementation. If the option is left to be NULL, gRPC will use its default
399*cc02d7e2SAndroid Build Coastguard Worker  * transport.
400*cc02d7e2SAndroid Build Coastguard Worker  *
401*cc02d7e2SAndroid Build Coastguard Worker  * An interceptor must not change the value of this option.
402*cc02d7e2SAndroid Build Coastguard Worker  */
403*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) GRPCTransportID transport;
404*cc02d7e2SAndroid Build Coastguard Worker 
405*cc02d7e2SAndroid Build Coastguard Worker /**
406*cc02d7e2SAndroid Build Coastguard Worker  * Override the hostname during the TLS hostname validation process.
407*cc02d7e2SAndroid Build Coastguard Worker  */
408*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) NSString *hostNameOverride;
409*cc02d7e2SAndroid Build Coastguard Worker 
410*cc02d7e2SAndroid Build Coastguard Worker /**
411*cc02d7e2SAndroid Build Coastguard Worker  * A string that specify the domain where channel is being cached. Channels with different domains
412*cc02d7e2SAndroid Build Coastguard Worker  * will not get cached to the same channel. For example, a gRPC example app may use the channel pool
413*cc02d7e2SAndroid Build Coastguard Worker  * domain 'io.grpc.example' so that its calls do not reuse the channel created by other modules in
414*cc02d7e2SAndroid Build Coastguard Worker  * the same process.
415*cc02d7e2SAndroid Build Coastguard Worker  */
416*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, copy, readwrite, nullable) NSString *channelPoolDomain;
417*cc02d7e2SAndroid Build Coastguard Worker 
418*cc02d7e2SAndroid Build Coastguard Worker /**
419*cc02d7e2SAndroid Build Coastguard Worker  * Channel id allows a call to force creating a new channel (connection) rather than using a cached
420*cc02d7e2SAndroid Build Coastguard Worker  * channel. Calls using distinct channelID's will not get cached to the same channel.
421*cc02d7e2SAndroid Build Coastguard Worker  */
422*cc02d7e2SAndroid Build Coastguard Worker @property(nonatomic, readwrite) NSUInteger channelID;
423*cc02d7e2SAndroid Build Coastguard Worker 
424*cc02d7e2SAndroid Build Coastguard Worker @end
425*cc02d7e2SAndroid Build Coastguard Worker 
426*cc02d7e2SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_END
427