1 /*
2  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_TEST_TESTSUPPORT_PACKET_READER_H_
12 #define WEBRTC_TEST_TESTSUPPORT_PACKET_READER_H_
13 
14 #include <cstddef>
15 #include "webrtc/typedefs.h"
16 
17 namespace webrtc {
18 namespace test {
19 
20 // Reads chunks of data to simulate network packets from a byte array.
21 class PacketReader {
22  public:
23   PacketReader();
24   virtual ~PacketReader();
25 
26   // Inizializes a new reading operation. Must be done before invoking the
27   // NextPacket method.
28   // * data_length_in_bytes is the length of the data byte array.
29   //   0 length will result in no packets are read.
30   // * packet_size_in_bytes is the number of bytes to read in each NextPacket
31   //   method call. Must be > 0
32   virtual void InitializeReading(uint8_t* data, size_t data_length_in_bytes,
33                                  size_t packet_size_in_bytes);
34 
35   // Moves the supplied pointer to the beginning of the next packet.
36   // Returns:
37   // *  The size of the packet ready to read (lower than the packet size for
38   //    the last packet)
39   // *  0 if there are no more packets to read
40   // * -1 if InitializeReading has not been called (also prints to stderr).
41   virtual int NextPacket(uint8_t** packet_pointer);
42 
43  private:
44   uint8_t* data_;
45   size_t data_length_;
46   size_t packet_size_;
47   size_t currentIndex_;
48   bool initialized_;
49 };
50 
51 }  // namespace test
52 }  // namespace webrtc
53 
54 #endif  // WEBRTC_TEST_TESTSUPPORT_PACKET_READER_H_
55