]>
Commit | Line | Data |
---|---|---|
5dee515e | 1 | /* |
bde978a6 | 2 | * Copyright (C) 1996-2015 The Squid Software Foundation and contributors |
5dee515e | 3 | * |
bbc27441 AJ |
4 | * Squid software is distributed under GPLv2+ license and includes |
5 | * contributions from numerous individuals and organizations. | |
6 | * Please see the COPYING and CONTRIBUTORS files for details. | |
5dee515e | 7 | */ |
8 | ||
9 | #ifndef SQUID_ACLREQUESTHEADERSTRATEGY_H | |
10 | #define SQUID_ACLREQUESTHEADERSTRATEGY_H | |
127dce76 AR |
11 | #include "acl/Acl.h" |
12 | #include "acl/Data.h" | |
602d9612 | 13 | #include "acl/FilledChecklist.h" |
127dce76 | 14 | #include "acl/Strategy.h" |
a2ac85d9 | 15 | #include "HttpRequest.h" |
5dee515e | 16 | |
17 | template <http_hdr_type header> | |
62e76326 | 18 | |
b0dd28ba | 19 | class ACLRequestHeaderStrategy : public ACLStrategy<char const *> |
5dee515e | 20 | { |
62e76326 | 21 | |
22 | public: | |
33810b1d | 23 | virtual int match (ACLData<char const *> * &, ACLFilledChecklist *, ACLFlags &); |
5dee515e | 24 | virtual bool requiresRequest() const {return true;} |
62e76326 | 25 | |
5dee515e | 26 | static ACLRequestHeaderStrategy *Instance(); |
27 | /* Not implemented to prevent copies of the instance. */ | |
28 | /* Not private to prevent brain dead g+++ warnings about | |
29 | * private constructors with no friends */ | |
30 | ACLRequestHeaderStrategy(ACLRequestHeaderStrategy const &); | |
62e76326 | 31 | |
32 | private: | |
b6012c1a | 33 | static ACLRequestHeaderStrategy *Instance_; |
26ac0430 | 34 | ACLRequestHeaderStrategy() {} |
62e76326 | 35 | |
5dee515e | 36 | ACLRequestHeaderStrategy&operator=(ACLRequestHeaderStrategy const &); |
37 | }; | |
38 | ||
39 | template <http_hdr_type header> | |
40 | int | |
33810b1d | 41 | ACLRequestHeaderStrategy<header>::match (ACLData<char const *> * &data, ACLFilledChecklist *checklist, ACLFlags &) |
5dee515e | 42 | { |
a9925b40 | 43 | char const *theHeader = checklist->request->header.getStr(header); |
62e76326 | 44 | |
5dee515e | 45 | if (NULL == theHeader) |
62e76326 | 46 | return 0; |
47 | ||
5dee515e | 48 | return data->match(theHeader); |
49 | } | |
50 | ||
51 | template <http_hdr_type header> | |
52 | ACLRequestHeaderStrategy<header> * | |
53 | ACLRequestHeaderStrategy<header>::Instance() | |
54 | { | |
b6012c1a | 55 | if (!Instance_) |
56 | Instance_ = new ACLRequestHeaderStrategy<header>; | |
57 | ||
58 | return Instance_; | |
5dee515e | 59 | } |
60 | ||
61 | template <http_hdr_type header> | |
edb9bfd5 | 62 | ACLRequestHeaderStrategy<header> * ACLRequestHeaderStrategy<header>::Instance_ = NULL; |
5dee515e | 63 | |
64 | #endif /* SQUID_REQUESTHEADERSTRATEGY_H */ | |
f53969cc | 65 |