RTP Trace System
1.0
|
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