blob: 5dae3eaf8b02387e962b4799ee38267c47b1311e [file] [log] [blame]
michaelt333d0ff2017-04-10 23:26:35 -07001/*
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_TOOLS_NETWORK_TESTER_TEST_CONTROLLER_H_
12#define WEBRTC_TOOLS_NETWORK_TESTER_TEST_CONTROLLER_H_
13
14#include <array>
15#include <limits>
16#include <memory>
17#include <string>
18#include <utility>
19
20#include "webrtc/base/ignore_wundef.h"
21#include "webrtc/p2p/base/basicpacketsocketfactory.h"
22#include "webrtc/p2p/base/udptransport.h"
23#include "webrtc/tools/network_tester/packet_sender.h"
24
25#ifdef WEBRTC_NETWORK_TESTER_PROTO
26RTC_PUSH_IGNORING_WUNDEF()
27#include "webrtc/tools/network_tester/network_tester_packet.pb.h"
28RTC_POP_IGNORING_WUNDEF()
29using webrtc::network_tester::packet::NetworkTesterPacket;
30#else
31class NetworkTesterPacket;
32#endif // WEBRTC_NETWORK_TESTER_PROTO
33
34namespace webrtc {
35
36constexpr size_t kEthernetMtu = 1500;
37
38class TestController : public sigslot::has_slots<> {
39 public:
40 TestController(int min_port,
41 int max_port,
42 const std::string& config_file_path);
43
44 void Run();
45
46 void SendConnectTo(const std::string& hostname, int port);
47
48 void SendData(const NetworkTesterPacket& packet,
49 rtc::Optional<size_t> data_size);
50
51 void OnTestDone();
52
53 bool IsTestDone();
54
55 private:
56 void OnReadPacket(rtc::AsyncPacketSocket* socket,
57 const char* data,
58 size_t len,
59 const rtc::SocketAddress& remote_addr,
60 const rtc::PacketTime& packet_time);
61 rtc::ThreadChecker test_controller_thread_checker_;
62 rtc::SequencedTaskChecker packet_sender_checker_;
63 rtc::BasicPacketSocketFactory socket_factory_;
64 const std::string config_file_path_;
65 rtc::CriticalSection local_test_done_lock_;
66 bool local_test_done_ GUARDED_BY(local_test_done_lock_);
67 bool remote_test_done_;
68 std::array<char, kEthernetMtu> send_data_;
69 std::unique_ptr<cricket::UdpTransport> udp_transport_;
70 std::unique_ptr<PacketSender> packet_sender_;
71};
72
73} // namespace webrtc
74
75#endif // WEBRTC_TOOLS_NETWORK_TESTER_TEST_CONTROLLER_H_