OLD | NEW |
| (Empty) |
1 /* | |
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 | |
11 #import "RTCIceCandidate+JSON.h" | |
12 | |
13 #import "WebRTC/RTCLogging.h" | |
14 | |
15 static NSString const *kRTCICECandidateTypeKey = @"type"; | |
16 static NSString const *kRTCICECandidateTypeValue = @"candidate"; | |
17 static NSString const *kRTCICECandidateMidKey = @"id"; | |
18 static NSString const *kRTCICECandidateMLineIndexKey = @"label"; | |
19 static NSString const *kRTCICECandidateSdpKey = @"candidate"; | |
20 static NSString const *kRTCICECandidatesTypeKey = @"candidates"; | |
21 | |
22 | |
23 @implementation RTCIceCandidate (JSON) | |
24 | |
25 + (RTCIceCandidate *)candidateFromJSONDictionary:(NSDictionary *)dictionary { | |
26 NSString *mid = dictionary[kRTCICECandidateMidKey]; | |
27 NSString *sdp = dictionary[kRTCICECandidateSdpKey]; | |
28 NSNumber *num = dictionary[kRTCICECandidateMLineIndexKey]; | |
29 NSInteger mLineIndex = [num integerValue]; | |
30 return [[RTCIceCandidate alloc] initWithSdp:sdp | |
31 sdpMLineIndex:mLineIndex | |
32 sdpMid:mid]; | |
33 } | |
34 | |
35 + (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 | |
72 - (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 | |
91 - (NSDictionary *)JSONDictionary{ | |
92 NSDictionary *json = @{ | |
93 kRTCICECandidateMLineIndexKey : @(self.sdpMLineIndex), | |
94 kRTCICECandidateMidKey : self.sdpMid, | |
95 kRTCICECandidateSdpKey : self.sdp | |
96 }; | |
97 return json; | |
98 } | |
99 | |
100 @end | |
OLD | NEW |