]> git.ipfire.org Git - thirdparty/squid.git/blame - src/acl/RequestHeaderStrategy.h
Fix http_hdr_type layering constraint violations in external_acl.cc
[thirdparty/squid.git] / src / acl / RequestHeaderStrategy.h
CommitLineData
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
17template <http_hdr_type header>
62e76326 18
b0dd28ba 19class ACLRequestHeaderStrategy : public ACLStrategy<char const *>
5dee515e 20{
62e76326 21
22public:
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
32private:
b6012c1a 33 static ACLRequestHeaderStrategy *Instance_;
26ac0430 34 ACLRequestHeaderStrategy() {}
62e76326 35
5dee515e 36 ACLRequestHeaderStrategy&operator=(ACLRequestHeaderStrategy const &);
37};
38
39template <http_hdr_type header>
40int
33810b1d 41ACLRequestHeaderStrategy<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
51template <http_hdr_type header>
52ACLRequestHeaderStrategy<header> *
53ACLRequestHeaderStrategy<header>::Instance()
54{
b6012c1a 55 if (!Instance_)
56 Instance_ = new ACLRequestHeaderStrategy<header>;
57
58 return Instance_;
5dee515e 59}
60
61template <http_hdr_type header>
edb9bfd5 62ACLRequestHeaderStrategy<header> * ACLRequestHeaderStrategy<header>::Instance_ = NULL;
5dee515e 63
64#endif /* SQUID_REQUESTHEADERSTRATEGY_H */
f53969cc 65