Source: congestionmanager.h


Annotated List
Files
Globals
Hierarchy
Index
// ##########################################################################
// ####                                                                  ####
// ####                      RTP Audio Server Project                    ####
// ####                    ============================                  ####
// ####                                                                  ####
// #### Congestion Manager                                               ####
// ####                                                                  ####
// #### 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 CONGESTIONMANAGER_H
#define CONGESTIONMANAGER_H


#include "system.h"
#include "timedthread.h"
#include "socket.h"
#include "internetaddress.h"
#include "congestionmonitorreport.h"
#include "congestionmanagerpacket.h"


#include <multiset.h>
#include <algo.h>


namespace Coral {


/**
  * This class implements a the congestion manager.
  *
  * @short   Congestion Manager
  * @author  Thomas Dreibholz (Dreibholz@bigfoot.com)
  * @version 1.0
  */
class CongestionManager : public TimedThread
{
   // ====== Constructor/Destructor =========================================
   public:
   /**
     * Constructor for a new CongestionManager.
     *
     * @param reportSocket Socket to receive CongestionMonitorReports from.
     * @param memberSocket Socket to receive member requests from.
     */ 
   CongestionManager(InternetAddress* monitorAddress, Socket* memberSocket);

   /**
     * Destructor.
     */
   ~CongestionManager();


   // ====== Settings =======================================================
   /**
     * Get number of members serverd by the server.
     *
     * @return Number of members.
     */
   inline cardinal getMembers();

   /**
     * Get the default timeout in microseconds, after which a member is
     * assumed to be dead and removed.
     *
     * @return Default timeout in microseconds.
     */
   inline card64 getDefaultTimeout() const;

   /**
     * Set the default timeout in microseconds, after which a member is
     * assumed to be dead and removed. The new value will be used for all
     * new clients. Timeouts of old members are not changed!
     *
     * @param timeout Default timeout in microseconds.
     */
   inline void setDefaultTimeout(const card64 timeout);


   // ====== Private data ===================================================
   private:
   void timerEvent();


   struct ManagedMember {
      // Stream variables and constants
      card32                Identifier;
      PortableAddress       ReplyTo;
      Socket                ReplySocket;
      InternetFlow          Flow;
      ExtendedTransportInfo StreamDescription;

      // Suggestion
      ExtendedTransportInfo Suggestion;

      // Sequence number and timeout management
      card64                TimeStamp;
      card64                Timeout;
      card16                SequenceNumberIn;
   };


   ManagedMember* findMember(const CongestionManagerRequest* request);
   void deleteMember(ManagedMember* request);

   void handleRequest(const CongestionManagerRequest* request);
   void handleBye(const CongestionManagerRequest* request);

   void checkTimeouts();
   void handleRequests();
   void calculateSuggestions(const CongestionMonitorReport* report);
   void sendSuggestions();


   Socket*                  MonitorSocket;
   InternetAddress*         MonitorAddress;

   Socket*                  MemberSocket;
   multiset<ManagedMember*> MemberSet;

   CongestionMonitorReport  CongestionReport;
   card64                   DefaultTimeout;
};


}


#include "congestionmanager.icc"


#endif

Generated by: viper@odin on Fri Feb 23 12:41:26 2001, using kdoc 2.0a36.