RTP Trace System  1.0
rtppacket.h
Go to the documentation of this file.
00001 // ##########################################################################
00002 // ####                                                                  ####
00003 // ####                      RTP Audio Server Project                    ####
00004 // ####                    ============================                  ####
00005 // ####                                                                  ####
00006 // #### RTP 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 RTPPACKET_H
00019 #define RTPPACKET_H
00020 
00021 
00022 #include "system.h"
00023 #include "socket.h"
00024 
00025 
00026 namespace Coral {
00027 namespace RTPConstants {
00028 
00029 
00034 const cardinal RTPMaxPayloadLimit = 8192;
00035 
00041 const cardinal RTPDefaultMaxPayload = 1376;
00042 
00046 const cardinal RTPDefaultHeaderSize = 12;
00047 
00051 const card8 RTPVersion = 2;
00052 
00056 const double RTPMicroSecondsPerTimeStamp = 1000.0 / 16.0;
00057 
00058 
00059 #ifdef USE_TRANSPORTINFO
00060 
00066 const cardinal RTPMaxQualityLayers = 4;
00067 
00068 #else
00069 
00075 const cardinal RTPMaxQualityLayers = 16;
00076 
00077 #endif
00078 
00079 
00080 }
00081 }
00082 
00083 
00084 namespace Coral {
00085 
00086 
00097 class RTPPacket
00098 {
00099    // ====== Constructor ====================================================
00100    public:
00104    RTPPacket();   
00105 
00106 
00107    // ====== Get methods ====================================================
00113    inline card8 getVersion() const;
00114 
00120    inline card8 getPadding() const;
00121 
00127    inline card8 getExtension() const;
00128 
00134    inline card8 getCSRCCount() const;
00135 
00141    inline bool getMarker() const;
00142 
00148    inline card8 getPayloadType() const;
00149 
00155    inline card16 getSequenceNumber() const;
00156 
00162    inline card32 getTimeStamp() const;
00163 
00169    inline card32 getSSRC() const;
00170 
00177    inline card32 getCSRC(cardinal index) const;
00178 
00179 
00185    inline cardinal calculateHeaderSize() const;
00186 
00192    inline char* getPayloadData() const;
00193 
00199    inline cardinal getMaxPayloadSize() const;
00200   
00201 
00202    // ====== Set methods ====================================================
00208    inline void setVersion(const card8 version);
00209 
00215    inline void setPadding(const card8 padding);
00216    
00222    inline void setExtension(const card8 extension);
00223 
00229    inline void setCSRCCount(const card8 count);
00230 
00236    inline void setMarker(const bool marker);
00237 
00243    inline void setPayloadType(const card8 payloadType);
00244 
00250    inline void setSequenceNumber(const card16 sequenceNumber);
00251 
00257    inline void setTimeStamp(const card32 timeStamp);
00258 
00264    inline void setSSRC(const card32 ssrc);
00265 
00272    inline void setCSRC(const cardinal index, const card32 csrc);
00273 
00274 
00278    friend ostream& operator<<(ostream& os, const RTPPacket& packet);
00279 
00280 
00281    // ====== Private data ===================================================   
00282    private:
00283 #if CPU_BYTEORDER == BIG_ENDIAN
00284    card8 V:2;                 // Version
00285    card8 P:1;                 // Padding
00286    card8 X:1;                 // Extension
00287    card8 CC:4;                // CSRC Count
00288    card8 M:1;                 // Marker
00289    card8 PT:7;                // Payload Type
00290 #elif CPU_BYTEORDER == LITTLE_ENDIAN
00291    card8 CC:4;                // CSRC Count
00292    card8 X:1;                 // Extension
00293    card8 P:1;                 // Padding
00294    card8 V:2;                 // Version
00295    card8 PT:7;                // Payload Type
00296    card8 M:1;                 // Marker
00297 #else
00298 #error "Unknown CPU_BYTEORDER setting!"
00299 #endif
00300    card16 SequenceNumber;           // Sequence number
00301    card32 TimeStamp;                // TimeStamp
00302    card32 SSRC;                     // Synchronization Source (SSRC) identifier
00303    card32 CSRC[16];                 // Contributing Source (CSRC) identifiers
00304    char   Data[RTPConstants::RTPMaxPayloadLimit];    // Payload data
00305 };
00306 
00307 
00308 }
00309 
00310 
00311 #include "rtppacket.icc"
00312 
00313 
00314 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines