]> git.ipfire.org Git - thirdparty/squid.git/blob - src/ClientDelayConfig.h
Docs: Copyright updates for 2018 (#114)
[thirdparty/squid.git] / src / ClientDelayConfig.h
1 /*
2 * Copyright (C) 1996-2018 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_CLIENTDELAYCONFIG_H
10 #define SQUID_CLIENTDELAYCONFIG_H
11
12 #include "acl/forward.h"
13 #include "base/RefCount.h"
14
15 #include <vector>
16
17 class StoreEntry;
18 class ConfigParser;
19
20 /// \ingroup DelayPoolsAPI
21
22 /* represents one client write limiting delay 'pool' */
23 class ClientDelayPool : public RefCountable
24 {
25 public:
26 typedef RefCount<ClientDelayPool> Pointer;
27
28 ClientDelayPool()
29 : access(nullptr), rate(0), highwatermark(0) {}
30 ~ClientDelayPool();
31 ClientDelayPool(const ClientDelayPool &) = delete;
32 ClientDelayPool &operator=(const ClientDelayPool &) = delete;
33
34 void dump (StoreEntry * entry, unsigned int poolNumberMinusOne) const;
35 acl_access *access;
36 int rate;
37 int64_t highwatermark;
38 };
39
40 class ClientDelayPools
41 {
42 public:
43 ClientDelayPools(const ClientDelayPools &) = delete;
44 ClientDelayPools &operator=(const ClientDelayPools &) = delete;
45 static ClientDelayPools *Instance();
46
47 std::vector<ClientDelayPool::Pointer> pools;
48 private:
49 ClientDelayPools() {}
50 ~ClientDelayPools();
51 };
52
53 /* represents configuration of client write limiting delay pools */
54 class ClientDelayConfig
55 {
56 public:
57 ClientDelayConfig()
58 : initial(50) {}
59 ClientDelayConfig(const ClientDelayConfig &) = delete;
60 ClientDelayConfig &operator=(const ClientDelayConfig &) = delete;
61
62 void freePools();
63 void dumpPoolCount(StoreEntry * entry, const char *name) const;
64 /* parsing of client_delay_pools - number of pools */
65 void parsePoolCount();
66 /* parsing of client_delay_parameters lines */
67 void parsePoolRates();
68 /* parsing client_delay_access lines */
69 void parsePoolAccess(ConfigParser &parser);
70
71 void finalize(); ///< checks pools configuration
72
73 /* initial bucket level, how fill bucket at startup */
74 unsigned short initial;
75
76 private:
77 unsigned short parsePoolId();
78 std::vector<ClientDelayPool::Pointer> &pools() { return ClientDelayPools::Instance()->pools; }
79 ClientDelayPool &pool(const int i) { return *(ClientDelayPools::Instance()->pools.at(i)); }
80 };
81
82 #endif // SQUID_CLIENTDELAYCONFIG_H
83