RTP Trace System  1.0
trafficpolicer.h
Go to the documentation of this file.
00001 // ##########################################################################
00002 // ####                                                                  ####
00003 // ####                    Master Thesis Implementation                  ####
00004 // ####  Management of Layered Variable Bitrate Multimedia Streams over  ####
00005 // ####                  DiffServ with A Priori Knowledge                ####
00006 // ####                                                                  ####
00007 // #### ================================================================ ####
00008 // ####                                                                  ####
00009 // ####                                                                  ####
00010 // #### Traffic Policer                                                  ####
00011 // ####                                                                  ####
00012 // #### Version 1.00  --  February 19, 2001                              ####
00013 // ####                                                                  ####
00014 // #### Copyright (C) 2000/2001 Thomas Dreibholz                         ####
00015 // #### University of Bonn, Department of Computer Science IV            ####
00016 // #### EMail: dreibh@iem.uni-due.de                                     ####
00017 // #### WWW:   https://www.uni-due.de/~be0001/diplom/index.html          ####
00018 // ####                                                                  ####
00019 // ##########################################################################
00020 
00021 
00022 #ifndef TRAFFICPOLICER_H
00023 #define TRAFFICPOLICER_H
00024 
00025 
00026 #include "system.h"
00027 
00028 #include <multimap.h>
00029 
00030 
00031 namespace Coral {
00032 
00033 
00041 class TrafficPolicer
00042 {
00043    // ====== Constructor/Destructor =========================================
00044    public:
00048    TrafficPolicer();
00049 
00053    ~TrafficPolicer();
00054 
00055 
00056    // ====== Settings =======================================================
00062    inline card64 getBandwidth() const;
00063 
00069    inline void setBandwidth(const card64 bandwidth);
00070 
00076    inline double getBufferDelay() const;
00077 
00083    inline void setBufferDelay(const double bufferDelay);
00084 
00090    inline void setFlush(const bool on);
00091 
00092 
00093    // ====== Transmission methods ===========================================
00097    void flush();
00098 
00106    bool refreshBuffer(const card8 trafficClass,
00107                       const bool doRemapping);
00108 
00117    cardinal write(const cardinal bytes,
00118                   const card8    trafficClass,
00119                   const cardinal headerSize);
00120 
00126    void timerEvent();
00127 
00128 
00129 
00130    // ====== Simulator variables ============================================
00131    static card64 SimulatorTime;
00132 
00133 
00134    // ====== Private data ===================================================
00135    private:
00136    card64 SendTimeStamp;
00137    card64 Bandwidth;
00138    double BufferDelay;
00139    bool   ExceedFlush;
00140 
00141    struct TrafficPolicerPacket {
00142       card64   SendTimeStamp;
00143       card64   Bandwidth;
00144       double   BufferDelay;
00145       cardinal HeaderSize;
00146       cardinal PayloadSize;
00147       card8    TrafficClass;
00148       char     Data[0];
00149    };
00150    multimap<card64,TrafficPolicerPacket*> PacketSet;
00151 };
00152 
00153 
00154 }
00155 
00156 
00157 #include "trafficpolicer.icc"
00158 
00159 
00160 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines