HttpUpgradeProtocolAccess.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 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 "cache_cf.h"
13 #include "ConfigParser.h"
14 #include "globals.h"
16 #include "sbuf/Stream.h"
17 
18 #include <algorithm>
19 
20 ProtocolView::ProtocolView(const char * const start, const size_t len):
21  ProtocolView(SBuf(start, len))
22 {
23 }
24 
26  name(proto.substr(0, proto.find('/'))),
27  version(proto.substr(name.length()))
28 {
29 }
30 
31 std::ostream &
32 operator <<(std::ostream &os, const ProtocolView &view)
33 {
34  os << view.name;
35  if (!view.version.isEmpty())
36  os << view.version;
37  return os;
38 }
39 
40 /* HttpUpgradeProtocolAccess */
41 
43 {
45 }
46 
47 void
49 {
50  const auto rawProto = parser.NextToken();
51  if (!rawProto)
52  throw TextException(ToSBuf("expected a protocol name or ", ProtoOther()), Here());
53 
54  if (ProtoOther().cmp(rawProto) == 0) {
56  return;
57  }
58 
59  // To preserve ACL rules checking order, to exclude inapplicable (i.e. wrong
60  // protocol version) rules, and to keep things simple, we merge no rules.
61  acl_access *access = nullptr;
62  aclParseAccessLine(cfg_directive, parser, &access);
63  if (access)
64  namedGuards.emplace_back(rawProto, access);
65 }
66 
67 /* HttpUpgradeProtocolAccess::NamedGuard */
68 
70  protocol(rawProtocol),
71  proto(protocol),
72  guard(acls)
73 {
74 }
75 
77  aclDestroyAccessList(&guard);
78 }
79 
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:435
a reference to a protocol name[/version] string; no 0-termination is assumed
Definition: SBuf.h:93
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
void start() override
called by AsyncStart; do not call directly
static int version
static char * NextToken()
void aclDestroyAccessList(acl_access **list)
Definition: Gadgets.cc:223
ProtocolView(const char *const start, const size_t len)
an std::runtime_error with thrower location info
Definition: TextException.h:20
SBuf ToSBuf(Args &&... args)
slowly stream-prints all arguments into a freshly allocated SBuf
Definition: Stream.h:63
void aclParseAccessLine(const char *directive, ConfigParser &, acl_access **config)
Parses a single line of a "action followed by acls" directive (e.g., http_access).
Definition: Gadgets.cc:132
static const SBuf & ProtoOther()
pseudonym to specify rules for "all other protocols"
const char * cfg_directive
During parsing, the name of the current squid.conf directive being parsed.
Definition: cache_cf.cc:270
SBuf version
everything after the name, including the slash('/')
std::ostream & operator<<(std::ostream &os, const ProtocolView &view)

 

Introduction

Documentation

Support

Miscellaneous