2
* $Id: ACLIntRange.cc,v 1.10 2007/04/28 22:26:37 hno Exp $
4
* DEBUG: section 28 Access Control
5
* AUTHOR: Robert Collins
7
* SQUID Web Proxy Cache http://www.squid-cache.org/
8
* ----------------------------------------------------------
10
* Squid is the result of efforts by numerous individuals from
11
* the Internet community; see the CONTRIBUTORS file for full
12
* details. Many organizations have provided support for Squid's
13
* development; see the SPONSORS file for full details. Squid is
14
* Copyrighted (C) 2001 by the Regents of the University of
15
* California; see the COPYRIGHT file for full details. Squid
16
* incorporates software developed and/or copyrighted by other
17
* sources; see the CREDITS file for full details.
19
* This program is free software; you can redistribute it and/or modify
20
* it under the terms of the GNU General Public License as published by
21
* the Free Software Foundation; either version 2 of the License, or
22
* (at your option) any later version.
24
* This program is distributed in the hope that it will be useful,
25
* but WITHOUT ANY WARRANTY; without even the implied warranty of
26
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27
* GNU General Public License for more details.
29
* You should have received a copy of the GNU General Public License
30
* along with this program; if not, write to the Free Software
31
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
34
* Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
38
#include "ACLIntRange.h"
42
/* explicit instantiation required for some systems */
44
template cbdata_type List<Range<int> >
52
while ((a = strtokFile())) {
53
char *b = strchr(a, '-');
54
unsigned short port1, port2;
70
ranges.push_back(temp);
72
debugs(28, 0, "ACLIntRange::parse: Invalid port value");
79
ACLIntRange::empty() const
81
return ranges.empty();
85
ACLIntRange::match(int i)
87
RangeType const toFind (i, i+1);
88
ListIterator<RangeType> iter(ranges);
91
const RangeType & element = iter.next();
92
RangeType result = element.intersection (toFind);
102
ACLIntRange::clone() const
105
fatal("ACLIntRange::clone: attempt to clone used ACL");
107
return new ACLIntRange (*this);
110
ACLIntRange::~ACLIntRange ()
118
ListIterator<RangeType> iter(ranges);
120
while (!iter.end()) {
121
const RangeType & element = iter.next();
123
if (element.size() == 1)
124
snprintf(buf, sizeof(buf), "%d", element.start);
126
snprintf(buf, sizeof(buf), "%d-%d", element.start, element.end-1);
128
wordlistAdd(&W, buf);