RTP Trace System  1.0
seqnumvalidator.h
Go to the documentation of this file.
00001 // ##########################################################################
00002 // ####                                                                  ####
00003 // ####                      RTP Audio Server Project                    ####
00004 // ####                    ============================                  ####
00005 // ####                                                                  ####
00006 // #### Sequence Number Validator                                        ####
00007 // ####                                                                  ####
00008 // #### Version 1.00  --  February 16, 2001                              ####
00009 // ####                                                                  ####
00010 // #### Copyright (C) 1999  Thomas Dreibholz                             ####
00011 // ####               2000  Universität Bonn, Abt. IV                    ####
00012 // ####               2001  EMail: dreibh@iem.uni-due.de                 ####
00013 // ####                     WWW:   https://www.uni-due.de/~be0001        ####
00014 // ####                                                                  ####
00015 // ##########################################################################
00016 
00017 
00018 #ifndef SEQNUMVALIDATOR_H
00019 #define SEQNUMVALIDATOR_H
00020 
00021 
00022 #include "system.h"
00023 
00024 
00025 namespace Coral {
00026 
00027 
00037 class SeqNumValidator
00038 {
00039    // ====== Constructor ====================================================
00040    public:
00049    SeqNumValidator(const cardinal minSequential = 2,
00050                    const cardinal maxMisorder   = 100,
00051                    const cardinal maxDropout    = 3000,
00052                    const card64   seqMod        = (1 << 16));
00053 
00054 
00055    // ====== Status functions ===============================================
00061    inline card64 getPacketsReceived() const;
00062 
00069    inline card64 getPacketsLost() const;
00070 
00077    inline card64 getLastSeqNum() const;
00078 
00088    inline double getFractionLost() const;
00089 
00095    inline double getJitter() const;
00096 
00097 
00098    // ====== Sequence number validation =====================================
00099    enum ValidationResult {
00100       Valid           = 0,
00101       SourceProbation = 1,
00102       Jumped          = 2,
00103       Invalid         = 10,
00104       DuplicatePacket = Invalid + 0,
00105       InvalidSeqNum   = Invalid + 1
00106    };
00116    ValidationResult validate(const card64 sequenceNumber,
00117                              const card32 packetTimeStamp = 0);
00118 
00122    void reset();
00123 
00129    double calculateFractionLost();
00130 
00131 
00132    // ====== Private data ===================================================
00133    private:
00134    inline void init(const card64 sequenceNumber);
00135 
00136 
00137    card64   SeqMod;                // Constants.
00138    cardinal MaxDropout;
00139    cardinal MaxMisorder;
00140    cardinal MinSequential;
00141 
00142    card64   PrevPacketTimeStamp;   // Time stamp of previous packet.
00143    card64   PrevPacketArrivalTime; // Arrival time of previous packet.
00144    double   Jitter;                // Estimated jitter.  
00145    double   FractionLost;          // Fraction lost.
00146 
00147    card64   MaxSeq;                // Highest seq. number seen.
00148    card64   BaseSeq;               // Base seq. number.
00149    card64   BadSeq;                // Last 'bad' seq. number + 1.
00150    card32   Probation;             // Sequential packets till source is valid.
00151 
00152    card64   Cycles;                // Shifted count of seq. number cycles.
00153    card64   Received;              // Packets received.
00154    card64   ReceivedPrior;         // Packet received at last interval.
00155    card64   ExpectedPrior;         // Packet expected at last interval.
00156 
00157    bool     Uninitialized;         // Waiting for the first valid seq. number.
00158 };
00159 
00160 
00161 }
00162 
00163 
00164 #include "seqnumvalidator.icc"
00165 
00166 
00167 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines