RTP Trace System
1.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### RTCP Abstract Server Implementation #### 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 RTCPABSTRACTSERVER_H 00019 #define RTCPABSTRACTSERVER_H 00020 00021 00022 #include "system.h" 00023 #include "timedthread.h" 00024 #include "rtcppacket.h" 00025 #include "internetflow.h" 00026 #include "sourcestateinfo.h" 00027 00028 00029 #include <multimap.h> 00030 #include <algo.h> 00031 00032 00033 namespace Coral { 00034 00035 00043 class RTCPAbstractServer : public TimedThread 00044 { 00045 // ====== Definitions ==================================================== 00046 public: 00050 struct Client { 00051 card32 SSRC; 00052 InternetFlow ClientAddress; 00053 card64 TimeStamp; 00054 card64 Timeout; 00055 void* UserData; 00056 }; 00057 00058 00059 // ====== Constructor/Destructor ========================================= 00063 RTCPAbstractServer(); 00064 00068 ~RTCPAbstractServer(); 00069 00070 00071 // ====== Virtual functions ============================================== 00083 virtual void* newClient(Client* client, const char* cname) = 0; 00084 00085 00089 enum DeleteReason { 00090 DeleteReason_UserBye = 0, 00091 DeleteReason_Timeout = 1, 00092 DeleteReason_Shutdown = 2, 00093 DeleteReason_Error = 3, 00094 }; 00095 00105 virtual void deleteClient(Client* client, 00106 const DeleteReason reason) = 0; 00107 00115 virtual bool checkClient(const Client* client) = 0; 00116 00126 virtual void appMessage(const Client* client, 00127 const char* name, 00128 const void* data, 00129 const cardinal dataLength) = 0; 00130 00141 virtual void sdesMessage(const Client* client, 00142 const card8 type, 00143 const char* data, 00144 const cardinal length) = 0; 00145 00155 virtual void receiverReport(const Client* client, 00156 const RTCPReceptionReportBlock* report, 00157 const cardinal layer) = 0; 00158 00159 00166 virtual void outOfMemoryWarning(); 00167 00168 00174 inline cardinal getMembers(); 00175 00176 00177 // ====== Settings ======================================================= 00184 inline card64 getDefaultTimeout() const; 00185 00193 inline void setDefaultTimeout(const card64 timeout); 00194 00195 00196 // ====== stop() reimplementation ======================================== 00203 void stop(); 00204 00205 00206 // ====== RTCP packet handlers =========================================== 00207 private: 00211 friend class RTCPReceiver; 00212 00213 void receivedSenderReport(const InternetFlow flow, 00214 const card32 source, 00215 const RTCPReceptionReportBlock* report, 00216 const cardinal layer); 00217 void receivedReceiverReport(const InternetFlow flow, 00218 const card32 source, 00219 const RTCPReceptionReportBlock* report, 00220 const cardinal layer); 00221 void receivedSourceDescription(const InternetFlow flow, 00222 const card32 source, 00223 const card8 type, 00224 const char* data, 00225 const card8 length); 00226 void receivedApp(const InternetFlow flow, 00227 const card32 source, 00228 const char* name, 00229 const void* data, 00230 const card32 dataLength); 00231 void receivedBye(const InternetFlow flow, 00232 const card32 source, 00233 const DeleteReason reason); 00234 00235 Client* findClient(const card32 source, const InternetFlow flow); 00236 00237 00238 // ====== Private data =================================================== 00239 private: 00240 void timerEvent(); 00241 00242 00243 card64 DefaultTimeout; 00244 multimap<const cardinal,Client*> ClientSet; 00245 }; 00246 00247 00248 } 00249 00250 00251 #include "rtcpabstractserver.icc" 00252 00253 00254 #endif