|
|
// ########################################################################## // #### #### // #### Master Thesis Implementation #### // #### Management of Layered Variable Bitrate Multimedia Streams over #### // #### DiffServ with A Priori Knowledge #### // #### #### // #### ================================================================ #### // #### #### // #### #### // #### Trace Server #### // #### #### // #### Version 1.00 -- October 10, 2000 #### // #### #### // #### Copyright (C) 2000 Thomas Dreibholz #### // #### University of Bonn, Department of Computer Science IV #### // #### EMail: Dreibholz@bigfoot.com #### // #### WWW: http://www.bigfoot.com/~dreibholz/diplom/index.html #### // #### #### // ########################################################################## #ifndef TRACESERVER_H #define TRACESERVER_H #include "system.h" #include "tdtfmediareader.h" #include "socket.h" #include "traceencoderrepository.h" #include "rtpsender.h" #include "rtcppacket.h" #include "rtcpreceiver.h" #include "rtcpabstractserver.h" #include "traceclientapppacket.h" #include "bandwidthmanager.h" #ifdef USE_TRANSPORTINFO #include "extendedtransportinfo.h" #endif #include <multimap.h> #include <algo.h> namespace Coral { /** * This class is an trace server based on RTCPAbstractServer * * @short Trace Server * @author Thomas Dreibholz (Dreibholz@bigfoot.com) * @version 1.0 */ class TraceServer : public RTCPAbstractServer { // ====== Definitions ==================================================== private: struct User { RTCPAbstractServer::Client* Client; RTPSender Sender; Socket SenderSocket; InternetFlow Flow; TraceEncoderRepository Repository; TDTFMediaReader Reader; String MediaName; integer StreamIdentifier; card16 LastSequenceNumber; card16 PosChgSeqNumber; bool ClientPause; }; // ====== Constructor/Destructor ========================================= public: /** * Constructor for new TraceServer. * * @param bwManager BandwidthManager object. * @param maxPacketSize Maximum packet size. */ TraceServer(BandwidthManager* bwManager, const cardinal maxPacketSize = 1500); /** * Destructor. */ ~TraceServer(); // ====== 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(Client* client, const char* cname); /** * deleteClient() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#deleteClient */ void deleteClient(Client* client, const DeleteReason reason); /** * checkClient() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#checkClient */ bool checkClient(const Client* client); /** * appMessage() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#appMessage */ void appMessage(const Client* client, const char* name, const void* data, const cardinal dataLength); /** * sdesMessage() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#sdesMessage */ void sdesMessage(const Client* client, const card8 type, const char* data, const cardinal length); /** * receiverReport() implementation of RTCPAbstractServer. * * @see RTCPAbstractServer#receiverReport */ void receiverReport(const Client* client, const RTCPReceptionReportBlock* report, const cardinal layer); // ====== Execute user command =========================================== /** * Execute commands given in TraceClientAppPacket. * * @param client Client. * @param user User. * @param app TraceClientApp message. */ void userCommand(const Client* client, User* user, const TraceClientAppPacket* app); /** * Update QoS/congestion management. * * @param client Client to do congestion for. * @param user User data. */ void managementUpdate(const Client* client, User* user); // ====== Private data =================================================== private: BandwidthManager* BandwidthMgr; multimap<const cardinal,User*> UserSet; Synchronizable UserSetSync; cardinal MaxPacketSize; card32 OurSSRC; bool LossScalability; }; } #include "traceserver.icc" #endif
Generated by: viper@odin on Mon Oct 16 11:49:26 2000, using kdoc 2.0a36. |