1 /*****
2 *
3 * Copyright (C) 2008-2015 CS-SI. All Rights Reserved.
4 * Author: Yoann Vandoorselaere <yoann@prelude-ids.com>
5 *
6 * This file is part of the Prelude library.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 *
22 *****/
23 
24 #ifndef _LIBPRELUDE_IDMEF_CRITERIA_HXX
25 #define _LIBPRELUDE_IDMEF_CRITERIA_HXX
26 
27 #include <string>
28 #include "prelude.h"
29 #include "idmef.hxx"
30 
31 namespace Prelude {
32         class IDMEFCriterion {
33             public:
34                 enum IDMEFCriterionOperatorEnum {
35                         OPERATOR_NOT     = IDMEF_CRITERION_OPERATOR_NOT,
36                         OPERATOR_NOCASE  = IDMEF_CRITERION_OPERATOR_NOCASE,
37 
38                         OPERATOR_EQUAL   = IDMEF_CRITERION_OPERATOR_EQUAL,
39                         OPERATOR_EQUAL_NOCASE = IDMEF_CRITERION_OPERATOR_EQUAL_NOCASE,
40                         OPERATOR_NOT_EQUAL = IDMEF_CRITERION_OPERATOR_NOT_EQUAL,
41                         OPERATOR_NOT_EQUAL_NOCASE = IDMEF_CRITERION_OPERATOR_NOT_EQUAL_NOCASE,
42 
43                         OPERATOR_LESSER = IDMEF_CRITERION_OPERATOR_LESSER,
44                         OPERATOR_LESSER_OR_EQUAL = IDMEF_CRITERION_OPERATOR_LESSER_OR_EQUAL,
45 
46                         OPERATOR_GREATER = IDMEF_CRITERION_OPERATOR_GREATER,
47                         OPERATOR_GREATER_OR_EQUAL = IDMEF_CRITERION_OPERATOR_GREATER_OR_EQUAL,
48 
49                         OPERATOR_SUBSTR = IDMEF_CRITERION_OPERATOR_SUBSTR,
50                         OPERATOR_SUBSTR_NOCASE = IDMEF_CRITERION_OPERATOR_SUBSTR_NOCASE,
51                         OPERATOR_NOT_SUBSTR = IDMEF_CRITERION_OPERATOR_NOT_SUBSTR,
52                         OPERATOR_NOT_SUBSTR_NOCASE = IDMEF_CRITERION_OPERATOR_NOT_SUBSTR_NOCASE,
53 
54                         OPERATOR_REGEX = IDMEF_CRITERION_OPERATOR_REGEX,
55                         OPERATOR_REGEX_NOCASE = IDMEF_CRITERION_OPERATOR_REGEX_NOCASE,
56                         OPERATOR_NOT_REGEX = IDMEF_CRITERION_OPERATOR_NOT_REGEX,
57                         OPERATOR_NOT_REGEX_NOCASE = IDMEF_CRITERION_OPERATOR_NOT_REGEX_NOCASE,
58 
59                         OPERATOR_NULL = IDMEF_CRITERION_OPERATOR_NULL,
60                         OPERATOR_NOT_NULL = IDMEF_CRITERION_OPERATOR_NOT_NULL
61                 };
62         };
63 
64         class IDMEFCriteria {
65             private:
66                 idmef_criteria_t *_criteria;
67 
68             public:
69                 ~IDMEFCriteria();
70                 IDMEFCriteria();
71                 IDMEFCriteria(const IDMEFCriteria &criteria);
72                 IDMEFCriteria(const char *criteria);
73                 IDMEFCriteria(const std::string &criteria);
74                 IDMEFCriteria(idmef_criteria_t *criteria);
75 
76                 int match(Prelude::IDMEF *message) const;
77                 IDMEFCriteria clone() const;
78                 void andCriteria(const IDMEFCriteria &criteria);
79                 void orCriteria(const IDMEFCriteria &criteria);
80                 const std::string toString() const;
81 
82                 operator const std::string() const;
83                 operator idmef_criteria_t *() const;
84                 IDMEFCriteria &operator=(const IDMEFCriteria &criteria);
85         };
86 };
87 
88 #endif
89