OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2011 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1204 if (!GetValue(fields[0], kAttributeExtmap, &value_direction, error)) { | 1204 if (!GetValue(fields[0], kAttributeExtmap, &value_direction, error)) { |
1205 return false; | 1205 return false; |
1206 } | 1206 } |
1207 std::vector<std::string> sub_fields; | 1207 std::vector<std::string> sub_fields; |
1208 rtc::split(value_direction, kSdpDelimiterSlash, &sub_fields); | 1208 rtc::split(value_direction, kSdpDelimiterSlash, &sub_fields); |
1209 int value = 0; | 1209 int value = 0; |
1210 if (!GetValueFromString(line, sub_fields[0], &value, error)) { | 1210 if (!GetValueFromString(line, sub_fields[0], &value, error)) { |
1211 return false; | 1211 return false; |
1212 } | 1212 } |
1213 | 1213 |
1214 *extmap = RtpExtension(uri, value); | 1214 bool encrypted = false; |
| 1215 if (uri == RtpExtension::kEncryptHeaderExtensionsUri) { |
| 1216 // RFC 6904 |
| 1217 // a=extmap:<value["/"<direction>] urn:ietf:params:rtp-hdrext:encrypt \ |
| 1218 // <URI> <extensionattributes> |
| 1219 const size_t expected_min_fields_encrypted = expected_min_fields + 1; |
| 1220 if (fields.size() < expected_min_fields_encrypted) { |
| 1221 return ParseFailedExpectMinFieldNum(line, expected_min_fields_encrypted, |
| 1222 error); |
| 1223 } |
| 1224 |
| 1225 encrypted = true; |
| 1226 uri = fields[2]; |
| 1227 if (uri == RtpExtension::kEncryptHeaderExtensionsUri) { |
| 1228 return ParseFailed(line, "Recursive encrypted header.", error); |
| 1229 } |
| 1230 } |
| 1231 |
| 1232 *extmap = RtpExtension(uri, value, encrypted); |
1215 return true; | 1233 return true; |
1216 } | 1234 } |
1217 | 1235 |
1218 void BuildMediaDescription(const ContentInfo* content_info, | 1236 void BuildMediaDescription(const ContentInfo* content_info, |
1219 const TransportInfo* transport_info, | 1237 const TransportInfo* transport_info, |
1220 const MediaType media_type, | 1238 const MediaType media_type, |
1221 const std::vector<Candidate>& candidates, | 1239 const std::vector<Candidate>& candidates, |
1222 bool unified_plan_sdp, | 1240 bool unified_plan_sdp, |
1223 std::string* message) { | 1241 std::string* message) { |
1224 RTC_DCHECK(message != NULL); | 1242 RTC_DCHECK(message != NULL); |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1447 void BuildRtpContentAttributes(const MediaContentDescription* media_desc, | 1465 void BuildRtpContentAttributes(const MediaContentDescription* media_desc, |
1448 const MediaType media_type, | 1466 const MediaType media_type, |
1449 bool unified_plan_sdp, | 1467 bool unified_plan_sdp, |
1450 std::string* message) { | 1468 std::string* message) { |
1451 std::ostringstream os; | 1469 std::ostringstream os; |
1452 // RFC 5285 | 1470 // RFC 5285 |
1453 // a=extmap:<value>["/"<direction>] <URI> <extensionattributes> | 1471 // a=extmap:<value>["/"<direction>] <URI> <extensionattributes> |
1454 // The definitions MUST be either all session level or all media level. This | 1472 // The definitions MUST be either all session level or all media level. This |
1455 // implementation uses all media level. | 1473 // implementation uses all media level. |
1456 for (size_t i = 0; i < media_desc->rtp_header_extensions().size(); ++i) { | 1474 for (size_t i = 0; i < media_desc->rtp_header_extensions().size(); ++i) { |
| 1475 const RtpExtension& extension = media_desc->rtp_header_extensions()[i]; |
1457 InitAttrLine(kAttributeExtmap, &os); | 1476 InitAttrLine(kAttributeExtmap, &os); |
1458 os << kSdpDelimiterColon << media_desc->rtp_header_extensions()[i].id | 1477 os << kSdpDelimiterColon << extension.id; |
1459 << kSdpDelimiterSpace << media_desc->rtp_header_extensions()[i].uri; | 1478 if (extension.encrypted) { |
| 1479 os << kSdpDelimiterSpace << RtpExtension::kEncryptHeaderExtensionsUri; |
| 1480 } |
| 1481 os << kSdpDelimiterSpace << extension.uri; |
1460 AddLine(os.str(), message); | 1482 AddLine(os.str(), message); |
1461 } | 1483 } |
1462 | 1484 |
1463 // RFC 3264 | 1485 // RFC 3264 |
1464 // a=sendrecv || a=sendonly || a=sendrecv || a=inactive | 1486 // a=sendrecv || a=sendonly || a=sendrecv || a=inactive |
1465 switch (media_desc->direction()) { | 1487 switch (media_desc->direction()) { |
1466 case cricket::MD_INACTIVE: | 1488 case cricket::MD_INACTIVE: |
1467 InitAttrLine(kAttributeInactive, &os); | 1489 InitAttrLine(kAttributeInactive, &os); |
1468 break; | 1490 break; |
1469 case cricket::MD_SENDONLY: | 1491 case cricket::MD_SENDONLY: |
(...skipping 1764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3234 UpdateCodec<AudioContentDescription, cricket::AudioCodec>( | 3256 UpdateCodec<AudioContentDescription, cricket::AudioCodec>( |
3235 media_desc, payload_type, feedback_param); | 3257 media_desc, payload_type, feedback_param); |
3236 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { | 3258 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { |
3237 UpdateCodec<VideoContentDescription, cricket::VideoCodec>( | 3259 UpdateCodec<VideoContentDescription, cricket::VideoCodec>( |
3238 media_desc, payload_type, feedback_param); | 3260 media_desc, payload_type, feedback_param); |
3239 } | 3261 } |
3240 return true; | 3262 return true; |
3241 } | 3263 } |
3242 | 3264 |
3243 } // namespace webrtc | 3265 } // namespace webrtc |
OLD | NEW |