/*
- * DEBUG: section 77 Delay Pools
- * AUTHOR: Robert Collins <robertc@squid-cache.org>
- * Based upon original delay pools code by
- * David Luyer <david@luyer.net>
+ * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
*
- * SQUID Web Proxy Cache http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- * Squid is the result of efforts by numerous individuals from
- * the Internet community; see the CONTRIBUTORS file for full
- * details. Many organizations have provided support for Squid's
- * development; see the SPONSORS file for full details. Squid is
- * Copyrighted (C) 2001 by the Regents of the University of
- * California; see the COPYRIGHT file for full details. Squid
- * incorporates software developed and/or copyrighted by other
- * sources; see the CREDITS file for full details.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
- *
- *
- * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
*/
+/* DEBUG: section 77 Delay Pools */
+
/**
\defgroup DelayPoolsInternal Delay Pools Internal
\ingroup DelayPoolsAPI
*/
-#include "config.h"
-
-#if DELAY_POOLS
#include "squid.h"
-#include "CacheManager.h"
-#include "DelaySpec.h"
-#include "DelayPools.h"
-#include "event.h"
-#include "StoreClient.h"
-#include "Store.h"
-#include "MemObject.h"
+
+#if USE_DELAY_POOLS
#include "client_side_request.h"
-#include "ConfigParser.h"
-#include "DelayId.h"
-#include "Array.h"
-#include "SquidString.h"
-#include "SquidTime.h"
+#include "comm/Connection.h"
#include "CommonPool.h"
#include "CompositePoolNode.h"
+#include "ConfigParser.h"
+#include "DelayBucket.h"
+#include "DelayId.h"
#include "DelayPool.h"
+#include "DelayPools.h"
+#include "DelaySpec.h"
+#include "DelayTagged.h"
+#include "DelayUser.h"
#include "DelayVector.h"
+#include "event.h"
+#include "http/Stream.h"
+#include "ip/Address.h"
+#include "MemObject.h"
+#include "mgr/Registration.h"
#include "NullDelayId.h"
-#include "DelayBucket.h"
-#include "DelayUser.h"
-#include "DelayTagged.h"
-#include "ip/IpAddress.h"
+#include "SquidString.h"
+#include "SquidTime.h"
+#include "Store.h"
+#include "StoreClient.h"
/// \ingroup DelayPoolsInternal
long DelayPools::MemoryUsed = 0;
virtual char const *label() const = 0;
- virtual unsigned int makeKey(IpAddress &src_addr) const = 0;
+ virtual unsigned int makeKey(Ip::Address &src_addr) const = 0;
DelaySpec spec;
protected:
virtual char const *label() const {return "Individual";}
- virtual unsigned int makeKey(IpAddress &src_addr) const;
+ virtual unsigned int makeKey(Ip::Address &src_addr) const;
};
/// \ingroup DelayPoolsInternal
protected:
virtual char const *label() const {return "Network";}
- virtual unsigned int makeKey (IpAddress &src_addr) const;
+ virtual unsigned int makeKey (Ip::Address &src_addr) const;
};
/* don't use remote storage for these */
virtual char const *label() const {return "Individual";}
- virtual unsigned int makeKey (IpAddress &src_addr) const;
+ virtual unsigned int makeKey(Ip::Address &src_addr) const;
- unsigned char makeHostKey (IpAddress &src_addr) const;
+ unsigned char makeHostKey(Ip::Address &src_addr) const;
DelaySpec spec;
VectorMap<unsigned char, ClassCBucket> buckets;
temp->push_back (new Aggregate);
temp->push_back (new ClassCNetPool);
temp->push_back (new ClassCHostPool);
+#if USE_AUTH
temp->push_back (new DelayUser);
+#endif
}
break;
/* If we aren't active, don't try to update us ! */
assert (rate.restore_bps != -1);
- for (unsigned char j = 0; j < individuals.size(); ++j)
+ for (unsigned int j = 0; j < individuals.size(); ++j)
individuals.values[j].update (rate, incr);
}
void
DelayPools::RegisterWithCacheManager(void)
{
- CacheManager::GetInstance()->
- registerAction("delay", "Delay Pool Levels", Stats, 0, 1);
+ Mgr::RegisterAction("delay", "Delay Pool Levels", Stats, 0, 1);
}
void
RegisterWithCacheManager();
}
-
void
DelayPools::InitDelayData()
{
LastUpdate = squid_curtime;
- Vector<Updateable *>::iterator pos = toUpdate.begin();
+ std::vector<Updateable *>::iterator pos = toUpdate.begin();
while (pos != toUpdate.end()) {
(*pos)->update(incr);
void
DelayPools::deregisterForUpdates (Updateable *anObject)
{
- Vector<Updateable *>::iterator pos = toUpdate.begin();
+ std::vector<Updateable *>::iterator pos = toUpdate.begin();
while (pos != toUpdate.end() && *pos != anObject) {
++pos;
if (pos != toUpdate.end()) {
/* move all objects down one */
- Vector<Updateable *>::iterator temp = pos;
+ std::vector<Updateable *>::iterator temp = pos;
++pos;
while (pos != toUpdate.end()) {
}
}
-Vector<Updateable *> DelayPools::toUpdate;
+std::vector<Updateable *> DelayPools::toUpdate;
void
DelayPools::Stats(StoreEntry * sentry)
}
void
-DelayPools::pools (u_short newPools)
+DelayPools::pools(unsigned short newPools)
{
if (pools()) {
- debugs(3, 0, "parse_delay_pool_count: multiple delay_pools lines, aborting all previous delay_pools config");
+ debugs(3, DBG_CRITICAL, "parse_delay_pool_count: multiple delay_pools lines, aborting all previous delay_pools config");
FreePools();
}
storeAppendPrintf(sentry, "\t\tCurrent:");
- for (unsigned int i = 0; i < buckets.size(); i++) {
+ for (unsigned int i = 0; i < buckets.size(); ++i) {
storeAppendPrintf(sentry, " %d:", buckets.key_map[i]);
buckets.values[i].stats(sentry);
}
return new NullDelayId;
/* non-IPv4 are not able to provide IPv4-bitmask for this pool type key. */
- if ( !details.src_addr.IsIPv4() )
+ if ( !details.src_addr.isIPv4() )
return new NullDelayId;
unsigned int key = makeKey(details.src_addr);
}
unsigned int
-IndividualPool::makeKey (IpAddress &src_addr) const
+IndividualPool::makeKey(Ip::Address &src_addr) const
{
/* IPv4 required for this pool */
- if ( !src_addr.IsIPv4() )
+ if ( !src_addr.isIPv4() )
return 1;
struct in_addr host;
- src_addr.GetInAddr(host);
+ src_addr.getInAddr(host);
return (ntohl(host.s_addr) & 0xff);
}
}
unsigned int
-ClassCNetPool::makeKey (IpAddress &src_addr) const
+ClassCNetPool::makeKey(Ip::Address &src_addr) const
{
/* IPv4 required for this pool */
- if ( !src_addr.IsIPv4() )
+ if ( !src_addr.isIPv4() )
return 1;
struct in_addr net;
- src_addr.GetInAddr(net);
+ src_addr.getInAddr(net);
return ( (ntohl(net.s_addr) >> 8) & 0xff);
}
-
ClassCHostPool::ClassCHostPool()
{
DelayPools::registerForUpdates (this);
}
unsigned char
-ClassCHostPool::makeHostKey (IpAddress &src_addr) const
+ClassCHostPool::makeHostKey(Ip::Address &src_addr) const
{
/* IPv4 required for this pool */
- if ( !src_addr.IsIPv4() )
+ if ( !src_addr.isIPv4() )
return 1;
/* Temporary bypass for IPv4-only */
struct in_addr host;
- src_addr.GetInAddr(host);
+ src_addr.getInAddr(host);
return (ntohl(host.s_addr) & 0xff);
}
unsigned int
-ClassCHostPool::makeKey (IpAddress &src_addr) const
+ClassCHostPool::makeKey(Ip::Address &src_addr) const
{
/* IPv4 required for this pool */
- if ( !src_addr.IsIPv4() )
+ if ( !src_addr.isIPv4() )
return 1;
struct in_addr net;
- src_addr.GetInAddr(net);
+ src_addr.getInAddr(net);
return ( (ntohl(net.s_addr) >> 8) & 0xff);
}
return new NullDelayId;
/* non-IPv4 are not able to provide IPv4-bitmask for this pool type key. */
- if ( !details.src_addr.IsIPv4() )
+ if ( !details.src_addr.isIPv4() )
return new NullDelayId;
unsigned int key = makeKey (details.src_addr);
theClassCHost->buckets.values[theNet].individuals.values[theHost].bytesIn (qty);
}
-#endif
+#endif /* USE_DELAY_POOLS */