Merge pull request #11660 from muxi/backport-11606

Backport #11606: Expose :authority pseudo-header to Obj-C API
pull/11707/head
Muxi Yan 8 years ago committed by GitHub
commit d5ed0ea971
  1. 6
      src/objective-c/GRPCClient/GRPCCall.h
  2. 2
      src/objective-c/GRPCClient/GRPCCall.m
  3. 1
      src/objective-c/GRPCClient/private/GRPCChannel.h
  4. 10
      src/objective-c/GRPCClient/private/GRPCChannel.m
  5. 1
      src/objective-c/GRPCClient/private/GRPCHost.h
  6. 3
      src/objective-c/GRPCClient/private/GRPCHost.m
  7. 1
      src/objective-c/GRPCClient/private/GRPCWrappedCall.h
  8. 5
      src/objective-c/GRPCClient/private/GRPCWrappedCall.m

@ -178,6 +178,12 @@ extern id const kGRPCTrailersKey;
/** Represents a single gRPC remote call. */ /** Represents a single gRPC remote call. */
@interface GRPCCall : GRXWriter @interface GRPCCall : GRXWriter
/**
* The authority for the RPC. If nil, the default authority will be used. This property must be nil
* when Cronet transport is enabled.
*/
@property (atomic, readwrite) NSString *serverName;
/** /**
* The container of the request headers of an RPC conforms to this protocol, which is a subset of * The container of the request headers of an RPC conforms to this protocol, which is a subset of
* NSMutableDictionary's interface. It will become a NSMutableDictionary later on. * NSMutableDictionary's interface. It will become a NSMutableDictionary later on.

@ -440,7 +440,7 @@ static NSMutableDictionary *callFlags;
_responseWriteable = [[GRXConcurrentWriteable alloc] initWithWriteable:writeable _responseWriteable = [[GRXConcurrentWriteable alloc] initWithWriteable:writeable
dispatchQueue:_responseQueue]; dispatchQueue:_responseQueue];
_wrappedCall = [[GRPCWrappedCall alloc] initWithHost:_host path:_path]; _wrappedCall = [[GRPCWrappedCall alloc] initWithHost:_host serverName:_serverName path:_path];
NSAssert(_wrappedCall, @"Error allocating RPC objects. Low memory?"); NSAssert(_wrappedCall, @"Error allocating RPC objects. Low memory?");
[self sendHeaders:_requestHeaders]; [self sendHeaders:_requestHeaders];

@ -77,5 +77,6 @@ struct grpc_channel_credentials;
channelArgs:(nullable NSDictionary *)channelArgs; channelArgs:(nullable NSDictionary *)channelArgs;
- (nullable grpc_call *)unmanagedCallWithPath:(nonnull NSString *)path - (nullable grpc_call *)unmanagedCallWithPath:(nonnull NSString *)path
serverName:(nonnull NSString *)serverName
completionQueue:(nonnull GRPCCompletionQueue *)queue; completionQueue:(nonnull GRPCCompletionQueue *)queue;
@end @end

@ -196,14 +196,22 @@ static grpc_channel_args *BuildChannelArgs(NSDictionary *dictionary) {
} }
- (grpc_call *)unmanagedCallWithPath:(NSString *)path - (grpc_call *)unmanagedCallWithPath:(NSString *)path
serverName:(NSString *)serverName
completionQueue:(GRPCCompletionQueue *)queue { completionQueue:(GRPCCompletionQueue *)queue {
grpc_slice host_slice;
if (serverName) {
host_slice = grpc_slice_from_copied_string(serverName.UTF8String);
}
grpc_slice path_slice = grpc_slice_from_copied_string(path.UTF8String); grpc_slice path_slice = grpc_slice_from_copied_string(path.UTF8String);
grpc_call *call = grpc_channel_create_call(_unmanagedChannel, grpc_call *call = grpc_channel_create_call(_unmanagedChannel,
NULL, GRPC_PROPAGATE_DEFAULTS, NULL, GRPC_PROPAGATE_DEFAULTS,
queue.unmanagedQueue, queue.unmanagedQueue,
path_slice, path_slice,
NULL, // Passing NULL for host serverName ? &host_slice : NULL,
gpr_inf_future(GPR_CLOCK_REALTIME), NULL); gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
if (serverName) {
grpc_slice_unref(host_slice);
}
grpc_slice_unref(path_slice); grpc_slice_unref(path_slice);
return call; return call;
} }

@ -69,6 +69,7 @@ struct grpc_channel_credentials;
/** Create a grpc_call object to the provided path on this host. */ /** Create a grpc_call object to the provided path on this host. */
- (nullable struct grpc_call *)unmanagedCallWithPath:(NSString *)path - (nullable struct grpc_call *)unmanagedCallWithPath:(NSString *)path
serverName:(NSString *)serverName
completionQueue:(GRPCCompletionQueue *)queue; completionQueue:(GRPCCompletionQueue *)queue;
// TODO: There's a race when a new RPC is coming through just as an existing one is getting // TODO: There's a race when a new RPC is coming through just as an existing one is getting

@ -135,6 +135,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil;
} }
- (nullable grpc_call *)unmanagedCallWithPath:(NSString *)path - (nullable grpc_call *)unmanagedCallWithPath:(NSString *)path
serverName:(NSString *)serverName
completionQueue:(GRPCCompletionQueue *)queue { completionQueue:(GRPCCompletionQueue *)queue {
GRPCChannel *channel; GRPCChannel *channel;
// This is racing -[GRPCHost disconnect]. // This is racing -[GRPCHost disconnect].
@ -144,7 +145,7 @@ static GRPCConnectivityMonitor *connectivityMonitor = nil;
} }
channel = _channel; channel = _channel;
} }
return [channel unmanagedCallWithPath:path completionQueue:queue]; return [channel unmanagedCallWithPath:path serverName:serverName completionQueue:queue];
} }
- (BOOL)setTLSPEMRootCerts:(nullable NSString *)pemRootCerts - (BOOL)setTLSPEMRootCerts:(nullable NSString *)pemRootCerts

@ -90,6 +90,7 @@
@interface GRPCWrappedCall : NSObject @interface GRPCWrappedCall : NSObject
- (instancetype)initWithHost:(NSString *)host - (instancetype)initWithHost:(NSString *)host
serverName:(NSString *)serverName
path:(NSString *)path NS_DESIGNATED_INITIALIZER; path:(NSString *)path NS_DESIGNATED_INITIALIZER;
- (void)startBatchWithOperations:(NSArray *)ops errorHandler:(void(^)())errorHandler; - (void)startBatchWithOperations:(NSArray *)ops errorHandler:(void(^)())errorHandler;

@ -251,10 +251,11 @@
} }
- (instancetype)init { - (instancetype)init {
return [self initWithHost:nil path:nil]; return [self initWithHost:nil serverName:nil path:nil];
} }
- (instancetype)initWithHost:(NSString *)host - (instancetype)initWithHost:(NSString *)host
serverName:(NSString *)serverName
path:(NSString *)path { path:(NSString *)path {
if (!path || !host) { if (!path || !host) {
[NSException raise:NSInvalidArgumentException [NSException raise:NSInvalidArgumentException
@ -267,7 +268,7 @@
// queue. Currently we use a singleton queue. // queue. Currently we use a singleton queue.
_queue = [GRPCCompletionQueue completionQueue]; _queue = [GRPCCompletionQueue completionQueue];
_call = [[GRPCHost hostWithAddress:host] unmanagedCallWithPath:path completionQueue:_queue]; _call = [[GRPCHost hostWithAddress:host] unmanagedCallWithPath:path serverName:serverName completionQueue:_queue];
if (_call == NULL) { if (_call == NULL) {
return nil; return nil;
} }

Loading…
Cancel
Save