From 3c9ae1fd8fb7aae488eb24d4158dd9d71fdf1f2d Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Tue, 2 Jun 2020 10:46:12 +0200 Subject: [PATCH] Adds fix for closing a prenegotiated DC without sending data. Also adds tests. Bug: webrtc:11628 Change-Id: If29cdcdf055a95c488b3db4387d29f6f958bf9a3 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176326 Reviewed-by: Taylor Commit-Queue: Harald Alvestrand Cr-Commit-Position: refs/heads/master@{#31412} --- media/sctp/sctp_transport.cc | 3 +++ media/sctp/sctp_transport_unittest.cc | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/media/sctp/sctp_transport.cc b/media/sctp/sctp_transport.cc index 40061a6048..effb2211ae 100644 --- a/media/sctp/sctp_transport.cc +++ b/media/sctp/sctp_transport.cc @@ -1182,6 +1182,9 @@ void SctpTransport::OnNotificationAssocChange(const sctp_assoc_change& change) { max_outbound_streams_ = change.sac_outbound_streams; max_inbound_streams_ = change.sac_inbound_streams; SignalAssociationChangeCommunicationUp(); + // In case someone tried to close a stream before communication + // came up, send any queued resets. + SendQueuedStreamResets(); break; case SCTP_COMM_LOST: RTC_LOG(LS_INFO) << "Association change SCTP_COMM_LOST"; diff --git a/media/sctp/sctp_transport_unittest.cc b/media/sctp/sctp_transport_unittest.cc index ff3f2d70a9..da6c6290fd 100644 --- a/media/sctp/sctp_transport_unittest.cc +++ b/media/sctp/sctp_transport_unittest.cc @@ -605,6 +605,15 @@ TEST_F(SctpTransportTest, ClosesRemoteStream) { transport1()->ResetStream(1); EXPECT_TRUE_WAIT(transport2_observer.WasStreamClosed(1), kDefaultTimeout); } +TEST_F(SctpTransportTest, ClosesRemoteStreamWithNoData) { + SetupConnectedTransportsWithTwoStreams(); + SctpTransportObserver transport1_observer(transport1()); + SctpTransportObserver transport2_observer(transport2()); + + // Close stream 1 on transport 1. Transport 2 should notify us. + transport1()->ResetStream(1); + EXPECT_TRUE_WAIT(transport2_observer.WasStreamClosed(1), kDefaultTimeout); +} TEST_F(SctpTransportTest, ClosesTwoRemoteStreams) { SetupConnectedTransportsWithTwoStreams();