2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-23 18:37:35 +00:00
kea/src/lib/dhcp/classify.h

82 lines
3.0 KiB
C
Raw Normal View History

2016-03-23 13:51:55 +01:00
// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
2014-02-03 18:50:24 +01:00
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
2014-02-03 18:50:24 +01:00
#ifndef CLASSIFY_H
#define CLASSIFY_H
2014-02-03 18:50:24 +01:00
#include <set>
#include <string>
/// @file classify.h
///
/// @brief Defines elements for storing the names of client classes
2014-02-03 18:50:24 +01:00
///
/// This file defines common elements used to track the client classes
/// that may be associated with a given packet. In order to minimize the
/// exposure of the DHCP library to server side concepts such as client
/// classification the classes herein provide a mechanism to maintain lists
/// of class names, rather than the classes they represent. It is the
/// upper layers' perogative to use these names as they see fit.
2014-02-03 18:50:24 +01:00
///
/// @todo This file should be moved to dhcpsrv eventually as the classification
/// is server side concept. Client has no notion of classifying incoming server
/// messages as it usually talks to only one server. That move is not possible
/// yet, as the Pkt4 and Pkt6 classes have server-side implementation, even
/// though they reside in the dhcp directory.
2014-02-03 18:50:24 +01:00
namespace isc {
namespace dhcp {
/// @brief Defines a single class name.
typedef std::string ClientClass;
/// @brief Container for storing client class names
///
/// Depending on how you look at it, this is either a little more than just
/// a set of strings or a client classifier that performs access control.
/// For now, it is a simple access list that may contain zero or more
/// class names. It is expected to grow in complexity once support for
/// client classes becomes more feature rich.
///
/// Note: This class is derived from std::set which may not have Doxygen
/// documentation. See http://www.cplusplus.com/reference/set/set/.
class ClientClasses : public std::set<ClientClass> {
public:
/// @brief Default constructor.
ClientClasses() : std::set<ClientClass>() {
}
/// @brief Constructor from comma separated values.
///
/// @param class_names A string containing a client classes separated
/// with commas. The class names are trimmed before insertion to the set.
ClientClasses(const std::string& class_names);
/// @brief returns if class x belongs to the defined classes
///
/// @param x client class to be checked
/// @return true if x belongs to the classes
bool
contains(const ClientClass& x) const {
return (find(x) != end());
}
/// @brief Returns all class names as text
///
/// @param separator Separator to be used between class names. The
/// default separator comprises comma sign followed by space
/// character.
std::string toText(const std::string& separator = ", ") const;
};
2014-02-03 18:50:24 +01:00
};
};
#endif /* CLASSIFY_H */