]>
Commit | Line | Data |
---|---|---|
528b2c61 | 1 | |
2 | /* | |
262a0e14 | 3 | * $Id$ |
528b2c61 | 4 | * |
5 | * DEBUG: section 0 UFS Store Dump | |
6 | * AUTHOR: Robert Collins | |
7 | * | |
8 | * SQUID Web Proxy Cache http://www.squid-cache.org/ | |
9 | * ---------------------------------------------------------- | |
10 | * | |
11 | * Squid is the result of efforts by numerous individuals from | |
12 | * the Internet community; see the CONTRIBUTORS file for full | |
13 | * details. Many organizations have provided support for Squid's | |
14 | * development; see the SPONSORS file for full details. Squid is | |
15 | * Copyrighted (C) 2001 by the Regents of the University of | |
16 | * California; see the COPYRIGHT file for full details. Squid | |
17 | * incorporates software developed and/or copyrighted by other | |
18 | * sources; see the CREDITS file for full details. | |
19 | * | |
20 | * This program is free software; you can redistribute it and/or modify | |
21 | * it under the terms of the GNU General Public License as published by | |
22 | * the Free Software Foundation; either version 2 of the License, or | |
23 | * (at your option) any later version. | |
26ac0430 | 24 | * |
528b2c61 | 25 | * This program is distributed in the hope that it will be useful, |
26 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
27 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
28 | * GNU General Public License for more details. | |
26ac0430 | 29 | * |
528b2c61 | 30 | * You should have received a copy of the GNU General Public License |
31 | * along with this program; if not, write to the Free Software | |
32 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. | |
33 | * | |
34 | */ | |
35 | ||
85944c1c | 36 | #include "config.h" |
528b2c61 | 37 | #include "StoreMeta.h" |
38 | #include "StoreMetaUnpacker.h" | |
39 | #include "Store.h" | |
40 | #include "Generic.h" | |
528b2c61 | 41 | #undef malloc |
42 | #undef free | |
43 | #include <stdexcept> | |
44 | #include <iostream> | |
7a6dc83d | 45 | #include <cassert> |
528b2c61 | 46 | |
c21ad0f5 | 47 | /* stub functions for parts of squid not factored to be dynamic yet */ |
74544ee3 AR |
48 | void |
49 | eventAdd(const char *name, EVH * func, void *arg, double when, int, bool cbdata) | |
528b2c61 | 50 | {} |
51 | ||
74544ee3 AR |
52 | // required by storeKeyPublicByRequest* |
53 | // XXX: what pulls in storeKeyPublicByRequest? | |
54 | const char *urlCanonical(HttpRequest *) { assert(false); return NULL; } | |
55 | ||
757a2291 | 56 | void |
74544ee3 AR |
57 | storeAppendPrintf(StoreEntry * e, const char *fmt,...) |
58 | { | |
59 | va_list args; | |
60 | va_start(args, fmt); | |
61 | ||
af6a12ee | 62 | assert(false); |
74544ee3 AR |
63 | |
64 | va_end(args); | |
65 | } | |
66 | ||
67 | #include "CacheManager.h" | |
68 | CacheManager* | |
69 | CacheManager::GetInstance() | |
70 | { | |
af6a12ee | 71 | assert(false); |
74544ee3 AR |
72 | return NULL; |
73 | } | |
757a2291 | 74 | |
c21ad0f5 | 75 | void |
74544ee3 AR |
76 | CacheManager::registerAction(char const * action, char const * desc, OBJH * handler, int pw_req_flag, int atomic) {} |
77 | ||
c21ad0f5 | 78 | |
c21ad0f5 | 79 | /* end stub functions */ |
528b2c61 | 80 | |
26ac0430 | 81 | struct MetaStd { |
47f6e231 | 82 | time_t timestamp; |
26ac0430 AJ |
83 | time_t lastref; |
84 | time_t expires; | |
85 | time_t lastmod; | |
86 | size_t swap_file_sz; | |
87 | u_short refcount; | |
88 | u_short flags; | |
47f6e231 | 89 | }; |
90 | ||
26ac0430 AJ |
91 | struct MetaStdLfs { |
92 | time_t timestamp; | |
93 | time_t lastref; | |
94 | time_t expires; | |
95 | time_t lastmod; | |
96 | uint64_t swap_file_sz; | |
97 | u_short refcount; | |
98 | u_short flags; | |
47f6e231 | 99 | }; |
100 | ||
26ac0430 AJ |
101 | struct DumpStoreMeta : public unary_function<StoreMeta, void> { |
102 | DumpStoreMeta() {} | |
528b2c61 | 103 | |
26ac0430 | 104 | void operator()(StoreMeta const &x) { |
528b2c61 | 105 | switch (x.getType()) { |
62e76326 | 106 | |
107 | case STORE_META_KEY: | |
108 | std::cout << "MD5: " << storeKeyText((const cache_key *)x.value) << std::endl; | |
109 | break; | |
110 | ||
111 | case STORE_META_STD: | |
26ac0430 AJ |
112 | std::cout << "STD, Size:" << ((struct MetaStd*)x.value)->swap_file_sz << |
113 | " Flags: 0x" << std::hex << ((struct MetaStd*)x.value)->flags << std::dec << | |
114 | " Refcount: " << ((struct MetaStd*)x.value)->refcount << | |
115 | std::endl; | |
47f6e231 | 116 | break; |
117 | ||
118 | case STORE_META_STD_LFS: | |
26ac0430 AJ |
119 | std::cout << "STD_LFS, Size: " << ((struct MetaStdLfs*)x.value)->swap_file_sz << |
120 | " Flags: 0x" << std::hex << ((struct MetaStdLfs*)x.value)->flags << std::dec << | |
121 | " Refcount: " << ((struct MetaStdLfs*)x.value)->refcount << | |
122 | std::endl; | |
62e76326 | 123 | break; |
124 | ||
125 | case STORE_META_URL: | |
126 | assert (((char *)x.value)[x.length - 1] == 0); | |
127 | std::cout << "URL: " << (char *)x.value << std::endl; | |
47f6e231 | 128 | break; |
62e76326 | 129 | |
130 | default: | |
26ac0430 AJ |
131 | std::cout << "Unknown store meta type: " << (int)x.getType() << |
132 | " of length " << x.length << std::endl; | |
62e76326 | 133 | break; |
134 | } | |
528b2c61 | 135 | } |
136 | }; | |
137 | ||
138 | int | |
139 | main(int argc, char *argv[]) | |
140 | { | |
141 | int fd = -1; | |
142 | StoreMeta *metadata = NULL; | |
143 | ||
26ac0430 | 144 | try { |
528b2c61 | 145 | if (argc != 2) |
146 | throw std::runtime_error("No filename provided"); | |
147 | ||
148 | fd = open (argv[1], O_RDONLY | O_BINARY); | |
149 | ||
150 | if (fd < 0) | |
151 | throw std::runtime_error("Could not open file."); | |
152 | ||
153 | char tempbuf[SM_PAGE_SIZE]; | |
154 | ||
155 | int len = read(fd, tempbuf, SM_PAGE_SIZE); | |
156 | ||
157 | if (len < 0) | |
158 | throw std::runtime_error("Could not read header into memory."); | |
159 | ||
160 | close (fd); | |
161 | ||
162 | fd = -1; | |
163 | ||
164 | int hdr_len; | |
165 | ||
166 | StoreMetaUnpacker aBuilder(tempbuf, len, &hdr_len); | |
167 | ||
168 | metadata = aBuilder.createStoreMeta (); | |
169 | ||
c3031d67 | 170 | cache_key key[SQUID_MD5_DIGEST_LENGTH]; |
528b2c61 | 171 | |
c3031d67 | 172 | memset(key, '\0', SQUID_MD5_DIGEST_LENGTH); |
528b2c61 | 173 | |
62e76326 | 174 | DumpStoreMeta dumper; |
175 | ||
176 | for_each(*metadata, dumper); | |
528b2c61 | 177 | |
178 | ||
179 | return 0; | |
26ac0430 | 180 | } catch (std::runtime_error error) { |
528b2c61 | 181 | std::cout << "Failed : " << error.what() << std::endl; |
182 | ||
183 | if (fd >= 0) | |
184 | close(fd); | |
185 | ||
186 | if (metadata) | |
187 | StoreMeta::FreeList(&metadata); | |
188 | ||
189 | return 1; | |
190 | } | |
191 | } |