webrtc/api/data_channel_interface.cc
Tommi a50a81a150 [DataChannelInterface] Introduce DataChannelInterface::SendAsync()
One problem with the existing Send() method is that it has a return
value that is problematic for a fully async implementation.

A second problem with Send() is that the return value is bool and not
RTCError (webrtc:13289), which is why OnSendComplete() uses RTCError.

Also, start deprecating `bool Send()` in favor of `void SendAsync()` and
adding `network_safety_` flag for posting async operations to the
network thread. This flag also takes over from the
`connected_to_transport_` which can now be removed.

Bug: webrtc:11547, webrtc:13289
Change-Id: I87bbc7e9b964a52684bdfe0e6ebc5230be254e8b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/299760
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39817}
2023-04-11 19:46:36 +00:00

62 lines
1.5 KiB
C++

/*
* Copyright 2018 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "api/data_channel_interface.h"
#include "rtc_base/checks.h"
namespace webrtc {
bool DataChannelInterface::ordered() const {
return false;
}
uint16_t DataChannelInterface::maxRetransmitTime() const {
return 0;
}
uint16_t DataChannelInterface::maxRetransmits() const {
return 0;
}
absl::optional<int> DataChannelInterface::maxRetransmitsOpt() const {
return absl::nullopt;
}
absl::optional<int> DataChannelInterface::maxPacketLifeTime() const {
return absl::nullopt;
}
std::string DataChannelInterface::protocol() const {
return std::string();
}
bool DataChannelInterface::negotiated() const {
return false;
}
uint64_t DataChannelInterface::MaxSendQueueSize() {
return 16 * 1024 * 1024; // 16 MiB
}
// TODO(tommi): Remove method once downstream implementations have been removed.
bool DataChannelInterface::Send(const DataBuffer& buffer) {
RTC_DCHECK_NOTREACHED();
return false;
}
// TODO(tommi): Remove implementation once method is pure virtual.
void DataChannelInterface::SendAsync(
DataBuffer buffer,
absl::AnyInvocable<void(RTCError) &&> on_complete) {
RTC_DCHECK_NOTREACHED();
}
} // namespace webrtc