2015-04-18 01:39:43 +02:00
|
|
|
// Copyright (C) 2014, 2015 Internet Systems Consortium, Inc. ("ISC")
|
2014-02-03 18:50:24 +01:00
|
|
|
//
|
|
|
|
// Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
// purpose with or without fee is hereby granted, provided that the above
|
|
|
|
// copyright notice and this permission notice appear in all copies.
|
|
|
|
//
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
|
|
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
|
|
// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
|
|
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
|
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
|
|
|
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
|
// PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
2014-02-03 20:33:33 +01:00
|
|
|
#ifndef CLASSIFY_H
|
|
|
|
#define CLASSIFY_H
|
|
|
|
|
2014-02-03 18:50:24 +01:00
|
|
|
#include <set>
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
/// @file classify.h
|
|
|
|
///
|
2015-11-10 15:40:00 -05:00
|
|
|
/// @brief Defines elements for storing the names of client classes
|
2014-02-03 18:50:24 +01:00
|
|
|
///
|
2015-11-10 15:40:00 -05: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
|
2014-02-06 20:40:02 +01:00
|
|
|
/// 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 {
|
|
|
|
|
2015-11-10 15:40:00 -05:00
|
|
|
/// @brief Defines a single class name.
|
2014-02-03 19:53:14 +01:00
|
|
|
typedef std::string ClientClass;
|
|
|
|
|
2015-11-10 15:40:00 -05:00
|
|
|
/// @brief Container for storing client class names
|
2014-02-03 20:33:33 +01:00
|
|
|
///
|
|
|
|
/// 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.
|
2014-02-06 20:40:02 +01:00
|
|
|
///
|
|
|
|
/// Note: This class is derived from std::set which may not have Doxygen
|
|
|
|
/// documentation. See http://www.cplusplus.com/reference/set/set/.
|
2014-02-03 20:33:33 +01:00
|
|
|
class ClientClasses : public std::set<ClientClass> {
|
|
|
|
public:
|
2014-10-14 10:47:10 +02:00
|
|
|
|
|
|
|
/// @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);
|
|
|
|
|
2014-02-06 20:40:02 +01:00
|
|
|
/// @brief returns if class x belongs to the defined classes
|
2014-02-03 20:33:33 +01:00
|
|
|
///
|
|
|
|
/// @param x client class to be checked
|
2014-02-06 20:40:02 +01:00
|
|
|
/// @return true if x belongs to the classes
|
2014-02-03 20:33:33 +01:00
|
|
|
bool
|
|
|
|
contains(const ClientClass& x) const {
|
2014-02-06 20:40:02 +01:00
|
|
|
return (find(x) != end());
|
2014-02-03 20:33:33 +01:00
|
|
|
}
|
|
|
|
};
|
2014-02-03 18:50:24 +01:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
2014-02-03 20:33:33 +01:00
|
|
|
|
|
|
|
#endif /* CLASSIFY_H */
|