RTP Trace System  1.0
rtcpabstractserver.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines