JRTPLIB  3.11.1
rtcppacketbuilder.h
Go to the documentation of this file.
1 /*
2 
3  This file is a part of JRTPLIB
4  Copyright (c) 1999-2017 Jori Liesenborgs
5 
6  Contact: jori.liesenborgs@gmail.com
7 
8  This library was developed at the Expertise Centre for Digital Media
9  (http://www.edm.uhasselt.be), a research center of the Hasselt University
10  (http://www.uhasselt.be). The library is based upon work done for
11  my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
12 
13  Permission is hereby granted, free of charge, to any person obtaining a
14  copy of this software and associated documentation files (the "Software"),
15  to deal in the Software without restriction, including without limitation
16  the rights to use, copy, modify, merge, publish, distribute, sublicense,
17  and/or sell copies of the Software, and to permit persons to whom the
18  Software is furnished to do so, subject to the following conditions:
19 
20  The above copyright notice and this permission notice shall be included
21  in all copies or substantial portions of the Software.
22 
23  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
29  IN THE SOFTWARE.
30 
31 */
32 
37 #ifndef RTCPPACKETBUILDER_H
38 
39 #define RTCPPACKETBUILDER_H
40 
41 #include "rtpconfig.h"
42 #include "rtptypes.h"
43 #include "rtperrors.h"
44 #include "rtcpsdesinfo.h"
45 #include "rtptimeutilities.h"
46 #include "rtpmemoryobject.h"
47 
48 namespace jrtplib
49 {
50 
51 class RTPSources;
52 class RTPPacketBuilder;
53 class RTCPScheduler;
54 class RTCPCompoundPacket;
55 class RTCPCompoundPacketBuilder;
56 
63 class JRTPLIB_IMPORTEXPORT RTCPPacketBuilder : public RTPMemoryObject
64 {
65 public:
71  RTCPPacketBuilder(RTPSources &sources,RTPPacketBuilder &rtppackbuilder, RTPMemoryManager *mgr = 0);
73 
80  int Init(size_t maxpacksize,double timestampunit,const void *cname,size_t cnamelen);
81 
83  void Destroy();
84 
90  int SetTimestampUnit(double tsunit) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; if (tsunit < 0) return ERR_RTP_RTCPPACKETBUILDER_ILLEGALTIMESTAMPUNIT; timestampunit = tsunit; return 0; }
91 
93  int SetMaximumPacketSize(size_t maxpacksize) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; if (maxpacksize < RTP_MINPACKETSIZE) return ERR_RTP_RTCPPACKETBUILDER_ILLEGALMAXPACKSIZE; maxpacketsize = maxpacksize; return 0; }
94 
101  int SetPreTransmissionDelay(const RTPTime &delay) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; transmissiondelay = delay; return 0; }
102 
104  int BuildNextPacket(RTCPCompoundPacket **pack);
105 
111  int BuildBYEPacket(RTCPCompoundPacket **pack,const void *reason,size_t reasonlength,bool useSRifpossible = true);
112 
119  void SetNameInterval(int count) { if (!init) return; interval_name = count; }
120 
127  void SetEMailInterval(int count) { if (!init) return; interval_email = count; }
128 
135  void SetLocationInterval(int count) { if (!init) return; interval_location = count; }
136 
143  void SetPhoneInterval(int count) { if (!init) return; interval_phone = count; }
144 
151  void SetToolInterval(int count) { if (!init) return; interval_tool = count; }
152 
159  void SetNoteInterval(int count) { if (!init) return; interval_note = count; }
160 
162  int SetLocalName(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetName((const uint8_t *)s,len); }
163 
165  int SetLocalEMail(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetEMail((const uint8_t *)s,len); }
166 
168  int SetLocalLocation(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetLocation((const uint8_t *)s,len); }
169 
171  int SetLocalPhone(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetPhone((const uint8_t *)s,len); }
172 
174  int SetLocalTool(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetTool((const uint8_t *)s,len); }
175 
177  int SetLocalNote(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetNote((const uint8_t *)s,len); }
178 
180  uint8_t *GetLocalCNAME(size_t *len) const { if (!init) return 0; return ownsdesinfo.GetCNAME(len); }
181 private:
182  void ClearAllSourceFlags();
183  int FillInReportBlocks(RTCPCompoundPacketBuilder *pack,const RTPTime &curtime,int maxcount,bool *full,int *added,int *skipped,bool *atendoflist);
184  int FillInSDES(RTCPCompoundPacketBuilder *pack,bool *full,bool *processedall,int *added);
185  void ClearAllSDESFlags();
186 
187  RTPSources &sources;
188  RTPPacketBuilder &rtppacketbuilder;
189 
190  bool init;
191  size_t maxpacketsize;
192  double timestampunit;
193  bool firstpacket;
194  RTPTime prevbuildtime,transmissiondelay;
195 
196  class RTCPSDESInfoInternal : public RTCPSDESInfo
197  {
198  public:
199  RTCPSDESInfoInternal(RTPMemoryManager *mgr) : RTCPSDESInfo(mgr) { ClearFlags(); }
200  void ClearFlags() { pname = false; pemail = false; plocation = false; pphone = false; ptool = false; pnote = false; }
201  bool ProcessedName() const { return pname; }
202  bool ProcessedEMail() const { return pemail; }
203  bool ProcessedLocation() const { return plocation; }
204  bool ProcessedPhone() const { return pphone; }
205  bool ProcessedTool() const { return ptool; }
206  bool ProcessedNote() const { return pnote; }
207  void SetProcessedName(bool v) { pname = v; }
208  void SetProcessedEMail(bool v) { pemail = v; }
209  void SetProcessedLocation(bool v) { plocation = v; }
210  void SetProcessedPhone(bool v) { pphone = v; }
211  void SetProcessedTool(bool v) { ptool = v; }
212  void SetProcessedNote(bool v) { pnote = v; }
213  private:
214  bool pname,pemail,plocation,pphone,ptool,pnote;
215  };
216 
217  RTCPSDESInfoInternal ownsdesinfo;
218  int interval_name,interval_email,interval_location;
219  int interval_phone,interval_tool,interval_note;
220  bool doname,doemail,doloc,dophone,dotool,donote;
221  bool processingsdes;
222 
223  int sdesbuildcount;
224 };
225 
226 } // end namespace
227 
228 #endif // RTCPPACKETBUILDER_H
229 
int SetLocalName(const void *s, size_t len)
Sets the SDES name item for the local participant to the value s with length len. ...
Definition: rtcppacketbuilder.h:162
The class RTCPSDESInfo is a container for RTCP SDES information.
Definition: rtcpsdesinfo.h:53
This class can be used to build RTP packets and is a bit more high-level than the RTPPacket class: it...
Definition: rtppacketbuilder.h:57
void SetToolInterval(int count)
Sets the RTCP interval for the SDES tool item.
Definition: rtcppacketbuilder.h:151
int SetLocalPhone(const void *s, size_t len)
Sets the SDES phone item for the local participant to the value s with length len.
Definition: rtcppacketbuilder.h:171
int SetLocalTool(const void *s, size_t len)
Sets the SDES tool item for the local participant to the value s with length len. ...
Definition: rtcppacketbuilder.h:174
Represents an RTCP compound packet.
Definition: rtcpcompoundpacket.h:53
int SetTimestampUnit(double tsunit)
Sets the timestamp unit to be used to tsunit.
Definition: rtcppacketbuilder.h:90
int SetPreTransmissionDelay(const RTPTime &delay)
This function allows you to inform RTCP packet builder about the delay between sampling the first sam...
Definition: rtcppacketbuilder.h:101
uint8_t * GetLocalCNAME(size_t *len) const
Returns the own CNAME item with length len.
Definition: rtcppacketbuilder.h:180
void SetNameInterval(int count)
Sets the RTCP interval for the SDES name item.
Definition: rtcppacketbuilder.h:119
void SetPhoneInterval(int count)
Sets the RTCP interval for the SDES phone item.
Definition: rtcppacketbuilder.h:143
int SetMaximumPacketSize(size_t maxpacksize)
Sets the maximum size allowed size of an RTCP compound packet to maxpacksize.
Definition: rtcppacketbuilder.h:93
Represents a table in which information about the participating sources is kept.
Definition: rtpsources.h:74
void SetNoteInterval(int count)
Sets the RTCP interval for the SDES note item.
Definition: rtcppacketbuilder.h:159
void SetLocationInterval(int count)
Sets the RTCP interval for the SDES location item.
Definition: rtcppacketbuilder.h:135
Definition: rtpfaketransmitter.h:64
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:84
A memory manager.
Definition: rtpmemorymanager.h:150
This class can be used to build RTCP compound packets, on a higher level than the RTCPCompoundPacketB...
Definition: rtcppacketbuilder.h:63
void SetEMailInterval(int count)
Sets the RTCP interval for the SDES e-mail item.
Definition: rtcppacketbuilder.h:127
int SetLocalLocation(const void *s, size_t len)
Sets the SDES location item for the local participant to the value s with length len.
Definition: rtcppacketbuilder.h:168
This class can be used to construct an RTCP compound packet.
Definition: rtcpcompoundpacketbuilder.h:59
int SetLocalNote(const void *s, size_t len)
Sets the SDES note item for the local participant to the value s with length len. ...
Definition: rtcppacketbuilder.h:177
int SetLocalEMail(const void *s, size_t len)
Sets the SDES e-mail item for the local participant to the value s with length len.
Definition: rtcppacketbuilder.h:165