1 /* 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 #include "rtc_tools/network_tester/config_reader.h" 11 12 #include <fstream> 13 #include <iterator> 14 #include <string> 15 16 #include "rtc_base/checks.h" 17 18 namespace webrtc { 19 ConfigReader(const std::string & config_file_path)20ConfigReader::ConfigReader(const std::string& config_file_path) 21 : proto_config_index_(0) { 22 std::ifstream config_stream(config_file_path, 23 std::ios_base::in | std::ios_base::binary); 24 RTC_DCHECK(config_stream.is_open()); 25 RTC_DCHECK(config_stream.good()); 26 std::string config_data((std::istreambuf_iterator<char>(config_stream)), 27 (std::istreambuf_iterator<char>())); 28 if (config_data.size() > 0) { 29 proto_all_configs_.ParseFromString(config_data); 30 } 31 } 32 33 ConfigReader::~ConfigReader() = default; 34 GetNextConfig()35absl::optional<ConfigReader::Config> ConfigReader::GetNextConfig() { 36 #ifdef WEBRTC_NETWORK_TESTER_PROTO 37 if (proto_config_index_ >= proto_all_configs_.configs_size()) 38 return absl::nullopt; 39 auto proto_config = proto_all_configs_.configs(proto_config_index_++); 40 RTC_DCHECK(proto_config.has_packet_send_interval_ms()); 41 RTC_DCHECK(proto_config.has_packet_size()); 42 RTC_DCHECK(proto_config.has_execution_time_ms()); 43 Config config; 44 config.packet_send_interval_ms = proto_config.packet_send_interval_ms(); 45 config.packet_size = proto_config.packet_size(); 46 config.execution_time_ms = proto_config.execution_time_ms(); 47 return config; 48 #else 49 return absl::nullopt; 50 #endif // WEBRTC_NETWORK_TESTER_PROTO 51 } 52 53 } // namespace webrtc 54