|
|
// ########################################################################## // #### #### // #### RTP Audio Server Project #### // #### ============================ #### // #### #### // #### Audio Server #### // #### #### // #### Version 1.00 -- February 23, 2001 #### // #### #### // #### Copyright (C) 1999 Thomas Dreibholz #### // #### 2000 Universität Bonn, Abt. IV #### // #### 2001 EMail: Dreibholz@bigfoot.com #### // #### WWW: http://www.bigfoot.com/~dreibholz #### // #### #### // ########################################################################## #ifndef AUDIOSERVER_H #define AUDIOSERVER_H #include "system.h" #include "multiaudioreader.h" #include "socket.h" #include "audioencoderrepository.h" #include "rtpsender.h" #include "rtcppacket.h" #include "rtcpreceiver.h" #include "rtcpabstractserver.h" #include "extendedtransportinfo.h" #include "congestionmanagerclient.h" #include "audioclientapppacket.h" #include "QoS/qosmanager.h" #include <multimap.h> #include <algo.h> namespace Coral { /** * This class is an audio server based on RTCPAbstractServer * * @short Audio Server * @author Thomas Dreibholz (Dreibholz@bigfoot.com) * @version 1.0 */ class AudioServer : public RTCPAbstractServer, virtual public QoSManagerInterface { // ====== Definitions ==================================================== private: struct User { RTCPAbstractServer::Client* Client; RTPSender Sender; Socket SenderSocket; InternetFlow Flow; AudioEncoderRepository Repository; MultiAudioReader Reader; String MediaName; integer StreamIdentifier; card64 BandwidthLimit; card16 LastSequenceNumber; card16 PosChgSeqNumber; bool UserLimitPause; bool ManagerLimitPause; bool ClientPause; }; // ====== Constructor/Destructor ========================================= public: /** * Constructor for new AudioServer. * * @param qosManager QoSManager object. * @param maxPacketSize Maximum packet size. * @param congestionManager CongestionManagerClient object. */ AudioServer(QoSManager* qosManager, const cardinal maxPacketSize = 1500, CongestionManagerClient* congestionManager = NULL); /** * Destructor. */ ~AudioServer(); // ====== Status functions =============================================== /** * Get client SSRC. * * @return Client SSRC. */ card32 getOurSSRC() const; /** * Get loss scalibility setting. * * @return true, if loss scalability is on; false otherwise. */ inline bool getLossScalability() const; /** * Set loss scalibility setting. * * @param on true, if to set loss scalability on; false otherwise. */ inline void setLossScalability(const bool on); // ====== Packet size ==================================================== /** * Get maximum packet size. * * @return Maximum packet size. */ inline cardinal getMaxPacketSize() const; /** * Set maximum packet size. * * @param size Maximum packet size. * @return Maximum packet size set. */ inline cardinal setMaxPacketSize(const cardinal size); // ====== RTCPAbstractServer implementation ============================== /** * outOfMemoryWarning() implementation of RTCPAbstractServer. */ void outOfMemoryWarning(); /** * newClient() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#newClient */ void* newClient(RTCPAbstractServer::Client* client, const char* cname); /** * deleteClient() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#deleteClient */ void deleteClient(RTCPAbstractServer::Client* client, const DeleteReason reason); /** * checkClient() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#checkClient */ bool checkClient(const RTCPAbstractServer::Client* client); /** * appMessage() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#appMessage */ void appMessage(const RTCPAbstractServer::Client* client, const char* name, const void* data, const cardinal dataLength); /** * sdesMessage() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#sdesMessage */ void sdesMessage(const RTCPAbstractServer::Client* client, const card8 type, const char* data, const cardinal length); /** * receiverReport() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#receiverReport */ void receiverReport(const RTCPAbstractServer::Client* client, const RTCPReceptionReportBlock* report, const cardinal layer); // ====== QoS-Manager interface ========================================== /** * adaptTransportInfo() implementation of QoSManagerInterface. */ void adaptTransportInfo(card32 streamIdentifier, ExtendedTransportInfo ti); // ====== Execute user command =========================================== /** * Execute commands given in AudioClientAppPacket. * * @param client Client. * @param user User. * @param app AudioClientApp message. */ void userCommand(const RTCPAbstractServer::Client* client, User* user, const AudioClientAppPacket* app); /** * Update QoS/congestion management. * * @param client Client to do congestion for. * @param user User data. */ void managementUpdate(const RTCPAbstractServer::Client* client, User* user); // ====== Private data =================================================== private: QoSManager* QoSMgr; CongestionManagerClient* CongestionMgr; multimap<const cardinal,User*> UserSet; Synchronizable UserSetSync; cardinal MaxPacketSize; card32 OurSSRC; bool LossScalability; }; } #include "audioserver.icc" #endif
Generated by: viper@odin on Fri Feb 23 12:41:26 2001, using kdoc 2.0a36. |