Squid Web Cache master
Loading...
Searching...
No Matches
IntRange.cc
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2025 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/* DEBUG: section 28 Access Control */
10
11#include "squid.h"
12#include "acl/IntRange.h"
13#include "cache_cf.h"
14#include "ConfigParser.h"
15#include "debug/Stream.h"
16#include "fatal.h"
17#include "Parsing.h"
18
19void
21{
22 while (char *a = ConfigParser::strtokFile()) {
23 char *b = strchr(a, '-');
24 unsigned short port1, port2;
25
26 if (b) {
27 *b = '\0';
28 ++b;
29 }
30
31 port1 = xatos(a);
32
33 if (b)
34 port2 = xatos(b);
35 else
36 port2 = port1;
37
38 if (port2 >= port1) {
39 RangeType temp(port1, port2+1);
40 ranges.push_back(temp);
41 } else {
42 debugs(28, DBG_CRITICAL, "ERROR: ACLIntRange::parse: Invalid port value");
44 }
45 }
46}
47
48bool
50{
51 return ranges.empty();
52}
53
54bool
56{
57 RangeType const toFind(i, i+1);
58 for (const auto &element : ranges) {
59 RangeType result = element.intersection(toFind);
60 if (result.size())
61 return true;
62 }
63
64 return false;
65}
66
69
72{
73 SBufList sl;
74 for (const auto &element : ranges) {
75 SBuf sb;
76
77 if (element.size() == 1)
78 sb.Printf("%d", element.start);
79 else
80 sb.Printf("%d-%d", element.start, element.end-1);
81
82 sl.push_back(sb);
83 }
84
85 return sl;
86}
87
unsigned short xatos(const char *token)
Definition Parsing.cc:114
void self_destruct(void)
Definition cache_cf.cc:275
bool match(int) override
Definition IntRange.cc:55
SBufList dump() const override
Definition IntRange.cc:71
~ACLIntRange() override
Definition IntRange.cc:67
std::list< RangeType > ranges
Definition IntRange.h:31
void parse() override
Definition IntRange.cc:20
bool empty() const override
Definition IntRange.cc:49
static char * strtokFile()
Definition Range.h:19
Range intersection(Range const &) const
Definition Range.h:46
S size() const
Definition Range.h:61
Definition SBuf.h:94
void push_back(char)
Append a single character. The character may be NUL (\0).
Definition SBuf.cc:208
SBuf & Printf(const char *fmt,...) PRINTF_FORMAT_ARG2
Definition SBuf.cc:214
#define debugs(SECTION, LEVEL, CONTENT)
Definition Stream.h:192
#define DBG_CRITICAL
Definition Stream.h:37
std::list< SBuf > SBufList
Definition forward.h:23