// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "quiche/quic/test_tools/bad_packet_writer.h"

namespace quic {
namespace test {

BadPacketWriter::BadPacketWriter(size_t packet_causing_write_error,
                                 int error_code)
    : packet_causing_write_error_(packet_causing_write_error),
      error_code_(error_code) {}

BadPacketWriter::~BadPacketWriter() {}

WriteResult BadPacketWriter::WritePacket(const char* buffer, size_t buf_len,
                                         const QuicIpAddress& self_address,
                                         const QuicSocketAddress& peer_address,
                                         PerPacketOptions* options) {
  if (error_code_ == 0 || packet_causing_write_error_ > 0) {
    if (packet_causing_write_error_ > 0) {
      --packet_causing_write_error_;
    }
    return QuicPacketWriterWrapper::WritePacket(buffer, buf_len, self_address,
                                                peer_address, options);
  }
  // It's time to cause write error.
  int error_code = error_code_;
  error_code_ = 0;
  return WriteResult(WRITE_STATUS_ERROR, error_code);
}

}  // namespace test
}  // namespace quic
