| Index: webrtc/examples/objc/AppRTCMobile/ARDTURNClient.m
|
| diff --git a/webrtc/examples/objc/AppRTCMobile/ARDCEODTURNClient.m b/webrtc/examples/objc/AppRTCMobile/ARDTURNClient.m
|
| similarity index 35%
|
| rename from webrtc/examples/objc/AppRTCMobile/ARDCEODTURNClient.m
|
| rename to webrtc/examples/objc/AppRTCMobile/ARDTURNClient.m
|
| index 5be33353188737b351cd5f910c3adacaa549ba6c..05f5cd9d113420f38027ec1711de7e2cafad8608 100644
|
| --- a/webrtc/examples/objc/AppRTCMobile/ARDCEODTURNClient.m
|
| +++ b/webrtc/examples/objc/AppRTCMobile/ARDTURNClient.m
|
| @@ -8,17 +8,17 @@
|
| * be found in the AUTHORS file in the root of the source tree.
|
| */
|
|
|
| -#import "ARDCEODTURNClient.h"
|
| +#import "ARDTURNClient+Internal.h"
|
|
|
| #import "ARDUtilities.h"
|
| #import "RTCIceServer+JSON.h"
|
|
|
| // TODO(tkchin): move this to a configuration object.
|
| -static NSString *kTURNOriginURLString = @"https://apprtc.appspot.com";
|
| -static NSString *kARDCEODTURNClientErrorDomain = @"ARDCEODTURNClient";
|
| -static NSInteger kARDCEODTURNClientErrorBadResponse = -1;
|
| +static NSString *kTURNRefererURLString = @"https://appr.tc";
|
| +static NSString *kARDTURNClientErrorDomain = @"ARDTURNClient";
|
| +static NSInteger kARDTURNClientErrorBadResponse = -1;
|
|
|
| -@implementation ARDCEODTURNClient {
|
| +@implementation ARDTURNClient {
|
| NSURL *_url;
|
| }
|
|
|
| @@ -31,36 +31,56 @@ static NSInteger kARDCEODTURNClientErrorBadResponse = -1;
|
| }
|
|
|
| - (void)requestServersWithCompletionHandler:
|
| - (void (^)(NSArray *turnServers,
|
| - NSError *error))completionHandler {
|
| + (void (^)(NSArray *turnServers, NSError *error))completionHandler {
|
| +
|
| NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:_url];
|
| - // We need to set origin because TURN provider whitelists requests based on
|
| - // origin.
|
| - [request addValue:@"Mozilla/5.0" forHTTPHeaderField:@"user-agent"];
|
| - [request addValue:kTURNOriginURLString forHTTPHeaderField:@"origin"];
|
| [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) {
|
| - NSArray *turnServers = [NSArray array];
|
| - if (error) {
|
| - completionHandler(nil, error);
|
| - return;
|
| - }
|
| - NSDictionary *dict = [NSDictionary dictionaryWithJSONData:data];
|
| - turnServers = @[ [RTCIceServer serverFromCEODJSONDictionary:dict] ];
|
| - if (!turnServers) {
|
| - NSError *responseError =
|
| - [[NSError alloc] initWithDomain:kARDCEODTURNClientErrorDomain
|
| - code:kARDCEODTURNClientErrorBadResponse
|
| + 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(turnServers, responseError);
|
| - return;
|
| - }
|
| - completionHandler(turnServers, nil);
|
| - }];
|
| + }];
|
| + completionHandler(nil, responseError);
|
| + return;
|
| + }
|
| + completionHandler(turnServers, nil);
|
| + }];
|
| }
|
|
|
| @end
|
|
|