|
|
@@ -59,11 +59,6 @@ unsigned long TimeOut = 120;
|
|
|
bool Debug = false;
|
|
|
|
|
|
|
|
|
-unsigned long CircleBuf::BwReadLimit=0;
|
|
|
-unsigned long CircleBuf::BwTickReadData=0;
|
|
|
-struct timeval CircleBuf::BwReadTick={0,0};
|
|
|
-const unsigned int CircleBuf::BW_HZ=10;
|
|
|
-
|
|
|
// CircleBuf::CircleBuf - Circular input buffer /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
|
@@ -71,8 +66,6 @@ CircleBuf::CircleBuf(unsigned long Size) : Size(Size), Hash(0)
|
|
|
{
|
|
|
Buf = new unsigned char[Size];
|
|
|
Reset();
|
|
|
-
|
|
|
- CircleBuf::BwReadLimit = _config->FindI("Acquire::http::DlLimit",0)*1024;
|
|
|
}
|
|
|
/*}}}*/
|
|
|
// CircleBuf::Reset - Reset to the default state /*{{{*/
|
|
|
@@ -98,45 +91,16 @@ void CircleBuf::Reset()
|
|
|
is non-blocking.. */
|
|
|
bool CircleBuf::Read(int Fd)
|
|
|
{
|
|
|
- unsigned long BwReadMax;
|
|
|
-
|
|
|
while (1)
|
|
|
{
|
|
|
// Woops, buffer is full
|
|
|
if (InP - OutP == Size)
|
|
|
return true;
|
|
|
|
|
|
- // what's left to read in this tick
|
|
|
- BwReadMax = CircleBuf::BwReadLimit/BW_HZ;
|
|
|
-
|
|
|
- if(CircleBuf::BwReadLimit) {
|
|
|
- struct timeval now;
|
|
|
- gettimeofday(&now,0);
|
|
|
-
|
|
|
- unsigned long d = (now.tv_sec-CircleBuf::BwReadTick.tv_sec)*1000000 +
|
|
|
- now.tv_usec-CircleBuf::BwReadTick.tv_usec;
|
|
|
- if(d > 1000000/BW_HZ) {
|
|
|
- CircleBuf::BwReadTick = now;
|
|
|
- CircleBuf::BwTickReadData = 0;
|
|
|
- }
|
|
|
-
|
|
|
- if(CircleBuf::BwTickReadData >= BwReadMax) {
|
|
|
- usleep(1000000/BW_HZ);
|
|
|
- return true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
// Write the buffer segment
|
|
|
int Res;
|
|
|
- if(CircleBuf::BwReadLimit) {
|
|
|
- Res = read(Fd,Buf + (InP%Size),
|
|
|
- BwReadMax > LeftRead() ? LeftRead() : BwReadMax);
|
|
|
- } else
|
|
|
- Res = read(Fd,Buf + (InP%Size),LeftRead());
|
|
|
+ Res = read(Fd,Buf + (InP%Size),LeftRead());
|
|
|
|
|
|
- if(Res > 0 && BwReadLimit > 0)
|
|
|
- CircleBuf::BwTickReadData += Res;
|
|
|
-
|
|
|
if (Res == 0)
|
|
|
return false;
|
|
|
if (Res < 0)
|