| Index: webrtc/tools/network_tester/config_reader.cc
 | 
| diff --git a/webrtc/tools/network_tester/config_reader.cc b/webrtc/tools/network_tester/config_reader.cc
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..21603e819f567f2c770bf164e63cd226ebe238c9
 | 
| --- /dev/null
 | 
| +++ b/webrtc/tools/network_tester/config_reader.cc
 | 
| @@ -0,0 +1,71 @@
 | 
| +/*
 | 
| + *  Copyright 2017 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 "webrtc/tools/network_tester/config_reader.h"
 | 
| +
 | 
| +#include <string>
 | 
| +#include <vector>
 | 
| +
 | 
| +#include "webrtc/base/ignore_wundef.h"
 | 
| +#include "webrtc/base/logging.h"
 | 
| +
 | 
| +#ifdef WEBRTC_NETWORK_TESTER_PROTO
 | 
| +RTC_PUSH_IGNORING_WUNDEF()
 | 
| +#include "webrtc/tools/network_tester/network_tester_config.pb.h"
 | 
| +RTC_POP_IGNORING_WUNDEF()
 | 
| +#endif  // WEBRTC_NETWORK_TESTER_PROTO
 | 
| +
 | 
| +namespace webrtc {
 | 
| +
 | 
| +namespace {
 | 
| +rtc::Optional<int> ParseMessageSize(std::istream& config_stream) {
 | 
| +  int byte = config_stream.get();
 | 
| +  if (config_stream.eof()) {
 | 
| +    return rtc::Optional<int>();
 | 
| +  }
 | 
| +  RTC_DCHECK(0 <= byte && byte <= 255);
 | 
| +  return rtc::Optional<int>(byte);
 | 
| +}
 | 
| +}
 | 
| +
 | 
| +ConfigReader::ConfigReader(const std::string& config_file_path)
 | 
| +    : config_stream_(config_file_path,
 | 
| +                     std::ios_base::in | std::ios_base::binary) {
 | 
| +  RTC_DCHECK(config_stream_.is_open());
 | 
| +  RTC_DCHECK(config_stream_.good());
 | 
| +}
 | 
| +
 | 
| +ConfigReader::~ConfigReader() = default;
 | 
| +
 | 
| +rtc::Optional<ConfigReader::Config> ConfigReader::GetNextConfig() {
 | 
| +#ifdef WEBRTC_NETWORK_TESTER_PROTO
 | 
| +  auto message_size = ParseMessageSize(config_stream_);
 | 
| +  if (!message_size)
 | 
| +    return rtc::Optional<Config>();
 | 
| +  constexpr size_t kMaxEventSize = (1u << 16) - 1;
 | 
| +  std::vector<char> message_buffer(kMaxEventSize);
 | 
| +  config_stream_.read(message_buffer.data(), *message_size);
 | 
| +  RTC_DCHECK_EQ(config_stream_.gcount(), *message_size);
 | 
| +  webrtc::network_tester::config::NetworkTesterConfig proto_config;
 | 
| +  if (!proto_config.ParseFromArray(message_buffer.data(), *message_size))
 | 
| +    return rtc::Optional<Config>();
 | 
| +  RTC_DCHECK(proto_config.has_packet_send_interval_ms());
 | 
| +  RTC_DCHECK(proto_config.has_packet_size());
 | 
| +  RTC_DCHECK(proto_config.has_execution_time_ms());
 | 
| +  Config config;
 | 
| +  config.packet_send_interval_ms = proto_config.packet_send_interval_ms();
 | 
| +  config.packet_size = proto_config.packet_size();
 | 
| +  config.execution_time_ms = proto_config.execution_time_ms();
 | 
| +  return rtc::Optional<Config>(config);
 | 
| +#else
 | 
| +  return rtc::Optional<Config>();
 | 
| +#endif  //  WEBRTC_NETWORK_TESTER_PROTO
 | 
| +}
 | 
| +
 | 
| +}  // namespace webrtc
 | 
| 
 |