Source: congestionmanager.h
|
|
|
|
// ##########################################################################
// #### ####
// #### 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. |