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

Side by Side Diff: webrtc/media/sctp/sctpdataengine.cc

Issue 2254003002: Fixing off-by-one error with max SCTP id. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Removing unneeded parentheses. Created 4 years, 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 // TODO(ldixon): Consider turning this on/off. 277 // TODO(ldixon): Consider turning this on/off.
278 // Add a blackhole sysctl. Setting it to 1 results in no ABORTs 278 // Add a blackhole sysctl. Setting it to 1 results in no ABORTs
279 // being sent in response to INITs, setting it to 2 results 279 // being sent in response to INITs, setting it to 2 results
280 // in no ABORTs being sent for received OOTB packets. 280 // in no ABORTs being sent for received OOTB packets.
281 // This is similar to the TCP sysctl. 281 // This is similar to the TCP sysctl.
282 // 282 //
283 // See: http://lakerest.net/pipermail/sctp-coders/2012-January/009438.html 283 // See: http://lakerest.net/pipermail/sctp-coders/2012-January/009438.html
284 // See: http://svnweb.freebsd.org/base?view=revision&revision=229805 284 // See: http://svnweb.freebsd.org/base?view=revision&revision=229805
285 // usrsctp_sysctl_set_sctp_blackhole(2); 285 // usrsctp_sysctl_set_sctp_blackhole(2);
286 286
287 // Set the number of default outgoing streams. This is the number we'll 287 // Set the number of default outgoing streams. This is the number we'll
288 // send in the SCTP INIT message. The 'appropriate default' in the 288 // send in the SCTP INIT message.
289 // second paragraph of 289 usrsctp_sysctl_set_sctp_nr_outgoing_streams_default(kMaxSctpStreams);
290 // http://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-05#section-6.2
291 // is kMaxSctpSid.
292 usrsctp_sysctl_set_sctp_nr_outgoing_streams_default(kMaxSctpSid);
293 } 290 }
294 291
295 void UninitializeUsrSctp() { 292 void UninitializeUsrSctp() {
296 LOG(LS_INFO) << __FUNCTION__; 293 LOG(LS_INFO) << __FUNCTION__;
297 // usrsctp_finish() may fail if it's called too soon after the channels are 294 // usrsctp_finish() may fail if it's called too soon after the channels are
298 // closed. Wait and try again until it succeeds for up to 3 seconds. 295 // closed. Wait and try again until it succeeds for up to 3 seconds.
299 for (size_t i = 0; i < 300; ++i) { 296 for (size_t i = 0; i < 300; ++i) {
300 if (usrsctp_finish() == 0) { 297 if (usrsctp_finish() == 0) {
301 return; 298 return;
302 } 299 }
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 << " len=" << buffer.size() << " before SetReceive(true)."; 741 << " len=" << buffer.size() << " before SetReceive(true).";
745 } 742 }
746 } 743 }
747 744
748 bool SctpDataMediaChannel::AddStream(const StreamParams& stream) { 745 bool SctpDataMediaChannel::AddStream(const StreamParams& stream) {
749 if (!stream.has_ssrcs()) { 746 if (!stream.has_ssrcs()) {
750 return false; 747 return false;
751 } 748 }
752 749
753 const uint32_t ssrc = stream.first_ssrc(); 750 const uint32_t ssrc = stream.first_ssrc();
754 if (ssrc >= kMaxSctpSid) { 751 if (ssrc >= kMaxSctpStreams) {
755 LOG(LS_WARNING) << debug_name_ << "->Add(Send|Recv)Stream(...): " 752 LOG(LS_WARNING) << debug_name_ << "->Add(Send|Recv)Stream(...): "
756 << "Not adding data stream '" << stream.id 753 << "Not adding data stream '" << stream.id
757 << "' with ssrc=" << ssrc 754 << "' with sid=" << ssrc << " because sid is too high.";
758 << " because stream ssrc is too high.";
759 return false; 755 return false;
760 } else if (open_streams_.find(ssrc) != open_streams_.end()) { 756 } else if (open_streams_.find(ssrc) != open_streams_.end()) {
761 LOG(LS_WARNING) << debug_name_ << "->Add(Send|Recv)Stream(...): " 757 LOG(LS_WARNING) << debug_name_ << "->Add(Send|Recv)Stream(...): "
762 << "Not adding data stream '" << stream.id 758 << "Not adding data stream '" << stream.id
763 << "' with ssrc=" << ssrc 759 << "' with sid=" << ssrc
764 << " because stream is already open."; 760 << " because stream is already open.";
765 return false; 761 return false;
766 } else if (queued_reset_streams_.find(ssrc) != queued_reset_streams_.end() 762 } else if (queued_reset_streams_.find(ssrc) != queued_reset_streams_.end()
767 || sent_reset_streams_.find(ssrc) != sent_reset_streams_.end()) { 763 || sent_reset_streams_.find(ssrc) != sent_reset_streams_.end()) {
768 LOG(LS_WARNING) << debug_name_ << "->Add(Send|Recv)Stream(...): " 764 LOG(LS_WARNING) << debug_name_ << "->Add(Send|Recv)Stream(...): "
769 << "Not adding data stream '" << stream.id 765 << "Not adding data stream '" << stream.id
770 << "' with ssrc=" << ssrc 766 << "' with sid=" << ssrc
771 << " because stream is still closing."; 767 << " because stream is still closing.";
772 return false; 768 return false;
773 } 769 }
774 770
775 open_streams_.insert(ssrc); 771 open_streams_.insert(ssrc);
776 return true; 772 return true;
777 } 773 }
778 774
779 bool SctpDataMediaChannel::ResetStream(uint32_t ssrc) { 775 bool SctpDataMediaChannel::ResetStream(uint32_t ssrc) {
780 // We typically get this called twice for the same stream, once each for 776 // We typically get this called twice for the same stream, once each for
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 } 1064 }
1069 case MSG_SCTPOUTBOUNDPACKET: { 1065 case MSG_SCTPOUTBOUNDPACKET: {
1070 std::unique_ptr<OutboundPacketMessage> pdata( 1066 std::unique_ptr<OutboundPacketMessage> pdata(
1071 static_cast<OutboundPacketMessage*>(msg->pdata)); 1067 static_cast<OutboundPacketMessage*>(msg->pdata));
1072 OnPacketFromSctpToNetwork(pdata->data().get()); 1068 OnPacketFromSctpToNetwork(pdata->data().get());
1073 break; 1069 break;
1074 } 1070 }
1075 } 1071 }
1076 } 1072 }
1077 } // namespace cricket 1073 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698