1 /*****
2 *
3 * Copyright (C) 2001-2015 CS-SI. All Rights Reserved.
4 * Author: Yoann Vandoorselaere <yoann.v@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_PRELUDE_MESSAGE_H
25 #define _LIBPRELUDE_PRELUDE_MESSAGE_H
26 
27 #include "prelude-io.h"
28 
29 
30 #ifdef __cplusplus
31  extern "C" {
32 #endif
33 
34 typedef struct prelude_msg prelude_msg_t;
35 
36 
37 typedef enum {
38         PRELUDE_MSG_PRIORITY_NONE = 0,
39         PRELUDE_MSG_PRIORITY_LOW  = 1,
40         PRELUDE_MSG_PRIORITY_MID  = 2,
41         PRELUDE_MSG_PRIORITY_HIGH = 3
42 } prelude_msg_priority_t;
43 
44 
45 int prelude_msg_read(prelude_msg_t **msg, prelude_io_t *pio);
46 
47 int prelude_msg_forward(prelude_msg_t *msg, prelude_io_t *dst, prelude_io_t *src);
48 
49 int prelude_msg_get(prelude_msg_t *msg, uint8_t *tag, uint32_t *len, void **buf);
50 
51 
52 
53 /*
54  * Write function.
55  */
56 void prelude_msg_recycle(prelude_msg_t *msg);
57 
58 void prelude_msg_mark_end(prelude_msg_t *msg);
59 
60 int prelude_msg_dynamic_new(prelude_msg_t **ret, int (*flush_msg_cb)(prelude_msg_t **msg, void *data), void *data);
61 
62 int prelude_msg_new(prelude_msg_t **ret, size_t msgcount, size_t msglen, uint8_t tag, prelude_msg_priority_t priority);
63 
64 int prelude_msg_set(prelude_msg_t *msg, uint8_t tag, uint32_t len, const void *data);
65 
66 int prelude_msg_write(prelude_msg_t *msg, prelude_io_t *dst);
67 
68 
69 
70 /*
71  *
72  */
73 void prelude_msg_set_tag(prelude_msg_t *msg, uint8_t tag);
74 
75 void prelude_msg_set_priority(prelude_msg_t *msg, prelude_msg_priority_t priority);
76 
77 uint8_t prelude_msg_get_tag(prelude_msg_t *msg);
78 
79 prelude_msg_priority_t prelude_msg_get_priority(prelude_msg_t *msg);
80 
81 uint32_t prelude_msg_get_len(prelude_msg_t *msg);
82 
83 uint32_t prelude_msg_get_datalen(prelude_msg_t *msg);
84 
85 const unsigned char *prelude_msg_get_message_data(prelude_msg_t *msg);
86 
87 struct timeval *prelude_msg_get_time(prelude_msg_t *msg, struct timeval *tv);
88 
89 int prelude_msg_is_empty(prelude_msg_t *msg);
90 
91 int prelude_msg_is_fragment(prelude_msg_t *msg);
92 
93 void prelude_msg_destroy(prelude_msg_t *msg);
94 
95 void prelude_msg_set_callback(prelude_msg_t *msg, int (*flush_msg_cb)(prelude_msg_t **msg, void *data));
96 
97 void prelude_msg_set_data(prelude_msg_t *msg, void *data);
98 
99 prelude_msg_t *prelude_msg_ref(prelude_msg_t *msg);
100 
101 #ifdef __cplusplus
102  }
103 #endif
104 
105 #endif /* _LIBPRELUDE_PRELUDE_MESSAGE_H */
106