rtcppacketbuilder.h

Go to the documentation of this file.
00001 /*
00002 
00003   This file is a part of JRTPLIB
00004   Copyright (c) 1999-2007 Jori Liesenborgs
00005 
00006   Contact: jori.liesenborgs@gmail.com
00007 
00008   This library was developed at the "Expertisecentrum Digitale Media"
00009   (http://www.edm.uhasselt.be), a research center of the Hasselt University
00010   (http://www.uhasselt.be). The library is based upon work done for 
00011   my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
00012 
00013   Permission is hereby granted, free of charge, to any person obtaining a
00014   copy of this software and associated documentation files (the "Software"),
00015   to deal in the Software without restriction, including without limitation
00016   the rights to use, copy, modify, merge, publish, distribute, sublicense,
00017   and/or sell copies of the Software, and to permit persons to whom the
00018   Software is furnished to do so, subject to the following conditions:
00019 
00020   The above copyright notice and this permission notice shall be included
00021   in all copies or substantial portions of the Software.
00022 
00023   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00024   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00025   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
00026   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00027   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00028   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
00029   IN THE SOFTWARE.
00030 
00031 */
00032 
00037 #ifndef RTCPPACKETBUILDER_H
00038 
00039 #define RTCPPACKETBUILDER_H
00040 
00041 #include "rtpconfig.h"
00042 #include "rtptypes.h"
00043 #include "rtperrors.h"
00044 #include "rtcpsdesinfo.h"
00045 #include "rtptimeutilities.h"
00046 #include "rtpmemoryobject.h"
00047 
00048 class RTPSources;
00049 class RTPPacketBuilder;
00050 class RTCPScheduler;
00051 class RTCPCompoundPacket;
00052 class RTCPCompoundPacketBuilder;
00053 
00060 class RTCPPacketBuilder : public RTPMemoryObject
00061 {
00062 public:
00068         RTCPPacketBuilder(RTPSources &sources,RTPPacketBuilder &rtppackbuilder, RTPMemoryManager *mgr = 0);
00069         ~RTCPPacketBuilder();
00070 
00077         int Init(size_t maxpacksize,double timestampunit,const void *cname,size_t cnamelen);
00078 
00080         void Destroy();
00081 
00087         int SetTimestampUnit(double tsunit)                                             { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; if (tsunit < 0) return ERR_RTP_RTCPPACKETBUILDER_ILLEGALTIMESTAMPUNIT; timestampunit = tsunit; return 0; }
00088 
00090         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; }
00091         
00098         int SetPreTransmissionDelay(const RTPTime &delay)                               { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; transmissiondelay = delay; return 0; }
00099         
00101         int BuildNextPacket(RTCPCompoundPacket **pack);
00102 
00108         int BuildBYEPacket(RTCPCompoundPacket **pack,const void *reason,size_t reasonlength,bool useSRifpossible = true);
00109 
00116         void SetNameInterval(int count)                                                 { if (!init) return; interval_name = count; }
00117         
00124         void SetEMailInterval(int count)                                                { if (!init) return; interval_email = count; }
00125         
00132         void SetLocationInterval(int count)                                             { if (!init) return; interval_location = count; }
00133 
00140         void SetPhoneInterval(int count)                                                { if (!init) return; interval_phone = count; }
00141 
00148         void SetToolInterval(int count)                                                 { if (!init) return; interval_tool = count; }
00149         
00156         void SetNoteInterval(int count)                                                 { if (!init) return; interval_note = count; }
00157 
00159         int SetLocalName(const void *s,size_t len)                                      { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetName((const uint8_t *)s,len); }
00160         
00162         int SetLocalEMail(const void *s,size_t len)                                     { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetEMail((const uint8_t *)s,len); }
00163         
00165         int SetLocalLocation(const void *s,size_t len)                                  { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetLocation((const uint8_t *)s,len); }
00166         
00168         int SetLocalPhone(const void *s,size_t len)                                     { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetPhone((const uint8_t *)s,len); }
00169         
00171         int SetLocalTool(const void *s,size_t len)                                      { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetTool((const uint8_t *)s,len); }
00172         
00174         int SetLocalNote(const void *s,size_t len)                                      { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetNote((const uint8_t *)s,len); }
00175 
00177         uint8_t *GetLocalCNAME(size_t *len) const                                       { if (!init) return 0; return ownsdesinfo.GetCNAME(len); }
00178 private:
00179         void ClearAllSourceFlags();
00180         int FillInReportBlocks(RTCPCompoundPacketBuilder *pack,const RTPTime &curtime,int maxcount,bool *full,int *added,int *skipped,bool *atendoflist);
00181         int FillInSDES(RTCPCompoundPacketBuilder *pack,bool *full,bool *processedall,int *added);
00182         void ClearAllSDESFlags();
00183         
00184         RTPSources &sources;
00185         RTPPacketBuilder &rtppacketbuilder;
00186         
00187         bool init;
00188         size_t maxpacketsize;
00189         double timestampunit;
00190         bool firstpacket;
00191         RTPTime prevbuildtime,transmissiondelay;
00192 
00193         class RTCPSDESInfoInternal : public RTCPSDESInfo
00194         {
00195         public:
00196                 RTCPSDESInfoInternal(RTPMemoryManager *mgr) : RTCPSDESInfo(mgr) { ClearFlags(); }
00197                 void ClearFlags()                       { pname = false; pemail = false; plocation = false; pphone = false; ptool = false; pnote = false; }
00198                 bool ProcessedName() const              { return pname; }
00199                 bool ProcessedEMail() const             { return pemail; }
00200                 bool ProcessedLocation() const          { return plocation; }
00201                 bool ProcessedPhone() const             { return pphone; }
00202                 bool ProcessedTool() const              { return ptool; }
00203                 bool ProcessedNote() const              { return pnote; }
00204                 void SetProcessedName(bool v)           { pname = v; }
00205                 void SetProcessedEMail(bool v)          { pemail = v; }
00206                 void SetProcessedLocation(bool v)       { plocation  = v; }
00207                 void SetProcessedPhone(bool v)          { pphone = v; }
00208                 void SetProcessedTool(bool v)           { ptool = v; }
00209                 void SetProcessedNote(bool v)           { pnote = v; }
00210         private:
00211                 bool pname,pemail,plocation,pphone,ptool,pnote;
00212         };
00213         
00214         RTCPSDESInfoInternal ownsdesinfo;
00215         int interval_name,interval_email,interval_location;
00216         int interval_phone,interval_tool,interval_note;
00217         bool doname,doemail,doloc,dophone,dotool,donote;
00218         bool processingsdes;
00219 
00220         int sdesbuildcount;
00221 };
00222 
00223 #endif // RTCPPACKETBUILDER_H
00224 

Generated on Thu Feb 8 16:22:05 2007 for jrtplib by  doxygen 1.5.1