Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Side by Side Diff: talk/app/webrtc/webrtcsdp.cc

Issue 1196403004: Prevent JS from bypassing RTP data channel bandwidth limitation. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Removing accidentally copied line Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | talk/app/webrtc/webrtcsdp_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 1256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1267 transport_info->description.identity_fingerprint.get() : NULL; 1267 transport_info->description.identity_fingerprint.get() : NULL;
1268 1268
1269 // Add the m and c lines. 1269 // Add the m and c lines.
1270 InitLine(kLineTypeMedia, type, &os); 1270 InitLine(kLineTypeMedia, type, &os);
1271 os << " " << port << " " << media_desc->protocol() << fmt; 1271 os << " " << port << " " << media_desc->protocol() << fmt;
1272 std::string mline = os.str(); 1272 std::string mline = os.str();
1273 UpdateMediaDefaultDestination(candidates, mline, message); 1273 UpdateMediaDefaultDestination(candidates, mline, message);
1274 1274
1275 // RFC 4566 1275 // RFC 4566
1276 // b=AS:<bandwidth> 1276 // b=AS:<bandwidth>
1277 // We should always use the default bandwidth for RTP-based data 1277 if (media_desc->bandwidth() >= 1000) {
1278 // channels. Don't allow SDP to set the bandwidth, because that
1279 // would give JS the opportunity to "break the Internet".
1280 // TODO(pthatcher): But we need to temporarily allow the SDP to control
1281 // this for backwards-compatibility. Once we don't need that any
1282 // more, remove this.
1283 bool support_dc_sdp_bandwidth_temporarily = true;
1284 if (media_desc->bandwidth() >= 1000 &&
1285 (media_type != cricket::MEDIA_TYPE_DATA ||
1286 support_dc_sdp_bandwidth_temporarily)) {
1287 InitLine(kLineTypeSessionBandwidth, kApplicationSpecificMaximum, &os); 1278 InitLine(kLineTypeSessionBandwidth, kApplicationSpecificMaximum, &os);
1288 os << kSdpDelimiterColon << (media_desc->bandwidth() / 1000); 1279 os << kSdpDelimiterColon << (media_desc->bandwidth() / 1000);
1289 AddLine(os.str(), message); 1280 AddLine(os.str(), message);
1290 } 1281 }
1291 1282
1292 // Add the a=rtcp line. 1283 // Add the a=rtcp line.
1293 if (IsRtp(media_desc->protocol())) { 1284 if (IsRtp(media_desc->protocol())) {
1294 std::string rtcp_line = GetRtcpLine(candidates); 1285 std::string rtcp_line = GetRtcpLine(candidates);
1295 if (!rtcp_line.empty()) { 1286 if (!rtcp_line.empty()) {
1296 AddLine(rtcp_line, message); 1287 AddLine(rtcp_line, message);
(...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after
2242 message, cricket::MEDIA_TYPE_DATA, mline_index, protocol, 2233 message, cricket::MEDIA_TYPE_DATA, mline_index, protocol,
2243 codec_preference, pos, &content_name, 2234 codec_preference, pos, &content_name,
2244 &transport, candidates, error); 2235 &transport, candidates, error);
2245 content.reset(data_desc); 2236 content.reset(data_desc);
2246 2237
2247 int p; 2238 int p;
2248 if (data_desc && IsDtlsSctp(protocol) && rtc::FromString(fields[3], &p)) { 2239 if (data_desc && IsDtlsSctp(protocol) && rtc::FromString(fields[3], &p)) {
2249 if (!AddSctpDataCodec(data_desc, p)) 2240 if (!AddSctpDataCodec(data_desc, p))
2250 return false; 2241 return false;
2251 } 2242 }
2252
2253 // We should always use the default bandwidth for RTP-based data
2254 // channels. Don't allow SDP to set the bandwidth, because that
2255 // would give JS the opportunity to "break the Internet".
2256 // TODO(pthatcher): But we need to temporarily allow the SDP to control
2257 // this for backwards-compatibility. Once we don't need that any
2258 // more, remove this.
2259 bool support_dc_sdp_bandwidth_temporarily = true;
2260 if (content.get() && !support_dc_sdp_bandwidth_temporarily) {
2261 content->set_bandwidth(cricket::kAutoBandwidth);
2262 }
2263 } else { 2243 } else {
2264 LOG(LS_WARNING) << "Unsupported media type: " << line; 2244 LOG(LS_WARNING) << "Unsupported media type: " << line;
2265 continue; 2245 continue;
2266 } 2246 }
2267 if (!content.get()) { 2247 if (!content.get()) {
2268 // ParseContentDescription returns NULL if failed. 2248 // ParseContentDescription returns NULL if failed.
2269 return false; 2249 return false;
2270 } 2250 }
2271 2251
2272 if (IsRtp(protocol)) { 2252 if (IsRtp(protocol)) {
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
2510 if (IsLineType(line, kLineTypeSessionBandwidth)) { 2490 if (IsLineType(line, kLineTypeSessionBandwidth)) {
2511 std::string bandwidth; 2491 std::string bandwidth;
2512 if (HasAttribute(line, kApplicationSpecificMaximum)) { 2492 if (HasAttribute(line, kApplicationSpecificMaximum)) {
2513 if (!GetValue(line, kApplicationSpecificMaximum, &bandwidth, error)) { 2493 if (!GetValue(line, kApplicationSpecificMaximum, &bandwidth, error)) {
2514 return false; 2494 return false;
2515 } else { 2495 } else {
2516 int b = 0; 2496 int b = 0;
2517 if (!GetValueFromString(line, bandwidth, &b, error)) { 2497 if (!GetValueFromString(line, bandwidth, &b, error)) {
2518 return false; 2498 return false;
2519 } 2499 }
2500 // We should never use more than the default bandwidth for RTP-based
2501 // data channels. Don't allow SDP to set the bandwidth, because
2502 // that would give JS the opportunity to "break the Internet".
pthatcher1 2015/06/24 20:01:56 Please reference the bug URL here. Just say "See
Taylor Brandstetter 2015/06/24 21:41:24 Done.
2503 if (media_type == cricket::MEDIA_TYPE_DATA &&
2504 b > cricket::kDataMaxBandwidth / 1000) {
pthatcher1 2015/06/24 20:01:56 && IsRtp(media_desc->protocol())
Taylor Brandstetter 2015/06/24 21:41:24 Done.
2505 std::ostringstream description;
2506 description << "SDP data bandwidth must not exceed "
pthatcher1 2015/06/24 20:01:57 A more accurate message would be "RTP-based data c
Taylor Brandstetter 2015/06/24 21:41:24 Done.
2507 << cricket::kDataMaxBandwidth / 1000 << "kbps.";
2508 return ParseFailed(line, description.str(), error);
2509 }
2520 media_desc->set_bandwidth(b * 1000); 2510 media_desc->set_bandwidth(b * 1000);
2521 } 2511 }
2522 } 2512 }
2523 continue; 2513 continue;
2524 } 2514 }
2525 2515
2526 if (!IsLineType(line, kLineTypeAttributes)) { 2516 if (!IsLineType(line, kLineTypeAttributes)) {
2527 // TODO: Handle other lines if needed. 2517 // TODO: Handle other lines if needed.
2528 LOG(LS_INFO) << "Ignored line: " << line; 2518 LOG(LS_INFO) << "Ignored line: " << line;
2529 continue; 2519 continue;
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
3107 UpdateCodec<AudioContentDescription, cricket::AudioCodec>( 3097 UpdateCodec<AudioContentDescription, cricket::AudioCodec>(
3108 media_desc, payload_type, feedback_param); 3098 media_desc, payload_type, feedback_param);
3109 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { 3099 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) {
3110 UpdateCodec<VideoContentDescription, cricket::VideoCodec>( 3100 UpdateCodec<VideoContentDescription, cricket::VideoCodec>(
3111 media_desc, payload_type, feedback_param); 3101 media_desc, payload_type, feedback_param);
3112 } 3102 }
3113 return true; 3103 return true;
3114 } 3104 }
3115 3105
3116 } // namespace webrtc 3106 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | talk/app/webrtc/webrtcsdp_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698