00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00037 #ifndef RTCPCOMPOUNDPACKET_H
00038
00039 #define RTCPCOMPOUNDPACKET_H
00040
00041 #include "rtpconfig.h"
00042 #include "rtptypes.h"
00043 #include "rtpmemoryobject.h"
00044 #include <list>
00045
00046 class RTPRawPacket;
00047 class RTCPPacket;
00048
00050 class RTCPCompoundPacket : public RTPMemoryObject
00051 {
00052 public:
00054 RTCPCompoundPacket(RTPRawPacket &rawpack, RTPMemoryManager *memmgr = 0);
00055
00061 RTCPCompoundPacket(uint8_t *packet, size_t len, bool deletedata = true, RTPMemoryManager *memmgr = 0);
00062 protected:
00063 RTCPCompoundPacket(RTPMemoryManager *memmgr);
00064 public:
00065 virtual ~RTCPCompoundPacket();
00066
00071 int GetCreationError() { return error; }
00072
00074 uint8_t *GetCompoundPacketData() { return compoundpacket; }
00075
00077 size_t GetCompoundPacketLength() { return compoundpacketlength; }
00078
00080 void GotoFirstPacket() { rtcppackit = rtcppacklist.begin(); }
00081
00086 RTCPPacket *GetNextPacket() { if (rtcppackit == rtcppacklist.end()) return 0; RTCPPacket *p = *rtcppackit; rtcppackit++; return p; }
00087
00088 #ifdef RTPDEBUG
00089 void Dump();
00090 #endif // RTPDEBUG
00091 protected:
00092 void ClearPacketList();
00093 int ParseData(uint8_t *packet, size_t len);
00094
00095 int error;
00096
00097 uint8_t *compoundpacket;
00098 size_t compoundpacketlength;
00099 bool deletepacket;
00100
00101 std::list<RTCPPacket *> rtcppacklist;
00102 std::list<RTCPPacket *>::const_iterator rtcppackit;
00103 };
00104
00105 #endif // RTCPCOMPOUNDPACKET_H
00106