// 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 NET_THIRD_PARTY_QUIC_QUARTC_COUNTING_PACKET_FILTER_H_
#define NET_THIRD_PARTY_QUIC_QUARTC_COUNTING_PACKET_FILTER_H_

#include "net/third_party/quic/platform/api/quic_string.h"
#include "net/third_party/quic/test_tools/simulator/packet_filter.h"
#include "net/third_party/quic/test_tools/simulator/port.h"
#include "net/third_party/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  // NET_THIRD_PARTY_QUIC_QUARTC_COUNTING_PACKET_FILTER_H_
