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