diff options
author | 2016-06-30 15:37:11 -0700 | |
---|---|---|
committer | 2016-06-30 15:37:11 -0700 | |
commit | c93d6a66a12110f82882807d95ad5dcb02370151 (patch) | |
tree | efb5e632e8ad237e05d63af14e54c2a8d83ad87b /src/objective-c/GRPCClient/private/GRPCHost.m | |
parent | 095172c3a52a11c42aed0150eb8dbb47186fd2a0 (diff) | |
parent | a5596db1a53723789d7c90c23d9cbfbb8207f949 (diff) |
Merge master into merge-0.14-into-master
Conflicts:
- gRPC.podspec
- Only had non-trivial changes in the core file list, which will need to be
regenerated (in gRPC-Core.podspec).
- src/objective-c/BoringSSL.podspec
- Had trivial conflicts in the version.
- src/objective-c/examples/RemoteTestClient/RemoteTest.podspec
- Trivial conflicts in quoting.
- src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj and
src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj
- The master version is used, pending testing. The 0.14 version had emoji and
some unneeded entries.
- src/objective-c/tests/Podfile
- Added CronetFramework pod, and warning silencing from master.
- templates/gRPC.podspec.template
- Deleted.
- third_party/protobuf
- Using master commit, but need to verify if it works for frameworks.
Diffstat (limited to 'src/objective-c/GRPCClient/private/GRPCHost.m')
-rw-r--r-- | src/objective-c/GRPCClient/private/GRPCHost.m | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index 43166cbb52..08c699f99e 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -36,7 +36,10 @@ #include <grpc/grpc.h> #include <grpc/grpc_security.h> #import <GRPCClient/GRPCCall.h> +#ifdef GRPC_COMPILE_WITH_CRONET #import <GRPCClient/GRPCCall+ChannelArg.h> +#import <GRPCClient/GRPCCall+Cronet.h> +#endif #import "GRPCChannel.h" #import "GRPCCompletionQueue.h" @@ -48,6 +51,8 @@ NS_ASSUME_NONNULL_BEGIN // templates/src/core/surface/version.c.template . #define GRPC_OBJC_VERSION_STRING @"0.13.0" +static NSMutableDictionary *kHostCache; + @implementation GRPCHost { // TODO(mlumish): Investigate whether caching channels with strong links is a good idea. GRPCChannel *_channel; @@ -79,13 +84,12 @@ NS_ASSUME_NONNULL_BEGIN } // Look up the GRPCHost in the cache. - static NSMutableDictionary *hostCache; static dispatch_once_t cacheInitialization; dispatch_once(&cacheInitialization, ^{ - hostCache = [NSMutableDictionary dictionary]; + kHostCache = [NSMutableDictionary dictionary]; }); - @synchronized(hostCache) { - GRPCHost *cachedHost = hostCache[address]; + @synchronized(kHostCache) { + GRPCHost *cachedHost = kHostCache[address]; if (cachedHost) { return cachedHost; } @@ -93,12 +97,22 @@ NS_ASSUME_NONNULL_BEGIN if ((self = [super init])) { _address = address; _secure = YES; - hostCache[address] = self; + kHostCache[address] = self; } } return self; } ++ (void)flushChannelCache { + @synchronized(kHostCache) { + [kHostCache enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, + GRPCHost * _Nonnull host, + BOOL * _Nonnull stop) { + [host disconnect]; + }]; + } +} + - (nullable grpc_call *)unmanagedCallWithPath:(NSString *)path completionQueue:(GRPCCompletionQueue *)queue { GRPCChannel *channel; @@ -200,15 +214,26 @@ NS_ASSUME_NONNULL_BEGIN - (GRPCChannel *)newChannel { NSDictionary *args = [self channelArgs]; +#ifdef GRPC_COMPILE_WITH_CRONET + BOOL useCronet = [GRPCCall isUsingCronet]; +#endif if (_secure) { GRPCChannel *channel; @synchronized(self) { if (_channelCreds == nil) { [self setTLSPEMRootCerts:nil withPrivateKey:nil withCertChain:nil error:nil]; } - channel = [GRPCChannel secureChannelWithHost:_address - credentials:_channelCreds - channelArgs:args]; +#ifdef GRPC_COMPILE_WITH_CRONET + if (useCronet) { + channel = [GRPCChannel secureCronetChannelWithHost:_address + channelArgs:args]; + } else +#endif + { + channel = [GRPCChannel secureChannelWithHost:_address + credentials:_channelCreds + channelArgs:args]; + } } return channel; } else { |