classify.h 3.17 KB
Newer Older
1
// Copyright (C) 2014, 2015 Internet Systems Consortium, Inc. ("ISC")
Tomek Mrugalski's avatar
Tomek Mrugalski committed
2 3 4 5 6 7 8 9 10 11 12 13 14
//
// 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.

15 16 17
#ifndef CLASSIFY_H
#define CLASSIFY_H

Tomek Mrugalski's avatar
Tomek Mrugalski committed
18 19 20 21 22
#include <set>
#include <string>

/// @file   classify.h
///
23
/// @brief Defines elements for storing the names of client classes
Tomek Mrugalski's avatar
Tomek Mrugalski committed
24
///
25 26 27 28 29 30
/// 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.
Tomek Mrugalski's avatar
Tomek Mrugalski committed
31 32
///
/// @todo This file should be moved to dhcpsrv eventually as the classification
Tomek Mrugalski's avatar
Tomek Mrugalski committed
33 34 35 36
/// 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.
Tomek Mrugalski's avatar
Tomek Mrugalski committed
37 38 39 40 41

namespace isc {

namespace dhcp {

42
    /// @brief Defines a single class name.
43 44
    typedef std::string ClientClass;

45
    /// @brief Container for storing client class names
46 47 48 49 50 51
    ///
    /// 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.
Tomek Mrugalski's avatar
Tomek Mrugalski committed
52 53 54
    ///
    /// Note: This class is derived from std::set which may not have Doxygen
    /// documentation. See  http://www.cplusplus.com/reference/set/set/.
55 56
    class ClientClasses : public std::set<ClientClass> {
    public:
57 58 59 60 61 62 63 64 65 66 67

        /// @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);

Tomek Mrugalski's avatar
Tomek Mrugalski committed
68
        /// @brief returns if class x belongs to the defined classes
69 70
        ///
        /// @param x client class to be checked
Tomek Mrugalski's avatar
Tomek Mrugalski committed
71
        /// @return true if x belongs to the classes
72 73
        bool
        contains(const ClientClass& x) const {
Tomek Mrugalski's avatar
Tomek Mrugalski committed
74
            return (find(x) != end());
75 76
        }
    };
Tomek Mrugalski's avatar
Tomek Mrugalski committed
77 78 79 80

};

};
81 82

#endif /* CLASSIFY_H */