blob: b1be7fb7e3cb995353768041d15cca94e789cdf8 [file] [log] [blame]
Donald E Curtisa8736442015-08-05 15:48:13 -07001/*
2 * Copyright 2014 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
hjon79858f82016-03-13 22:08:26 -070011#import "RTCIceCandidate+JSON.h"
Donald E Curtisa8736442015-08-05 15:48:13 -070012
tkchin9eeb6242016-04-27 01:54:20 -070013#import "WebRTC/RTCLogging.h"
Donald E Curtisa8736442015-08-05 15:48:13 -070014
15static NSString const *kRTCICECandidateTypeKey = @"type";
16static NSString const *kRTCICECandidateTypeValue = @"candidate";
17static NSString const *kRTCICECandidateMidKey = @"id";
18static NSString const *kRTCICECandidateMLineIndexKey = @"label";
19static NSString const *kRTCICECandidateSdpKey = @"candidate";
Honghai Zhangda2ba4d2016-05-23 11:53:14 -070020static NSString const *kRTCICECandidatesTypeKey = @"candidates";
21
Donald E Curtisa8736442015-08-05 15:48:13 -070022
hjon79858f82016-03-13 22:08:26 -070023@implementation RTCIceCandidate (JSON)
Donald E Curtisa8736442015-08-05 15:48:13 -070024
hjon79858f82016-03-13 22:08:26 -070025+ (RTCIceCandidate *)candidateFromJSONDictionary:(NSDictionary *)dictionary {
Donald E Curtisa8736442015-08-05 15:48:13 -070026 NSString *mid = dictionary[kRTCICECandidateMidKey];
27 NSString *sdp = dictionary[kRTCICECandidateSdpKey];
28 NSNumber *num = dictionary[kRTCICECandidateMLineIndexKey];
29 NSInteger mLineIndex = [num integerValue];
hjon79858f82016-03-13 22:08:26 -070030 return [[RTCIceCandidate alloc] initWithSdp:sdp
31 sdpMLineIndex:mLineIndex
32 sdpMid:mid];
Donald E Curtisa8736442015-08-05 15:48:13 -070033}
34
Honghai Zhangda2ba4d2016-05-23 11:53:14 -070035+ (NSData *)JSONDataForIceCandidates:(NSArray<RTCIceCandidate *> *)candidates
36 withType:(NSString *)typeValue {
37 NSMutableArray *jsonCandidates =
38 [NSMutableArray arrayWithCapacity:candidates.count];
39 for (RTCIceCandidate *candidate in candidates) {
40 NSDictionary *jsonCandidate = [candidate JSONDictionary];
41 [jsonCandidates addObject:jsonCandidate];
42 }
43 NSDictionary *json = @{
44 kRTCICECandidateTypeKey : typeValue,
45 kRTCICECandidatesTypeKey : jsonCandidates
46 };
47 NSError *error = nil;
48 NSData *data =
49 [NSJSONSerialization dataWithJSONObject:json
50 options:NSJSONWritingPrettyPrinted
51 error:&error];
52 if (error) {
53 RTCLogError(@"Error serializing JSON: %@", error);
54 return nil;
55 }
56 return data;
57}
58
59+ (NSArray<RTCIceCandidate *> *)candidatesFromJSONDictionary:
60 (NSDictionary *)dictionary {
61 NSArray *jsonCandidates = dictionary[kRTCICECandidatesTypeKey];
62 NSMutableArray<RTCIceCandidate *> *candidates =
63 [NSMutableArray arrayWithCapacity:jsonCandidates.count];
64 for (NSDictionary *jsonCandidate in jsonCandidates) {
65 RTCIceCandidate *candidate =
66 [RTCIceCandidate candidateFromJSONDictionary:jsonCandidate];
67 [candidates addObject:candidate];
68 }
69 return candidates;
70}
71
Donald E Curtisa8736442015-08-05 15:48:13 -070072- (NSData *)JSONData {
73 NSDictionary *json = @{
74 kRTCICECandidateTypeKey : kRTCICECandidateTypeValue,
75 kRTCICECandidateMLineIndexKey : @(self.sdpMLineIndex),
76 kRTCICECandidateMidKey : self.sdpMid,
77 kRTCICECandidateSdpKey : self.sdp
78 };
79 NSError *error = nil;
80 NSData *data =
81 [NSJSONSerialization dataWithJSONObject:json
82 options:NSJSONWritingPrettyPrinted
83 error:&error];
84 if (error) {
85 RTCLogError(@"Error serializing JSON: %@", error);
86 return nil;
87 }
88 return data;
89}
90
Honghai Zhangda2ba4d2016-05-23 11:53:14 -070091- (NSDictionary *)JSONDictionary{
92 NSDictionary *json = @{
93 kRTCICECandidateMLineIndexKey : @(self.sdpMLineIndex),
94 kRTCICECandidateMidKey : self.sdpMid,
95 kRTCICECandidateSdpKey : self.sdp
96 };
97 return json;
98}
99
Donald E Curtisa8736442015-08-05 15:48:13 -0700100@end