]> git.ipfire.org Git - thirdparty/squid.git/blob - src/HttpUpgradeProtocolAccess.cc
CI: Remove unnecessary test-functionality test wrappers (#1393)
[thirdparty/squid.git] / src / HttpUpgradeProtocolAccess.cc
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"
15 #include "HttpUpgradeProtocolAccess.h"
16 #include "sbuf/Stream.h"
17
18 #include <algorithm>
19
20 const SBuf HttpUpgradeProtocolAccess::ProtoOther("OTHER");
21
22 ProtocolView::ProtocolView(const char * const start, const size_t len):
23 ProtocolView(SBuf(start, len))
24 {
25 }
26
27 ProtocolView::ProtocolView(const SBuf &proto):
28 name(proto.substr(0, proto.find('/'))),
29 version(proto.substr(name.length()))
30 {
31 }
32
33 std::ostream &
34 operator <<(std::ostream &os, const ProtocolView &view)
35 {
36 os << view.name;
37 if (!view.version.isEmpty())
38 os << view.version;
39 return os;
40 }
41
42 /* HttpUpgradeProtocolAccess */
43
44 HttpUpgradeProtocolAccess::~HttpUpgradeProtocolAccess()
45 {
46 aclDestroyAccessList(&other);
47 }
48
49 void
50 HttpUpgradeProtocolAccess::configureGuard(ConfigParser &parser)
51 {
52 const auto rawProto = parser.NextToken();
53 if (!rawProto)
54 throw TextException(ToSBuf("expected a protocol name or ", ProtoOther), Here());
55
56 if (ProtoOther.cmp(rawProto) == 0) {
57 aclParseAccessLine(cfg_directive, parser, &other);
58 return;
59 }
60
61 // To preserve ACL rules checking order, to exclude inapplicable (i.e. wrong
62 // protocol version) rules, and to keep things simple, we merge no rules.
63 acl_access *access = nullptr;
64 aclParseAccessLine(cfg_directive, parser, &access);
65 if (access)
66 namedGuards.emplace_back(rawProto, access);
67 }
68
69 /* HttpUpgradeProtocolAccess::NamedGuard */
70
71 HttpUpgradeProtocolAccess::NamedGuard::NamedGuard(const char *rawProtocol, acl_access *acls):
72 protocol(rawProtocol),
73 proto(protocol),
74 guard(acls)
75 {
76 }
77
78 HttpUpgradeProtocolAccess::NamedGuard::~NamedGuard() {
79 aclDestroyAccessList(&guard);
80 }
81