|
Mixe for Privacy and Anonymity in the Internet
|
00001 /* 00002 Copyright (c) 2000, The JAP-Team 00003 All rights reserved. 00004 Redistribution and use in source and binary forms, with or without modification, 00005 are permitted provided that the following conditions are met: 00006 00007 - Redistributions of source code must retain the above copyright notice, 00008 this list of conditions and the following disclaimer. 00009 00010 - Redistributions in binary form must reproduce the above copyright notice, 00011 this list of conditions and the following disclaimer in the documentation and/or 00012 other materials provided with the distribution. 00013 00014 - Neither the name of the University of Technology Dresden, Germany nor the names of its contributors 00015 may be used to endorse or promote products derived from this software without specific 00016 prior written permission. 00017 00018 00019 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS 00020 OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 00021 AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 00022 BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00023 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 00024 OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 00025 IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00026 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 00027 */ 00028 00029 #include "StdAfx.h" 00030 #include "CALogPacketStats.hpp" 00031 #include "CAUtil.hpp" 00032 #include "CAMuxSocket.hpp" 00033 #include "CAMsg.hpp" 00034 00035 #ifdef LOG_PACKET_TIMES 00036 00040 THREAD_RETURN loopLogPacketStats(void* param) 00041 { 00042 CALogPacketStats* pLog=(CALogPacketStats*)param; 00043 UINT32 countLog=0; 00044 while(pLog->m_bRunLog) 00045 { 00046 if(countLog==0) 00047 { 00048 pLog->logTimeingStats(); 00049 pLog->resetTimeingStats(); 00050 countLog=pLog->m_iLogIntervallInHalfMinutes; 00051 } 00052 sSleep(30); 00053 countLog--; 00054 } 00055 THREAD_RETURN_SUCCESS; 00056 } 00057 00058 SINT32 CALogPacketStats::start() 00059 { 00060 resetTimeingStats(); 00061 m_pthreadLog=new CAThread((UINT8*)"Packet Stats Logging Thread"); 00062 m_pthreadLog->setMainLoop(loopLogPacketStats); 00063 m_bRunLog=true; 00064 return m_pthreadLog->start(this); 00065 } 00066 00067 SINT32 CALogPacketStats::stop() 00068 { 00069 m_bRunLog=false; 00070 if(m_pthreadLog!=NULL) 00071 { 00072 m_pthreadLog->join(); 00073 delete m_pthreadLog; 00074 m_pthreadLog=NULL; 00075 } 00076 00077 return E_SUCCESS; 00078 } 00079 00080 SINT32 CALogPacketStats::addToTimeingStats(const tQueueEntry& oQueueEntry,UINT32 uType,bool bUpstream) 00081 { 00082 m_csTimeingStats.lock(); 00083 UINT32 proccessingTime=diff64(oQueueEntry.timestamp_proccessing_end,oQueueEntry.timestamp_proccessing_start); 00084 UINT32 proccessingTimeOP=diff64(oQueueEntry.timestamp_proccessing_end_OP,oQueueEntry.timestamp_proccessing_start_OP); 00085 if(bUpstream) 00086 { 00087 if(uType==CHANNEL_DATA) 00088 { 00089 m_timingCountDataPacketsUpstream++; 00090 add64(m_timingSumDataPacketUpstream,proccessingTime); 00091 if(proccessingTime>m_timingMaxDataPacketUpstream) 00092 m_timingMaxDataPacketUpstream=proccessingTime; 00093 else if(m_timingMinDataPacketUpstream>proccessingTime) 00094 m_timingMinDataPacketUpstream=proccessingTime; 00095 add64(m_timingSumDataPacketUpstreamOP,proccessingTimeOP); 00096 if(proccessingTimeOP>m_timingMaxDataPacketUpstreamOP) 00097 m_timingMaxDataPacketUpstreamOP=proccessingTimeOP; 00098 else if(m_timingMinDataPacketUpstreamOP>proccessingTimeOP) 00099 m_timingMinDataPacketUpstreamOP=proccessingTimeOP; 00100 } 00101 else if(uType==CHANNEL_CLOSE) 00102 { 00103 m_timingCountClosePacketsUpstream++; 00104 add64(m_timingSumClosePacketUpstream,proccessingTime); 00105 if(proccessingTime>m_timingMaxClosePacketUpstream) 00106 m_timingMaxClosePacketUpstream=proccessingTime; 00107 else if(m_timingMinClosePacketUpstream>proccessingTime) 00108 m_timingMinClosePacketUpstream=proccessingTime; 00109 add64(m_timingSumClosePacketUpstreamOP,proccessingTimeOP); 00110 if(proccessingTimeOP>m_timingMaxClosePacketUpstreamOP) 00111 m_timingMaxClosePacketUpstreamOP=proccessingTimeOP; 00112 else if(m_timingMinClosePacketUpstreamOP>proccessingTimeOP) 00113 m_timingMinClosePacketUpstreamOP=proccessingTimeOP; 00114 } 00115 else 00116 {//open 00117 m_timingCountOpenPacketsUpstream++; 00118 add64(m_timingSumOpenPacketUpstream,proccessingTime); 00119 if(proccessingTime>m_timingMaxOpenPacketUpstream) 00120 m_timingMaxOpenPacketUpstream=proccessingTime; 00121 else if(m_timingMinOpenPacketUpstream>proccessingTime) 00122 m_timingMinOpenPacketUpstream=proccessingTime; 00123 add64(m_timingSumOpenPacketUpstreamOP,proccessingTimeOP); 00124 if(proccessingTimeOP>m_timingMaxOpenPacketUpstreamOP) 00125 m_timingMaxOpenPacketUpstreamOP=proccessingTimeOP; 00126 else if(m_timingMinOpenPacketUpstreamOP>proccessingTimeOP) 00127 m_timingMinOpenPacketUpstreamOP=proccessingTimeOP; 00128 } 00129 #ifdef USE_POOL 00130 UINT32 poolTime=diff64(oQueueEntry.pool_timestamp_out,oQueueEntry.pool_timestamp_in); 00131 m_timingCountPoolPacketsUpstream++; 00132 add64(m_timingSumPoolPacketUpstream,poolTime); 00133 if(poolTime>m_timingMaxPoolPacketUpstream) 00134 m_timingMaxPoolPacketUpstream=poolTime; 00135 else if(m_timingMinPoolPacketUpstream>poolTime) 00136 m_timingMinPoolPacketUpstream=poolTime; 00137 #endif 00138 #ifdef _DEBUG 00139 #ifndef USE_POOL 00140 CAMsg::printMsg(LOG_CRIT,"Upload Packet processing time (arrival --> send): %u µs -- Queue out --> Queue in %u µs\n", 00141 proccessingTime,proccessingTimeOP); 00142 #else 00143 CAMsg::printMsg(LOG_CRIT,"Upload Packet processing time (arrival --> send): %u µs -- Queue out --> Queue in %u µs -- Pool Time: %u µs\n", 00144 proccessingTime,proccessingTimeOP,poolTime); 00145 #endif 00146 #endif 00147 } 00148 else //downstream 00149 { 00150 //always data packets 00151 m_timingCountDataPacketsDownStream++; 00152 add64(m_timingSumDataPacketDownStream,proccessingTime); 00153 if(proccessingTime>m_timingMaxDataPacketDownStream) 00154 m_timingMaxDataPacketDownStream=proccessingTime; 00155 else if(m_timingMinDataPacketDownStream>proccessingTime) 00156 m_timingMinDataPacketDownStream=proccessingTime; 00157 add64(m_timingSumDataPacketDownStreamOP,proccessingTimeOP); 00158 if(proccessingTimeOP>m_timingMaxDataPacketDownStreamOP) 00159 m_timingMaxDataPacketDownStreamOP=proccessingTimeOP; 00160 else if(m_timingMinDataPacketDownStreamOP>proccessingTimeOP) 00161 m_timingMinDataPacketDownStreamOP=proccessingTimeOP; 00162 #ifdef USE_POOL 00163 UINT32 poolTime=diff64(oQueueEntry.pool_timestamp_out,oQueueEntry.pool_timestamp_in); 00164 m_timingCountPoolPacketsDownStream++; 00165 add64(m_timingSumPoolPacketDownStream,poolTime); 00166 if(poolTime>m_timingMaxPoolPacketDownStream) 00167 m_timingMaxPoolPacketDownStream=poolTime; 00168 else if(m_timingMinPoolPacketDownStream>poolTime) 00169 m_timingMinPoolPacketDownStream=poolTime; 00170 #endif 00171 #ifdef _DEBUG 00172 #ifndef USE_POOL 00173 CAMsg::printMsg(LOG_CRIT,"Download Packet processing time (arrival --> send): %u µs -- Queue out --> Queue in %u µs\n", 00174 proccessingTime,proccessingTimeOP); 00175 #else 00176 CAMsg::printMsg(LOG_CRIT,"Download Packet processing time (arrival --> send): %u µs -- Queue out --> Queue in %u µs -- Pool Time: %u µs\n", 00177 proccessingTime,proccessingTimeOP,poolTime); 00178 #endif 00179 #endif 00180 } 00181 00182 m_csTimeingStats.unlock(); 00183 return E_SUCCESS; 00184 } 00185 00186 SINT32 CALogPacketStats::logTimeingStats() 00187 { 00188 m_csTimeingStats.lock(); 00189 UINT32 aveDataUpstream=0; 00190 UINT32 aveCloseUpstream=0; 00191 UINT32 aveOpenUpstream=0; 00192 UINT32 aveDataDownStream=0; 00193 UINT32 aveDataUpstreamOP=0; 00194 UINT32 aveCloseUpstreamOP=0; 00195 UINT32 aveOpenUpstreamOP=0; 00196 UINT32 aveDataDownStreamOP=0; 00197 if(m_timingCountOpenPacketsUpstream>0) 00198 { 00199 aveOpenUpstream=div64(m_timingSumOpenPacketUpstream,m_timingCountOpenPacketsUpstream); 00200 aveOpenUpstreamOP=div64(m_timingSumOpenPacketUpstreamOP,m_timingCountOpenPacketsUpstream); 00201 } 00202 if(m_timingCountDataPacketsUpstream>0) 00203 { 00204 aveDataUpstream=div64(m_timingSumDataPacketUpstream,m_timingCountDataPacketsUpstream); 00205 aveDataUpstreamOP=div64(m_timingSumDataPacketUpstreamOP,m_timingCountDataPacketsUpstream); 00206 } 00207 if(m_timingCountClosePacketsUpstream>0) 00208 { 00209 aveCloseUpstream=div64(m_timingSumClosePacketUpstream,m_timingCountClosePacketsUpstream); 00210 aveCloseUpstreamOP=div64(m_timingSumClosePacketUpstreamOP,m_timingCountClosePacketsUpstream); 00211 } 00212 if(m_timingCountDataPacketsDownStream>0) 00213 { 00214 aveDataDownStream=div64(m_timingSumDataPacketDownStream,m_timingCountDataPacketsDownStream); 00215 aveDataDownStreamOP=div64(m_timingSumDataPacketDownStreamOP,m_timingCountDataPacketsDownStream); 00216 } 00217 00218 #ifdef USE_POOL 00219 UINT32 avePoolUpstream=0; 00220 UINT32 avePoolDownStream=0; 00221 if(m_timingCountPoolPacketsUpstream>0) 00222 avePoolUpstream=div64(m_timingSumPoolPacketUpstream,m_timingCountPoolPacketsUpstream); 00223 if(m_timingCountPoolPacketsDownStream>0) 00224 aveDataDownStream=div64(m_timingSumPoolPacketDownStream,m_timingCountPoolPacketsDownStream); 00225 #endif 00226 CAMsg::printMsg(LOG_DEBUG,"Packet timeing stats [µs] -- Data Packets Upstream [%u] (Min/Max/Ave): %u/%u/%u -- Open Packets Upstream [%u]: %u/%u/%u Close Packets Upstream [%u] %u/%u/%u -- Data Packets Downstream [%u]: %u/%u/%u \n", 00227 m_timingCountDataPacketsUpstream,m_timingMinDataPacketUpstream,m_timingMaxDataPacketUpstream,aveDataUpstream, 00228 m_timingCountOpenPacketsUpstream,m_timingMinOpenPacketUpstream,m_timingMaxOpenPacketUpstream,aveOpenUpstream, 00229 m_timingCountClosePacketsUpstream,m_timingMinClosePacketUpstream,m_timingMaxClosePacketUpstream,aveCloseUpstream, 00230 m_timingCountDataPacketsDownStream,m_timingMinDataPacketDownStream,m_timingMaxDataPacketDownStream,aveDataDownStream); 00231 00232 CAMsg::printMsg(LOG_DEBUG,"Packet timeing stats (only Queue out --> Queue in)[µs] -- Data Packets Upstream [%u] (Min/Max/Ave): %u/%u/%u -- Open Packets Upstream [%u]: %u/%u/%u Close Packets Upstream [%u] %u/%u/%u -- Data Packets Downstream [%u]: %u/%u/%u \n", 00233 m_timingCountDataPacketsUpstream,m_timingMinDataPacketUpstreamOP,m_timingMaxDataPacketUpstreamOP,aveDataUpstreamOP, 00234 m_timingCountOpenPacketsUpstream,m_timingMinOpenPacketUpstreamOP,m_timingMaxOpenPacketUpstreamOP,aveOpenUpstreamOP, 00235 m_timingCountClosePacketsUpstream,m_timingMinClosePacketUpstreamOP,m_timingMaxClosePacketUpstreamOP,aveCloseUpstreamOP, 00236 m_timingCountDataPacketsDownStream,m_timingMinDataPacketDownStreamOP,m_timingMaxDataPacketDownStreamOP,aveDataDownStreamOP); 00237 #ifdef USE_POOL 00238 CAMsg::printMsg(LOG_DEBUG,"Pool timeing stats [µs] -- Upstream [%u] (Min/Max/Ave): %u/%u/%u -- Downstream [%u]: %u/%u/%u\n", 00239 m_timingCountPoolPacketsUpstream,m_timingMinPoolPacketUpstream,m_timingMaxPoolPacketUpstream,avePoolUpstream, 00240 m_timingCountPoolPacketsDownStream,m_timingMinPoolPacketDownStream,m_timingMaxPoolPacketDownStream,avePoolDownStream); 00241 #endif 00242 m_csTimeingStats.unlock(); 00243 return E_SUCCESS; 00244 } 00245 00246 SINT32 CALogPacketStats::resetTimeingStats() 00247 { 00248 m_csTimeingStats.lock(); 00249 m_timingMaxDataPacketUpstream=0; 00250 m_timingMaxDataPacketDownStream=0; 00251 m_timingMaxClosePacketUpstream=0; 00252 m_timingMinDataPacketUpstream=0xFFFFFFFF; 00253 m_timingMinDataPacketDownStream=0xFFFFFFFF; 00254 m_timingMinClosePacketUpstream=0xFFFFFFFF; 00255 m_timingCountDataPacketsUpstream=m_timingCountDataPacketsDownStream=0; 00256 m_timingCountClosePacketsUpstream=0; 00257 setZero64(m_timingSumDataPacketUpstream); 00258 setZero64(m_timingSumDataPacketDownStream); 00259 setZero64(m_timingSumClosePacketUpstream); 00260 m_timingMaxOpenPacketUpstream=0; 00261 m_timingMinOpenPacketUpstream=0xFFFFFFFF; 00262 m_timingCountOpenPacketsUpstream=0; 00263 setZero64(m_timingSumOpenPacketUpstream); 00264 00265 m_timingMaxDataPacketUpstreamOP=0; 00266 m_timingMaxDataPacketDownStreamOP=0; 00267 m_timingMaxClosePacketUpstreamOP=0; 00268 m_timingMinDataPacketUpstreamOP=0xFFFFFFFF; 00269 m_timingMinDataPacketDownStreamOP=0xFFFFFFFF; 00270 m_timingMinClosePacketUpstreamOP=0xFFFFFFFF; 00271 setZero64(m_timingSumDataPacketUpstreamOP); 00272 setZero64(m_timingSumDataPacketDownStreamOP); 00273 setZero64(m_timingSumClosePacketUpstreamOP); 00274 m_timingMaxOpenPacketUpstreamOP=0; 00275 m_timingMinOpenPacketUpstreamOP=0xFFFFFFFF; 00276 setZero64(m_timingSumOpenPacketUpstreamOP); 00277 00278 #ifdef USE_POOL 00279 m_timingMaxPoolPacketUpstream=0; 00280 m_timingMaxPoolPacketDownStream=0; 00281 m_timingMinPoolPacketUpstream=m_timingMinPoolPacketDownStream=0xFFFFFFFF; 00282 m_timingCountPoolPacketsUpstream=0; 00283 setZero64(m_timingSumPoolPacketUpstream); 00284 m_timingCountPoolPacketsDownStream=0; 00285 setZero64(m_timingSumPoolPacketDownStream); 00286 #endif 00287 m_csTimeingStats.unlock(); 00288 return E_SUCCESS; 00289 } 00290 #endif
1.7.6.1