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