RTP Trace System
1.0
|
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