RTP Trace System
1.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### RTCP Sender #### 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 RTCPSENDER_H 00019 #define RTCPSENDER_H 00020 00021 00022 #include "system.h" 00023 #include "socket.h" 00024 #include "timedthread.h" 00025 #include "rtcppacket.h" 00026 #include "rtpreceiver.h" 00027 #include "randomizer.h" 00028 00029 00030 #include <multimap.h> 00031 #include <algo.h> 00032 00033 00034 namespace Coral { 00035 00036 00044 class RTCPSender : public TimedThread 00045 { 00046 // ====== Constructor/Destructor ========================================= 00047 public: 00054 RTCPSender(); 00055 00065 RTCPSender(const card32 ssrc, 00066 Socket* senderSocket, 00067 RTPReceiver* receiver, 00068 const card64 bandwidth); 00069 00073 ~RTCPSender(); 00074 00075 00076 // ====== Initialize ===================================================== 00086 void init(const card32 ssrc, 00087 Socket* senderSocket, 00088 RTPReceiver* receiver, 00089 const card64 bandwidth); 00090 00091 00092 // ====== RTCP packet sending functions ================================== 00101 integer sendApp(const char* name, const void* data, const cardinal dataLength); 00102 00108 integer sendBye(); 00109 00116 integer sendReport(); 00117 00125 integer sendSDES(); 00126 00139 bool addSDESItem(const card8 type, const void* data, const card8 length = 0); 00140 00149 void removeSDESItem(const card8 type); 00150 00151 00152 // ====== Private data =================================================== 00153 private: 00154 void timerEvent(); 00155 double computeTransmissionInterval(); 00156 00157 SocketAddress* ReceiverAddress; 00158 Socket* SenderSocket; 00159 RTPReceiver* Receiver; 00160 card32 SSRC; 00161 multimap<const card8,RTCPSourceDescriptionItem*> SDESItemSet; 00162 Randomizer Random; 00163 00164 bool Initial; // True, if application has not yet sent an RTCP packet 00165 bool WeSent; // True, if data sent since 2nd previous RTCP report 00166 integer Senders; // Most current estimate for nr. of session senders 00167 integer Members; // Most current estimate for nr. of session members 00168 double RTCPBandwidth; // Bandwidth for RTCP in octets/second 00169 double AverageRTCPSize; // Average compound RTCP packet size 00170 }; 00171 00172 00173 } 00174 00175 00176 #endif