]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/StoreMeta.cc
3 * DEBUG: section 20 Storage Manager Swapfile Metadata
4 * AUTHOR: Kostas Anagnostakis
6 * SQUID Web Proxy Cache http://www.squid-cache.org/
7 * ----------------------------------------------------------
9 * Squid is the result of efforts by numerous individuals from
10 * the Internet community; see the CONTRIBUTORS file for full
11 * details. Many organizations have provided support for Squid's
12 * development; see the SPONSORS file for full details. Squid is
13 * Copyrighted (C) 2001 by the Regents of the University of
14 * California; see the COPYRIGHT file for full details. Squid
15 * incorporates software developed and/or copyrighted by other
16 * sources; see the CREDITS file for full details.
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * (at your option) any later version.
23 * This program is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
28 * You should have received a copy of the GNU General Public License
29 * along with this program; if not, write to the Free Software
30 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
35 #include "MemObject.h"
37 #include "StoreMeta.h"
38 #include "StoreMetaMD5.h"
39 #include "StoreMetaObjSize.h"
40 #include "StoreMetaSTD.h"
41 #include "StoreMetaSTDLFS.h"
42 #include "StoreMetaURL.h"
43 #include "StoreMetaVary.h"
46 StoreMeta::validType(char type
)
48 /* VOID is reserved, and new types have to be added as classes */
49 if (type
<= STORE_META_VOID
|| type
>= STORE_META_END
+ 10) {
50 debugs(20, DBG_CRITICAL
, "storeSwapMetaUnpack: bad type (" << type
<< ")!");
54 /* Not yet implemented */
55 if (type
>= STORE_META_END
||
56 type
== STORE_META_STOREURL
||
57 type
== STORE_META_VARY_ID
) {
58 debugs(20, 3, "storeSwapMetaUnpack: Not yet implemented (" << type
<< ") in disk metadata");
62 /* Unused in any current squid code */
63 if (type
== STORE_META_KEY_URL
||
64 type
== STORE_META_KEY_SHA
||
65 type
== STORE_META_HITMETERING
||
66 type
== STORE_META_VALID
) {
67 debugs(20, DBG_CRITICAL
, "Obsolete and unused type (" << type
<< ") in disk metadata");
78 IntRange (int minimum
, int maximum
) : _min (minimum
), _max (maximum
) {
86 bool includes (int anInt
) const {
87 if (anInt
< _min
|| anInt
> _max
)
98 const int StoreMeta::MinimumTLVLength
= 0;
99 const int StoreMeta::MaximumTLVLength
= 1 << 16;
102 StoreMeta::validLength(int aLength
) const
104 if (!IntRange (MinimumTLVLength
, MaximumTLVLength
).includes(aLength
)) {
105 debugs(20, DBG_CRITICAL
, "storeSwapMetaUnpack: insane length (" << aLength
<< ")!");
113 StoreMeta::Factory (char type
, size_t len
, void const *value
)
115 if (!validType(type
))
123 result
= new StoreMetaMD5
;
127 result
= new StoreMetaURL
;
131 result
= new StoreMetaSTD
;
134 case STORE_META_STD_LFS
:
135 result
= new StoreMetaSTDLFS
;
138 case STORE_META_OBJSIZE
:
139 result
= new StoreMetaObjSize
;
142 case STORE_META_VARY_HEADERS
:
143 result
= new StoreMetaVary
;
147 debugs(20, DBG_CRITICAL
, "Attempt to create unknown concrete StoreMeta");
151 if (!result
->validLength(len
)) {
156 result
->length
= len
;
157 result
->value
= xmalloc(len
);
158 memcpy(result
->value
, value
, len
);
163 StoreMeta::FreeList(StoreMeta
**head
)
167 while ((node
= *head
) != NULL
) {
175 StoreMeta::Add(StoreMeta
**tail
, StoreMeta
*aNode
)
177 assert (*tail
== NULL
);
179 return &aNode
->next
; /* return new tail pointer */
183 StoreMeta::checkConsistency(StoreEntry
*e
) const
191 case STORE_META_VARY_HEADERS
:
198 case STORE_META_STD_LFS
:
201 case STORE_META_OBJSIZE
:
205 debugs(20, DBG_IMPORTANT
, "WARNING: got unused STORE_META type " << getType());