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