Chromium Code Reviews| Index: webrtc/examples/objc/AppRTCMobile/ARDTURNClient.m |
| diff --git a/webrtc/examples/objc/AppRTCMobile/ARDTURNClient.m b/webrtc/examples/objc/AppRTCMobile/ARDTURNClient.m |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..05f5cd9d113420f38027ec1711de7e2cafad8608 |
| --- /dev/null |
| +++ b/webrtc/examples/objc/AppRTCMobile/ARDTURNClient.m |
| @@ -0,0 +1,86 @@ |
| +/* |
| + * Copyright 2014 The WebRTC Project Authors. All rights reserved. |
|
magjed_webrtc
2017/01/11 14:40:12
Can you try reuploading with 'git cl upload --simi
|
| + * |
| + * Use of this source code is governed by a BSD-style license |
| + * that can be found in the LICENSE file in the root of the source |
| + * tree. An additional intellectual property rights grant can be found |
| + * in the file PATENTS. All contributing project authors may |
| + * be found in the AUTHORS file in the root of the source tree. |
| + */ |
| + |
| +#import "ARDTURNClient+Internal.h" |
| + |
| +#import "ARDUtilities.h" |
| +#import "RTCIceServer+JSON.h" |
| + |
| +// TODO(tkchin): move this to a configuration object. |
| +static NSString *kTURNRefererURLString = @"https://appr.tc"; |
| +static NSString *kARDTURNClientErrorDomain = @"ARDTURNClient"; |
| +static NSInteger kARDTURNClientErrorBadResponse = -1; |
| + |
| +@implementation ARDTURNClient { |
| + NSURL *_url; |
| +} |
| + |
| +- (instancetype)initWithURL:(NSURL *)url { |
| + NSParameterAssert([url absoluteString].length); |
| + if (self = [super init]) { |
| + _url = url; |
| + } |
| + return self; |
| +} |
| + |
| +- (void)requestServersWithCompletionHandler: |
| + (void (^)(NSArray *turnServers, NSError *error))completionHandler { |
| + |
| + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:_url]; |
| + [NSURLConnection sendAsyncRequest:request |
| + completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { |
| + if (error) { |
| + completionHandler(nil, error); |
| + return; |
| + } |
| + NSDictionary *responseDict = [NSDictionary dictionaryWithJSONData:data]; |
| + NSString *iceServerUrl = responseDict[@"ice_server_url"]; |
| + [self makeTurnServerRequestToURL:[NSURL URLWithString:iceServerUrl] |
| + WithCompletionHandler:completionHandler]; |
| + }]; |
| +} |
| + |
| +#pragma mark - Private |
| + |
| +- (void)makeTurnServerRequestToURL:(NSURL *)url |
| + WithCompletionHandler:(void (^)(NSArray *turnServers, |
| + NSError *error))completionHandler { |
| + NSMutableURLRequest *iceServerRequest = [NSMutableURLRequest requestWithURL:url]; |
| + iceServerRequest.HTTPMethod = @"POST"; |
| + [iceServerRequest addValue:kTURNRefererURLString forHTTPHeaderField:@"referer"]; |
| + [NSURLConnection sendAsyncRequest:iceServerRequest |
| + completionHandler:^(NSURLResponse *response, |
| + NSData *data, |
| + NSError *error) { |
| + if (error) { |
| + completionHandler(nil, error); |
| + return; |
| + } |
| + NSDictionary *turnResponseDict = [NSDictionary dictionaryWithJSONData:data]; |
| + NSMutableArray *turnServers = [NSMutableArray array]; |
| + [turnResponseDict[@"iceServers"] enumerateObjectsUsingBlock: |
| + ^(NSDictionary *obj, NSUInteger idx, BOOL *stop){ |
| + [turnServers addObject:[RTCIceServer serverFromJSONDictionary:obj]]; |
| + }]; |
| + if (!turnServers) { |
| + NSError *responseError = |
| + [[NSError alloc] initWithDomain:kARDTURNClientErrorDomain |
| + code:kARDTURNClientErrorBadResponse |
| + userInfo:@{ |
| + NSLocalizedDescriptionKey: @"Bad TURN response.", |
| + }]; |
| + completionHandler(nil, responseError); |
| + return; |
| + } |
| + completionHandler(turnServers, nil); |
| + }]; |
| +} |
| + |
| +@end |