// Copyright (c) 2018 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.

#ifndef QUICHE_QUIC_QUARTC_COUNTING_PACKET_FILTER_H_
#define QUICHE_QUIC_QUARTC_COUNTING_PACKET_FILTER_H_

#include "net/third_party/quiche/src/quic/platform/api/quic_string.h"
#include "net/third_party/quiche/src/quic/test_tools/simulator/packet_filter.h"
#include "net/third_party/quiche/src/quic/test_tools/simulator/port.h"
#include "net/third_party/quiche/src/quic/test_tools/simulator/simulator.h"

namespace quic {
namespace simulator {

// Simple packet filter which drops the first N packets it observes.
class CountingPacketFilter : public simulator::PacketFilter {
 public:
  CountingPacketFilter(simulator::Simulator* simulator,
                       const QuicString& name,
                       simulator::Endpoint* endpoint)
      : PacketFilter(simulator, name, endpoint) {}

  void set_packets_to_drop(int count) { packets_to_drop_ = count; }

 protected:
  bool FilterPacket(const simulator::Packet& packet) override {
    if (packets_to_drop_ > 0) {
      --packets_to_drop_;
      return false;
    }
    return true;
  }

 private:
  int packets_to_drop_ = 0;
};

}  // namespace simulator
}  // namespace quic

#endif  // QUICHE_QUIC_QUARTC_COUNTING_PACKET_FILTER_H_
