RTP Trace System  1.0
rtcppacket.h
Go to the documentation of this file.
00001 // ##########################################################################
00002 // ####                                                                  ####
00003 // ####                      RTP Audio Server Project                    ####
00004 // ####                    ============================                  ####
00005 // ####                                                                  ####
00006 // #### RTCP Packet                                                      ####
00007 // ####                                                                  ####
00008 // #### Version 1.00  --  February 16, 2001                              ####
00009 // ####                                                                  ####
00010 // #### Copyright (C) 1999  Thomas Dreibholz                             ####
00011 // ####               2000  Universität Bonn, Abt. IV                    ####
00012 // ####               2001  EMail: dreibh@iem.uni-due.de                 ####
00013 // ####                     WWW:   https://www.uni-due.de/~be0001        ####
00014 // ####                                                                  ####
00015 // ##########################################################################
00016 
00017 
00018 #ifndef RTCPPACKET_H
00019 #define RTCPPACKET_H
00020 
00021 
00022 #include <endian.h>
00023 
00024 
00025 #include "system.h"
00026 #include "rtppacket.h"
00027 
00028 
00029 namespace Coral {
00030 
00031 
00035 enum RTCP_Type
00036 {
00037   RTCP_SR   = 200,
00038   RTCP_RR   = 201,
00039   RTCP_SDES = 202,
00040   RTCP_BYE  = 203,
00041   RTCP_APP  = 204
00042 };
00043 
00044 
00048 enum RTCP_SDES_Type
00049 {
00050   RTCP_SDES_END   = 0,
00051   RTCP_SDES_CNAME = 1,
00052   RTCP_SDES_NAME  = 2,
00053   RTCP_SDES_EMAIL = 3,
00054   RTCP_SDES_PHONE = 4,
00055   RTCP_SDES_LOC   = 5,
00056   RTCP_SDES_TOOL  = 6,
00057   RTCP_SDES_NOTE  = 7,
00058   RTCP_SDES_PRIV  = 8
00059 };
00060 
00061 
00073 class RTCPCommonHeader
00074 {   
00075    // ====== Constructor ====================================================
00076    public:
00080    RTCPCommonHeader();
00081 
00082 
00083    // ====== Get methods ====================================================
00089    inline card8 getVersion() const;
00090 
00096    inline card8 getPadding() const;
00097 
00103    inline card8 getCount() const;
00104 
00110    inline card8 getPacketType() const;
00111 
00117    inline card16 getLength() const;
00118 
00119 
00120    // ====== Set methods ====================================================
00126    inline void setVersion(const card8 version);
00127 
00133    inline void setPadding(const card8 padding);
00134 
00140    inline void setCount(const card8 count);
00141 
00147    inline void setPacketType(const card8 packetType);
00148 
00154    inline void setLength(const card16 length);
00155 
00156 
00157    // ====== Protected data =================================================
00158    protected:
00159 #if CPU_BYTEORDER == BIG_ENDIAN
00160    card8 V:2;                             // Protocol Version
00161    card8 P:1;                             // Padding Flag
00162    card8 C:5;                             // Count varies by Packet Type (RC/SC)
00163 #elif CPU_BYTEORDER == LITTLE_ENDIAN
00164    card8 C:5;                             // Count varies by Packet Type (RC/SC)
00165    card8 P:1;                             // Padding Flag
00166    card8 V:2;                             // Protocol Version
00167 #else
00168 #error "Unknown CPU_BYTEORDER setting!"
00169 #endif
00170    card8 PT:8;                            // RTCP Packet Type   
00171    card16 Length;                         // Packet length in words minus one
00172 };
00173 
00174 
00186 class RTCPSenderInfoBlock
00187 {
00188    // ====== Constructor ====================================================
00189    public:
00193    RTCPSenderInfoBlock();
00194 
00195 
00196    // ====== Get methods ====================================================
00202    inline card64 getNTPTimeStamp() const;
00203 
00209    inline card32 getRTPTimeStamp() const;
00210 
00211 
00217    inline card32 getPacketsSent() const;
00218 
00224    inline card32 getOctetsSent() const;
00225 
00226 
00227    // ====== Set methods ====================================================
00233    inline void setNTPTimeStamp(const card64 timeStamp);
00234 
00240    inline void setRTPTimeStamp(const card32 timeStamp);
00241 
00247    inline void setPacketsSent(const card32 packets);
00248 
00254    inline void setOctetsSent(const card32 octets);
00255 
00256 
00257    // ====== Protected data =================================================
00258    protected:
00259    card32 NTP_MostSignificant;     // NTP Timestamp (most  significant word)
00260    card32 NTP_LeastSignificant;    // NTP Timestamp (least significant word)
00261    card32 RTPTimeStamp;            // RTP Timestamp
00262    card32 PacketsSent;             // Packets sent
00263    card32 OctetsSent;              // Octets sent
00264 };
00265 
00266 
00278 class RTCPReceptionReportBlock
00279 {
00280    // ====== Constructor ====================================================
00281    public:
00285    RTCPReceptionReportBlock();
00286 
00292    RTCPReceptionReportBlock(const card32 ssrc);
00293 
00294 
00300    void init(const card32 ssrc);
00301 
00302 
00303    // ====== Get methods ====================================================
00309    inline card32 getSSRC() const;
00310 
00316    inline double getFractionLost() const;
00317 
00323    inline card32 getPacketsLost() const;
00324 
00330    inline card32 getLastSeqNum() const;
00331 
00337    inline card32 getJitter() const;
00338 
00344    inline card32 getLSR() const;
00345 
00351    inline card32 getDLSR() const;
00352 
00353 
00354    // ====== Set methods ====================================================
00360    inline void setSSRC(card32 ssrc);
00361 
00367    inline void setFractionLost(const double fraction);
00368 
00374    inline void setPacketsLost(const card32 packetsLost);
00375 
00381    inline void setLastSeqNum(const card32 lastSeq);
00382 
00388    inline void setJitter(const card32 jitter);
00389 
00395    inline void setLSR(const card32 lsr);
00396 
00402    inline void setDLSR(const card32 dlsr);
00403 
00404 
00405    // ====== Protected data =================================================
00406    protected:
00407    card32 SSRC;                           // Data Source being reported
00408    card32 Fraction:8;                     // Fraction lost since last SR/RR
00409    card32 Lost:24;                        // Cumulative no. of Packets lost (signed!)
00410    card32 LastSeq;                        // Extended last sequence no. received
00411    card32 Jitter;                         // Interarrival Jitter
00412    card32 LSR;                            // Last SR Packet from this source
00413    card32 DLSR;                           // Delay since last SR Packet
00414 };
00415 
00416 
00428 class RTCPReport : public RTCPCommonHeader
00429 {
00430    // ====== Constructor ====================================================
00431    public:
00435    RTCPReport();
00436 
00437 
00438    // ====== Get methods ====================================================
00444    inline card32 getSSRC() const;
00445 
00446 
00447    // ====== Set methods ====================================================
00453    inline void setSSRC(const card32 ssrc);
00454 
00455 
00456    // ====== Protected data =================================================
00457    protected:
00458    card32 SSRC;                  // Sender or Receiver generating this report
00459 };
00460 
00461 
00473 class RTCPSenderReport : public RTCPReport, public RTCPSenderInfoBlock
00474 {
00475    // ====== Constructor ====================================================
00476    public:
00480    RTCPSenderReport();
00481 
00488    RTCPSenderReport(const card32 syncSource, const card8 count = 0);
00489 
00490 
00497    void init(const card32 syncSource, const card8 count = 0);
00498 
00499 
00503    RTCPReceptionReportBlock rr[0];      // Variable length RR list
00504 };
00505 
00506 
00518 class RTCPReceiverReport : public RTCPReport
00519 {
00520    // ====== Constructor ====================================================
00521    public:
00525    RTCPReceiverReport();
00526 
00533    RTCPReceiverReport(const card32 syncSource, const card8 count = 0);
00534 
00535 
00542    void init(const card32 syncSource, const card8 count = 0);
00543    
00544 
00548    RTCPReceptionReportBlock rr[0];      // Variable length RR list
00549 };
00550 
00551 
00563 class RTCPSourceDescriptionItem
00564 {
00565    public:
00569    card8 Type;
00570 
00574    card8 Length;
00575 
00579    char Data[0];
00580 };
00581 
00582 
00594 class RTCPSourceDescriptionChunk
00595 {
00596    public:
00600    card32 SRC;
00601 
00605    RTCPSourceDescriptionItem Item[1];
00606 };
00607 
00608 
00620 class RTCPSourceDescription : public RTCPCommonHeader
00621 {
00622    // ====== Constructor ====================================================
00623    public:
00627    RTCPSourceDescription();
00628 
00634    RTCPSourceDescription(const card8 count);
00635 
00636 
00642    void init(const card8 count);
00643 
00644 
00648    RTCPSourceDescriptionChunk Chunk[1];
00649 };
00650 
00651 
00663 class RTCPBye : public RTCPCommonHeader
00664 {
00665    // ====== Constructor ====================================================
00666    public:
00670    RTCPBye();
00671 
00677    RTCPBye(const card8 count);
00678 
00679 
00685    void init(const card8 count);
00686 
00687 
00688    // ====== Get methods ====================================================
00695    inline card32 getSource(const cardinal index) const;
00696 
00697 
00698    // ====== Set methods ====================================================
00705    inline void setSource(const cardinal index, const card32 source);
00706 
00707 
00708    // ====== Private data ===================================================
00709    private:   
00710    card32 Source[0];
00711 };
00712 
00713 
00725 class RTCPApp : public RTCPCommonHeader
00726 {
00727    // ====== Constructor ====================================================
00728    public:
00732    RTCPApp();
00733 
00738    RTCPApp(const card8 subtype);
00739 
00740 
00741    /*
00742      * Initialize.
00743      * @param subtype RTCP APP subtype.
00744      */
00745    void init(const card8 subtype);
00746 
00747 
00748    // ====== Get methods ====================================================
00754    inline card32 getSource() const;
00755 
00761    inline char* getName();
00762 
00768    inline char* getData();
00769 
00770 
00771    // ====== Set methods ====================================================
00777    inline void setSource(const card32 source);
00778 
00779 
00780    // ====== Private data ===================================================
00781    private:
00782    card32 Source;
00783    char   Name[4];
00784    char   Data[0];
00785 };
00786 
00787 
00788 }
00789 
00790 
00791 #include "rtcppacket.icc"
00792 
00793 
00794 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines