]>
Commit | Line | Data |
---|---|---|
774c051c | 1 | |
2 | /* | |
262a0e14 | 3 | * $Id$ |
774c051c | 4 | * |
5 | * | |
6 | * SQUID Web Proxy Cache http://www.squid-cache.org/ | |
7 | * ---------------------------------------------------------- | |
8 | * | |
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 | |
33ff9dbf | 16 | * sources; see the CREDITS file for full details. |
774c051c | 17 | * |
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. | |
26ac0430 | 22 | * |
774c051c | 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. | |
26ac0430 | 27 | * |
774c051c | 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. | |
31 | * | |
32 | */ | |
33 | ||
34 | #ifndef SQUID_ICAPOPTIONS_H | |
35 | #define SQUID_ICAPOPTIONS_H | |
36 | ||
37 | #include "squid.h" | |
26cc52cb | 38 | #include "adaptation/icap/ServiceRep.h" |
774c051c | 39 | |
c99de607 | 40 | class wordlist; |
41 | ||
af6a12ee AJ |
42 | namespace Adaptation |
43 | { | |
e1381638 AJ |
44 | namespace Icap |
45 | { | |
26cc52cb | 46 | |
774c051c | 47 | /* Maintains options supported by a given ICAP service. |
48 | * See RFC 3507, Section "4.10.2 OPTIONS Response". */ | |
49 | ||
26cc52cb | 50 | class Options |
774c051c | 51 | { |
52 | ||
53 | public: | |
26cc52cb AR |
54 | typedef void GetCallback(void *data, Options *options); |
55 | static void Get(ServiceRep::Pointer &service, GetCallback *cb, void *data); | |
774c051c | 56 | |
57 | public: | |
26cc52cb AR |
58 | Options(); |
59 | ~Options(); | |
774c051c | 60 | |
61 | void configure(const HttpReply *reply); | |
62 | ||
63 | bool valid() const; | |
64 | bool fresh() const; | |
5f8252d2 | 65 | int ttl() const; |
774c051c | 66 | time_t expire() const; |
8eeb99bf | 67 | time_t timestamp() const { return theTimestamp; }; |
68 | ||
c99de607 | 69 | typedef enum { xferNone, xferPreview, xferIgnore, xferComplete } TransferKind; |
30abd221 | 70 | TransferKind transferKind(const String &urlPath) const; |
774c051c | 71 | |
72 | public: | |
73 | const char *error; // human-readable information; set iff !valid() | |
74 | ||
75 | // ICAP server MUST supply this info | |
eadded2e | 76 | Vector<ICAP::Method> methods; |
30abd221 | 77 | String istag; |
774c051c | 78 | |
79 | // ICAP server MAY supply this info. If not, Squid supplies defaults. | |
30abd221 | 80 | String service; |
81 | String serviceId; | |
774c051c | 82 | int max_connections; |
83 | bool allow204; | |
84 | int preview; | |
85 | ||
c99de607 | 86 | protected: |
87 | // Transfer-* extension list representation | |
88 | // maintains wordlist and does parsing/matching | |
26ac0430 AJ |
89 | class TransferList |
90 | { | |
91 | public: | |
92 | TransferList(); | |
93 | ~TransferList(); | |
c99de607 | 94 | |
26ac0430 | 95 | bool matches(const String &urlPath) const; |
c99de607 | 96 | |
26ac0430 AJ |
97 | void parse(const String &buf, bool &foundStar); |
98 | void add(const char *extension); | |
99 | void report(int level, const char *prefix) const; | |
c99de607 | 100 | |
26ac0430 AJ |
101 | public: |
102 | wordlist *extensions; // TODO: optimize with a hash of some sort | |
103 | const char *name; // header name, mostly for debugging | |
104 | TransferKind kind; // to simplify caller's life | |
c99de607 | 105 | }; |
774c051c | 106 | |
c99de607 | 107 | // varios Transfer-* lists |
26ac0430 | 108 | struct Transfers { |
c99de607 | 109 | TransferList preview; |
110 | TransferList ignore; | |
111 | TransferList complete; | |
112 | TransferList *byDefault; // Transfer-X that has '*' | |
113 | } theTransfers; | |
774c051c | 114 | |
8eeb99bf | 115 | int theTTL; |
116 | time_t theTimestamp; | |
774c051c | 117 | |
774c051c | 118 | private: |
119 | void cfgMethod(ICAP::Method m); | |
120 | void cfgIntHeader(const HttpHeader *h, const char *fname, int &value); | |
c99de607 | 121 | void cfgTransferList(const HttpHeader *h, TransferList &l); |
774c051c | 122 | }; |
123 | ||
124 | ||
125 | ||
26cc52cb AR |
126 | |
127 | } // namespace Icap | |
128 | } // namespace Adaptation | |
129 | ||
774c051c | 130 | #endif /* SQUID_ICAPOPTIONS_H */ |