Files
platform-external-webrtc/test/network/fake_network_socket_server.h
Sebastian Jansson 9d4bbc216b Using tasks to process packets in FakeNetworkSocketServer.
This way we can rely on existing task scheduling and execution
functionality, reducing the required functionality to support the
fake socket server.

This prepares for support simulated time execution of peer
connection level tests.

Bug: webrtc:11255
Change-Id: I7de64a099c2e355c70929ecff79b8ea3b98b70b8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/165398
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30221}
2020-01-12 12:53:30 +00:00

69 lines
2.1 KiB
C++

/*
* Copyright (c) 2019 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.
*/
#ifndef TEST_NETWORK_FAKE_NETWORK_SOCKET_SERVER_H_
#define TEST_NETWORK_FAKE_NETWORK_SOCKET_SERVER_H_
#include <set>
#include <vector>
#include "api/units/timestamp.h"
#include "rtc_base/async_socket.h"
#include "rtc_base/critical_section.h"
#include "rtc_base/event.h"
#include "rtc_base/socket_server.h"
#include "rtc_base/third_party/sigslot/sigslot.h"
#include "system_wrappers/include/clock.h"
#include "test/network/network_emulation.h"
namespace webrtc {
namespace test {
class FakeNetworkSocket;
// FakeNetworkSocketServer must outlive any sockets it creates.
class FakeNetworkSocketServer : public rtc::SocketServer,
public sigslot::has_slots<> {
public:
explicit FakeNetworkSocketServer(EndpointsContainer* endpoints_controller);
~FakeNetworkSocketServer() override;
// rtc::SocketFactory methods:
rtc::Socket* CreateSocket(int family, int type) override;
rtc::AsyncSocket* CreateAsyncSocket(int family, int type) override;
// rtc::SocketServer methods:
// Called by the network thread when this server is installed, kicking off the
// message handler loop.
void SetMessageQueue(rtc::Thread* thread) override;
bool Wait(int cms, bool process_io) override;
void WakeUp() override;
protected:
friend class FakeNetworkSocket;
EmulatedEndpointImpl* GetEndpointNode(const rtc::IPAddress& ip);
void Unregister(FakeNetworkSocket* socket);
private:
void OnMessageQueueDestroyed();
const EndpointsContainer* endpoints_container_;
rtc::Event wakeup_;
rtc::Thread* thread_ = nullptr;
rtc::CriticalSection lock_;
std::vector<FakeNetworkSocket*> sockets_ RTC_GUARDED_BY(lock_);
};
} // namespace test
} // namespace webrtc
#endif // TEST_NETWORK_FAKE_NETWORK_SOCKET_SERVER_H_