DataChannel: Propagate SCTP transport errors to the channels
When the transport is terminated, if an error has occured, it will be propagated to the channels. When such errors can happen at the SCTP level (e.g. out of resources), RTCError may contain an error code matching the definition at https://www.iana.org/assignments/sctp-parameters/sctp-parameters.xhtml#sctp-parameters-24 If the m= line is rejected or removed from SDP, an error will again be sent to the data channels, signaling their unexpected transition to closed. Bug: webrtc:12904 Change-Id: Iea3d8aba0a57bbedb5d03f0fb6f7aba292e92fe8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/223541 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Florent Castelli <orphis@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34386}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
c362eb2d1c
commit
dcb9ffc6f2
@ -162,13 +162,13 @@ void DataChannelController::OnReadyToSend() {
|
||||
}));
|
||||
}
|
||||
|
||||
void DataChannelController::OnTransportClosed() {
|
||||
void DataChannelController::OnTransportClosed(RTCError error) {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
signaling_thread()->PostTask(
|
||||
ToQueuedTask([self = weak_factory_.GetWeakPtr()] {
|
||||
ToQueuedTask([self = weak_factory_.GetWeakPtr(), error] {
|
||||
if (self) {
|
||||
RTC_DCHECK_RUN_ON(self->signaling_thread());
|
||||
self->OnTransportChannelClosed();
|
||||
self->OnTransportChannelClosed(error);
|
||||
}
|
||||
}));
|
||||
}
|
||||
@ -351,14 +351,14 @@ void DataChannelController::OnSctpDataChannelClosed(SctpDataChannel* channel) {
|
||||
}
|
||||
}
|
||||
|
||||
void DataChannelController::OnTransportChannelClosed() {
|
||||
void DataChannelController::OnTransportChannelClosed(RTCError error) {
|
||||
RTC_DCHECK_RUN_ON(signaling_thread());
|
||||
// Use a temporary copy of the SCTP DataChannel list because the
|
||||
// DataChannel may callback to us and try to modify the list.
|
||||
std::vector<rtc::scoped_refptr<SctpDataChannel>> temp_sctp_dcs;
|
||||
temp_sctp_dcs.swap(sctp_data_channels_);
|
||||
for (const auto& channel : temp_sctp_dcs) {
|
||||
channel->OnTransportChannelClosed();
|
||||
channel->OnTransportChannelClosed(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user