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

Side by Side Diff: webrtc/pc/webrtcsdp.cc

Issue 2690943011: Use the same draft version in SDP data channel answers as used in the offer. (Closed)
Patch Set: Fix variable names in media session tests and add some comments. Created 3 years, 10 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 | « webrtc/pc/mediasession_unittest.cc ('k') | webrtc/pc/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 * 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 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 typedef std::vector<SsrcGroup> SsrcGroupVec; 227 typedef std::vector<SsrcGroup> SsrcGroupVec;
228 228
229 template <class T> 229 template <class T>
230 static void AddFmtpLine(const T& codec, std::string* message); 230 static void AddFmtpLine(const T& codec, std::string* message);
231 static void BuildMediaDescription(const ContentInfo* content_info, 231 static void BuildMediaDescription(const ContentInfo* content_info,
232 const TransportInfo* transport_info, 232 const TransportInfo* transport_info,
233 const MediaType media_type, 233 const MediaType media_type,
234 const std::vector<Candidate>& candidates, 234 const std::vector<Candidate>& candidates,
235 bool unified_plan_sdp, 235 bool unified_plan_sdp,
236 std::string* message); 236 std::string* message);
237 static void BuildSctpContentAttributes(std::string* message, int sctp_port); 237 static void BuildSctpContentAttributes(std::string* message,
238 int sctp_port,
239 bool use_sctpmap);
238 static void BuildRtpContentAttributes(const MediaContentDescription* media_desc, 240 static void BuildRtpContentAttributes(const MediaContentDescription* media_desc,
239 const MediaType media_type, 241 const MediaType media_type,
240 bool unified_plan_sdp, 242 bool unified_plan_sdp,
241 std::string* message); 243 std::string* message);
242 static void BuildRtpMap(const MediaContentDescription* media_desc, 244 static void BuildRtpMap(const MediaContentDescription* media_desc,
243 const MediaType media_type, 245 const MediaType media_type,
244 std::string* message); 246 std::string* message);
245 static void BuildCandidate(const std::vector<Candidate>& candidates, 247 static void BuildCandidate(const std::vector<Candidate>& candidates,
246 bool include_ufrag, 248 bool include_ufrag,
247 std::string* message); 249 std::string* message);
(...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 it != audio_desc->codecs().end(); ++it) { 1270 it != audio_desc->codecs().end(); ++it) {
1269 fmt.append(" "); 1271 fmt.append(" ");
1270 fmt.append(rtc::ToString<int>(it->id)); 1272 fmt.append(rtc::ToString<int>(it->id));
1271 } 1273 }
1272 } else if (media_type == cricket::MEDIA_TYPE_DATA) { 1274 } else if (media_type == cricket::MEDIA_TYPE_DATA) {
1273 const DataContentDescription* data_desc = 1275 const DataContentDescription* data_desc =
1274 static_cast<const DataContentDescription*>(media_desc); 1276 static_cast<const DataContentDescription*>(media_desc);
1275 if (IsDtlsSctp(media_desc->protocol())) { 1277 if (IsDtlsSctp(media_desc->protocol())) {
1276 fmt.append(" "); 1278 fmt.append(" ");
1277 1279
1278 for (std::vector<cricket::DataCodec>::const_iterator it = 1280 if (data_desc->use_sctpmap()) {
1279 data_desc->codecs().begin(); 1281 for (std::vector<cricket::DataCodec>::const_iterator it =
1280 it != data_desc->codecs().end(); ++it) { 1282 data_desc->codecs().begin();
1281 if (cricket::CodecNamesEq(it->name, cricket::kGoogleSctpDataCodecName) 1283 it != data_desc->codecs().end(); ++it) {
1282 && it->GetParam(cricket::kCodecParamPort, &sctp_port)) { 1284 if (cricket::CodecNamesEq(it->name,
1283 break; 1285 cricket::kGoogleSctpDataCodecName) &&
1286 it->GetParam(cricket::kCodecParamPort, &sctp_port)) {
1287 break;
1288 }
1284 } 1289 }
1290
1291 fmt.append(rtc::ToString<int>(sctp_port));
1292 } else {
1293 fmt.append(kDefaultSctpmapProtocol);
1285 } 1294 }
1286
1287 fmt.append(rtc::ToString<int>(sctp_port));
1288 } else { 1295 } else {
1289 for (std::vector<cricket::DataCodec>::const_iterator it = 1296 for (std::vector<cricket::DataCodec>::const_iterator it =
1290 data_desc->codecs().begin(); 1297 data_desc->codecs().begin();
1291 it != data_desc->codecs().end(); ++it) { 1298 it != data_desc->codecs().end(); ++it) {
1292 fmt.append(" "); 1299 fmt.append(" ");
1293 fmt.append(rtc::ToString<int>(it->id)); 1300 fmt.append(rtc::ToString<int>(it->id));
1294 } 1301 }
1295 } 1302 }
1296 } 1303 }
1297 // The fmt must never be empty. If no codecs are found, set the fmt attribute 1304 // The fmt must never be empty. If no codecs are found, set the fmt attribute
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 1407
1401 // RFC 3388 1408 // RFC 3388
1402 // mid-attribute = "a=mid:" identification-tag 1409 // mid-attribute = "a=mid:" identification-tag
1403 // identification-tag = token 1410 // identification-tag = token
1404 // Use the content name as the mid identification-tag. 1411 // Use the content name as the mid identification-tag.
1405 InitAttrLine(kAttributeMid, &os); 1412 InitAttrLine(kAttributeMid, &os);
1406 os << kSdpDelimiterColon << content_info->name; 1413 os << kSdpDelimiterColon << content_info->name;
1407 AddLine(os.str(), message); 1414 AddLine(os.str(), message);
1408 1415
1409 if (IsDtlsSctp(media_desc->protocol())) { 1416 if (IsDtlsSctp(media_desc->protocol())) {
1410 BuildSctpContentAttributes(message, sctp_port); 1417 const DataContentDescription* data_desc =
1418 static_cast<const DataContentDescription*>(media_desc);
1419 bool use_sctpmap = data_desc->use_sctpmap();
1420 BuildSctpContentAttributes(message, sctp_port, use_sctpmap);
1411 } else if (IsRtp(media_desc->protocol())) { 1421 } else if (IsRtp(media_desc->protocol())) {
1412 BuildRtpContentAttributes(media_desc, media_type, unified_plan_sdp, 1422 BuildRtpContentAttributes(media_desc, media_type, unified_plan_sdp,
1413 message); 1423 message);
1414 } 1424 }
1415 } 1425 }
1416 1426
1417 void BuildSctpContentAttributes(std::string* message, int sctp_port) { 1427 void BuildSctpContentAttributes(std::string* message,
1418 // draft-ietf-mmusic-sctp-sdp-04 1428 int sctp_port,
1419 // a=sctpmap:sctpmap-number protocol [streams] 1429 bool use_sctpmap) {
1420 // TODO(lally): switch this over to mmusic-sctp-sdp-12 (or later), with
1421 // 'a=sctp-port:'
1422 std::ostringstream os; 1430 std::ostringstream os;
1423 InitAttrLine(kAttributeSctpmap, &os); 1431 if (use_sctpmap) {
1424 os << kSdpDelimiterColon << sctp_port << kSdpDelimiterSpace 1432 // draft-ietf-mmusic-sctp-sdp-04
1425 << kDefaultSctpmapProtocol << kSdpDelimiterSpace 1433 // a=sctpmap:sctpmap-number protocol [streams]
1426 << cricket::kMaxSctpStreams; 1434 InitAttrLine(kAttributeSctpmap, &os);
1435 os << kSdpDelimiterColon << sctp_port << kSdpDelimiterSpace
1436 << kDefaultSctpmapProtocol << kSdpDelimiterSpace
1437 << cricket::kMaxSctpStreams;
1438 } else {
1439 // draft-ietf-mmusic-sctp-sdp-23
1440 // a=sctp-port:<port>
1441 InitAttrLine(kAttributeSctpPort, &os);
1442 os << kSdpDelimiterColon << sctp_port;
1443 // TODO(zstein): emit max-message-size here
1444 }
1427 AddLine(os.str(), message); 1445 AddLine(os.str(), message);
1428 } 1446 }
1429 1447
1430 // If unified_plan_sdp is true, will use "a=msid". 1448 // If unified_plan_sdp is true, will use "a=msid".
1431 void BuildRtpContentAttributes(const MediaContentDescription* media_desc, 1449 void BuildRtpContentAttributes(const MediaContentDescription* media_desc,
1432 const MediaType media_type, 1450 const MediaType media_type,
1433 bool unified_plan_sdp, 1451 bool unified_plan_sdp,
1434 std::string* message) { 1452 std::string* message) {
1435 std::ostringstream os; 1453 std::ostringstream os;
1436 // RFC 5285 1454 // RFC 5285
(...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after
2284 2302
2285 // Zero or more media descriptions 2303 // Zero or more media descriptions
2286 // RFC 4566 2304 // RFC 4566
2287 // m=<media> <port> <proto> <fmt> 2305 // m=<media> <port> <proto> <fmt>
2288 while (GetLineWithType(message, pos, &line, kLineTypeMedia)) { 2306 while (GetLineWithType(message, pos, &line, kLineTypeMedia)) {
2289 ++mline_index; 2307 ++mline_index;
2290 2308
2291 std::vector<std::string> fields; 2309 std::vector<std::string> fields;
2292 rtc::split(line.substr(kLinePrefixLength), 2310 rtc::split(line.substr(kLinePrefixLength),
2293 kSdpDelimiterSpace, &fields); 2311 kSdpDelimiterSpace, &fields);
2312
2294 const size_t expected_min_fields = 4; 2313 const size_t expected_min_fields = 4;
2295 if (fields.size() < expected_min_fields) { 2314 if (fields.size() < expected_min_fields) {
2296 return ParseFailedExpectMinFieldNum(line, expected_min_fields, error); 2315 return ParseFailedExpectMinFieldNum(line, expected_min_fields, error);
2297 } 2316 }
2298 bool port_rejected = false; 2317 bool port_rejected = false;
2299 // RFC 3264 2318 // RFC 3264
2300 // To reject an offered stream, the port number in the corresponding stream 2319 // To reject an offered stream, the port number in the corresponding stream
2301 // in the answer MUST be set to zero. 2320 // in the answer MUST be set to zero.
2302 if (fields[1] == kMediaPortRejected) { 2321 if (fields[1] == kMediaPortRejected) {
2303 port_rejected = true; 2322 port_rejected = true;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2344 payload_types, pos, &content_name, &bundle_only, &transport, 2363 payload_types, pos, &content_name, &bundle_only, &transport,
2345 candidates, error)); 2364 candidates, error));
2346 } else if (HasAttribute(line, kMediaTypeData)) { 2365 } else if (HasAttribute(line, kMediaTypeData)) {
2347 DataContentDescription* data_desc = 2366 DataContentDescription* data_desc =
2348 ParseContentDescription<DataContentDescription>( 2367 ParseContentDescription<DataContentDescription>(
2349 message, cricket::MEDIA_TYPE_DATA, mline_index, protocol, 2368 message, cricket::MEDIA_TYPE_DATA, mline_index, protocol,
2350 payload_types, pos, &content_name, &bundle_only, &transport, 2369 payload_types, pos, &content_name, &bundle_only, &transport,
2351 candidates, error); 2370 candidates, error);
2352 content.reset(data_desc); 2371 content.reset(data_desc);
2353 2372
2354 int p; 2373 if (data_desc && IsDtlsSctp(protocol)) {
2355 if (data_desc && IsDtlsSctp(protocol) && rtc::FromString(fields[3], &p)) { 2374 int p;
2356 if (!AddSctpDataCodec(data_desc, p)) 2375 if (rtc::FromString(fields[3], &p)) {
2357 return false; 2376 if (!AddSctpDataCodec(data_desc, p)) {
2377 return false;
2378 }
2379 } else if (fields[3] == kDefaultSctpmapProtocol) {
2380 data_desc->set_use_sctpmap(false);
2381 }
2358 } 2382 }
2359 } else { 2383 } else {
2360 LOG(LS_WARNING) << "Unsupported media type: " << line; 2384 LOG(LS_WARNING) << "Unsupported media type: " << line;
2361 continue; 2385 continue;
2362 } 2386 }
2363 if (!content.get()) { 2387 if (!content.get()) {
2364 // ParseContentDescription returns NULL if failed. 2388 // ParseContentDescription returns NULL if failed.
2365 return false; 2389 return false;
2366 } 2390 }
2367 2391
(...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after
3212 UpdateCodec<AudioContentDescription, cricket::AudioCodec>( 3236 UpdateCodec<AudioContentDescription, cricket::AudioCodec>(
3213 media_desc, payload_type, feedback_param); 3237 media_desc, payload_type, feedback_param);
3214 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { 3238 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) {
3215 UpdateCodec<VideoContentDescription, cricket::VideoCodec>( 3239 UpdateCodec<VideoContentDescription, cricket::VideoCodec>(
3216 media_desc, payload_type, feedback_param); 3240 media_desc, payload_type, feedback_param);
3217 } 3241 }
3218 return true; 3242 return true;
3219 } 3243 }
3220 3244
3221 } // namespace webrtc 3245 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/pc/mediasession_unittest.cc ('k') | webrtc/pc/webrtcsdp_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698