]>
Commit | Line | Data |
---|---|---|
51ee7c82 | 1 | /* |
262a0e14 | 2 | * $Id$ |
51ee7c82 | 3 | * |
4 | * SQUID Web Proxy Cache http://www.squid-cache.org/ | |
5 | * ---------------------------------------------------------- | |
6 | * | |
7 | * Squid is the result of efforts by numerous individuals from | |
8 | * the Internet community; see the CONTRIBUTORS file for full | |
9 | * details. Many organizations have provided support for Squid's | |
10 | * development; see the SPONSORS file for full details. Squid is | |
11 | * Copyrighted (C) 2001 by the Regents of the University of | |
12 | * California; see the COPYRIGHT file for full details. Squid | |
13 | * incorporates software developed and/or copyrighted by other | |
14 | * sources; see the CREDITS file for full details. | |
15 | * | |
16 | * This program is free software; you can redistribute it and/or modify | |
17 | * it under the terms of the GNU General Public License as published by | |
18 | * the Free Software Foundation; either version 2 of the License, or | |
19 | * (at your option) any later version. | |
26ac0430 | 20 | * |
51ee7c82 | 21 | * This program is distributed in the hope that it will be useful, |
22 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
23 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
24 | * GNU General Public License for more details. | |
26ac0430 | 25 | * |
51ee7c82 | 26 | * You should have received a copy of the GNU General Public License |
27 | * along with this program; if not, write to the Free Software | |
28 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. | |
29 | * | |
30 | * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org> | |
31 | */ | |
32 | ||
33 | #ifndef SQUID_STORESWAPLOGDATA_H | |
34 | #define SQUID_STORESWAPLOGDATA_H | |
35 | ||
63be0a78 | 36 | /** |
37 | \defgroup FileFormatSwapStateAPI swap.state File Structure | |
38 | \ingroup FileSystems | |
39 | \section ImplementationNotes Implementation Notes | |
40 | \par | |
41 | * When writing an object to disk, we must first write the meta data. | |
42 | * This is done with a couple of functions. First, storeSwapMetaPack() | |
43 | * takes a StoreEntry as a parameter and returns a tlv linked | |
44 | * list. Second, storeSwapMetaPack() converts the tlv list | |
45 | * into a character buffer that we can write. | |
26ac0430 | 46 | * |
63be0a78 | 47 | \note MemObject has a MemObject::swap_hdr_sz. |
48 | * This value is the size of that character buffer; the size of the | |
49 | * swap file meta data. The StoreEntry has a member | |
50 | * StoreEntry::swap_file_sz that represents the size of the disk file. | |
51 | * Thus, the size of the object "content" is | |
52 | \code StoreEntry->swap_file_sz - MemObject->swap_hdr_sz; \endcode | |
53 | \note The swap file content includes the HTTP reply headers and the HTTP reply body (if any). | |
26ac0430 | 54 | * |
63be0a78 | 55 | \par |
56 | * When reading a swap file, there is a similar process to extract | |
57 | * the swap meta data. First, storeSwapMetaUnpack() converts a | |
58 | * character buffer into a tlv linked list. It also tells us | |
59 | * the value for MemObject->swap_hdr_sz. | |
60 | */ | |
61 | ||
f7f3304a | 62 | #include "squid-old.h" |
51ee7c82 | 63 | |
64 | /* | |
65 | * Do we need to have the dirn in here? I don't think so, since we already | |
26ac0430 | 66 | * know the dirn .. |
51ee7c82 | 67 | */ |
63be0a78 | 68 | /** |
69 | \ingroup FielFormatSwapStateAPI | |
70 | \note This information is current as of version 2.2.STABLE4 | |
71 | * | |
72 | \li Binary format on disk. | |
73 | \li DO NOT randomly alter. | |
74 | \li DO NOT add ANY virtual's. | |
75 | * | |
76 | \par | |
77 | * Defines the structure of a binary swap.state file entry. | |
78 | * | |
79 | \note StoreSwapLogData entries are written in native machine byte order | |
80 | * They are not necessarily portable across architectures. | |
51ee7c82 | 81 | */ |
51ee7c82 | 82 | class StoreSwapLogData |
83 | { | |
84 | ||
85 | public: | |
b001e822 | 86 | MEMPROXY_CLASS(StoreSwapLogData); |
51ee7c82 | 87 | StoreSwapLogData(); |
63be0a78 | 88 | |
89 | /** | |
90 | * Either SWAP_LOG_ADD when an object is added to the disk storage, | |
91 | * or SWAP_LOG_DEL when an object is deleted. | |
92 | */ | |
51ee7c82 | 93 | char op; |
63be0a78 | 94 | |
95 | /** | |
96 | * The 32-bit file number which maps to a pathname. | |
97 | * Only the low 24-bits are relevant. The high 8-bits are | |
98 | * used as an index to an array of storage directories, and | |
99 | * are set at run time because the order of storage directories | |
100 | * may change over time. | |
101 | */ | |
51ee7c82 | 102 | sfileno swap_filen; |
63be0a78 | 103 | |
104 | /** | |
105 | * A 32-bit Unix time value that represents the time when | |
106 | * the origin server generated this response. If the response | |
107 | * has a valid Date: header, this timestamp corresponds | |
108 | * to that time. Otherwise, it is set to the Squid process time | |
109 | * when the response is read (as soon as the end of headers are found). | |
110 | */ | |
51ee7c82 | 111 | time_t timestamp; |
63be0a78 | 112 | |
113 | /** | |
114 | * The last time that a client requested this object. | |
115 | * Strictly speaking, this time is set whenever the StoreEntry | |
116 | * is locked (via storeLockObject()). | |
117 | */ | |
51ee7c82 | 118 | time_t lastref; |
63be0a78 | 119 | |
120 | /** | |
121 | * The value of the response's Expires: header, if any. | |
122 | * If the response does not have an Expires: header, this | |
123 | * is set to -1. | |
124 | * If the response has an invalid (unparseable) | |
125 | * Expires: header, it is also set to -1. There are some cases | |
126 | * where Squid sets expires to -2. This happens for the | |
127 | * internal "netdb" object and for FTP URL responses. | |
128 | */ | |
51ee7c82 | 129 | time_t expires; |
63be0a78 | 130 | |
131 | /** | |
132 | * The value of the response's Last-modified: header, if any. | |
133 | * This is set to -1 if there is no Last-modified: header, | |
134 | * or if it is unparseable. | |
135 | */ | |
51ee7c82 | 136 | time_t lastmod; |
63be0a78 | 137 | |
138 | /** | |
139 | * This is the number of bytes that the object occupies on | |
140 | * disk. It includes the Squid "swap file header". | |
141 | */ | |
47f6e231 | 142 | uint64_t swap_file_sz; |
63be0a78 | 143 | |
144 | /** | |
145 | * The number of times that this object has been accessed (referenced). | |
146 | * Since its a 16-bit quantity, it is susceptible to overflow | |
147 | * if a single object is accessed 65,536 times before being replaced. | |
148 | */ | |
f45dd259 | 149 | uint16_t refcount; |
63be0a78 | 150 | |
151 | /** | |
152 | * A copy of the StoreEntry flags field. Used as a sanity | |
153 | * check when rebuilding the cache at startup. Objects that | |
154 | * have the KEY_PRIVATE flag set are not added back to the cache. | |
155 | */ | |
f45dd259 | 156 | uint16_t flags; |
63be0a78 | 157 | |
158 | /** | |
159 | * The 128-bit MD5 hash for this object. | |
160 | */ | |
c3031d67 | 161 | unsigned char key[SQUID_MD5_DIGEST_LENGTH]; |
51ee7c82 | 162 | }; |
163 | ||
d85b8894 | 164 | MEMPROXY_CLASS_INLINE(StoreSwapLogData); |
b001e822 | 165 | |
63be0a78 | 166 | /// \ingroup FileFormatSwapStateAPI |
47f6e231 | 167 | class StoreSwapLogHeader |
168 | { | |
169 | public: | |
26ac0430 AJ |
170 | StoreSwapLogHeader(); |
171 | char op; | |
172 | int version; | |
173 | int record_size; | |
47f6e231 | 174 | }; |
175 | ||
176 | ||
51ee7c82 | 177 | #endif /* SQUID_STORESWAPLOGDATA_H */ |