add comments and clang-format

pull/19704/head
Muxi Yan 6 years ago
parent 5e1f96c5b8
commit 08b21aed41
  1. 19
      src/compiler/objective_c_generator.cc
  2. 9
      src/compiler/objective_c_generator.h
  3. 27
      src/compiler/objective_c_plugin.cc
  4. 3
      src/objective-c/GRPCClient/GRPCCall+Cronet.h
  5. 69
      src/objective-c/GRPCClient/GRPCCall.m
  6. 2
      src/objective-c/GRPCClient/GRPCCallLegacy.h
  7. 4
      src/objective-c/GRPCClient/GRPCCallLegacy.m
  8. 14
      src/objective-c/GRPCClient/GRPCCallOptions.m
  9. 2
      src/objective-c/GRPCClient/GRPCDispatchable.h
  10. 11
      src/objective-c/GRPCClient/GRPCInterceptor.h
  11. 147
      src/objective-c/GRPCClient/GRPCInterceptor.m
  12. 29
      src/objective-c/GRPCClient/GRPCTransport.h
  13. 44
      src/objective-c/GRPCClient/GRPCTransport.m
  14. 5
      src/objective-c/GRPCClient/private/GRPCCore/GRPCCallInternal.h
  15. 46
      src/objective-c/GRPCClient/private/GRPCCore/GRPCCallInternal.m
  16. 48
      src/objective-c/GRPCClient/private/GRPCCore/GRPCChannel.m
  17. 2
      src/objective-c/GRPCClient/private/GRPCCore/GRPCChannelPool.h
  18. 9
      src/objective-c/GRPCClient/private/GRPCCore/GRPCCoreCronet/GRPCCoreCronetFactory.h
  19. 9
      src/objective-c/GRPCClient/private/GRPCCore/GRPCCoreCronet/GRPCCoreCronetFactory.m
  20. 9
      src/objective-c/GRPCClient/private/GRPCCore/GRPCCoreFactory.h
  21. 20
      src/objective-c/GRPCClient/private/GRPCCore/GRPCCoreFactory.m
  22. 4
      src/objective-c/GRPCClient/private/GRPCCore/GRPCHost.m
  23. 21
      src/objective-c/GRPCClient/private/GRPCTransport+Private.h
  24. 11
      src/objective-c/GRPCClient/private/GRPCTransport+Private.m
  25. 39
      src/objective-c/ProtoRPC/ProtoRPCLegacy.h
  26. 8
      src/objective-c/ProtoRPC/ProtoRPCLegacy.m
  27. 12
      src/objective-c/ProtoRPC/ProtoService.h
  28. 5
      src/objective-c/ProtoRPC/ProtoServiceLegacy.m
  29. 4
      src/objective-c/tests/CronetTests/InteropTestsRemoteWithCronet.m
  30. 131
      src/objective-c/tests/InteropTests/InteropTests.m
  31. 4
      src/objective-c/tests/InteropTests/InteropTestsLocalCleartext.m
  32. 4
      src/objective-c/tests/InteropTests/InteropTestsLocalSSL.m

@ -278,7 +278,8 @@ void PrintMethodImplementations(Printer* printer,
return output;
}
::grpc::string GetProtocol(const ServiceDescriptor* service, const Parameters& generator_params) {
::grpc::string GetProtocol(const ServiceDescriptor* service,
const Parameters& generator_params) {
::grpc::string output;
if (generator_params.no_v1_compatibility) return output;
@ -325,7 +326,8 @@ void PrintMethodImplementations(Printer* printer,
return output;
}
::grpc::string GetInterface(const ServiceDescriptor* service, const Parameters& generator_params) {
::grpc::string GetInterface(const ServiceDescriptor* service,
const Parameters& generator_params) {
::grpc::string output;
// Scope the output stream so it closes and finalizes output to the string.
@ -367,7 +369,8 @@ void PrintMethodImplementations(Printer* printer,
return output;
}
::grpc::string GetSource(const ServiceDescriptor* service, const Parameters& generator_params) {
::grpc::string GetSource(const ServiceDescriptor* service,
const Parameters& generator_params) {
::grpc::string output;
{
// Scope the output stream so it closes and finalizes output to the string.
@ -422,9 +425,10 @@ void PrintMethodImplementations(Printer* printer,
printer.Print("#pragma mark - Class Methods\n\n");
if (!generator_params.no_v1_compatibility) {
printer.Print("+ (instancetype)serviceWithHost:(NSString *)host {\n"
" return [[self alloc] initWithHost:host];\n"
"}\n\n");
printer.Print(
"+ (instancetype)serviceWithHost:(NSString *)host {\n"
" return [[self alloc] initWithHost:host];\n"
"}\n\n");
}
printer.Print(
"+ (instancetype)serviceWithHost:(NSString *)host "
@ -435,7 +439,8 @@ void PrintMethodImplementations(Printer* printer,
printer.Print("#pragma mark - Method Implementations\n\n");
for (int i = 0; i < service->method_count(); i++) {
PrintMethodImplementations(&printer, service->method(i), generator_params);
PrintMethodImplementations(&printer, service->method(i),
generator_params);
}
printer.Print("@end\n");

@ -39,7 +39,8 @@ string GetAllMessageClasses(const FileDescriptor* file);
// Returns the content to be included defining the @protocol segment at the
// insertion point of the generated implementation file. This interface is
// legacy and for backwards compatibility.
string GetProtocol(const ServiceDescriptor* service, const Parameters& generator_params);
string GetProtocol(const ServiceDescriptor* service,
const Parameters& generator_params);
// Returns the content to be included defining the @protocol segment at the
// insertion point of the generated implementation file.
@ -47,11 +48,13 @@ string GetV2Protocol(const ServiceDescriptor* service);
// Returns the content to be included defining the @interface segment at the
// insertion point of the generated implementation file.
string GetInterface(const ServiceDescriptor* service, const Parameters& generator_params);
string GetInterface(const ServiceDescriptor* service,
const Parameters& generator_params);
// Returns the content to be included in the "global_scope" insertion point of
// the generated implementation file.
string GetSource(const ServiceDescriptor* service, const Parameters& generator_params);
string GetSource(const ServiceDescriptor* service,
const Parameters& generator_params);
} // namespace grpc_objective_c_generator

@ -104,8 +104,13 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
::grpc::string imports = LocalImport(file_name + ".pbobjc.h");
::grpc::string system_imports = (generator_params.no_v1_compatibility ? SystemImport("ProtoRPC/ProtoService.h") : SystemImport("ProtoRPC/ProtoServiceLegacy.h")) +
(generator_params.no_v1_compatibility ? SystemImport("ProtoRPC/ProtoRPC.h") : SystemImport("ProtoRPC/ProtoRPCLegacy.h"));
::grpc::string system_imports =
(generator_params.no_v1_compatibility
? SystemImport("ProtoRPC/ProtoService.h")
: SystemImport("ProtoRPC/ProtoServiceLegacy.h")) +
(generator_params.no_v1_compatibility
? SystemImport("ProtoRPC/ProtoRPC.h")
: SystemImport("ProtoRPC/ProtoRPCLegacy.h"));
if (!generator_params.no_v1_compatibility) {
system_imports += SystemImport("RxLibrary/GRXWriteable.h") +
SystemImport("RxLibrary/GRXWriter.h");
@ -138,13 +143,15 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
::grpc::string protocols;
for (int i = 0; i < file->service_count(); i++) {
const grpc::protobuf::ServiceDescriptor* service = file->service(i);
protocols += grpc_objective_c_generator::GetProtocol(service, generator_params);
protocols +=
grpc_objective_c_generator::GetProtocol(service, generator_params);
}
::grpc::string interfaces;
for (int i = 0; i < file->service_count(); i++) {
const grpc::protobuf::ServiceDescriptor* service = file->service(i);
interfaces += grpc_objective_c_generator::GetInterface(service, generator_params);
interfaces +=
grpc_objective_c_generator::GetInterface(service, generator_params);
}
Write(context, file_name + ".pbrpc.h",
@ -161,9 +168,12 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
{
// Generate .pbrpc.m
::grpc::string imports = LocalImport(file_name + ".pbrpc.h") +
LocalImport(file_name + ".pbobjc.h") +
(generator_params.no_v1_compatibility ? SystemImport("ProtoRPC/ProtoRPC.h") : SystemImport("ProtoRPC/ProtoRPCLegacy.h"));
::grpc::string imports =
LocalImport(file_name + ".pbrpc.h") +
LocalImport(file_name + ".pbobjc.h") +
(generator_params.no_v1_compatibility
? SystemImport("ProtoRPC/ProtoRPC.h")
: SystemImport("ProtoRPC/ProtoRPCLegacy.h"));
if (!generator_params.no_v1_compatibility) {
imports += SystemImport("RxLibrary/GRXWriter+Immediate.h");
}
@ -176,7 +186,8 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
::grpc::string definitions;
for (int i = 0; i < file->service_count(); i++) {
const grpc::protobuf::ServiceDescriptor* service = file->service(i);
definitions += grpc_objective_c_generator::GetSource(service, generator_params);
definitions +=
grpc_objective_c_generator::GetSource(service, generator_params);
}
Write(context, file_name + ".pbrpc.m",

@ -24,7 +24,7 @@ typedef struct stream_engine stream_engine;
// Transport id for Cronet transport
extern const GRPCTransportId gGRPCCoreCronetId;
// Deprecated class. Please use the previous transport id with GRPCCallOptions instead.
// Deprecated class. Please use the gGRPCCoreCronetId with GRPCCallOptions.transport instead.
@interface GRPCCall (Cronet)
+ (void)useCronetWithEngine:(stream_engine*)engine;
@ -32,4 +32,3 @@ extern const GRPCTransportId gGRPCCoreCronetId;
+ (BOOL)isUsingCronet;
@end

@ -18,9 +18,9 @@
#import "GRPCCall.h"
#import "GRPCCall+Interceptor.h"
#import "GRPCCallOptions.h"
#import "GRPCInterceptor.h"
#import "GRPCCall+Interceptor.h"
#import "private/GRPCTransport+Private.h"
@ -32,7 +32,7 @@ NSString *const kGRPCTrailersKey = @"io.grpc.TrailersKey";
* dispatch queue of a user provided response handler. It removes the requirement of having to use
* serial dispatch queue in the user provided response handler.
*/
@interface GRPCResponseDispatcher : NSObject <GRPCResponseHandler>
@interface GRPCResponseDispatcher : NSObject<GRPCResponseHandler>
- (nullable instancetype)initWithResponseHandler:(id<GRPCResponseHandler>)responseHandler;
@ -48,7 +48,9 @@ NSString *const kGRPCTrailersKey = @"io.grpc.TrailersKey";
_responseHandler = responseHandler;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 || __MAC_OS_X_VERSION_MAX_ALLOWED >= 101300
if (@available(iOS 8.0, macOS 10.10, *)) {
_dispatchQueue = dispatch_queue_create(NULL, dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_DEFAULT, 0));
_dispatchQueue = dispatch_queue_create(
NULL,
dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_DEFAULT, 0));
} else {
#else
{
@ -61,38 +63,38 @@ NSString *const kGRPCTrailersKey = @"io.grpc.TrailersKey";
return self;
}
- (dispatch_queue_t)dispatchQueue {
return _dispatchQueue;
}
- (dispatch_queue_t)dispatchQueue {
return _dispatchQueue;
}
- (void)didReceiveInitialMetadata:(nullable NSDictionary *)initialMetadata {
if ([_responseHandler respondsToSelector:@selector(didReceiveInitialMetadata:)]) {
[_responseHandler didReceiveInitialMetadata:initialMetadata];
}
- (void)didReceiveInitialMetadata:(nullable NSDictionary *)initialMetadata {
if ([_responseHandler respondsToSelector:@selector(didReceiveInitialMetadata:)]) {
[_responseHandler didReceiveInitialMetadata:initialMetadata];
}
}
- (void)didReceiveData:(id)data {
// For backwards compatibility with didReceiveRawMessage, if the user provided a response handler
// that handles didReceiveRawMesssage, we issue to that method instead
if ([_responseHandler respondsToSelector:@selector(didReceiveRawMessage:)]) {
[_responseHandler didReceiveRawMessage:data];
} else if ([_responseHandler respondsToSelector:@selector(didReceiveData:)]) {
[_responseHandler didReceiveData:data];
}
- (void)didReceiveData:(id)data {
// For backwards compatibility with didReceiveRawMessage, if the user provided a response handler
// that handles didReceiveRawMesssage, we issue to that method instead
if ([_responseHandler respondsToSelector:@selector(didReceiveRawMessage:)]) {
[_responseHandler didReceiveRawMessage:data];
} else if ([_responseHandler respondsToSelector:@selector(didReceiveData:)]) {
[_responseHandler didReceiveData:data];
}
}
- (void)didCloseWithTrailingMetadata:(nullable NSDictionary *)trailingMetadata
error:(nullable NSError *)error {
- (void)didCloseWithTrailingMetadata:(nullable NSDictionary *)trailingMetadata
error:(nullable NSError *)error {
if ([_responseHandler respondsToSelector:@selector(didCloseWithTrailingMetadata:error:)]) {
[_responseHandler didCloseWithTrailingMetadata:trailingMetadata error:error];
}
}
- (void)didWriteData {
if ([_responseHandler respondsToSelector:@selector(didWriteData)]) {
[_responseHandler didWriteData];
}
- (void)didWriteData {
if ([_responseHandler respondsToSelector:@selector(didWriteData)]) {
[_responseHandler didWriteData];
}
}
@end
@ -166,10 +168,12 @@ error:(nullable NSError *)error {
}
_responseHandler = responseHandler;
GRPCResponseDispatcher *dispatcher = [[GRPCResponseDispatcher alloc] initWithResponseHandler:_responseHandler];
GRPCResponseDispatcher *dispatcher =
[[GRPCResponseDispatcher alloc] initWithResponseHandler:_responseHandler];
NSMutableArray<id<GRPCInterceptorFactory>> *interceptorFactories;
if (_actualCallOptions.interceptorFactories != nil) {
interceptorFactories = [NSMutableArray arrayWithArray:_actualCallOptions.interceptorFactories];
interceptorFactories =
[NSMutableArray arrayWithArray:_actualCallOptions.interceptorFactories];
} else {
interceptorFactories = [NSMutableArray array];
}
@ -180,12 +184,14 @@ error:(nullable NSError *)error {
// continuously create interceptor until one is successfully created
while (_firstInterceptor == nil) {
if (interceptorFactories.count == 0) {
_firstInterceptor = [[GRPCTransportManager alloc] initWithTransportId:_callOptions.transport previousInterceptor:dispatcher];
_firstInterceptor = [[GRPCTransportManager alloc] initWithTransportId:_callOptions.transport
previousInterceptor:dispatcher];
break;
} else {
_firstInterceptor = [[GRPCInterceptorManager alloc] initWithFactories:interceptorFactories
previousInterceptor:dispatcher
transportId:_callOptions.transport];
_firstInterceptor =
[[GRPCInterceptorManager alloc] initWithFactories:interceptorFactories
previousInterceptor:dispatcher
transportId:_callOptions.transport];
if (_firstInterceptor == nil) {
[interceptorFactories removeObjectAtIndex:0];
}
@ -211,8 +217,7 @@ error:(nullable NSError *)error {
GRPCRequestOptions *requestOptions = _requestOptions;
GRPCCallOptions *callOptions = _actualCallOptions;
dispatch_async(copiedFirstInterceptor.dispatchQueue, ^{
[copiedFirstInterceptor startWithRequestOptions:requestOptions
callOptions:callOptions];
[copiedFirstInterceptor startWithRequestOptions:requestOptions callOptions:callOptions];
});
}

@ -21,8 +21,8 @@
* the API in GRPCCall.h. This API exists solely for the purpose of backwards compatibility.
*/
#import "GRPCCallOptions.h"
#import <RxLibrary/GRXWriter.h>
#import "GRPCCallOptions.h"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnullability-completeness"

@ -18,9 +18,9 @@
#import "GRPCCallLegacy.h"
#import "GRPCCall+Cronet.h"
#import "GRPCCall+OAuth2.h"
#import "GRPCCallOptions.h"
#import "GRPCCall+Cronet.h"
#import "private/GRPCCore/GRPCChannelPool.h"
#import "private/GRPCCore/GRPCCompletionQueue.h"
@ -552,7 +552,7 @@ static NSString *const kBearerPrefix = @"Bearer ";
[[GRXConcurrentWriteable alloc] initWithWriteable:writeable dispatchQueue:_responseQueue];
GRPCPooledChannel *channel =
[[GRPCChannelPool sharedInstance] channelWithHost:_host callOptions:_callOptions];
[[GRPCChannelPool sharedInstance] channelWithHost:_host callOptions:_callOptions];
_wrappedCall = [channel wrappedCallWithPath:_path
completionQueue:[GRPCCompletionQueue completionQueue]
callOptions:_callOptions];

@ -17,8 +17,8 @@
*/
#import "GRPCCallOptions.h"
#import "internal/GRPCCallOptions+Internal.h"
#import "GRPCTransport.h"
#import "internal/GRPCCallOptions+Internal.h"
// The default values for the call options.
static NSString *const kDefaultServerAuthority = nil;
@ -138,7 +138,7 @@ static BOOL areObjectsEqual(id obj1, id obj2) {
PEMPrivateKey:kDefaultPEMPrivateKey
PEMCertificateChain:kDefaultPEMCertificateChain
transportType:kDefaultTransportType
transport:kDefaultTransport
transport:kDefaultTransport
hostNameOverride:kDefaultHostNameOverride
logContext:kDefaultLogContext
channelPoolDomain:kDefaultChannelPoolDomain
@ -166,7 +166,7 @@ static BOOL areObjectsEqual(id obj1, id obj2) {
PEMPrivateKey:(NSString *)PEMPrivateKey
PEMCertificateChain:(NSString *)PEMCertificateChain
transportType:(GRPCTransportType)transportType
transport:(GRPCTransportId)transport
transport:(GRPCTransportId)transport
hostNameOverride:(NSString *)hostNameOverride
logContext:(id)logContext
channelPoolDomain:(NSString *)channelPoolDomain
@ -231,7 +231,7 @@ static BOOL areObjectsEqual(id obj1, id obj2) {
PEMPrivateKey:_PEMPrivateKey
PEMCertificateChain:_PEMCertificateChain
transportType:_transportType
transport:_transport
transport:_transport
hostNameOverride:_hostNameOverride
logContext:_logContext
channelPoolDomain:_channelPoolDomain
@ -264,7 +264,7 @@ static BOOL areObjectsEqual(id obj1, id obj2) {
PEMPrivateKey:[_PEMPrivateKey copy]
PEMCertificateChain:[_PEMCertificateChain copy]
transportType:_transportType
transport:_transport
transport:_transport
hostNameOverride:[_hostNameOverride copy]
logContext:_logContext
channelPoolDomain:[_channelPoolDomain copy]
@ -375,7 +375,7 @@ static BOOL areObjectsEqual(id obj1, id obj2) {
PEMPrivateKey:kDefaultPEMPrivateKey
PEMCertificateChain:kDefaultPEMCertificateChain
transportType:kDefaultTransportType
transport:kDefaultTransport
transport:kDefaultTransport
hostNameOverride:kDefaultHostNameOverride
logContext:kDefaultLogContext
channelPoolDomain:kDefaultChannelPoolDomain
@ -436,7 +436,7 @@ static BOOL areObjectsEqual(id obj1, id obj2) {
PEMPrivateKey:_PEMPrivateKey
PEMCertificateChain:_PEMCertificateChain
transportType:_transportType
transport:_transport
transport:_transport
hostNameOverride:_hostNameOverride
logContext:_logContext
channelPoolDomain:_channelPoolDomain

@ -18,7 +18,7 @@
*/
/**
* An object that process its methods with a dispatch queue.
* An object that processes its methods with a dispatch queue.
*/
@protocol GRPCDispatchable

@ -169,7 +169,7 @@ NS_ASSUME_NONNULL_BEGIN
* invoke shutDown method of its corresponding manager so that references to other interceptors can
* be released.
*/
@interface GRPCInterceptorManager : NSObject <GRPCInterceptorInterface, GRPCResponseHandler>
@interface GRPCInterceptorManager : NSObject<GRPCInterceptorInterface, GRPCResponseHandler>
- (instancetype)init NS_UNAVAILABLE;
@ -179,6 +179,10 @@ NS_ASSUME_NONNULL_BEGIN
previousInterceptor:(nullable id<GRPCResponseHandler>)previousInterceptor
transportId:(GRPCTransportId)transportId;
/**
* Notify the manager that the interceptor has shut down and the manager should release references
* to other interceptors and stop forwarding requests/responses.
*/
- (void)shutDown;
// Methods to forward GRPCInterceptorInterface calls to the next interceptor
@ -230,7 +234,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface GRPCInterceptor : NSObject<GRPCInterceptorInterface, GRPCResponseHandler>
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
+ (instancetype) new NS_UNAVAILABLE;
/**
* Initialize the interceptor with the next interceptor in the chain, and provide the dispatch queue
@ -241,7 +245,8 @@ NS_ASSUME_NONNULL_BEGIN
// Default implementation of GRPCInterceptorInterface
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions callOptions:(GRPCCallOptions *)callOptions;
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions
callOptions:(GRPCCallOptions *)callOptions;
- (void)writeData:(id)data;
- (void)finish;
- (void)cancel;

@ -40,7 +40,8 @@
transportId:(nonnull GRPCTransportId)transportId {
if ((self = [super init])) {
if (factories.count == 0) {
[NSException raise:NSInternalInconsistencyException format:@"Interceptor manager must have factories"];
[NSException raise:NSInternalInconsistencyException
format:@"Interceptor manager must have factories"];
}
_thisInterceptor = [factories[0] createInterceptorWithManager:self];
if (_thisInterceptor == nil) {
@ -48,20 +49,22 @@
}
_previousInterceptor = previousInterceptor;
_factories = factories;
// Generate interceptor
// Generate interceptor
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 || __MAC_OS_X_VERSION_MAX_ALLOWED >= 101300
if (@available(iOS 8.0, macOS 10.10, *)) {
_dispatchQueue = dispatch_queue_create(NULL, dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_DEFAULT, 0));
_dispatchQueue = dispatch_queue_create(
NULL,
dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_DEFAULT, 0));
} else {
#else
{
{
#endif
_dispatchQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
}
dispatch_set_target_queue(_dispatchQueue, _thisInterceptor.dispatchQueue);
_transportId = transportId;
_dispatchQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
}
dispatch_set_target_queue(_dispatchQueue, _thisInterceptor.dispatchQueue);
_transportId = transportId;
}
return self;
return self;
}
- (void)shutDown {
@ -71,35 +74,37 @@
_shutDown = YES;
}
- (void)createNextInterceptor {
NSAssert(_nextInterceptor == nil, @"Starting the next interceptor more than once");
NSAssert(_factories.count > 0, @"Interceptor manager of transport cannot start next interceptor");
if (_nextInterceptor != nil) {
NSLog(@"Starting the next interceptor more than once");
return;
}
NSMutableArray<id<GRPCInterceptorFactory>> *interceptorFactories = [NSMutableArray arrayWithArray:[_factories subarrayWithRange:NSMakeRange(1, _factories.count - 1)]];
while (_nextInterceptor == nil) {
if (interceptorFactories.count == 0) {
_nextInterceptor = [[GRPCTransportManager alloc] initWithTransportId:_transportId previousInterceptor:self];
break;
} else {
_nextInterceptor = [[GRPCInterceptorManager alloc] initWithFactories:interceptorFactories
previousInterceptor:self
transportId:_transportId];
if (_nextInterceptor == nil) {
[interceptorFactories removeObjectAtIndex:0];
}
- (void)createNextInterceptor {
NSAssert(_nextInterceptor == nil, @"Starting the next interceptor more than once");
NSAssert(_factories.count > 0, @"Interceptor manager of transport cannot start next interceptor");
if (_nextInterceptor != nil) {
NSLog(@"Starting the next interceptor more than once");
return;
}
NSMutableArray<id<GRPCInterceptorFactory>> *interceptorFactories = [NSMutableArray
arrayWithArray:[_factories subarrayWithRange:NSMakeRange(1, _factories.count - 1)]];
while (_nextInterceptor == nil) {
if (interceptorFactories.count == 0) {
_nextInterceptor =
[[GRPCTransportManager alloc] initWithTransportId:_transportId previousInterceptor:self];
break;
} else {
_nextInterceptor = [[GRPCInterceptorManager alloc] initWithFactories:interceptorFactories
previousInterceptor:self
transportId:_transportId];
if (_nextInterceptor == nil) {
[interceptorFactories removeObjectAtIndex:0];
}
}
NSAssert(_nextInterceptor != nil, @"Failed to create interceptor or transport.");
if (_nextInterceptor == nil) {
NSLog(@"Failed to create interceptor or transport.");
}
}
NSAssert(_nextInterceptor != nil, @"Failed to create interceptor or transport.");
if (_nextInterceptor == nil) {
NSLog(@"Failed to create interceptor or transport.");
}
}
- (void)startNextInterceptorWithRequest:(GRPCRequestOptions *)requestOptions
callOptions:(GRPCCallOptions *)callOptions {
- (void)startNextInterceptorWithRequest:(GRPCRequestOptions *)requestOptions
callOptions:(GRPCCallOptions *)callOptions {
if (_nextInterceptor == nil && !_shutDown) {
[self createNextInterceptor];
}
@ -193,8 +198,8 @@ callOptions:(GRPCCallOptions *)callOptions {
}
/** Forward call close and trailing metadata to the previous interceptor in the chain */
- (void)forwardPreviousInterceptorCloseWithTrailingMetadata:(NSDictionary *)trailingMetadata
error:(NSError *)error {
- (void)forwardPreviousInterceptorCloseWithTrailingMetadata:(NSDictionary *)trailingMetadata
error:(NSError *)error {
if (_previousInterceptor == nil) {
return;
}
@ -215,54 +220,55 @@ error:(NSError *)error {
});
}
- (dispatch_queue_t)dispatchQueue {
return _dispatchQueue;
}
- (dispatch_queue_t)dispatchQueue {
return _dispatchQueue;
}
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions callOptions:(GRPCCallOptions *)callOptions {
[_thisInterceptor startWithRequestOptions:requestOptions callOptions:callOptions];
}
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions
callOptions:(GRPCCallOptions *)callOptions {
[_thisInterceptor startWithRequestOptions:requestOptions callOptions:callOptions];
}
- (void)writeData:(id)data {
[_thisInterceptor writeData:data];
}
- (void)writeData:(id)data {
[_thisInterceptor writeData:data];
}
- (void)finish {
[_thisInterceptor finish];
}
- (void)finish {
[_thisInterceptor finish];
}
- (void)cancel {
[_thisInterceptor cancel];
}
- (void)cancel {
[_thisInterceptor cancel];
}
- (void)receiveNextMessages:(NSUInteger)numberOfMessages {
[_thisInterceptor receiveNextMessages:numberOfMessages];
}
- (void)receiveNextMessages:(NSUInteger)numberOfMessages {
[_thisInterceptor receiveNextMessages:numberOfMessages];
}
- (void)didReceiveInitialMetadata:(nullable NSDictionary *)initialMetadata {
if ([_thisInterceptor respondsToSelector:@selector(didReceiveInitialMetadata:)]) {
[_thisInterceptor didReceiveInitialMetadata:initialMetadata];
}
- (void)didReceiveInitialMetadata:(nullable NSDictionary *)initialMetadata {
if ([_thisInterceptor respondsToSelector:@selector(didReceiveInitialMetadata:)]) {
[_thisInterceptor didReceiveInitialMetadata:initialMetadata];
}
}
- (void)didReceiveData:(id)data {
if ([_thisInterceptor respondsToSelector:@selector(didReceiveData:)]) {
[_thisInterceptor didReceiveData:data];
}
- (void)didReceiveData:(id)data {
if ([_thisInterceptor respondsToSelector:@selector(didReceiveData:)]) {
[_thisInterceptor didReceiveData:data];
}
}
- (void)didCloseWithTrailingMetadata:(nullable NSDictionary *)trailingMetadata
error:(nullable NSError *)error {
- (void)didCloseWithTrailingMetadata:(nullable NSDictionary *)trailingMetadata
error:(nullable NSError *)error {
if ([_thisInterceptor respondsToSelector:@selector(didCloseWithTrailingMetadata:error:)]) {
[_thisInterceptor didCloseWithTrailingMetadata:trailingMetadata error:error];
}
}
- (void)didWriteData {
if ([_thisInterceptor respondsToSelector:@selector(didWriteData)]) {
[_thisInterceptor didWriteData];
}
- (void)didWriteData {
if ([_thisInterceptor respondsToSelector:@selector(didWriteData)]) {
[_thisInterceptor didWriteData];
}
}
@end
@ -272,7 +278,7 @@ error:(NSError *)error {
}
- (instancetype)initWithInterceptorManager:(GRPCInterceptorManager *)interceptorManager
dispatchQueue:(dispatch_queue_t)dispatchQueue {
dispatchQueue:(dispatch_queue_t)dispatchQueue {
if ((self = [super init])) {
_manager = interceptorManager;
_dispatchQueue = dispatchQueue;
@ -285,7 +291,8 @@ error:(NSError *)error {
return _dispatchQueue;
}
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions callOptions:(GRPCCallOptions *)callOptions {
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions
callOptions:(GRPCCallOptions *)callOptions {
[_manager startNextInterceptorWithRequest:requestOptions callOptions:callOptions];
}

@ -16,19 +16,27 @@
*
*/
// The interface for a transport implementation
#import "GRPCInterceptor.h"
NS_ASSUME_NONNULL_BEGIN
#pragma mark Transport ID
extern const struct GRPCTransportImplList {
/**
* The default transport implementations available in gRPC. These implementations will be provided
* by gRPC by default unless explicitly excluded.
*/
extern const struct GRPCDefaultTransportImplList {
const GRPCTransportId core_secure;
const GRPCTransportId core_insecure;
} GRPCTransportImplList;
} GRPCDefaultTransportImplList;
/** Returns whether two transport id's are identical. */
BOOL TransportIdIsEqual(GRPCTransportId lhs, GRPCTransportId rhs);
/** Returns the hash value of a transport id. */
NSUInteger TransportIdHash(GRPCTransportId);
#pragma mark Transport and factory
@ -40,20 +48,33 @@ NSUInteger TransportIdHash(GRPCTransportId);
@class GRPCCallOptions;
@class GRPCTransport;
@protocol GRPCTransportFactory <NSObject>
/** The factory method to create a transport. */
@protocol GRPCTransportFactory<NSObject>
- (GRPCTransport *)createTransportWithManager:(GRPCTransportManager *)transportManager;
@end
/** The registry of transport implementations. */
@interface GRPCTransportRegistry : NSObject
+ (instancetype)sharedInstance;
- (void)registerTransportWithId:(GRPCTransportId)id factory:(id<GRPCTransportFactory>)factory;
/**
* Register a transport implementation with the registry. All transport implementations to be used
* in a process must register with the registry on process start-up in its +load: class method.
* Parameter \a transportId is the identifier of the implementation, and \a factory is the factory
* object to create the corresponding transport instance.
*/
- (void)registerTransportWithId:(GRPCTransportId)transportId
factory:(id<GRPCTransportFactory>)factory;
@end
/**
* Base class for transport implementations. All transport implementation should inherit from this
* class.
*/
@interface GRPCTransport : NSObject<GRPCInterceptorInterface>
@end

@ -3,9 +3,8 @@
static const GRPCTransportId gGRPCCoreSecureId = "io.grpc.transport.core.secure";
static const GRPCTransportId gGRPCCoreInsecureId = "io.grpc.transport.core.insecure";
const struct GRPCTransportImplList GRPCTransportImplList = {
.core_secure = gGRPCCoreSecureId,
.core_insecure = gGRPCCoreInsecureId};
const struct GRPCDefaultTransportImplList GRPCDefaultTransportImplList = {
.core_secure = gGRPCCoreSecureId, .core_insecure = gGRPCCoreInsecureId};
static const GRPCTransportId gDefaultTransportId = gGRPCCoreSecureId;
@ -49,10 +48,11 @@ NSUInteger TransportIdHash(GRPCTransportId transportId) {
return self;
}
- (void)registerTransportWithId:(GRPCTransportId)transportId factory:(id<GRPCTransportFactory>)factory {
NSString *nsTransportId = [NSString stringWithCString:transportId
encoding:NSUTF8StringEncoding];
NSAssert(_registry[nsTransportId] == nil, @"The transport %@ has already been registered.", nsTransportId);
- (void)registerTransportWithId:(GRPCTransportId)transportId
factory:(id<GRPCTransportFactory>)factory {
NSString *nsTransportId = [NSString stringWithCString:transportId encoding:NSUTF8StringEncoding];
NSAssert(_registry[nsTransportId] == nil, @"The transport %@ has already been registered.",
nsTransportId);
if (_registry[nsTransportId] != nil) {
NSLog(@"The transport %@ has already been registered.", nsTransportId);
return;
@ -68,17 +68,18 @@ NSUInteger TransportIdHash(GRPCTransportId transportId) {
- (id<GRPCTransportFactory>)getTransportFactoryWithId:(GRPCTransportId)transportId {
if (transportId == NULL) {
if (_defaultFactory == nil) {
[NSException raise:NSInvalidArgumentException format:@"Unable to get default transport factory"];
[NSException raise:NSInvalidArgumentException
format:@"Unable to get default transport factory"];
return nil;
}
return _defaultFactory;
}
NSString *nsTransportId = [NSString stringWithCString:transportId
encoding:NSUTF8StringEncoding];
NSString *nsTransportId = [NSString stringWithCString:transportId encoding:NSUTF8StringEncoding];
id<GRPCTransportFactory> transportFactory = _registry[nsTransportId];
if (transportFactory == nil) {
// User named a transport id that was not registered with the registry.
[NSException raise:NSInvalidArgumentException format:@"Unable to get transport factory with id %s", transportId];
[NSException raise:NSInvalidArgumentException
format:@"Unable to get transport factory with id %s", transportId];
return nil;
}
return transportFactory;
@ -89,28 +90,35 @@ NSUInteger TransportIdHash(GRPCTransportId transportId) {
@implementation GRPCTransport
- (dispatch_queue_t)dispatchQueue {
[NSException raise:NSGenericException format:@"Implementations should override the dispatch queue"];
[NSException raise:NSGenericException
format:@"Implementations should override the dispatch queue"];
return nil;
}
- (void)startWithRequestOptions:(nonnull GRPCRequestOptions *)requestOptions callOptions:(nonnull GRPCCallOptions *)callOptions {
[NSException raise:NSGenericException format:@"Implementations should override the methods of GRPCTransport"];
- (void)startWithRequestOptions:(nonnull GRPCRequestOptions *)requestOptions
callOptions:(nonnull GRPCCallOptions *)callOptions {
[NSException raise:NSGenericException
format:@"Implementations should override the methods of GRPCTransport"];
}
- (void)writeData:(nonnull id)data {
[NSException raise:NSGenericException format:@"Implementations should override the methods of GRPCTransport"];
[NSException raise:NSGenericException
format:@"Implementations should override the methods of GRPCTransport"];
}
- (void)cancel {
[NSException raise:NSGenericException format:@"Implementations should override the methods of GRPCTransport"];
[NSException raise:NSGenericException
format:@"Implementations should override the methods of GRPCTransport"];
}
- (void)finish {
[NSException raise:NSGenericException format:@"Implementations should override the methods of GRPCTransport"];
[NSException raise:NSGenericException
format:@"Implementations should override the methods of GRPCTransport"];
}
- (void)receiveNextMessages:(NSUInteger)numberOfMessages {
[NSException raise:NSGenericException format:@"Implementations should override the methods of GRPCTransport"];
[NSException raise:NSGenericException
format:@"Implementations should override the methods of GRPCTransport"];
}
@end

@ -26,9 +26,10 @@ NS_ASSUME_NONNULL_BEGIN
@interface GRPCCall2Internal : GRPCTransport
- (instancetype)initWithTransportManager:(GRPCTransportManager*)transportManager;
- (instancetype)initWithTransportManager:(GRPCTransportManager *)transportManager;
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions callOptions:(GRPCCallOptions *)callOptions;
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions
callOptions:(GRPCCallOptions *)callOptions;
- (void)writeData:(id)data;

@ -22,8 +22,8 @@
#import <GRPCClient/GRPCInterceptor.h>
#import <RxLibrary/GRXBufferedPipe.h>
#import "GRPCCall+V2API.h"
#import "../GRPCTransport+Private.h"
#import "GRPCCall+V2API.h"
@implementation GRPCCall2Internal {
/** Request for the call. */
@ -53,20 +53,19 @@
NSUInteger _pendingReceiveNextMessages;
}
- (instancetype)initWithTransportManager:(GRPCTransportManager *)transportManager {
dispatch_queue_t dispatchQueue;
// Set queue QoS only when iOS version is 8.0 or above and Xcode version is 9.0 or above
- (instancetype)initWithTransportManager:(GRPCTransportManager *)transportManager {
dispatch_queue_t dispatchQueue;
// Set queue QoS only when iOS version is 8.0 or above and Xcode version is 9.0 or above
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 || __MAC_OS_X_VERSION_MAX_ALLOWED >= 101300
if (@available(iOS 8.0, macOS 10.10, *)) {
dispatchQueue = dispatch_queue_create(
NULL,
dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_DEFAULT, 0));
} else {
if (@available(iOS 8.0, macOS 10.10, *)) {
dispatchQueue = dispatch_queue_create(
NULL, dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_DEFAULT, 0));
} else {
#else
{
{
#endif
dispatchQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
}
dispatchQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
}
if ((self = [super init])) {
_pipe = [GRXBufferedPipe pipe];
_transportManager = transportManager;
@ -79,7 +78,8 @@
return _dispatchQueue;
}
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions callOptions:(GRPCCallOptions *)callOptions {
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions
callOptions:(GRPCCallOptions *)callOptions {
NSAssert(requestOptions.host.length != 0 && requestOptions.path.length != 0,
@"Neither host nor path can be nil.");
NSAssert(requestOptions.safety <= GRPCCallSafetyCacheableRequest, @"Invalid call safety value.");
@ -187,13 +187,17 @@
_pipe = nil;
if (_transportManager != nil) {
[_transportManager forwardPreviousInterceptorCloseWithTrailingMetadata:nil
error:[NSError errorWithDomain:kGRPCErrorDomain
code:GRPCErrorCodeCancelled
userInfo:@{
NSLocalizedDescriptionKey :
@"Canceled by app"
}]];
[_transportManager
forwardPreviousInterceptorCloseWithTrailingMetadata:nil
error:
[NSError
errorWithDomain:kGRPCErrorDomain
code:
GRPCErrorCodeCancelled
userInfo:@{
NSLocalizedDescriptionKey :
@"Canceled by app"
}]];
[_transportManager shutDown];
}
}
@ -258,7 +262,7 @@
- (void)issueClosedWithTrailingMetadata:(NSDictionary *)trailingMetadata error:(NSError *)error {
[_transportManager forwardPreviousInterceptorCloseWithTrailingMetadata:trailingMetadata
error:error];
error:error];
[_transportManager shutDown];
}

@ -21,15 +21,15 @@
#include <grpc/support/log.h>
#import "../../internal/GRPCCallOptions+Internal.h"
#import "../GRPCTransport+Private.h"
#import "ChannelArgsUtil.h"
#import "GRPCChannelFactory.h"
#import "GRPCChannelPool.h"
#import "GRPCCompletionQueue.h"
#import "GRPCCoreFactory.h"
#import "GRPCInsecureChannelFactory.h"
#import "GRPCSecureChannelFactory.h"
#import "version.h"
#import "GRPCCoreFactory.h"
#import "../GRPCTransport+Private.h"
#import <GRPCClient/GRPCCall+Cronet.h>
#import <GRPCClient/GRPCCallOptions.h>
@ -52,12 +52,16 @@
- (id<GRPCChannelFactory>)channelFactory {
if (_callOptions.transport != NULL) {
id<GRPCTransportFactory> transportFactory = [[GRPCTransportRegistry sharedInstance] getTransportFactoryWithId:_callOptions.transport];
if (![transportFactory respondsToSelector:@selector(createCoreChannelFactoryWithCallOptions:)]) {
id<GRPCTransportFactory> transportFactory =
[[GRPCTransportRegistry sharedInstance] getTransportFactoryWithId:_callOptions.transport];
if (!
[transportFactory respondsToSelector:@selector(createCoreChannelFactoryWithCallOptions:)]) {
// impossible because we are using GRPCCore now
[NSException raise:NSInternalInconsistencyException format:@"Transport factory type is wrong"];
[NSException raise:NSInternalInconsistencyException
format:@"Transport factory type is wrong"];
}
id<GRPCCoreTransportFactory> coreTransportFactory = (id<GRPCCoreTransportFactory>)transportFactory;
id<GRPCCoreTransportFactory> coreTransportFactory =
(id<GRPCCoreTransportFactory>)transportFactory;
return [coreTransportFactory createCoreChannelFactoryWithCallOptions:_callOptions];
} else {
// To maintain backwards compatibility with tranportType
@ -65,22 +69,22 @@
switch (type) {
case GRPCTransportTypeChttp2BoringSSL:
// TODO (mxyan): Remove when the API is deprecated
{
NSError *error;
id<GRPCChannelFactory> factory = [GRPCSecureChannelFactory
factoryWithPEMRootCertificates:_callOptions.PEMRootCertificates
privateKey:_callOptions.PEMPrivateKey
certChain:_callOptions.PEMCertificateChain
error:&error];
NSAssert(factory != nil, @"Failed to create secure channel factory");
if (factory == nil) {
NSLog(@"Error creating secure channel factory: %@", error);
}
return factory;
{
NSError *error;
id<GRPCChannelFactory> factory = [GRPCSecureChannelFactory
factoryWithPEMRootCertificates:_callOptions.PEMRootCertificates
privateKey:_callOptions.PEMPrivateKey
certChain:_callOptions.PEMCertificateChain
error:&error];
NSAssert(factory != nil, @"Failed to create secure channel factory");
if (factory == nil) {
NSLog(@"Error creating secure channel factory: %@", error);
}
case GRPCTransportTypeCronet:
{
id<GRPCCoreTransportFactory> transportFactory = (id<GRPCCoreTransportFactory>)[[GRPCTransportRegistry sharedInstance] getTransportFactoryWithId:gGRPCCoreCronetId];
return factory;
}
case GRPCTransportTypeCronet: {
id<GRPCCoreTransportFactory> transportFactory = (id<GRPCCoreTransportFactory>)[
[GRPCTransportRegistry sharedInstance] getTransportFactoryWithId:gGRPCCoreCronetId];
return [transportFactory createCoreChannelFactoryWithCallOptions:_callOptions];
}
case GRPCTransportTypeInsecure:
@ -191,7 +195,7 @@
grpc_channel *_unmanagedChannel;
}
- (instancetype)initWithChannelConfiguration:(GRPCChannelConfiguration *)channelConfiguration {
- (instancetype)initWithChannelConfiguration:(GRPCChannelConfiguration *)channelConfiguration {
NSAssert(channelConfiguration != nil, @"channelConfiguration must not be empty.");
if (channelConfiguration == nil) {
return nil;

@ -43,7 +43,7 @@ NS_ASSUME_NONNULL_BEGIN
* Initialize with an actual channel object \a channel and a reference to the channel pool.
*/
- (nullable instancetype)initWithChannelConfiguration:
(GRPCChannelConfiguration *)channelConfiguration;
(GRPCChannelConfiguration *)channelConfiguration;
/**
* Create a GRPCWrappedCall object (grpc_call) from this channel. If channel is disconnected, get a

@ -18,6 +18,15 @@
#import "../GRPCCoreFactory.h"
/**
* The factory for gRPC Core + Cronet transport implementation. The
* implementation is not part of the default transports of gRPC and is for
* testing purpose only on Github.
*
* To use this transport, a user must include the GRPCCoreCronet module as a
* dependency of the project and use gGRPCCoreCronetId in call options to
* specify that this is the transport to be used for a call.
*/
@interface GRPCCoreCronetFactory : NSObject<GRPCCoreTransportFactory>
@end

@ -18,11 +18,11 @@
#import "GRPCCoreCronetFactory.h"
#import <GRPCClient/GRPCTransport.h>
#import <GRPCClient/GRPCCall+Cronet.h>
#import <GRPCClient/GRPCTransport.h>
#import "../GRPCCoreFactory.h"
#import "../GRPCCallInternal.h"
#import "../GRPCCoreFactory.h"
#import "GRPCCronetChannelFactory.h"
static GRPCCoreCronetFactory *gGRPCCoreCronetFactory = nil;
@ -38,8 +38,9 @@ static dispatch_once_t gInitGRPCCoreCronetFactory;
}
+ (void)load {
[[GRPCTransportRegistry sharedInstance] registerTransportWithId:gGRPCCoreCronetId
factory:[GRPCCoreCronetFactory sharedInstance]];
[[GRPCTransportRegistry sharedInstance]
registerTransportWithId:gGRPCCoreCronetId
factory:[GRPCCoreCronetFactory sharedInstance]];
}
- (GRPCTransport *)createTransportWithManager:(GRPCTransportManager *)transportManager {

@ -23,16 +23,21 @@ NS_ASSUME_NONNULL_BEGIN
@protocol GRPCChannelFactory;
@protocol GRPCCallOptions;
@protocol GRPCCoreTransportFactory <GRPCTransportFactory>
/** The interface for transport implementations that are based on Core. */
@protocol GRPCCoreTransportFactory<GRPCTransportFactory>
- (nullable id<GRPCChannelFactory>)createCoreChannelFactoryWithCallOptions:(GRPCCallOptions *)callOptions;
/** Get the channel factory for GRPCChannel from call options. */
- (nullable id<GRPCChannelFactory>)createCoreChannelFactoryWithCallOptions:
(GRPCCallOptions *)callOptions;
@end
/** The factory for gRPC Core + CFStream + TLS secure channel transport implementation. */
@interface GRPCCoreSecureFactory : NSObject<GRPCCoreTransportFactory>
@end
/** The factory for gRPC Core + CFStream + insecure channel transport implementation. */
@interface GRPCCoreInsecureFactory : NSObject<GRPCCoreTransportFactory>
@end

@ -3,8 +3,8 @@
#import <GRPCClient/GRPCTransport.h>
#import "GRPCCallInternal.h"
#import "GRPCSecureChannelFactory.h"
#import "GRPCInsecureChannelFactory.h"
#import "GRPCSecureChannelFactory.h"
static GRPCCoreSecureFactory *gGRPCCoreSecureFactory = nil;
static GRPCCoreInsecureFactory *gGRPCCoreInsecureFactory = nil;
@ -21,8 +21,9 @@ static dispatch_once_t gInitGRPCCoreInsecureFactory;
}
+ (void)load {
[[GRPCTransportRegistry sharedInstance] registerTransportWithId:GRPCTransportImplList.core_secure
factory:[self sharedInstance]];
[[GRPCTransportRegistry sharedInstance]
registerTransportWithId:GRPCDefaultTransportImplList.core_secure
factory:[self sharedInstance]];
}
- (GRPCTransport *)createTransportWithManager:(GRPCTransportManager *)transportManager {
@ -31,9 +32,11 @@ static dispatch_once_t gInitGRPCCoreInsecureFactory;
- (id<GRPCChannelFactory>)createCoreChannelFactoryWithCallOptions:(GRPCCallOptions *)callOptions {
NSError *error;
id<GRPCChannelFactory> factory = [GRPCSecureChannelFactory factoryWithPEMRootCertificates:callOptions.PEMRootCertificates
privateKey:callOptions.PEMPrivateKey
certChain:callOptions.PEMCertificateChain error:&error];
id<GRPCChannelFactory> factory =
[GRPCSecureChannelFactory factoryWithPEMRootCertificates:callOptions.PEMRootCertificates
privateKey:callOptions.PEMPrivateKey
certChain:callOptions.PEMCertificateChain
error:&error];
if (error != nil) {
NSLog(@"Unable to create secure channel factory");
return nil;
@ -53,8 +56,9 @@ static dispatch_once_t gInitGRPCCoreInsecureFactory;
}
+ (void)load {
[[GRPCTransportRegistry sharedInstance] registerTransportWithId:GRPCTransportImplList.core_insecure
factory:[self sharedInstance]];
[[GRPCTransportRegistry sharedInstance]
registerTransportWithId:GRPCDefaultTransportImplList.core_insecure
factory:[self sharedInstance]];
}
- (GRPCTransport *)createTransportWithManager:(GRPCTransportManager *)transportManager {

@ -113,9 +113,9 @@ static NSMutableDictionary *gHostCache;
options.PEMCertificateChain = _PEMCertificateChain;
options.hostNameOverride = _hostNameOverride;
if (_transportType == GRPCTransportTypeInsecure) {
options.transport = GRPCTransportImplList.core_insecure;
options.transport = GRPCDefaultTransportImplList.core_insecure;
} else {
options.transport = GRPCTransportImplList.core_secure;
options.transport = GRPCDefaultTransportImplList.core_secure;
}
options.logContext = _logContext;

@ -16,17 +16,21 @@
*
*/
#import <GRPCClient/GRPCTransport.h>
#import <GRPCClient/GRPCInterceptor.h>
#import <GRPCClient/GRPCTransport.h>
NS_ASSUME_NONNULL_BEGIN
/**
* Private interfaces of the transport registry.
*/
@interface GRPCTransportRegistry (Private)
- (nullable instancetype)initWithTransportId:(GRPCTransportId)transportId
previousInterceptor:(id<GRPCResponseHandler>)previousInterceptor;
- (id<GRPCTransportFactory>)getTransportFactoryWithId:(GRPCTransportId)id;
/**
* Get a transport implementation's factory by its transport id. If the transport id was not
* registered with the registry, nil is returned.
*/
- (id<GRPCTransportFactory>)getTransportFactoryWithId:(GRPCTransportId)transportId;
@end
@ -35,6 +39,10 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithTransportId:(GRPCTransportId)transportId
previousInterceptor:(id<GRPCResponseHandler>)previousInterceptor;
/**
* Notify the manager that the transport has shut down and the manager should release references to
* its response handler and stop forwarding requests/responses.
*/
- (void)shutDown;
/** Forward initial metadata to the previous interceptor in the interceptor chain */
@ -44,7 +52,8 @@ NS_ASSUME_NONNULL_BEGIN
- (void)forwardPreviousInterceptorWithData:(nullable id)data;
/** Forward call close and trailing metadata to the previous interceptor in the interceptor chain */
- (void)forwardPreviousInterceptorCloseWithTrailingMetadata:(nullable NSDictionary *)trailingMetadata
- (void)forwardPreviousInterceptorCloseWithTrailingMetadata:
(nullable NSDictionary *)trailingMetadata
error:(nullable NSError *)error;
/** Forward write completion to the previous interceptor in the interceptor chain */

@ -12,8 +12,9 @@
- (instancetype)initWithTransportId:(GRPCTransportId)transportId
previousInterceptor:(id<GRPCResponseHandler>)previousInterceptor {
if ((self = [super init])) {
id<GRPCTransportFactory> factory = [[GRPCTransportRegistry sharedInstance] getTransportFactoryWithId:transportId];
id<GRPCTransportFactory> factory =
[[GRPCTransportRegistry sharedInstance] getTransportFactoryWithId:transportId];
_transport = [factory createTransportWithManager:self];
NSAssert(_transport != nil, @"Failed to create transport with id: %s", transportId);
if (_transport == nil) {
@ -36,9 +37,11 @@
return _dispatchQueue;
}
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions callOptions:(GRPCCallOptions *)callOptions {
- (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions
callOptions:(GRPCCallOptions *)callOptions {
if (_transportId != callOptions.transport) {
[NSException raise:NSInvalidArgumentException format:@"Interceptors cannot change the call option 'transport'"];
[NSException raise:NSInvalidArgumentException
format:@"Interceptors cannot change the call option 'transport'"];
return;
}
[_transport startWithRequestOptions:requestOptions callOptions:callOptions];

@ -5,17 +5,17 @@
@protocol GRXWriteable;
__attribute__((deprecated("Please use GRPCProtoCall."))) @interface ProtoRPC
: GRPCCall
/**
* host parameter should not contain the scheme (http:// or https://), only the name or IP
* addr and the port number, for example @"localhost:5050".
*/
-
(instancetype)initWithHost : (NSString *)host method
: (GRPCProtoMethod *)method requestsWriter : (GRXWriter *)requestsWriter responseClass
: (Class)responseClass responsesWriteable
: (id<GRXWriteable>)responsesWriteable NS_DESIGNATED_INITIALIZER;
: GRPCCall
/**
* host parameter should not contain the scheme (http:// or https://), only the name or IP
* addr and the port number, for example @"localhost:5050".
*/
-
(instancetype)initWithHost : (NSString *)host method
: (GRPCProtoMethod *)method requestsWriter : (GRXWriter *)requestsWriter responseClass
: (Class)responseClass responsesWriteable
: (id<GRXWriteable>)responsesWriteable NS_DESIGNATED_INITIALIZER;
- (void)start;
@end
@ -26,14 +26,15 @@ __attribute__((deprecated("Please use GRPCProtoCall."))) @interface ProtoRPC
*/
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@interface GRPCProtoCall : ProtoRPC
@interface GRPCProtoCall
: ProtoRPC
#pragma clang diagnostic pop
@end
/**
* Generate an NSError object that represents a failure in parsing a proto class. For gRPC internal
* use only.
*/
NSError *ErrorForBadProto(id proto, Class expectedClass, NSError *parsingError);
@end
/**
* Generate an NSError object that represents a failure in parsing a proto class. For gRPC
* internal use only.
*/
NSError *
ErrorForBadProto(id proto, Class expectedClass, NSError *parsingError);

@ -11,7 +11,6 @@
#import <RxLibrary/GRXWriteable.h>
#import <RxLibrary/GRXWriter+Transformations.h>
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-implementations"
@implementation ProtoRPC {
@ -63,9 +62,9 @@
[weakSelf finishWithError:ErrorForBadProto(value, responseClass, error)];
}
}
completionHandler:^(NSError *errorOrNil) {
[responsesWriteable writesFinishedWithError:errorOrNil];
}];
completionHandler:^(NSError *errorOrNil) {
[responsesWriteable writesFinishedWithError:errorOrNil];
}];
}
return self;
}
@ -102,4 +101,3 @@ NSError *ErrorForBadProto(id proto, Class expectedClass, NSError *parsingError)
// TODO(jcanizales): Use kGRPCErrorDomain and GRPCErrorCodeInternal when they're public.
return [NSError errorWithDomain:@"io.grpc" code:13 userInfo:info];
}

@ -30,17 +30,17 @@
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnullability-completeness"
__attribute__((deprecated("Please use GRPCProtoService."))) @interface ProtoService
: NSObject {
__attribute__((deprecated("Please use GRPCProtoService."))) @interface ProtoService : NSObject {
NSString *_host;
NSString *_packageName;
NSString *_serviceName;
}
-
(nullable instancetype)initWithHost : (nonnull NSString *)host packageName
: (nonnull NSString *)packageName serviceName : (nonnull NSString *)serviceName callOptions
: (nullable GRPCCallOptions *)callOptions NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithHost:(nonnull NSString *)host
packageName:(nonnull NSString *)packageName
serviceName:(nonnull NSString *)serviceName
callOptions:(nullable GRPCCallOptions *)callOptions
NS_DESIGNATED_INITIALIZER;
- (nullable GRPCUnaryProtoCall *)RPCToMethod:(nonnull NSString *)method
message:(nonnull id)message

@ -1,6 +1,6 @@
#import "ProtoServiceLegacy.h"
#import "ProtoRPCLegacy.h"
#import "ProtoMethod.h"
#import "ProtoRPCLegacy.h"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-implementations"
@ -23,13 +23,12 @@
return self;
}
- (GRPCProtoCall *)RPCToMethod:(NSString *)method
requestsWriter:(GRXWriter *)requestsWriter
responseClass:(Class)responseClass
responsesWriteable:(id<GRXWriteable>)responsesWriteable {
GRPCProtoMethod *methodName =
[[GRPCProtoMethod alloc] initWithPackage:_packageName service:_serviceName method:method];
[[GRPCProtoMethod alloc] initWithPackage:_packageName service:_serviceName method:method];
return [[GRPCProtoCall alloc] initWithHost:_host
method:methodName
requestsWriter:requestsWriter

@ -22,9 +22,8 @@
#import <Cronet/Cronet.h>
#import <GRPCClient/GRPCCall+Cronet.h>
#import "InteropTests.h"
#import "../ConfigureCronet.h"
#import "InteropTests.h"
// The server address is derived from preprocessor macro, which is
// in turn derived from environment variable of the same name.
@ -49,7 +48,6 @@ static int32_t kRemoteInteropServerOverhead = 12;
[super setUp];
}
+ (NSString *)host {
return kRemoteSSLHost;
}

@ -87,8 +87,8 @@ BOOL isRemoteInteropTest(NSString *host) {
- (GRPCInterceptor *)createInterceptorWithManager:(GRPCInterceptorManager *)interceptorManager {
dispatch_queue_t queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
return [[GRPCInterceptor alloc] initWithInterceptorManager:interceptorManager
dispatchQueue:queue];
return
[[GRPCInterceptor alloc] initWithInterceptorManager:interceptorManager dispatchQueue:queue];
}
@end
@ -96,20 +96,19 @@ BOOL isRemoteInteropTest(NSString *host) {
@interface HookInterceptorFactory : NSObject<GRPCInterceptorFactory>
- (instancetype)
initWithDispatchQueue:(dispatch_queue_t)dispatchQueue
startHook:(void (^)(GRPCRequestOptions *requestOptions,
GRPCCallOptions *callOptions,
GRPCInterceptorManager *manager))startHook
writeDataHook:(void (^)(id data, GRPCInterceptorManager *manager))writeDataHook
finishHook:(void (^)(GRPCInterceptorManager *manager))finishHook
receiveNextMessagesHook:(void (^)(NSUInteger numberOfMessages,
GRPCInterceptorManager *manager))receiveNextMessagesHook
responseHeaderHook:(void (^)(NSDictionary *initialMetadata,
GRPCInterceptorManager *manager))responseHeaderHook
responseDataHook:(void (^)(id data, GRPCInterceptorManager *manager))responseDataHook
responseCloseHook:(void (^)(NSDictionary *trailingMetadata, NSError *error,
GRPCInterceptorManager *manager))responseCloseHook
didWriteDataHook:(void (^)(GRPCInterceptorManager *manager))didWriteDataHook;
initWithDispatchQueue:(dispatch_queue_t)dispatchQueue
startHook:(void (^)(GRPCRequestOptions *requestOptions, GRPCCallOptions *callOptions,
GRPCInterceptorManager *manager))startHook
writeDataHook:(void (^)(id data, GRPCInterceptorManager *manager))writeDataHook
finishHook:(void (^)(GRPCInterceptorManager *manager))finishHook
receiveNextMessagesHook:(void (^)(NSUInteger numberOfMessages,
GRPCInterceptorManager *manager))receiveNextMessagesHook
responseHeaderHook:(void (^)(NSDictionary *initialMetadata,
GRPCInterceptorManager *manager))responseHeaderHook
responseDataHook:(void (^)(id data, GRPCInterceptorManager *manager))responseDataHook
responseCloseHook:(void (^)(NSDictionary *trailingMetadata, NSError *error,
GRPCInterceptorManager *manager))responseCloseHook
didWriteDataHook:(void (^)(GRPCInterceptorManager *manager))didWriteDataHook;
- (GRPCInterceptor *)createInterceptorWithManager:(GRPCInterceptorManager *)interceptorManager;
@ -119,7 +118,7 @@ initWithDispatchQueue:(dispatch_queue_t)dispatchQueue
- (instancetype)
initWithInterceptorManager:(GRPCInterceptorManager *)interceptorManager
dispatchQueue:(dispatch_queue_t)dispatchQueue
dispatchQueue:(dispatch_queue_t)dispatchQueue
startHook:(void (^)(GRPCRequestOptions *requestOptions,
GRPCCallOptions *callOptions,
GRPCInterceptorManager *manager))startHook
@ -152,20 +151,19 @@ dispatchQueue:(dispatch_queue_t)dispatchQueue
}
- (instancetype)
initWithDispatchQueue:(dispatch_queue_t)dispatchQueue
startHook:(void (^)(GRPCRequestOptions *requestOptions,
GRPCCallOptions *callOptions,
GRPCInterceptorManager *manager))startHook
writeDataHook:(void (^)(id data, GRPCInterceptorManager *manager))writeDataHook
finishHook:(void (^)(GRPCInterceptorManager *manager))finishHook
receiveNextMessagesHook:(void (^)(NSUInteger numberOfMessages,
GRPCInterceptorManager *manager))receiveNextMessagesHook
responseHeaderHook:(void (^)(NSDictionary *initialMetadata,
GRPCInterceptorManager *manager))responseHeaderHook
responseDataHook:(void (^)(id data, GRPCInterceptorManager *manager))responseDataHook
responseCloseHook:(void (^)(NSDictionary *trailingMetadata, NSError *error,
GRPCInterceptorManager *manager))responseCloseHook
didWriteDataHook:(void (^)(GRPCInterceptorManager *manager))didWriteDataHook {
initWithDispatchQueue:(dispatch_queue_t)dispatchQueue
startHook:(void (^)(GRPCRequestOptions *requestOptions, GRPCCallOptions *callOptions,
GRPCInterceptorManager *manager))startHook
writeDataHook:(void (^)(id data, GRPCInterceptorManager *manager))writeDataHook
finishHook:(void (^)(GRPCInterceptorManager *manager))finishHook
receiveNextMessagesHook:(void (^)(NSUInteger numberOfMessages,
GRPCInterceptorManager *manager))receiveNextMessagesHook
responseHeaderHook:(void (^)(NSDictionary *initialMetadata,
GRPCInterceptorManager *manager))responseHeaderHook
responseDataHook:(void (^)(id data, GRPCInterceptorManager *manager))responseDataHook
responseCloseHook:(void (^)(NSDictionary *trailingMetadata, NSError *error,
GRPCInterceptorManager *manager))responseCloseHook
didWriteDataHook:(void (^)(GRPCInterceptorManager *manager))didWriteDataHook {
if ((self = [super init])) {
_dispatchQueue = dispatchQueue;
_startHook = startHook;
@ -182,7 +180,7 @@ initWithDispatchQueue:(dispatch_queue_t)dispatchQueue
- (GRPCInterceptor *)createInterceptorWithManager:(GRPCInterceptorManager *)interceptorManager {
return [[HookInterceptor alloc] initWithInterceptorManager:interceptorManager
dispatchQueue:_dispatchQueue
dispatchQueue:_dispatchQueue
startHook:_startHook
writeDataHook:_writeDataHook
finishHook:_finishHook
@ -216,7 +214,7 @@ initWithDispatchQueue:(dispatch_queue_t)dispatchQueue
- (instancetype)
initWithInterceptorManager:(GRPCInterceptorManager *)interceptorManager
dispatchQueue:(dispatch_queue_t)dispatchQueue
dispatchQueue:(dispatch_queue_t)dispatchQueue
startHook:(void (^)(GRPCRequestOptions *requestOptions,
GRPCCallOptions *callOptions,
GRPCInterceptorManager *manager))startHook
@ -230,8 +228,7 @@ dispatchQueue:(dispatch_queue_t)dispatchQueue
responseCloseHook:(void (^)(NSDictionary *trailingMetadata, NSError *error,
GRPCInterceptorManager *manager))responseCloseHook
didWriteDataHook:(void (^)(GRPCInterceptorManager *manager))didWriteDataHook {
if ((self = [super initWithInterceptorManager:interceptorManager
dispatchQueue:dispatchQueue])) {
if ((self = [super initWithInterceptorManager:interceptorManager dispatchQueue:dispatchQueue])) {
_startHook = startHook;
_writeDataHook = writeDataHook;
_finishHook = finishHook;
@ -323,14 +320,14 @@ dispatchQueue:(dispatch_queue_t)dispatchQueue
- (instancetype)initWithDispatchQueue:(dispatch_queue_t)dispatchQueue {
_enabled = NO;
return [super initWithDispatchQueue:dispatchQueue
startHook:nil
writeDataHook:nil
finishHook:nil
receiveNextMessagesHook:nil
responseHeaderHook:nil
responseDataHook:nil
responseCloseHook:nil
didWriteDataHook:nil];
startHook:nil
writeDataHook:nil
finishHook:nil
receiveNextMessagesHook:nil
responseHeaderHook:nil
responseDataHook:nil
responseCloseHook:nil
didWriteDataHook:nil];
}
- (GRPCInterceptor *)createInterceptorWithManager:(GRPCInterceptorManager *)interceptorManager {
@ -621,7 +618,7 @@ static dispatch_once_t initGlobalInterceptorFactory;
request.responseStatus.code = GRPC_STATUS_CANCELLED;
}
GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init];
// For backwards compatibility
// For backwards compatibility
options.transportType = [[self class] transportType];
options.transport = [[self class] transport];
options.PEMRootCertificates = [[self class] PEMRootCertificates];
@ -1269,7 +1266,6 @@ static dispatch_once_t initGlobalInterceptorFactory;
}
__weak XCTestExpectation *expectation = [self expectationWithDescription:@"Keepalive"];
NSNumber *kRequestSize = @27182;
NSNumber *kResponseSize = @31415;
@ -1284,18 +1280,19 @@ static dispatch_once_t initGlobalInterceptorFactory;
options.keepaliveTimeout = 0;
__block GRPCStreamingProtoCall *call = [_service
fullDuplexCallWithResponseHandler:[[InteropTestsBlockCallbacks alloc]
initWithInitialMetadataCallback:nil
messageCallback:nil
closeCallback:^(NSDictionary *trailingMetadata,
NSError *error) {
XCTAssertNotNil(error);
XCTAssertEqual(error.code, GRPC_STATUS_UNAVAILABLE,
@"Received status %ld instead of UNAVAILABLE (14).",
error.code);
[expectation fulfill];
}]
callOptions:options];
fullDuplexCallWithResponseHandler:
[[InteropTestsBlockCallbacks alloc]
initWithInitialMetadataCallback:nil
messageCallback:nil
closeCallback:^(NSDictionary *trailingMetadata, NSError *error) {
XCTAssertNotNil(error);
XCTAssertEqual(
error.code, GRPC_STATUS_UNAVAILABLE,
@"Received status %ld instead of UNAVAILABLE (14).",
error.code);
[expectation fulfill];
}]
callOptions:options];
[call writeMessage:request];
[call start];
@ -1548,7 +1545,7 @@ static dispatch_once_t initGlobalInterceptorFactory;
XCTAssertEqual(error.code, GRPC_STATUS_CANCELLED);
[expectCallInternalComplete fulfill];
}
didWriteDataHook:nil];
didWriteDataHook:nil];
NSArray *requests = @[ @1, @2, @3, @4 ];
@ -1723,15 +1720,15 @@ static dispatch_once_t initGlobalInterceptorFactory;
- (void)testConflictingGlobalInterceptors {
id<GRPCInterceptorFactory> factory = [[HookInterceptorFactory alloc]
initWithDispatchQueue:dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL)
startHook:nil
writeDataHook:nil
finishHook:nil
receiveNextMessagesHook:nil
responseHeaderHook:nil
responseDataHook:nil
responseCloseHook:nil
didWriteDataHook:nil];
initWithDispatchQueue:dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL)
startHook:nil
writeDataHook:nil
finishHook:nil
receiveNextMessagesHook:nil
responseHeaderHook:nil
responseDataHook:nil
responseCloseHook:nil
didWriteDataHook:nil];
@try {
[GRPCCall2 registerGlobalInterceptor:factory];
XCTFail(@"Did not receive an exception when registering global interceptor the second time");

@ -17,8 +17,8 @@
*/
#import <GRPCClient/GRPCCall+Tests.h>
#import <GRPCClient/internal_testing/GRPCCall+InternalTests.h>
#import <GRPCClient/GRPCTransport.h>
#import <GRPCClient/internal_testing/GRPCCall+InternalTests.h>
#import "InteropTests.h"
@ -62,7 +62,7 @@ static int32_t kLocalInteropServerOverhead = 10;
}
+ (GRPCTransportId)transport {
return GRPCTransportImplList.core_insecure;
return GRPCDefaultTransportImplList.core_insecure;
}
@end

@ -17,8 +17,8 @@
*/
#import <GRPCClient/GRPCCall+Tests.h>
#import <GRPCClient/internal_testing/GRPCCall+InternalTests.h>
#import <GRPCClient/GRPCTransport.h>
#import <GRPCClient/internal_testing/GRPCCall+InternalTests.h>
#import "InteropTests.h"
// The server address is derived from preprocessor macro, which is
@ -62,7 +62,7 @@ static int32_t kLocalInteropServerOverhead = 10;
}
+ (GRPCTransportId)transport {
return GRPCTransportImplList.core_secure;
return GRPCDefaultTransportImplList.core_secure;
}
- (void)setUp {

Loading…
Cancel
Save