HttpUpgradeProtocolAccess.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
3  *
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.
7  */
8 
9 #include "squid.h"
10 #include "acl/Acl.h"
11 #include "acl/Gadgets.h"
12 #include "ConfigParser.h"
13 #include "globals.h"
15 #include "sbuf/Stream.h"
16 
17 #include <algorithm>
18 
20 
21 ProtocolView::ProtocolView(const char * const start, const size_t len):
23 {
24 }
25 
27  name(proto.substr(0, proto.find('/'))),
28  version(proto.substr(name.length()))
29 {
30 }
31 
32 std::ostream &
33 operator <<(std::ostream &os, const ProtocolView &view)
34 {
35  os << view.name;
36  if (!view.version.isEmpty())
37  os << view.version;
38  return os;
39 }
40 
41 /* HttpUpgradeProtocolAccess */
42 
44 {
46 }
47 
48 void
50 {
51  const auto rawProto = parser.NextToken();
52  if (!rawProto)
53  throw TextException(ToSBuf("expected a protocol name or ", ProtoOther), Here());
54 
55  if (ProtoOther.cmp(rawProto) == 0) {
57  return;
58  }
59 
60  // To preserve ACL rules checking order, to exclude inapplicable (i.e. wrong
61  // protocol version) rules, and to keep things simple, we merge no rules.
62  acl_access *access = nullptr;
63  aclParseAccessLine(cfg_directive, parser, &access);
64  if (access)
65  namedGuards.emplace_back(rawProto, access);
66 }
67 
68 /* HttpUpgradeProtocolAccess::NamedGuard */
69 
71  protocol(rawProtocol),
72  proto(protocol),
73  guard(acls)
74 {
75 }
76 
78  aclDestroyAccessList(&guard);
79 }
80 
SBuf name
everything up to (but excluding) the first slash('/')
#define Here()
source code location of the caller
Definition: Here.h:15
bool isEmpty() const
Definition: SBuf.h:420
a reference to a protocol name[/version] string; no 0-termination is assumed
void aclParseAccessLine(const char *directive, ConfigParser &, acl_access **treep)
Definition: Gadgets.cc:137
Definition: SBuf.h:86
acl_access * other
OTHER rules governing unnamed protocols.
NamedGuards namedGuards
rules governing upgrades to explicitly named protocols
NamedGuard(const char *rawProtocol, acl_access *)
void configureGuard(ConfigParser &)
parses a single allow/deny rule
static int version
static char * NextToken()
virtual void start()
called by AsyncStart; do not call directly
void aclDestroyAccessList(acl_access **list)
Definition: Gadgets.cc:276
ProtocolView(const char *const start, const size_t len)
int cmp(const SBuf &S, const size_type n) const
shorthand version for compare()
Definition: SBuf.h:264
an std::runtime_error with thrower location info
Definition: TextException.h:19
#define acl_access
Definition: forward.h:44
SBuf ToSBuf(Args &&... args)
slowly stream-prints all arguments into a freshly allocated SBuf
Definition: Stream.h:124
int unsigned int const char *desc STUB void int len
Definition: stub_fd.cc:20
const char * cfg_directive
During parsing, the name of the current squid.conf directive being parsed.
SBuf version
everything after the name, including the slash('/')
static const SBuf ProtoOther
pseudonym to specify rules for "all other protocols"
std::ostream & operator<<(std::ostream &os, const ProtocolView &view)

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors