1 /***** 2 * 3 * Copyright (C) 2003-2015 CS-SI. All Rights Reserved. 4 * Author: Nicolas Delon <nicolas.delon@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_DATA_H 25 #define _LIBPRELUDE_IDMEF_DATA_H 26 27 #include "prelude-list.h" 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 typedef enum { 34 IDMEF_DATA_TYPE_UNKNOWN = 0, 35 IDMEF_DATA_TYPE_CHAR = 1, 36 IDMEF_DATA_TYPE_BYTE = 2, 37 IDMEF_DATA_TYPE_UINT32 = 3, 38 IDMEF_DATA_TYPE_UINT64 = 4, 39 IDMEF_DATA_TYPE_INT = 4, 40 IDMEF_DATA_TYPE_FLOAT = 5, 41 IDMEF_DATA_TYPE_CHAR_STRING = 6, 42 IDMEF_DATA_TYPE_BYTE_STRING = 7, 43 IDMEF_DATA_TYPE_TIME = 8 44 } idmef_data_type_t; 45 46 47 typedef struct { 48 int refcount; 49 50 int flags; 51 idmef_data_type_t type; 52 size_t len; 53 54 union { 55 char char_data; 56 uint8_t byte_data; 57 int64_t int_data; 58 float float_data; 59 void *rw_data; 60 const void *ro_data; 61 } data; 62 63 prelude_list_t list; 64 } idmef_data_t; 65 66 67 68 int idmef_data_new(idmef_data_t **data); 69 70 idmef_data_t *idmef_data_ref(idmef_data_t *data); 71 72 73 int idmef_data_new_char(idmef_data_t **data, char c); 74 int idmef_data_new_byte(idmef_data_t **data, uint8_t i); 75 int idmef_data_new_uint32(idmef_data_t **data, uint32_t i) PRELUDE_DEPRECATED; 76 int idmef_data_new_uint64(idmef_data_t **data, uint64_t i) PRELUDE_DEPRECATED; 77 int idmef_data_new_int(idmef_data_t **data, int64_t i); 78 int idmef_data_new_float(idmef_data_t **data, float f); 79 int idmef_data_new_time(idmef_data_t **data, idmef_time_t *time); 80 81 void idmef_data_set_char(idmef_data_t *data, char c); 82 void idmef_data_set_byte(idmef_data_t *data, uint8_t i); 83 void idmef_data_set_uint32(idmef_data_t *data, uint32_t i) PRELUDE_DEPRECATED; 84 void idmef_data_set_uint64(idmef_data_t *data, uint64_t i) PRELUDE_DEPRECATED; 85 void idmef_data_set_int(idmef_data_t *data, int64_t i); 86 void idmef_data_set_float(idmef_data_t *data, float f); 87 void idmef_data_set_time(idmef_data_t *data, idmef_time_t *time); 88 89 int idmef_data_set_ptr_dup_fast(idmef_data_t *data, idmef_data_type_t type, const void *ptr, size_t len); 90 int idmef_data_set_ptr_ref_fast(idmef_data_t *data, idmef_data_type_t type, const void *ptr, size_t len); 91 int idmef_data_set_ptr_nodup_fast(idmef_data_t *data, idmef_data_type_t type, void *ptr, size_t len); 92 93 int idmef_data_new_ptr_dup_fast(idmef_data_t **data, idmef_data_type_t type, const void *ptr, size_t len); 94 int idmef_data_new_ptr_ref_fast(idmef_data_t **data, idmef_data_type_t type, const void *ptr, size_t len); 95 int idmef_data_new_ptr_nodup_fast(idmef_data_t **data, idmef_data_type_t type, void *ptr, size_t len); 96 97 98 /* 99 * String functions 100 */ 101 int idmef_data_set_char_string_dup_fast(idmef_data_t *data, const char *str, size_t len); 102 int idmef_data_new_char_string_dup_fast(idmef_data_t **data, const char *str, size_t len); 103 int idmef_data_new_char_string_ref_fast(idmef_data_t **data, const char *ptr, size_t len); 104 int idmef_data_new_char_string_nodup_fast(idmef_data_t **data, char *ptr, size_t len); 105 int idmef_data_set_char_string_ref_fast(idmef_data_t *data, const char *ptr, size_t len); 106 int idmef_data_set_char_string_nodup_fast(idmef_data_t *data, char *ptr, size_t len); 107 int idmef_data_new_char_string_ref(idmef_data_t **data, const char *ptr); 108 int idmef_data_new_char_string_dup(idmef_data_t **data, const char *ptr); 109 int idmef_data_new_char_string_nodup(idmef_data_t **data, char *ptr); 110 int idmef_data_set_char_string_ref(idmef_data_t *data, const char *ptr); 111 int idmef_data_set_char_string_dup(idmef_data_t *data, const char *ptr); 112 int idmef_data_set_char_string_nodup(idmef_data_t *data, char *ptr); 113 114 #define idmef_data_set_char_string_constant(string, str) \ 115 idmef_data_set_char_string_ref_fast((string), (str), sizeof((str)) - 1) 116 117 118 /* 119 * Byte functions 120 */ 121 int idmef_data_new_byte_string_ref(idmef_data_t **data, const unsigned char *ptr, size_t len); 122 int idmef_data_new_byte_string_dup(idmef_data_t **data, const unsigned char *ptr, size_t len); 123 int idmef_data_new_byte_string_nodup(idmef_data_t **data, unsigned char *ptr, size_t len); 124 int idmef_data_set_byte_string_ref(idmef_data_t *data, const unsigned char *ptr, size_t len); 125 int idmef_data_set_byte_string_dup(idmef_data_t *data, const unsigned char *ptr, size_t len); 126 int idmef_data_set_byte_string_nodup(idmef_data_t *data, unsigned char *ptr, size_t len); 127 128 129 130 /* 131 * 132 */ 133 134 void idmef_data_destroy(idmef_data_t *data); 135 136 int idmef_data_copy_ref(const idmef_data_t *src, idmef_data_t *dst); 137 138 int idmef_data_copy_dup(const idmef_data_t *src, idmef_data_t *dst); 139 140 int idmef_data_clone(const idmef_data_t *src, idmef_data_t **dst); 141 142 idmef_data_type_t idmef_data_get_type(const idmef_data_t *data); 143 144 size_t idmef_data_get_len(const idmef_data_t *data); 145 146 const void *idmef_data_get_data(const idmef_data_t *data); 147 148 char idmef_data_get_char(const idmef_data_t *data); 149 150 uint8_t idmef_data_get_byte(const idmef_data_t *data); 151 152 uint32_t idmef_data_get_uint32(const idmef_data_t *data) PRELUDE_DEPRECATED; 153 154 uint64_t idmef_data_get_uint64(const idmef_data_t *data) PRELUDE_DEPRECATED; 155 156 int64_t idmef_data_get_int(const idmef_data_t *data); 157 158 float idmef_data_get_float(const idmef_data_t *data); 159 160 const char *idmef_data_get_char_string(const idmef_data_t *data); 161 162 const unsigned char *idmef_data_get_byte_string(const idmef_data_t *data); 163 164 prelude_bool_t idmef_data_is_empty(const idmef_data_t *data); 165 166 int idmef_data_to_string(const idmef_data_t *data, prelude_string_t *out); 167 168 void idmef_data_destroy_internal(idmef_data_t *data); 169 170 int idmef_data_compare(const idmef_data_t *data1, const idmef_data_t *data2); 171 172 #ifdef __cplusplus 173 } 174 #endif 175 176 #endif /* _LIBPRELUDE_IDMEF_DATA_H */ 177