xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/GRPCClient/GRPCCallOptions.mm (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 "GRPCCallOptions.h"
20*cc02d7e2SAndroid Build Coastguard Worker#import "GRPCTransport.h"
21*cc02d7e2SAndroid Build Coastguard Worker#import "internal/GRPCCallOptions+Internal.h"
22*cc02d7e2SAndroid Build Coastguard Worker
23*cc02d7e2SAndroid Build Coastguard Worker// The default values for the call options.
24*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kDefaultServerAuthority = nil;
25*cc02d7e2SAndroid Build Coastguard Workerstatic const NSTimeInterval kDefaultTimeout = 0;
26*cc02d7e2SAndroid Build Coastguard Workerstatic const BOOL kDefaultFlowControlEnabled = NO;
27*cc02d7e2SAndroid Build Coastguard Workerstatic NSArray<id<GRPCInterceptorFactory>> *const kDefaultInterceptorFactories = nil;
28*cc02d7e2SAndroid Build Coastguard Workerstatic GRPCMetadataDictionary *const kDefaultInitialMetadata = nil;
29*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kDefaultUserAgentPrefix = nil;
30*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kDefaultUserAgentSuffix = nil;
31*cc02d7e2SAndroid Build Coastguard Workerstatic const NSUInteger kDefaultResponseSizeLimit = 0;
32*cc02d7e2SAndroid Build Coastguard Workerstatic const GRPCCompressionAlgorithm kDefaultCompressionAlgorithm = GRPCCompressNone;
33*cc02d7e2SAndroid Build Coastguard Workerstatic const BOOL kDefaultRetryEnabled = YES;
34*cc02d7e2SAndroid Build Coastguard Workerstatic const NSTimeInterval kDefaultMaxRetryInterval =
35*cc02d7e2SAndroid Build Coastguard Worker    0;  // Use transport's default max retry interval
36*cc02d7e2SAndroid Build Coastguard Workerstatic const NSTimeInterval kDefaultMinRetryInterval =
37*cc02d7e2SAndroid Build Coastguard Worker    0;                                        // Use transport's default min retry interval
38*cc02d7e2SAndroid Build Coastguard Workerstatic const double kDefaultRetryFactor = 0;  // Use transport's default retry factor
39*cc02d7e2SAndroid Build Coastguard Workerstatic const NSTimeInterval kDefaultKeepaliveInterval = 0;
40*cc02d7e2SAndroid Build Coastguard Workerstatic const NSTimeInterval kDefaultKeepaliveTimeout = 0;
41*cc02d7e2SAndroid Build Coastguard Workerstatic const NSTimeInterval kDefaultConnectMinTimeout = 0;
42*cc02d7e2SAndroid Build Coastguard Workerstatic const NSTimeInterval kDefaultConnectInitialBackoff = 0;
43*cc02d7e2SAndroid Build Coastguard Workerstatic const NSTimeInterval kDefaultConnectMaxBackoff = 0;
44*cc02d7e2SAndroid Build Coastguard Workerstatic GRPCMetadataDictionary *const kDefaultAdditionalChannelArgs = nil;
45*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kDefaultPEMRootCertificates = nil;
46*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kDefaultPEMPrivateKey = nil;
47*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kDefaultPEMCertificateChain = nil;
48*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kDefaultOauth2AccessToken = nil;
49*cc02d7e2SAndroid Build Coastguard Workerstatic const id<GRPCAuthorizationProtocol> kDefaultAuthTokenProvider = nil;
50*cc02d7e2SAndroid Build Coastguard Workerstatic const GRPCTransportType kDefaultTransportType = GRPCTransportTypeChttp2BoringSSL;
51*cc02d7e2SAndroid Build Coastguard Workerstatic const GRPCTransportID kDefaultTransport = NULL;
52*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kDefaultHostNameOverride = nil;
53*cc02d7e2SAndroid Build Coastguard Workerstatic const id kDefaultLogContext = nil;
54*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kDefaultChannelPoolDomain = nil;
55*cc02d7e2SAndroid Build Coastguard Workerstatic const NSUInteger kDefaultChannelID = 0;
56*cc02d7e2SAndroid Build Coastguard Worker
57*cc02d7e2SAndroid Build Coastguard Worker// Check if two objects are equal. Returns YES if both are nil;
58*cc02d7e2SAndroid Build Coastguard Workerstatic BOOL areObjectsEqual(id obj1, id obj2) {
59*cc02d7e2SAndroid Build Coastguard Worker  if (obj1 == obj2) {
60*cc02d7e2SAndroid Build Coastguard Worker    return YES;
61*cc02d7e2SAndroid Build Coastguard Worker  }
62*cc02d7e2SAndroid Build Coastguard Worker  if (obj1 == nil || obj2 == nil) {
63*cc02d7e2SAndroid Build Coastguard Worker    return NO;
64*cc02d7e2SAndroid Build Coastguard Worker  }
65*cc02d7e2SAndroid Build Coastguard Worker  return [obj1 isEqual:obj2];
66*cc02d7e2SAndroid Build Coastguard Worker}
67*cc02d7e2SAndroid Build Coastguard Worker
68*cc02d7e2SAndroid Build Coastguard Worker@implementation GRPCCallOptions {
69*cc02d7e2SAndroid Build Coastguard Worker @protected
70*cc02d7e2SAndroid Build Coastguard Worker  NSString *_serverAuthority;
71*cc02d7e2SAndroid Build Coastguard Worker  NSTimeInterval _timeout;
72*cc02d7e2SAndroid Build Coastguard Worker  BOOL _flowControlEnabled;
73*cc02d7e2SAndroid Build Coastguard Worker  NSArray<id<GRPCInterceptorFactory>> *_interceptorFactories;
74*cc02d7e2SAndroid Build Coastguard Worker  NSString *_oauth2AccessToken;
75*cc02d7e2SAndroid Build Coastguard Worker  id<GRPCAuthorizationProtocol> _authTokenProvider;
76*cc02d7e2SAndroid Build Coastguard Worker  GRPCMetadataDictionary *_initialMetadata;
77*cc02d7e2SAndroid Build Coastguard Worker  NSString *_userAgentPrefix;
78*cc02d7e2SAndroid Build Coastguard Worker  NSString *_userAgentSuffix;
79*cc02d7e2SAndroid Build Coastguard Worker  NSUInteger _responseSizeLimit;
80*cc02d7e2SAndroid Build Coastguard Worker  GRPCCompressionAlgorithm _compressionAlgorithm;
81*cc02d7e2SAndroid Build Coastguard Worker  BOOL _retryEnabled;
82*cc02d7e2SAndroid Build Coastguard Worker  NSTimeInterval _maxRetryInterval;
83*cc02d7e2SAndroid Build Coastguard Worker  NSTimeInterval _minRetryInterval;
84*cc02d7e2SAndroid Build Coastguard Worker  double _retryFactor;
85*cc02d7e2SAndroid Build Coastguard Worker  NSTimeInterval _keepaliveInterval;
86*cc02d7e2SAndroid Build Coastguard Worker  NSTimeInterval _keepaliveTimeout;
87*cc02d7e2SAndroid Build Coastguard Worker  NSTimeInterval _connectMinTimeout;
88*cc02d7e2SAndroid Build Coastguard Worker  NSTimeInterval _connectInitialBackoff;
89*cc02d7e2SAndroid Build Coastguard Worker  NSTimeInterval _connectMaxBackoff;
90*cc02d7e2SAndroid Build Coastguard Worker  GRPCMetadataDictionary *_additionalChannelArgs;
91*cc02d7e2SAndroid Build Coastguard Worker  NSString *_PEMRootCertificates;
92*cc02d7e2SAndroid Build Coastguard Worker  NSString *_PEMPrivateKey;
93*cc02d7e2SAndroid Build Coastguard Worker  NSString *_PEMCertificateChain;
94*cc02d7e2SAndroid Build Coastguard Worker  GRPCTransportType _transportType;
95*cc02d7e2SAndroid Build Coastguard Worker  GRPCTransportID _transport;
96*cc02d7e2SAndroid Build Coastguard Worker  NSString *_hostNameOverride;
97*cc02d7e2SAndroid Build Coastguard Worker  id<NSObject> _logContext;
98*cc02d7e2SAndroid Build Coastguard Worker  NSString *_channelPoolDomain;
99*cc02d7e2SAndroid Build Coastguard Worker  NSUInteger _channelID;
100*cc02d7e2SAndroid Build Coastguard Worker}
101*cc02d7e2SAndroid Build Coastguard Worker
102*cc02d7e2SAndroid Build Coastguard Worker@synthesize serverAuthority = _serverAuthority;
103*cc02d7e2SAndroid Build Coastguard Worker@synthesize timeout = _timeout;
104*cc02d7e2SAndroid Build Coastguard Worker@synthesize flowControlEnabled = _flowControlEnabled;
105*cc02d7e2SAndroid Build Coastguard Worker@synthesize interceptorFactories = _interceptorFactories;
106*cc02d7e2SAndroid Build Coastguard Worker@synthesize oauth2AccessToken = _oauth2AccessToken;
107*cc02d7e2SAndroid Build Coastguard Worker@synthesize authTokenProvider = _authTokenProvider;
108*cc02d7e2SAndroid Build Coastguard Worker@synthesize initialMetadata = _initialMetadata;
109*cc02d7e2SAndroid Build Coastguard Worker@synthesize userAgentPrefix = _userAgentPrefix;
110*cc02d7e2SAndroid Build Coastguard Worker@synthesize userAgentSuffix = _userAgentSuffix;
111*cc02d7e2SAndroid Build Coastguard Worker@synthesize responseSizeLimit = _responseSizeLimit;
112*cc02d7e2SAndroid Build Coastguard Worker@synthesize compressionAlgorithm = _compressionAlgorithm;
113*cc02d7e2SAndroid Build Coastguard Worker@synthesize retryEnabled = _retryEnabled;
114*cc02d7e2SAndroid Build Coastguard Worker@synthesize maxRetryInterval = _maxRetryInterval;
115*cc02d7e2SAndroid Build Coastguard Worker@synthesize minRetryInterval = _minRetryInterval;
116*cc02d7e2SAndroid Build Coastguard Worker@synthesize retryFactor = _retryFactor;
117*cc02d7e2SAndroid Build Coastguard Worker@synthesize keepaliveInterval = _keepaliveInterval;
118*cc02d7e2SAndroid Build Coastguard Worker@synthesize keepaliveTimeout = _keepaliveTimeout;
119*cc02d7e2SAndroid Build Coastguard Worker@synthesize connectMinTimeout = _connectMinTimeout;
120*cc02d7e2SAndroid Build Coastguard Worker@synthesize connectInitialBackoff = _connectInitialBackoff;
121*cc02d7e2SAndroid Build Coastguard Worker@synthesize connectMaxBackoff = _connectMaxBackoff;
122*cc02d7e2SAndroid Build Coastguard Worker@synthesize additionalChannelArgs = _additionalChannelArgs;
123*cc02d7e2SAndroid Build Coastguard Worker@synthesize PEMRootCertificates = _PEMRootCertificates;
124*cc02d7e2SAndroid Build Coastguard Worker@synthesize PEMPrivateKey = _PEMPrivateKey;
125*cc02d7e2SAndroid Build Coastguard Worker@synthesize PEMCertificateChain = _PEMCertificateChain;
126*cc02d7e2SAndroid Build Coastguard Worker@synthesize transportType = _transportType;
127*cc02d7e2SAndroid Build Coastguard Worker@synthesize transport = _transport;
128*cc02d7e2SAndroid Build Coastguard Worker@synthesize hostNameOverride = _hostNameOverride;
129*cc02d7e2SAndroid Build Coastguard Worker@synthesize logContext = _logContext;
130*cc02d7e2SAndroid Build Coastguard Worker@synthesize channelPoolDomain = _channelPoolDomain;
131*cc02d7e2SAndroid Build Coastguard Worker@synthesize channelID = _channelID;
132*cc02d7e2SAndroid Build Coastguard Worker
133*cc02d7e2SAndroid Build Coastguard Worker- (instancetype)init {
134*cc02d7e2SAndroid Build Coastguard Worker  return [self initWithServerAuthority:kDefaultServerAuthority
135*cc02d7e2SAndroid Build Coastguard Worker                               timeout:kDefaultTimeout
136*cc02d7e2SAndroid Build Coastguard Worker                    flowControlEnabled:kDefaultFlowControlEnabled
137*cc02d7e2SAndroid Build Coastguard Worker                  interceptorFactories:kDefaultInterceptorFactories
138*cc02d7e2SAndroid Build Coastguard Worker                     oauth2AccessToken:kDefaultOauth2AccessToken
139*cc02d7e2SAndroid Build Coastguard Worker                     authTokenProvider:kDefaultAuthTokenProvider
140*cc02d7e2SAndroid Build Coastguard Worker                       initialMetadata:kDefaultInitialMetadata
141*cc02d7e2SAndroid Build Coastguard Worker                       userAgentPrefix:kDefaultUserAgentPrefix
142*cc02d7e2SAndroid Build Coastguard Worker                       userAgentSuffix:kDefaultUserAgentSuffix
143*cc02d7e2SAndroid Build Coastguard Worker                     responseSizeLimit:kDefaultResponseSizeLimit
144*cc02d7e2SAndroid Build Coastguard Worker                  compressionAlgorithm:kDefaultCompressionAlgorithm
145*cc02d7e2SAndroid Build Coastguard Worker                          retryEnabled:kDefaultRetryEnabled
146*cc02d7e2SAndroid Build Coastguard Worker                      maxRetryInterval:kDefaultMaxRetryInterval
147*cc02d7e2SAndroid Build Coastguard Worker                      minRetryInterval:kDefaultMinRetryInterval
148*cc02d7e2SAndroid Build Coastguard Worker                           retryFactor:kDefaultRetryFactor
149*cc02d7e2SAndroid Build Coastguard Worker                     keepaliveInterval:kDefaultKeepaliveInterval
150*cc02d7e2SAndroid Build Coastguard Worker                      keepaliveTimeout:kDefaultKeepaliveTimeout
151*cc02d7e2SAndroid Build Coastguard Worker                     connectMinTimeout:kDefaultConnectMinTimeout
152*cc02d7e2SAndroid Build Coastguard Worker                 connectInitialBackoff:kDefaultConnectInitialBackoff
153*cc02d7e2SAndroid Build Coastguard Worker                     connectMaxBackoff:kDefaultConnectMaxBackoff
154*cc02d7e2SAndroid Build Coastguard Worker                 additionalChannelArgs:kDefaultAdditionalChannelArgs
155*cc02d7e2SAndroid Build Coastguard Worker                   PEMRootCertificates:kDefaultPEMRootCertificates
156*cc02d7e2SAndroid Build Coastguard Worker                         PEMPrivateKey:kDefaultPEMPrivateKey
157*cc02d7e2SAndroid Build Coastguard Worker                   PEMCertificateChain:kDefaultPEMCertificateChain
158*cc02d7e2SAndroid Build Coastguard Worker                         transportType:kDefaultTransportType
159*cc02d7e2SAndroid Build Coastguard Worker                             transport:kDefaultTransport
160*cc02d7e2SAndroid Build Coastguard Worker                      hostNameOverride:kDefaultHostNameOverride
161*cc02d7e2SAndroid Build Coastguard Worker                            logContext:kDefaultLogContext
162*cc02d7e2SAndroid Build Coastguard Worker                     channelPoolDomain:kDefaultChannelPoolDomain
163*cc02d7e2SAndroid Build Coastguard Worker                             channelID:kDefaultChannelID];
164*cc02d7e2SAndroid Build Coastguard Worker}
165*cc02d7e2SAndroid Build Coastguard Worker
166*cc02d7e2SAndroid Build Coastguard Worker- (instancetype)initWithServerAuthority:(NSString *)serverAuthority
167*cc02d7e2SAndroid Build Coastguard Worker                                timeout:(NSTimeInterval)timeout
168*cc02d7e2SAndroid Build Coastguard Worker                     flowControlEnabled:(BOOL)flowControlEnabled
169*cc02d7e2SAndroid Build Coastguard Worker                   interceptorFactories:(NSArray<id<GRPCInterceptorFactory>> *)interceptorFactories
170*cc02d7e2SAndroid Build Coastguard Worker                      oauth2AccessToken:(NSString *)oauth2AccessToken
171*cc02d7e2SAndroid Build Coastguard Worker                      authTokenProvider:(id<GRPCAuthorizationProtocol>)authTokenProvider
172*cc02d7e2SAndroid Build Coastguard Worker                        initialMetadata:(GRPCMetadataDictionary *)initialMetadata
173*cc02d7e2SAndroid Build Coastguard Worker                        userAgentPrefix:(NSString *)userAgentPrefix
174*cc02d7e2SAndroid Build Coastguard Worker                        userAgentSuffix:(NSString *)userAgentSuffix
175*cc02d7e2SAndroid Build Coastguard Worker                      responseSizeLimit:(NSUInteger)responseSizeLimit
176*cc02d7e2SAndroid Build Coastguard Worker                   compressionAlgorithm:(GRPCCompressionAlgorithm)compressionAlgorithm
177*cc02d7e2SAndroid Build Coastguard Worker                           retryEnabled:(BOOL)retryEnabled
178*cc02d7e2SAndroid Build Coastguard Worker                       maxRetryInterval:(NSTimeInterval)maxRetryInterval
179*cc02d7e2SAndroid Build Coastguard Worker                       minRetryInterval:(NSTimeInterval)minRetryInterval
180*cc02d7e2SAndroid Build Coastguard Worker                            retryFactor:(double)retryFactor
181*cc02d7e2SAndroid Build Coastguard Worker                      keepaliveInterval:(NSTimeInterval)keepaliveInterval
182*cc02d7e2SAndroid Build Coastguard Worker                       keepaliveTimeout:(NSTimeInterval)keepaliveTimeout
183*cc02d7e2SAndroid Build Coastguard Worker                      connectMinTimeout:(NSTimeInterval)connectMinTimeout
184*cc02d7e2SAndroid Build Coastguard Worker                  connectInitialBackoff:(NSTimeInterval)connectInitialBackoff
185*cc02d7e2SAndroid Build Coastguard Worker                      connectMaxBackoff:(NSTimeInterval)connectMaxBackoff
186*cc02d7e2SAndroid Build Coastguard Worker                  additionalChannelArgs:(GRPCMetadataDictionary *)additionalChannelArgs
187*cc02d7e2SAndroid Build Coastguard Worker                    PEMRootCertificates:(NSString *)PEMRootCertificates
188*cc02d7e2SAndroid Build Coastguard Worker                          PEMPrivateKey:(NSString *)PEMPrivateKey
189*cc02d7e2SAndroid Build Coastguard Worker                    PEMCertificateChain:(NSString *)PEMCertificateChain
190*cc02d7e2SAndroid Build Coastguard Worker                          transportType:(GRPCTransportType)transportType
191*cc02d7e2SAndroid Build Coastguard Worker                              transport:(GRPCTransportID)transport
192*cc02d7e2SAndroid Build Coastguard Worker                       hostNameOverride:(NSString *)hostNameOverride
193*cc02d7e2SAndroid Build Coastguard Worker                             logContext:(id)logContext
194*cc02d7e2SAndroid Build Coastguard Worker                      channelPoolDomain:(NSString *)channelPoolDomain
195*cc02d7e2SAndroid Build Coastguard Worker                              channelID:(NSUInteger)channelID {
196*cc02d7e2SAndroid Build Coastguard Worker  if ((self = [super init])) {
197*cc02d7e2SAndroid Build Coastguard Worker    _serverAuthority = [serverAuthority copy];
198*cc02d7e2SAndroid Build Coastguard Worker    _timeout = timeout < 0 ? 0 : timeout;
199*cc02d7e2SAndroid Build Coastguard Worker    _flowControlEnabled = flowControlEnabled;
200*cc02d7e2SAndroid Build Coastguard Worker    _interceptorFactories = interceptorFactories;
201*cc02d7e2SAndroid Build Coastguard Worker    _oauth2AccessToken = [oauth2AccessToken copy];
202*cc02d7e2SAndroid Build Coastguard Worker    _authTokenProvider = authTokenProvider;
203*cc02d7e2SAndroid Build Coastguard Worker    _initialMetadata = initialMetadata == nil
204*cc02d7e2SAndroid Build Coastguard Worker                           ? nil
205*cc02d7e2SAndroid Build Coastguard Worker                           : [[NSDictionary alloc] initWithDictionary:initialMetadata
206*cc02d7e2SAndroid Build Coastguard Worker                                                            copyItems:YES];
207*cc02d7e2SAndroid Build Coastguard Worker    _userAgentPrefix = [userAgentPrefix copy];
208*cc02d7e2SAndroid Build Coastguard Worker    _userAgentSuffix = [userAgentSuffix copy];
209*cc02d7e2SAndroid Build Coastguard Worker    _responseSizeLimit = responseSizeLimit;
210*cc02d7e2SAndroid Build Coastguard Worker    _compressionAlgorithm = compressionAlgorithm;
211*cc02d7e2SAndroid Build Coastguard Worker    _retryEnabled = retryEnabled;
212*cc02d7e2SAndroid Build Coastguard Worker    _maxRetryInterval = maxRetryInterval;
213*cc02d7e2SAndroid Build Coastguard Worker    _minRetryInterval = minRetryInterval;
214*cc02d7e2SAndroid Build Coastguard Worker    _retryFactor = retryFactor;
215*cc02d7e2SAndroid Build Coastguard Worker    _keepaliveInterval = keepaliveInterval < 0 ? 0 : keepaliveInterval;
216*cc02d7e2SAndroid Build Coastguard Worker    _keepaliveTimeout = keepaliveTimeout < 0 ? 0 : keepaliveTimeout;
217*cc02d7e2SAndroid Build Coastguard Worker    _connectMinTimeout = connectMinTimeout < 0 ? 0 : connectMinTimeout;
218*cc02d7e2SAndroid Build Coastguard Worker    _connectInitialBackoff = connectInitialBackoff < 0 ? 0 : connectInitialBackoff;
219*cc02d7e2SAndroid Build Coastguard Worker    _connectMaxBackoff = connectMaxBackoff < 0 ? 0 : connectMaxBackoff;
220*cc02d7e2SAndroid Build Coastguard Worker    _additionalChannelArgs = additionalChannelArgs == nil
221*cc02d7e2SAndroid Build Coastguard Worker                                 ? nil
222*cc02d7e2SAndroid Build Coastguard Worker                                 : [[NSDictionary alloc] initWithDictionary:additionalChannelArgs
223*cc02d7e2SAndroid Build Coastguard Worker                                                                  copyItems:YES];
224*cc02d7e2SAndroid Build Coastguard Worker    _PEMRootCertificates = [PEMRootCertificates copy];
225*cc02d7e2SAndroid Build Coastguard Worker    _PEMPrivateKey = [PEMPrivateKey copy];
226*cc02d7e2SAndroid Build Coastguard Worker    _PEMCertificateChain = [PEMCertificateChain copy];
227*cc02d7e2SAndroid Build Coastguard Worker    _transportType = transportType;
228*cc02d7e2SAndroid Build Coastguard Worker    _transport = transport;
229*cc02d7e2SAndroid Build Coastguard Worker    _hostNameOverride = [hostNameOverride copy];
230*cc02d7e2SAndroid Build Coastguard Worker    _logContext = logContext;
231*cc02d7e2SAndroid Build Coastguard Worker    _channelPoolDomain = [channelPoolDomain copy];
232*cc02d7e2SAndroid Build Coastguard Worker    _channelID = channelID;
233*cc02d7e2SAndroid Build Coastguard Worker  }
234*cc02d7e2SAndroid Build Coastguard Worker  return self;
235*cc02d7e2SAndroid Build Coastguard Worker}
236*cc02d7e2SAndroid Build Coastguard Worker
237*cc02d7e2SAndroid Build Coastguard Worker- (nonnull id)copyWithZone:(NSZone *)zone {
238*cc02d7e2SAndroid Build Coastguard Worker  GRPCCallOptions *newOptions =
239*cc02d7e2SAndroid Build Coastguard Worker      [[GRPCCallOptions allocWithZone:zone] initWithServerAuthority:_serverAuthority
240*cc02d7e2SAndroid Build Coastguard Worker                                                            timeout:_timeout
241*cc02d7e2SAndroid Build Coastguard Worker                                                 flowControlEnabled:_flowControlEnabled
242*cc02d7e2SAndroid Build Coastguard Worker                                               interceptorFactories:_interceptorFactories
243*cc02d7e2SAndroid Build Coastguard Worker                                                  oauth2AccessToken:_oauth2AccessToken
244*cc02d7e2SAndroid Build Coastguard Worker                                                  authTokenProvider:_authTokenProvider
245*cc02d7e2SAndroid Build Coastguard Worker                                                    initialMetadata:_initialMetadata
246*cc02d7e2SAndroid Build Coastguard Worker                                                    userAgentPrefix:_userAgentPrefix
247*cc02d7e2SAndroid Build Coastguard Worker                                                    userAgentSuffix:_userAgentSuffix
248*cc02d7e2SAndroid Build Coastguard Worker                                                  responseSizeLimit:_responseSizeLimit
249*cc02d7e2SAndroid Build Coastguard Worker                                               compressionAlgorithm:_compressionAlgorithm
250*cc02d7e2SAndroid Build Coastguard Worker                                                       retryEnabled:_retryEnabled
251*cc02d7e2SAndroid Build Coastguard Worker                                                   maxRetryInterval:_maxRetryInterval
252*cc02d7e2SAndroid Build Coastguard Worker                                                   minRetryInterval:_minRetryInterval
253*cc02d7e2SAndroid Build Coastguard Worker                                                        retryFactor:_retryFactor
254*cc02d7e2SAndroid Build Coastguard Worker                                                  keepaliveInterval:_keepaliveInterval
255*cc02d7e2SAndroid Build Coastguard Worker                                                   keepaliveTimeout:_keepaliveTimeout
256*cc02d7e2SAndroid Build Coastguard Worker                                                  connectMinTimeout:_connectMinTimeout
257*cc02d7e2SAndroid Build Coastguard Worker                                              connectInitialBackoff:_connectInitialBackoff
258*cc02d7e2SAndroid Build Coastguard Worker                                                  connectMaxBackoff:_connectMaxBackoff
259*cc02d7e2SAndroid Build Coastguard Worker                                              additionalChannelArgs:_additionalChannelArgs
260*cc02d7e2SAndroid Build Coastguard Worker                                                PEMRootCertificates:_PEMRootCertificates
261*cc02d7e2SAndroid Build Coastguard Worker                                                      PEMPrivateKey:_PEMPrivateKey
262*cc02d7e2SAndroid Build Coastguard Worker                                                PEMCertificateChain:_PEMCertificateChain
263*cc02d7e2SAndroid Build Coastguard Worker                                                      transportType:_transportType
264*cc02d7e2SAndroid Build Coastguard Worker                                                          transport:_transport
265*cc02d7e2SAndroid Build Coastguard Worker                                                   hostNameOverride:_hostNameOverride
266*cc02d7e2SAndroid Build Coastguard Worker                                                         logContext:_logContext
267*cc02d7e2SAndroid Build Coastguard Worker                                                  channelPoolDomain:_channelPoolDomain
268*cc02d7e2SAndroid Build Coastguard Worker                                                          channelID:_channelID];
269*cc02d7e2SAndroid Build Coastguard Worker  return newOptions;
270*cc02d7e2SAndroid Build Coastguard Worker}
271*cc02d7e2SAndroid Build Coastguard Worker
272*cc02d7e2SAndroid Build Coastguard Worker- (nonnull id)mutableCopyWithZone:(NSZone *)zone {
273*cc02d7e2SAndroid Build Coastguard Worker  GRPCMutableCallOptions *newOptions = [[GRPCMutableCallOptions allocWithZone:zone]
274*cc02d7e2SAndroid Build Coastguard Worker      initWithServerAuthority:[_serverAuthority copy]
275*cc02d7e2SAndroid Build Coastguard Worker                      timeout:_timeout
276*cc02d7e2SAndroid Build Coastguard Worker           flowControlEnabled:_flowControlEnabled
277*cc02d7e2SAndroid Build Coastguard Worker         interceptorFactories:_interceptorFactories
278*cc02d7e2SAndroid Build Coastguard Worker            oauth2AccessToken:[_oauth2AccessToken copy]
279*cc02d7e2SAndroid Build Coastguard Worker            authTokenProvider:_authTokenProvider
280*cc02d7e2SAndroid Build Coastguard Worker              initialMetadata:[[NSDictionary alloc] initWithDictionary:_initialMetadata
281*cc02d7e2SAndroid Build Coastguard Worker                                                             copyItems:YES]
282*cc02d7e2SAndroid Build Coastguard Worker              userAgentPrefix:[_userAgentPrefix copy]
283*cc02d7e2SAndroid Build Coastguard Worker              userAgentSuffix:[_userAgentSuffix copy]
284*cc02d7e2SAndroid Build Coastguard Worker            responseSizeLimit:_responseSizeLimit
285*cc02d7e2SAndroid Build Coastguard Worker         compressionAlgorithm:_compressionAlgorithm
286*cc02d7e2SAndroid Build Coastguard Worker                 retryEnabled:_retryEnabled
287*cc02d7e2SAndroid Build Coastguard Worker             maxRetryInterval:_maxRetryInterval
288*cc02d7e2SAndroid Build Coastguard Worker             minRetryInterval:_minRetryInterval
289*cc02d7e2SAndroid Build Coastguard Worker                  retryFactor:_retryFactor
290*cc02d7e2SAndroid Build Coastguard Worker            keepaliveInterval:_keepaliveInterval
291*cc02d7e2SAndroid Build Coastguard Worker             keepaliveTimeout:_keepaliveTimeout
292*cc02d7e2SAndroid Build Coastguard Worker            connectMinTimeout:_connectMinTimeout
293*cc02d7e2SAndroid Build Coastguard Worker        connectInitialBackoff:_connectInitialBackoff
294*cc02d7e2SAndroid Build Coastguard Worker            connectMaxBackoff:_connectMaxBackoff
295*cc02d7e2SAndroid Build Coastguard Worker        additionalChannelArgs:[[NSDictionary alloc] initWithDictionary:_additionalChannelArgs
296*cc02d7e2SAndroid Build Coastguard Worker                                                             copyItems:YES]
297*cc02d7e2SAndroid Build Coastguard Worker          PEMRootCertificates:[_PEMRootCertificates copy]
298*cc02d7e2SAndroid Build Coastguard Worker                PEMPrivateKey:[_PEMPrivateKey copy]
299*cc02d7e2SAndroid Build Coastguard Worker          PEMCertificateChain:[_PEMCertificateChain copy]
300*cc02d7e2SAndroid Build Coastguard Worker                transportType:_transportType
301*cc02d7e2SAndroid Build Coastguard Worker                    transport:_transport
302*cc02d7e2SAndroid Build Coastguard Worker             hostNameOverride:[_hostNameOverride copy]
303*cc02d7e2SAndroid Build Coastguard Worker                   logContext:_logContext
304*cc02d7e2SAndroid Build Coastguard Worker            channelPoolDomain:[_channelPoolDomain copy]
305*cc02d7e2SAndroid Build Coastguard Worker                    channelID:_channelID];
306*cc02d7e2SAndroid Build Coastguard Worker  return newOptions;
307*cc02d7e2SAndroid Build Coastguard Worker}
308*cc02d7e2SAndroid Build Coastguard Worker
309*cc02d7e2SAndroid Build Coastguard Worker- (BOOL)hasChannelOptionsEqualTo:(GRPCCallOptions *)callOptions {
310*cc02d7e2SAndroid Build Coastguard Worker  if (callOptions == nil) return NO;
311*cc02d7e2SAndroid Build Coastguard Worker  if (!areObjectsEqual(callOptions.userAgentPrefix, _userAgentPrefix)) return NO;
312*cc02d7e2SAndroid Build Coastguard Worker  if (!areObjectsEqual(callOptions.userAgentSuffix, _userAgentSuffix)) return NO;
313*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.responseSizeLimit == _responseSizeLimit)) return NO;
314*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.compressionAlgorithm == _compressionAlgorithm)) return NO;
315*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.retryEnabled == _retryEnabled)) return NO;
316*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.maxRetryInterval == _maxRetryInterval)) return NO;
317*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.minRetryInterval == _minRetryInterval)) return NO;
318*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.retryFactor == _retryFactor)) return NO;
319*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.keepaliveInterval == _keepaliveInterval)) return NO;
320*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.keepaliveTimeout == _keepaliveTimeout)) return NO;
321*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.connectMinTimeout == _connectMinTimeout)) return NO;
322*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.connectInitialBackoff == _connectInitialBackoff)) return NO;
323*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.connectMaxBackoff == _connectMaxBackoff)) return NO;
324*cc02d7e2SAndroid Build Coastguard Worker  if (!areObjectsEqual(callOptions.additionalChannelArgs, _additionalChannelArgs)) return NO;
325*cc02d7e2SAndroid Build Coastguard Worker  if (!areObjectsEqual(callOptions.PEMRootCertificates, _PEMRootCertificates)) return NO;
326*cc02d7e2SAndroid Build Coastguard Worker  if (!areObjectsEqual(callOptions.PEMPrivateKey, _PEMPrivateKey)) return NO;
327*cc02d7e2SAndroid Build Coastguard Worker  if (!areObjectsEqual(callOptions.PEMCertificateChain, _PEMCertificateChain)) return NO;
328*cc02d7e2SAndroid Build Coastguard Worker  if (!areObjectsEqual(callOptions.hostNameOverride, _hostNameOverride)) return NO;
329*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.transportType == _transportType)) return NO;
330*cc02d7e2SAndroid Build Coastguard Worker  if (!(TransportIDIsEqual(callOptions.transport, _transport))) return NO;
331*cc02d7e2SAndroid Build Coastguard Worker  if (!areObjectsEqual(callOptions.logContext, _logContext)) return NO;
332*cc02d7e2SAndroid Build Coastguard Worker  if (!areObjectsEqual(callOptions.channelPoolDomain, _channelPoolDomain)) return NO;
333*cc02d7e2SAndroid Build Coastguard Worker  if (!(callOptions.channelID == _channelID)) return NO;
334*cc02d7e2SAndroid Build Coastguard Worker
335*cc02d7e2SAndroid Build Coastguard Worker  return YES;
336*cc02d7e2SAndroid Build Coastguard Worker}
337*cc02d7e2SAndroid Build Coastguard Worker
338*cc02d7e2SAndroid Build Coastguard Worker- (NSUInteger)channelOptionsHash {
339*cc02d7e2SAndroid Build Coastguard Worker  NSUInteger result = 0;
340*cc02d7e2SAndroid Build Coastguard Worker  result ^= _userAgentPrefix.hash;
341*cc02d7e2SAndroid Build Coastguard Worker  result ^= _userAgentSuffix.hash;
342*cc02d7e2SAndroid Build Coastguard Worker  result ^= _responseSizeLimit;
343*cc02d7e2SAndroid Build Coastguard Worker  result ^= _compressionAlgorithm;
344*cc02d7e2SAndroid Build Coastguard Worker  result ^= _retryEnabled;
345*cc02d7e2SAndroid Build Coastguard Worker  result ^= (unsigned int)(_keepaliveInterval * 1000);
346*cc02d7e2SAndroid Build Coastguard Worker  result ^= (unsigned int)(_keepaliveTimeout * 1000);
347*cc02d7e2SAndroid Build Coastguard Worker  result ^= (unsigned int)(_connectMinTimeout * 1000);
348*cc02d7e2SAndroid Build Coastguard Worker  result ^= (unsigned int)(_connectInitialBackoff * 1000);
349*cc02d7e2SAndroid Build Coastguard Worker  result ^= (unsigned int)(_connectMaxBackoff * 1000);
350*cc02d7e2SAndroid Build Coastguard Worker  result ^= _additionalChannelArgs.hash;
351*cc02d7e2SAndroid Build Coastguard Worker  result ^= _PEMRootCertificates.hash;
352*cc02d7e2SAndroid Build Coastguard Worker  result ^= _PEMPrivateKey.hash;
353*cc02d7e2SAndroid Build Coastguard Worker  result ^= _PEMCertificateChain.hash;
354*cc02d7e2SAndroid Build Coastguard Worker  result ^= _hostNameOverride.hash;
355*cc02d7e2SAndroid Build Coastguard Worker  result ^= _transportType;
356*cc02d7e2SAndroid Build Coastguard Worker  result ^= TransportIDHash(_transport);
357*cc02d7e2SAndroid Build Coastguard Worker  result ^= _logContext.hash;
358*cc02d7e2SAndroid Build Coastguard Worker  result ^= _channelPoolDomain.hash;
359*cc02d7e2SAndroid Build Coastguard Worker  result ^= _channelID;
360*cc02d7e2SAndroid Build Coastguard Worker
361*cc02d7e2SAndroid Build Coastguard Worker  return result;
362*cc02d7e2SAndroid Build Coastguard Worker}
363*cc02d7e2SAndroid Build Coastguard Worker
364*cc02d7e2SAndroid Build Coastguard Worker@end
365*cc02d7e2SAndroid Build Coastguard Worker
366*cc02d7e2SAndroid Build Coastguard Worker@implementation GRPCMutableCallOptions
367*cc02d7e2SAndroid Build Coastguard Worker
368*cc02d7e2SAndroid Build Coastguard Worker@dynamic serverAuthority;
369*cc02d7e2SAndroid Build Coastguard Worker@dynamic timeout;
370*cc02d7e2SAndroid Build Coastguard Worker@dynamic flowControlEnabled;
371*cc02d7e2SAndroid Build Coastguard Worker@dynamic interceptorFactories;
372*cc02d7e2SAndroid Build Coastguard Worker@dynamic oauth2AccessToken;
373*cc02d7e2SAndroid Build Coastguard Worker@dynamic authTokenProvider;
374*cc02d7e2SAndroid Build Coastguard Worker@dynamic initialMetadata;
375*cc02d7e2SAndroid Build Coastguard Worker@dynamic userAgentPrefix;
376*cc02d7e2SAndroid Build Coastguard Worker@dynamic userAgentSuffix;
377*cc02d7e2SAndroid Build Coastguard Worker@dynamic responseSizeLimit;
378*cc02d7e2SAndroid Build Coastguard Worker@dynamic compressionAlgorithm;
379*cc02d7e2SAndroid Build Coastguard Worker@dynamic retryEnabled;
380*cc02d7e2SAndroid Build Coastguard Worker@dynamic maxRetryInterval;
381*cc02d7e2SAndroid Build Coastguard Worker@dynamic minRetryInterval;
382*cc02d7e2SAndroid Build Coastguard Worker@dynamic retryFactor;
383*cc02d7e2SAndroid Build Coastguard Worker@dynamic keepaliveInterval;
384*cc02d7e2SAndroid Build Coastguard Worker@dynamic keepaliveTimeout;
385*cc02d7e2SAndroid Build Coastguard Worker@dynamic connectMinTimeout;
386*cc02d7e2SAndroid Build Coastguard Worker@dynamic connectInitialBackoff;
387*cc02d7e2SAndroid Build Coastguard Worker@dynamic connectMaxBackoff;
388*cc02d7e2SAndroid Build Coastguard Worker@dynamic additionalChannelArgs;
389*cc02d7e2SAndroid Build Coastguard Worker@dynamic PEMRootCertificates;
390*cc02d7e2SAndroid Build Coastguard Worker@dynamic PEMPrivateKey;
391*cc02d7e2SAndroid Build Coastguard Worker@dynamic PEMCertificateChain;
392*cc02d7e2SAndroid Build Coastguard Worker@dynamic transportType;
393*cc02d7e2SAndroid Build Coastguard Worker@dynamic transport;
394*cc02d7e2SAndroid Build Coastguard Worker@dynamic hostNameOverride;
395*cc02d7e2SAndroid Build Coastguard Worker@dynamic logContext;
396*cc02d7e2SAndroid Build Coastguard Worker@dynamic channelPoolDomain;
397*cc02d7e2SAndroid Build Coastguard Worker@dynamic channelID;
398*cc02d7e2SAndroid Build Coastguard Worker
399*cc02d7e2SAndroid Build Coastguard Worker- (instancetype)init {
400*cc02d7e2SAndroid Build Coastguard Worker  return [self initWithServerAuthority:kDefaultServerAuthority
401*cc02d7e2SAndroid Build Coastguard Worker                               timeout:kDefaultTimeout
402*cc02d7e2SAndroid Build Coastguard Worker                    flowControlEnabled:kDefaultFlowControlEnabled
403*cc02d7e2SAndroid Build Coastguard Worker                  interceptorFactories:kDefaultInterceptorFactories
404*cc02d7e2SAndroid Build Coastguard Worker                     oauth2AccessToken:kDefaultOauth2AccessToken
405*cc02d7e2SAndroid Build Coastguard Worker                     authTokenProvider:kDefaultAuthTokenProvider
406*cc02d7e2SAndroid Build Coastguard Worker                       initialMetadata:kDefaultInitialMetadata
407*cc02d7e2SAndroid Build Coastguard Worker                       userAgentPrefix:kDefaultUserAgentPrefix
408*cc02d7e2SAndroid Build Coastguard Worker                       userAgentSuffix:kDefaultUserAgentSuffix
409*cc02d7e2SAndroid Build Coastguard Worker                     responseSizeLimit:kDefaultResponseSizeLimit
410*cc02d7e2SAndroid Build Coastguard Worker                  compressionAlgorithm:kDefaultCompressionAlgorithm
411*cc02d7e2SAndroid Build Coastguard Worker                          retryEnabled:kDefaultRetryEnabled
412*cc02d7e2SAndroid Build Coastguard Worker                      maxRetryInterval:kDefaultMaxRetryInterval
413*cc02d7e2SAndroid Build Coastguard Worker                      minRetryInterval:kDefaultMinRetryInterval
414*cc02d7e2SAndroid Build Coastguard Worker                           retryFactor:kDefaultRetryFactor
415*cc02d7e2SAndroid Build Coastguard Worker                     keepaliveInterval:kDefaultKeepaliveInterval
416*cc02d7e2SAndroid Build Coastguard Worker                      keepaliveTimeout:kDefaultKeepaliveTimeout
417*cc02d7e2SAndroid Build Coastguard Worker                     connectMinTimeout:kDefaultConnectMinTimeout
418*cc02d7e2SAndroid Build Coastguard Worker                 connectInitialBackoff:kDefaultConnectInitialBackoff
419*cc02d7e2SAndroid Build Coastguard Worker                     connectMaxBackoff:kDefaultConnectMaxBackoff
420*cc02d7e2SAndroid Build Coastguard Worker                 additionalChannelArgs:kDefaultAdditionalChannelArgs
421*cc02d7e2SAndroid Build Coastguard Worker                   PEMRootCertificates:kDefaultPEMRootCertificates
422*cc02d7e2SAndroid Build Coastguard Worker                         PEMPrivateKey:kDefaultPEMPrivateKey
423*cc02d7e2SAndroid Build Coastguard Worker                   PEMCertificateChain:kDefaultPEMCertificateChain
424*cc02d7e2SAndroid Build Coastguard Worker                         transportType:kDefaultTransportType
425*cc02d7e2SAndroid Build Coastguard Worker                             transport:kDefaultTransport
426*cc02d7e2SAndroid Build Coastguard Worker                      hostNameOverride:kDefaultHostNameOverride
427*cc02d7e2SAndroid Build Coastguard Worker                            logContext:kDefaultLogContext
428*cc02d7e2SAndroid Build Coastguard Worker                     channelPoolDomain:kDefaultChannelPoolDomain
429*cc02d7e2SAndroid Build Coastguard Worker                             channelID:kDefaultChannelID];
430*cc02d7e2SAndroid Build Coastguard Worker}
431*cc02d7e2SAndroid Build Coastguard Worker
432*cc02d7e2SAndroid Build Coastguard Worker- (nonnull id)copyWithZone:(NSZone *)zone {
433*cc02d7e2SAndroid Build Coastguard Worker  GRPCCallOptions *newOptions =
434*cc02d7e2SAndroid Build Coastguard Worker      [[GRPCCallOptions allocWithZone:zone] initWithServerAuthority:_serverAuthority
435*cc02d7e2SAndroid Build Coastguard Worker                                                            timeout:_timeout
436*cc02d7e2SAndroid Build Coastguard Worker                                                 flowControlEnabled:_flowControlEnabled
437*cc02d7e2SAndroid Build Coastguard Worker                                               interceptorFactories:_interceptorFactories
438*cc02d7e2SAndroid Build Coastguard Worker                                                  oauth2AccessToken:_oauth2AccessToken
439*cc02d7e2SAndroid Build Coastguard Worker                                                  authTokenProvider:_authTokenProvider
440*cc02d7e2SAndroid Build Coastguard Worker                                                    initialMetadata:_initialMetadata
441*cc02d7e2SAndroid Build Coastguard Worker                                                    userAgentPrefix:_userAgentPrefix
442*cc02d7e2SAndroid Build Coastguard Worker                                                    userAgentSuffix:_userAgentSuffix
443*cc02d7e2SAndroid Build Coastguard Worker                                                  responseSizeLimit:_responseSizeLimit
444*cc02d7e2SAndroid Build Coastguard Worker                                               compressionAlgorithm:_compressionAlgorithm
445*cc02d7e2SAndroid Build Coastguard Worker                                                       retryEnabled:_retryEnabled
446*cc02d7e2SAndroid Build Coastguard Worker                                                   maxRetryInterval:_maxRetryInterval
447*cc02d7e2SAndroid Build Coastguard Worker                                                   minRetryInterval:_minRetryInterval
448*cc02d7e2SAndroid Build Coastguard Worker                                                        retryFactor:_retryFactor
449*cc02d7e2SAndroid Build Coastguard Worker                                                  keepaliveInterval:_keepaliveInterval
450*cc02d7e2SAndroid Build Coastguard Worker                                                   keepaliveTimeout:_keepaliveTimeout
451*cc02d7e2SAndroid Build Coastguard Worker                                                  connectMinTimeout:_connectMinTimeout
452*cc02d7e2SAndroid Build Coastguard Worker                                              connectInitialBackoff:_connectInitialBackoff
453*cc02d7e2SAndroid Build Coastguard Worker                                                  connectMaxBackoff:_connectMaxBackoff
454*cc02d7e2SAndroid Build Coastguard Worker                                              additionalChannelArgs:_additionalChannelArgs
455*cc02d7e2SAndroid Build Coastguard Worker                                                PEMRootCertificates:_PEMRootCertificates
456*cc02d7e2SAndroid Build Coastguard Worker                                                      PEMPrivateKey:_PEMPrivateKey
457*cc02d7e2SAndroid Build Coastguard Worker                                                PEMCertificateChain:_PEMCertificateChain
458*cc02d7e2SAndroid Build Coastguard Worker                                                      transportType:_transportType
459*cc02d7e2SAndroid Build Coastguard Worker                                                          transport:_transport
460*cc02d7e2SAndroid Build Coastguard Worker                                                   hostNameOverride:_hostNameOverride
461*cc02d7e2SAndroid Build Coastguard Worker                                                         logContext:_logContext
462*cc02d7e2SAndroid Build Coastguard Worker                                                  channelPoolDomain:_channelPoolDomain
463*cc02d7e2SAndroid Build Coastguard Worker                                                          channelID:_channelID];
464*cc02d7e2SAndroid Build Coastguard Worker  return newOptions;
465*cc02d7e2SAndroid Build Coastguard Worker}
466*cc02d7e2SAndroid Build Coastguard Worker
467*cc02d7e2SAndroid Build Coastguard Worker- (nonnull id)mutableCopyWithZone:(NSZone *)zone {
468*cc02d7e2SAndroid Build Coastguard Worker  GRPCMutableCallOptions *newOptions = [[GRPCMutableCallOptions allocWithZone:zone]
469*cc02d7e2SAndroid Build Coastguard Worker      initWithServerAuthority:_serverAuthority
470*cc02d7e2SAndroid Build Coastguard Worker                      timeout:_timeout
471*cc02d7e2SAndroid Build Coastguard Worker           flowControlEnabled:_flowControlEnabled
472*cc02d7e2SAndroid Build Coastguard Worker         interceptorFactories:_interceptorFactories
473*cc02d7e2SAndroid Build Coastguard Worker            oauth2AccessToken:_oauth2AccessToken
474*cc02d7e2SAndroid Build Coastguard Worker            authTokenProvider:_authTokenProvider
475*cc02d7e2SAndroid Build Coastguard Worker              initialMetadata:_initialMetadata
476*cc02d7e2SAndroid Build Coastguard Worker              userAgentPrefix:_userAgentPrefix
477*cc02d7e2SAndroid Build Coastguard Worker              userAgentSuffix:_userAgentSuffix
478*cc02d7e2SAndroid Build Coastguard Worker            responseSizeLimit:_responseSizeLimit
479*cc02d7e2SAndroid Build Coastguard Worker         compressionAlgorithm:_compressionAlgorithm
480*cc02d7e2SAndroid Build Coastguard Worker                 retryEnabled:_retryEnabled
481*cc02d7e2SAndroid Build Coastguard Worker             maxRetryInterval:_maxRetryInterval
482*cc02d7e2SAndroid Build Coastguard Worker             minRetryInterval:_minRetryInterval
483*cc02d7e2SAndroid Build Coastguard Worker                  retryFactor:_retryFactor
484*cc02d7e2SAndroid Build Coastguard Worker            keepaliveInterval:_keepaliveInterval
485*cc02d7e2SAndroid Build Coastguard Worker             keepaliveTimeout:_keepaliveTimeout
486*cc02d7e2SAndroid Build Coastguard Worker            connectMinTimeout:_connectMinTimeout
487*cc02d7e2SAndroid Build Coastguard Worker        connectInitialBackoff:_connectInitialBackoff
488*cc02d7e2SAndroid Build Coastguard Worker            connectMaxBackoff:_connectMaxBackoff
489*cc02d7e2SAndroid Build Coastguard Worker        additionalChannelArgs:[_additionalChannelArgs copy]
490*cc02d7e2SAndroid Build Coastguard Worker          PEMRootCertificates:_PEMRootCertificates
491*cc02d7e2SAndroid Build Coastguard Worker                PEMPrivateKey:_PEMPrivateKey
492*cc02d7e2SAndroid Build Coastguard Worker          PEMCertificateChain:_PEMCertificateChain
493*cc02d7e2SAndroid Build Coastguard Worker                transportType:_transportType
494*cc02d7e2SAndroid Build Coastguard Worker                    transport:_transport
495*cc02d7e2SAndroid Build Coastguard Worker             hostNameOverride:_hostNameOverride
496*cc02d7e2SAndroid Build Coastguard Worker                   logContext:_logContext
497*cc02d7e2SAndroid Build Coastguard Worker            channelPoolDomain:_channelPoolDomain
498*cc02d7e2SAndroid Build Coastguard Worker                    channelID:_channelID];
499*cc02d7e2SAndroid Build Coastguard Worker  return newOptions;
500*cc02d7e2SAndroid Build Coastguard Worker}
501*cc02d7e2SAndroid Build Coastguard Worker
502*cc02d7e2SAndroid Build Coastguard Worker- (void)setServerAuthority:(NSString *)serverAuthority {
503*cc02d7e2SAndroid Build Coastguard Worker  _serverAuthority = [serverAuthority copy];
504*cc02d7e2SAndroid Build Coastguard Worker}
505*cc02d7e2SAndroid Build Coastguard Worker
506*cc02d7e2SAndroid Build Coastguard Worker- (void)setTimeout:(NSTimeInterval)timeout {
507*cc02d7e2SAndroid Build Coastguard Worker  if (timeout < 0) {
508*cc02d7e2SAndroid Build Coastguard Worker    _timeout = 0;
509*cc02d7e2SAndroid Build Coastguard Worker  } else {
510*cc02d7e2SAndroid Build Coastguard Worker    _timeout = timeout;
511*cc02d7e2SAndroid Build Coastguard Worker  }
512*cc02d7e2SAndroid Build Coastguard Worker}
513*cc02d7e2SAndroid Build Coastguard Worker
514*cc02d7e2SAndroid Build Coastguard Worker- (void)setFlowControlEnabled:(BOOL)flowControlEnabled {
515*cc02d7e2SAndroid Build Coastguard Worker  _flowControlEnabled = flowControlEnabled;
516*cc02d7e2SAndroid Build Coastguard Worker}
517*cc02d7e2SAndroid Build Coastguard Worker
518*cc02d7e2SAndroid Build Coastguard Worker- (void)setInterceptorFactories:(NSArray<id<GRPCInterceptorFactory>> *)interceptorFactories {
519*cc02d7e2SAndroid Build Coastguard Worker  _interceptorFactories = interceptorFactories;
520*cc02d7e2SAndroid Build Coastguard Worker}
521*cc02d7e2SAndroid Build Coastguard Worker
522*cc02d7e2SAndroid Build Coastguard Worker- (void)setOauth2AccessToken:(NSString *)oauth2AccessToken {
523*cc02d7e2SAndroid Build Coastguard Worker  _oauth2AccessToken = [oauth2AccessToken copy];
524*cc02d7e2SAndroid Build Coastguard Worker}
525*cc02d7e2SAndroid Build Coastguard Worker
526*cc02d7e2SAndroid Build Coastguard Worker- (void)setAuthTokenProvider:(id<GRPCAuthorizationProtocol>)authTokenProvider {
527*cc02d7e2SAndroid Build Coastguard Worker  _authTokenProvider = authTokenProvider;
528*cc02d7e2SAndroid Build Coastguard Worker}
529*cc02d7e2SAndroid Build Coastguard Worker
530*cc02d7e2SAndroid Build Coastguard Worker- (void)setInitialMetadata:(GRPCMetadataDictionary *)initialMetadata {
531*cc02d7e2SAndroid Build Coastguard Worker  _initialMetadata = [[NSDictionary alloc] initWithDictionary:initialMetadata copyItems:YES];
532*cc02d7e2SAndroid Build Coastguard Worker}
533*cc02d7e2SAndroid Build Coastguard Worker
534*cc02d7e2SAndroid Build Coastguard Worker- (void)setUserAgentPrefix:(NSString *)userAgentPrefix {
535*cc02d7e2SAndroid Build Coastguard Worker  _userAgentPrefix = [userAgentPrefix copy];
536*cc02d7e2SAndroid Build Coastguard Worker}
537*cc02d7e2SAndroid Build Coastguard Worker
538*cc02d7e2SAndroid Build Coastguard Worker- (void)setUserAgentSuffix:(NSString *)userAgentSuffix {
539*cc02d7e2SAndroid Build Coastguard Worker  _userAgentSuffix = [userAgentSuffix copy];
540*cc02d7e2SAndroid Build Coastguard Worker}
541*cc02d7e2SAndroid Build Coastguard Worker
542*cc02d7e2SAndroid Build Coastguard Worker- (void)setResponseSizeLimit:(NSUInteger)responseSizeLimit {
543*cc02d7e2SAndroid Build Coastguard Worker  _responseSizeLimit = responseSizeLimit;
544*cc02d7e2SAndroid Build Coastguard Worker}
545*cc02d7e2SAndroid Build Coastguard Worker
546*cc02d7e2SAndroid Build Coastguard Worker- (void)setCompressionAlgorithm:(GRPCCompressionAlgorithm)compressionAlgorithm {
547*cc02d7e2SAndroid Build Coastguard Worker  _compressionAlgorithm = compressionAlgorithm;
548*cc02d7e2SAndroid Build Coastguard Worker}
549*cc02d7e2SAndroid Build Coastguard Worker
550*cc02d7e2SAndroid Build Coastguard Worker- (void)setRetryEnabled:(BOOL)retryEnabled {
551*cc02d7e2SAndroid Build Coastguard Worker  _retryEnabled = retryEnabled;
552*cc02d7e2SAndroid Build Coastguard Worker}
553*cc02d7e2SAndroid Build Coastguard Worker
554*cc02d7e2SAndroid Build Coastguard Worker- (void)setMaxRetryInterval:(NSTimeInterval)maxRetryInterval {
555*cc02d7e2SAndroid Build Coastguard Worker  _maxRetryInterval = maxRetryInterval;
556*cc02d7e2SAndroid Build Coastguard Worker}
557*cc02d7e2SAndroid Build Coastguard Worker
558*cc02d7e2SAndroid Build Coastguard Worker- (void)setMinRetryInterval:(NSTimeInterval)minRetryInterval {
559*cc02d7e2SAndroid Build Coastguard Worker  _minRetryInterval = minRetryInterval;
560*cc02d7e2SAndroid Build Coastguard Worker}
561*cc02d7e2SAndroid Build Coastguard Worker
562*cc02d7e2SAndroid Build Coastguard Worker- (void)setRetryFactor:(double)retryFactor {
563*cc02d7e2SAndroid Build Coastguard Worker  _retryFactor = retryFactor;
564*cc02d7e2SAndroid Build Coastguard Worker}
565*cc02d7e2SAndroid Build Coastguard Worker
566*cc02d7e2SAndroid Build Coastguard Worker- (void)setKeepaliveInterval:(NSTimeInterval)keepaliveInterval {
567*cc02d7e2SAndroid Build Coastguard Worker  if (keepaliveInterval < 0) {
568*cc02d7e2SAndroid Build Coastguard Worker    _keepaliveInterval = 0;
569*cc02d7e2SAndroid Build Coastguard Worker  } else {
570*cc02d7e2SAndroid Build Coastguard Worker    _keepaliveInterval = keepaliveInterval;
571*cc02d7e2SAndroid Build Coastguard Worker  }
572*cc02d7e2SAndroid Build Coastguard Worker}
573*cc02d7e2SAndroid Build Coastguard Worker
574*cc02d7e2SAndroid Build Coastguard Worker- (void)setKeepaliveTimeout:(NSTimeInterval)keepaliveTimeout {
575*cc02d7e2SAndroid Build Coastguard Worker  if (keepaliveTimeout < 0) {
576*cc02d7e2SAndroid Build Coastguard Worker    _keepaliveTimeout = 0;
577*cc02d7e2SAndroid Build Coastguard Worker  } else {
578*cc02d7e2SAndroid Build Coastguard Worker    _keepaliveTimeout = keepaliveTimeout;
579*cc02d7e2SAndroid Build Coastguard Worker  }
580*cc02d7e2SAndroid Build Coastguard Worker}
581*cc02d7e2SAndroid Build Coastguard Worker
582*cc02d7e2SAndroid Build Coastguard Worker- (void)setConnectMinTimeout:(NSTimeInterval)connectMinTimeout {
583*cc02d7e2SAndroid Build Coastguard Worker  if (connectMinTimeout < 0) {
584*cc02d7e2SAndroid Build Coastguard Worker    _connectMinTimeout = 0;
585*cc02d7e2SAndroid Build Coastguard Worker  } else {
586*cc02d7e2SAndroid Build Coastguard Worker    _connectMinTimeout = connectMinTimeout;
587*cc02d7e2SAndroid Build Coastguard Worker  }
588*cc02d7e2SAndroid Build Coastguard Worker}
589*cc02d7e2SAndroid Build Coastguard Worker
590*cc02d7e2SAndroid Build Coastguard Worker- (void)setConnectInitialBackoff:(NSTimeInterval)connectInitialBackoff {
591*cc02d7e2SAndroid Build Coastguard Worker  if (connectInitialBackoff < 0) {
592*cc02d7e2SAndroid Build Coastguard Worker    _connectInitialBackoff = 0;
593*cc02d7e2SAndroid Build Coastguard Worker  } else {
594*cc02d7e2SAndroid Build Coastguard Worker    _connectInitialBackoff = connectInitialBackoff;
595*cc02d7e2SAndroid Build Coastguard Worker  }
596*cc02d7e2SAndroid Build Coastguard Worker}
597*cc02d7e2SAndroid Build Coastguard Worker
598*cc02d7e2SAndroid Build Coastguard Worker- (void)setConnectMaxBackoff:(NSTimeInterval)connectMaxBackoff {
599*cc02d7e2SAndroid Build Coastguard Worker  if (connectMaxBackoff < 0) {
600*cc02d7e2SAndroid Build Coastguard Worker    _connectMaxBackoff = 0;
601*cc02d7e2SAndroid Build Coastguard Worker  } else {
602*cc02d7e2SAndroid Build Coastguard Worker    _connectMaxBackoff = connectMaxBackoff;
603*cc02d7e2SAndroid Build Coastguard Worker  }
604*cc02d7e2SAndroid Build Coastguard Worker}
605*cc02d7e2SAndroid Build Coastguard Worker
606*cc02d7e2SAndroid Build Coastguard Worker- (void)setAdditionalChannelArgs:(GRPCMetadataDictionary *)additionalChannelArgs {
607*cc02d7e2SAndroid Build Coastguard Worker  _additionalChannelArgs = [[NSDictionary alloc] initWithDictionary:additionalChannelArgs
608*cc02d7e2SAndroid Build Coastguard Worker                                                          copyItems:YES];
609*cc02d7e2SAndroid Build Coastguard Worker}
610*cc02d7e2SAndroid Build Coastguard Worker
611*cc02d7e2SAndroid Build Coastguard Worker- (void)setPEMRootCertificates:(NSString *)PEMRootCertificates {
612*cc02d7e2SAndroid Build Coastguard Worker  _PEMRootCertificates = [PEMRootCertificates copy];
613*cc02d7e2SAndroid Build Coastguard Worker}
614*cc02d7e2SAndroid Build Coastguard Worker
615*cc02d7e2SAndroid Build Coastguard Worker- (void)setPEMPrivateKey:(NSString *)PEMPrivateKey {
616*cc02d7e2SAndroid Build Coastguard Worker  _PEMPrivateKey = [PEMPrivateKey copy];
617*cc02d7e2SAndroid Build Coastguard Worker}
618*cc02d7e2SAndroid Build Coastguard Worker
619*cc02d7e2SAndroid Build Coastguard Worker- (void)setPEMCertificateChain:(NSString *)PEMCertificateChain {
620*cc02d7e2SAndroid Build Coastguard Worker  _PEMCertificateChain = [PEMCertificateChain copy];
621*cc02d7e2SAndroid Build Coastguard Worker}
622*cc02d7e2SAndroid Build Coastguard Worker
623*cc02d7e2SAndroid Build Coastguard Worker- (void)setTransportType:(GRPCTransportType)transportType {
624*cc02d7e2SAndroid Build Coastguard Worker  _transportType = transportType;
625*cc02d7e2SAndroid Build Coastguard Worker}
626*cc02d7e2SAndroid Build Coastguard Worker
627*cc02d7e2SAndroid Build Coastguard Worker- (void)setTransport:(GRPCTransportID)transport {
628*cc02d7e2SAndroid Build Coastguard Worker  _transport = transport;
629*cc02d7e2SAndroid Build Coastguard Worker}
630*cc02d7e2SAndroid Build Coastguard Worker
631*cc02d7e2SAndroid Build Coastguard Worker- (void)setHostNameOverride:(NSString *)hostNameOverride {
632*cc02d7e2SAndroid Build Coastguard Worker  _hostNameOverride = [hostNameOverride copy];
633*cc02d7e2SAndroid Build Coastguard Worker}
634*cc02d7e2SAndroid Build Coastguard Worker
635*cc02d7e2SAndroid Build Coastguard Worker- (void)setLogContext:(id)logContext {
636*cc02d7e2SAndroid Build Coastguard Worker  _logContext = logContext;
637*cc02d7e2SAndroid Build Coastguard Worker}
638*cc02d7e2SAndroid Build Coastguard Worker
639*cc02d7e2SAndroid Build Coastguard Worker- (void)setChannelPoolDomain:(NSString *)channelPoolDomain {
640*cc02d7e2SAndroid Build Coastguard Worker  _channelPoolDomain = [channelPoolDomain copy];
641*cc02d7e2SAndroid Build Coastguard Worker}
642*cc02d7e2SAndroid Build Coastguard Worker
643*cc02d7e2SAndroid Build Coastguard Worker- (void)setChannelID:(NSUInteger)channelID {
644*cc02d7e2SAndroid Build Coastguard Worker  _channelID = channelID;
645*cc02d7e2SAndroid Build Coastguard Worker}
646*cc02d7e2SAndroid Build Coastguard Worker
647*cc02d7e2SAndroid Build Coastguard Worker@end
648