3e9ad26112
Moved parsing code to JSON categories for the relevant objects. No longer prefer ISAC as audio codec. BUG= R=glaznev@webrtc.org Review URL: https://webrtc-codereview.appspot.com/31989005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7755 4adac7df-926f-26a2-2b94-8c16560cd09d
131 lines
5.1 KiB
Objective-C
131 lines
5.1 KiB
Objective-C
/*
|
|
* libjingle
|
|
* Copyright 2014, Google Inc.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
* 3. The name of the author may not be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#import "ARDSignalingParams.h"
|
|
|
|
#import "ARDUtilities.h"
|
|
#import "RTCICEServer+JSON.h"
|
|
#import "RTCMediaConstraints+JSON.h"
|
|
|
|
static NSString const *kARDSignalingParamsErrorKey = @"error";
|
|
static NSString const *kARDSignalingParamsErrorMessagesKey = @"error_messages";
|
|
static NSString const *kARDSignalingParamsInitiatorKey = @"initiator";
|
|
static NSString const *kARDSignalingParamsPeerConnectionConfigKey =
|
|
@"pc_config";
|
|
static NSString const *kARDSignalingParamsICEServersKey = @"iceServers";
|
|
static NSString const *kARDSignalingParamsMediaConstraintsKey =
|
|
@"media_constraints";
|
|
static NSString const *kARDSignalingParamsMediaConstraintsVideoKey =
|
|
@"video";
|
|
static NSString const *kARDSignalingParamsTokenKey = @"token";
|
|
static NSString const *kARDSignalingParamsTurnRequestUrlKey = @"turn_url";
|
|
|
|
@interface ARDSignalingParams ()
|
|
|
|
@property(nonatomic, strong) NSArray *errorMessages;
|
|
@property(nonatomic, strong) RTCMediaConstraints *offerConstraints;
|
|
@property(nonatomic, strong) RTCMediaConstraints *mediaConstraints;
|
|
@property(nonatomic, strong) NSMutableArray *iceServers;
|
|
@property(nonatomic, strong) NSURL *signalingServerURL;
|
|
@property(nonatomic, strong) NSURL *turnRequestURL;
|
|
@property(nonatomic, strong) NSString *channelToken;
|
|
|
|
@end
|
|
|
|
@implementation ARDSignalingParams
|
|
|
|
@synthesize errorMessages = _errorMessages;
|
|
@synthesize isInitiator = _isInitiator;
|
|
@synthesize offerConstraints = _offerConstraints;
|
|
@synthesize mediaConstraints = _mediaConstraints;
|
|
@synthesize iceServers = _iceServers;
|
|
@synthesize signalingServerURL = _signalingServerURL;
|
|
|
|
+ (ARDSignalingParams *)paramsFromJSONData:(NSData *)data {
|
|
NSDictionary *paramsJSON = [NSDictionary dictionaryWithJSONData:data];
|
|
if (!paramsJSON) {
|
|
return nil;
|
|
}
|
|
ARDSignalingParams *params = [[ARDSignalingParams alloc] init];
|
|
|
|
// Parse errors.
|
|
BOOL hasError = NO;
|
|
NSArray *errorMessages = paramsJSON[kARDSignalingParamsErrorMessagesKey];
|
|
if (errorMessages.count > 0) {
|
|
params.errorMessages = errorMessages;
|
|
return params;
|
|
}
|
|
|
|
// Parse ICE servers.
|
|
NSString *peerConnectionConfigString =
|
|
paramsJSON[kARDSignalingParamsPeerConnectionConfigKey];
|
|
NSDictionary *peerConnectionConfig =
|
|
[NSDictionary dictionaryWithJSONString:peerConnectionConfigString];
|
|
NSArray *iceServerJSONArray =
|
|
peerConnectionConfig[kARDSignalingParamsICEServersKey];
|
|
NSMutableArray *iceServers = [NSMutableArray array];
|
|
for (NSDictionary *iceServerJSON in iceServerJSONArray) {
|
|
RTCICEServer *iceServer =
|
|
[RTCICEServer serverFromJSONDictionary:iceServerJSON];
|
|
[iceServers addObject:iceServer];
|
|
}
|
|
params.iceServers = iceServers;
|
|
|
|
// Parse initiator.
|
|
BOOL isInitiator = [paramsJSON[kARDSignalingParamsInitiatorKey] boolValue];
|
|
params.isInitiator = isInitiator;
|
|
|
|
// Parse video constraints.
|
|
RTCMediaConstraints *videoConstraints = nil;
|
|
NSString *mediaConstraintsJSONString =
|
|
paramsJSON[kARDSignalingParamsMediaConstraintsKey];
|
|
NSDictionary *mediaConstraintsJSON =
|
|
[NSDictionary dictionaryWithJSONString:mediaConstraintsJSONString];
|
|
id videoJSON =
|
|
mediaConstraintsJSON[kARDSignalingParamsMediaConstraintsVideoKey];
|
|
if ([videoJSON isKindOfClass:[NSDictionary class]]) {
|
|
videoConstraints =
|
|
[RTCMediaConstraints constraintsFromJSONDictionary:videoJSON];
|
|
} else if ([videoJSON isKindOfClass:[NSNumber class]] &&
|
|
[videoJSON boolValue]) {
|
|
videoConstraints = [[RTCMediaConstraints alloc] init];
|
|
}
|
|
params.mediaConstraints = videoConstraints;
|
|
|
|
// Parse channel token.
|
|
NSString *token = paramsJSON[kARDSignalingParamsTokenKey];
|
|
params.channelToken = token;
|
|
|
|
// Parse turn request url.
|
|
params.turnRequestURL =
|
|
[NSURL URLWithString:paramsJSON[kARDSignalingParamsTurnRequestUrlKey]];
|
|
|
|
return params;
|
|
}
|
|
|
|
@end
|