Drop data for disabled endpoints.
Drop packets received from disabled endpoint and return socket error when trying to send data from disabled endpoint. Bug: webrtc:10138 Change-Id: I55259d2ac47adea78b47aeb25842e63a98a405c3 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/134643 Commit-Queue: Artem Titov <titovartem@webrtc.org> Reviewed-by: Sebastian Jansson <srte@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27973}
This commit is contained in:
@ -33,7 +33,8 @@ constexpr int kStatsWaitTimeoutMs = 1000;
|
||||
|
||||
class SocketReader : public sigslot::has_slots<> {
|
||||
public:
|
||||
explicit SocketReader(rtc::AsyncSocket* socket) : socket_(socket) {
|
||||
explicit SocketReader(rtc::AsyncSocket* socket, rtc::Thread* network_thread)
|
||||
: socket_(socket), network_thread_(network_thread) {
|
||||
socket_->SignalReadEvent.connect(this, &SocketReader::OnReadEvent);
|
||||
size_ = 128 * 1024;
|
||||
buf_ = new char[size_];
|
||||
@ -42,12 +43,13 @@ class SocketReader : public sigslot::has_slots<> {
|
||||
|
||||
void OnReadEvent(rtc::AsyncSocket* socket) {
|
||||
RTC_DCHECK(socket_ == socket);
|
||||
int64_t timestamp;
|
||||
len_ = socket_->Recv(buf_, size_, ×tamp);
|
||||
{
|
||||
network_thread_->PostTask(RTC_FROM_HERE, [this]() {
|
||||
int64_t timestamp;
|
||||
len_ = socket_->Recv(buf_, size_, ×tamp);
|
||||
|
||||
rtc::CritScope crit(&lock_);
|
||||
received_count_++;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
int ReceivedCount() {
|
||||
@ -56,7 +58,8 @@ class SocketReader : public sigslot::has_slots<> {
|
||||
}
|
||||
|
||||
private:
|
||||
rtc::AsyncSocket* socket_;
|
||||
rtc::AsyncSocket* const socket_;
|
||||
rtc::Thread* const network_thread_;
|
||||
char* buf_;
|
||||
size_t size_;
|
||||
int len_;
|
||||
@ -204,8 +207,8 @@ TEST(NetworkEmulationManagerTest, Run) {
|
||||
auto* s2 = nt2->network_thread()->socketserver()->CreateAsyncSocket(
|
||||
AF_INET, SOCK_DGRAM);
|
||||
|
||||
SocketReader r1(s1);
|
||||
SocketReader r2(s2);
|
||||
SocketReader r1(s1, nt1->network_thread());
|
||||
SocketReader r2(s2, nt2->network_thread());
|
||||
|
||||
rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
|
||||
rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
|
||||
@ -217,8 +220,10 @@ TEST(NetworkEmulationManagerTest, Run) {
|
||||
s2->Connect(s1->GetLocalAddress());
|
||||
|
||||
for (uint64_t i = 0; i < 1000; i++) {
|
||||
s1->Send(data.data(), data.size());
|
||||
s2->Send(data.data(), data.size());
|
||||
nt1->network_thread()->PostTask(
|
||||
RTC_FROM_HERE, [&]() { s1->Send(data.data(), data.size()); });
|
||||
nt2->network_thread()->PostTask(
|
||||
RTC_FROM_HERE, [&]() { s2->Send(data.data(), data.size()); });
|
||||
}
|
||||
|
||||
rtc::Event wait;
|
||||
@ -279,8 +284,8 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) {
|
||||
auto* s2 = nt2->network_thread()->socketserver()->CreateAsyncSocket(
|
||||
AF_INET, SOCK_DGRAM);
|
||||
|
||||
SocketReader r1(s1);
|
||||
SocketReader r2(s2);
|
||||
SocketReader r1(s1, nt1->network_thread());
|
||||
SocketReader r2(s2, nt2->network_thread());
|
||||
|
||||
rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
|
||||
rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
|
||||
@ -294,14 +299,13 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) {
|
||||
// Send 10 packets for 1
|
||||
rtc::Event wait;
|
||||
for (uint64_t i = 0; i < 11; i++) {
|
||||
s1->Send(data.data(), data.size());
|
||||
s2->Send(data.data(), data.size());
|
||||
nt1->network_thread()->PostTask(
|
||||
RTC_FROM_HERE, [&]() { s1->Send(data.data(), data.size()); });
|
||||
nt2->network_thread()->PostTask(
|
||||
RTC_FROM_HERE, [&]() { s2->Send(data.data(), data.size()); });
|
||||
wait.Wait(100);
|
||||
}
|
||||
|
||||
delete s1;
|
||||
delete s2;
|
||||
|
||||
std::atomic<int> received_stats_count{0};
|
||||
nt1->GetStats([&](EmulatedNetworkStats st) {
|
||||
EXPECT_EQ(st.packets_sent, 11l);
|
||||
@ -314,6 +318,9 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) {
|
||||
ASSERT_EQ_WAIT(received_stats_count.load(), 1, kStatsWaitTimeoutMs);
|
||||
EXPECT_EQ(r1.ReceivedCount(), 11);
|
||||
EXPECT_EQ(r2.ReceivedCount(), 11);
|
||||
|
||||
delete s1;
|
||||
delete s2;
|
||||
}
|
||||
|
||||
// Testing that packets are delivered via all routes using a routing scheme as
|
||||
|
||||
Reference in New Issue
Block a user