]> git.ipfire.org Git - thirdparty/squid.git/blob - src/DelayPool.cc
merge from trunk
[thirdparty/squid.git] / src / DelayPool.cc
1 /*
2 * DEBUG: section 77 Delay Pools
3 * AUTHOR: Robert Collins <robertc@squid-cache.org>
4 * Based upon original delay pools code by
5 * David Luyer <david@luyer.net>
6 *
7 * SQUID Web Proxy Cache http://www.squid-cache.org/
8 * ----------------------------------------------------------
9 *
10 * Squid is the result of efforts by numerous individuals from
11 * the Internet community; see the CONTRIBUTORS file for full
12 * details. Many organizations have provided support for Squid's
13 * development; see the SPONSORS file for full details. Squid is
14 * Copyrighted (C) 2001 by the Regents of the University of
15 * California; see the COPYRIGHT file for full details. Squid
16 * incorporates software developed and/or copyrighted by other
17 * sources; see the CREDITS file for full details.
18 *
19 * This program is free software; you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License as published by
21 * the Free Software Foundation; either version 2 of the License, or
22 * (at your option) any later version.
23 *
24 * This program is distributed in the hope that it will be useful,
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 * GNU General Public License for more details.
28 *
29 * You should have received a copy of the GNU General Public License
30 * along with this program; if not, write to the Free Software
31 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
32 *
33 *
34 * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
35 */
36
37 #include "squid.h"
38
39 #if USE_DELAY_POOLS
40 #include "acl/Acl.h"
41 #include "acl/Gadgets.h"
42 #include "CommonPool.h"
43 #include "DelayPool.h"
44 #include "Store.h"
45
46 DelayPool::DelayPool() : pool (NULL), access (NULL)
47 {
48 pool = CommonPool::Factory(0, theComposite_);
49 }
50
51 DelayPool::~DelayPool()
52 {
53 if (pool)
54 freeData();
55
56 if (access)
57 aclDestroyAccessList(&access);
58 }
59
60 void
61 DelayPool::parse()
62 {
63 assert(theComposite() != NULL);
64 theComposite()->parse();
65 }
66
67 void
68 DelayPool::dump(StoreEntry *entry, unsigned int i) const
69 {
70 if (theComposite() == NULL)
71 return;
72
73 storeAppendPrintf(entry, "delay_class %d %s\n", i + 1, pool->theClassTypeLabel());
74
75 LOCAL_ARRAY(char, nom, 32);
76
77 snprintf(nom, 32, "delay_access %d", i + 1);
78
79 dump_acl_access(entry, nom, access);
80
81 storeAppendPrintf(entry, "delay_parameters %d", i + 1);
82
83 theComposite()->dump (entry);
84
85 storeAppendPrintf(entry, "\n");
86 }
87
88 void
89 DelayPool::createPool(u_char delay_class)
90 {
91 if (pool)
92 freeData();
93
94 pool = CommonPool::Factory(delay_class, theComposite_);
95 }
96
97 void
98 DelayPool::freeData()
99 {
100 delete pool;
101 pool = NULL;
102 }
103
104 /** \todo XXX create DelayIdComposite.cc */
105 void
106 CompositePoolNode::delayRead(DeferredRead const &aRead)
107 {
108 deferredReads.delayRead(aRead);
109 }
110
111 #include "comm.h"
112
113 void
114 CompositePoolNode::kickReads()
115 {
116 deferredReads.kickReads(-1);
117 }
118
119 #endif /* USE_DELAY_POOLS */