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