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

#ifndef TEST_TESTSUPPORT_PACKET_READER_H_
#define TEST_TESTSUPPORT_PACKET_READER_H_

#include <cstddef>
#include "typedefs.h"  // NOLINT(build/include)

namespace webrtc {
namespace test {

// Reads chunks of data to simulate network packets from a byte array.
class PacketReader {
 public:
  PacketReader();
  virtual ~PacketReader();

  // Inizializes a new reading operation. Must be done before invoking the
  // NextPacket method.
  // * data_length_in_bytes is the length of the data byte array.
  //   0 length will result in no packets are read.
  // * packet_size_in_bytes is the number of bytes to read in each NextPacket
  //   method call. Must be > 0
  virtual void InitializeReading(uint8_t* data, size_t data_length_in_bytes,
                                 size_t packet_size_in_bytes);

  // Moves the supplied pointer to the beginning of the next packet.
  // Returns:
  // *  The size of the packet ready to read (lower than the packet size for
  //    the last packet)
  // *  0 if there are no more packets to read
  // * -1 if InitializeReading has not been called (also prints to stderr).
  virtual int NextPacket(uint8_t** packet_pointer);

 private:
  uint8_t* data_;
  size_t data_length_;
  size_t packet_size_;
  size_t currentIndex_;
  bool initialized_;
};

}  // namespace test
}  // namespace webrtc

#endif  // TEST_TESTSUPPORT_PACKET_READER_H_
