syslog-ng source
logproto-buffered-server.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2012 Balabit
3  * Copyright (c) 1998-2012 Balázs Scheidler
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  *
19  * As an additional exemption you are allowed to compile & link against the
20  * OpenSSL libraries as published by the OpenSSL project. See the file
21  * COPYING for details.
22  *
23  */
24 #ifndef LOGPROTO_BUFFERED_SERVER_H_INCLUDED
25 #define LOGPROTO_BUFFERED_SERVER_H_INCLUDED
26 
27 #include "logproto-server.h"
29 
30 enum
31 {
34 };
35 
36 typedef struct _LogProtoBufferedServerState
37 {
38  /* NOTE: that if you add/remove structure members you have to update
39  * the byte order swap code in LogProtoFileReader for mulit-byte
40  * members. */
41 
44  guint8 __padding1[1];
45  guint32 buffer_pos;
47  guint32 buffer_size;
50 
51  /* the stream position where we converted out current buffer from (offset in file) */
54  /* the size of raw data (measured in bytes) that got converted from raw_stream_pos into our buffer */
57  guchar raw_buffer_leftover[8];
58 
59  gint64 file_size;
60  gint64 file_inode;
62 
63 typedef struct _LogProtoBufferedServer LogProtoBufferedServer;
65 {
66  LogProtoServer super;
67  gboolean (*fetch_from_buffer)(LogProtoBufferedServer *self, const guchar *buffer_start, gsize buffer_bytes,
68  const guchar **msg, gsize *msg_len);
69  gint (*read_data)(LogProtoBufferedServer *self, guchar *buf, gsize len, LogTransportAuxData *aux);
70  void (*flush)(LogProtoBufferedServer *self);
71 
72  guint
73  /* track & record the position in the input, to be used for file
74  * position tracking. It's not always on as it's expensive when
75  * an encoding is specified and the last record in the input is
76  * not complete.
77  */
79 
80  /* specifies that the input is a stream of bytes, size of chunks
81  * read split the input randomly. Non-stream based stuff is udp
82  * or fixed-size records read from a file. */
84 
88  GIOStatus io_status;
90  PersistState *persist_state;
92  GIConv convert;
93  guchar *buffer;
94 
99 
100  /* auxiliary data (e.g. GSockAddr, other transport related meta
101  * data) associated with the already buffered data */
103 };
104 
105 static inline gboolean
106 log_proto_buffered_server_is_input_closed(LogProtoBufferedServer *self)
107 {
108  return self->io_status != G_IO_STATUS_NORMAL;
109 }
110 
111 static inline void
112 log_proto_buffered_server_cue_flush(LogProtoBufferedServer *self)
113 {
114  self->flush_partial_message = TRUE;
115 }
116 
117 LogProtoPrepareAction log_proto_buffered_server_poll_prepare(LogProtoServer *s, GIOCondition *cond,
118  gint *timeout G_GNUC_UNUSED);
120 void log_proto_buffered_server_put_state(LogProtoBufferedServer *self);
121 gboolean log_proto_buffered_server_restart_with_state(LogProtoServer *s,
122  PersistState *persist_state, const gchar *persist_name);
123 
124 /* LogProtoBufferedServer */
125 gboolean log_proto_buffered_server_validate_options_method(LogProtoServer *s);
126 void log_proto_buffered_server_init(LogProtoBufferedServer *self, LogTransport *transport,
127  const LogProtoServerOptionsStorage *options);
128 void log_proto_buffered_server_free_method(LogProtoServer *s);
129 
130 LogProtoStatus log_proto_buffered_server_fetch(LogProtoServer *s, const guchar **msg, gsize *msg_len,
131  gboolean *may_read, LogTransportAuxData *aux, Bookmark *bookmark);
132 
133 #endif
LogProtoPrepareAction log_proto_buffered_server_poll_prepare(LogProtoServer *s, GIOCondition *cond, gint *timeout G_GNUC_UNUSED)
Definition: logproto-buffered-server.c:588
void log_proto_buffered_server_put_state(LogProtoBufferedServer *self)
Definition: logproto-buffered-server.c:59
void log_proto_buffered_server_free_method(LogProtoServer *s)
Definition: logproto-buffered-server.c:1057
LogProtoStatus log_proto_buffered_server_fetch(LogProtoServer *s, const guchar **msg, gsize *msg_len, gboolean *may_read, LogTransportAuxData *aux, Bookmark *bookmark)
Definition: logproto-buffered-server.c:966
@ LPBSF_FETCHING_FROM_BUFFER
Definition: logproto-buffered-server.h:33
@ LPBSF_FETCHING_FROM_INPUT
Definition: logproto-buffered-server.h:32
gboolean log_proto_buffered_server_validate_options_method(LogProtoServer *s)
Definition: logproto-buffered-server.c:1043
gboolean log_proto_buffered_server_restart_with_state(LogProtoServer *s, PersistState *persist_state, const gchar *persist_name)
Definition: logproto-buffered-server.c:489
void log_proto_buffered_server_init(LogProtoBufferedServer *self, LogTransport *transport, const LogProtoServerOptionsStorage *options)
Definition: logproto-buffered-server.c:1079
LogProtoBufferedServerState * log_proto_buffered_server_get_state(LogProtoBufferedServer *self)
Definition: logproto-buffered-server.c:44
LogProtoPrepareAction
Definition: logproto-server.h:39
LogProtoStatus
Definition: logproto.h:33
guint32 PersistEntryHandle
Definition: persist-state.h:53
Definition: logproto-buffered-server.h:37
gint32 raw_buffer_size
Definition: logproto-buffered-server.h:55
guint32 __deprecated_buffer_cached_eol
Definition: logproto-buffered-server.h:48
gint64 file_inode
Definition: logproto-buffered-server.h:60
guint32 buffer_pos
Definition: logproto-buffered-server.h:45
guint32 pending_buffer_pos
Definition: logproto-buffered-server.h:49
gint64 file_size
Definition: logproto-buffered-server.h:59
guint32 pending_buffer_end
Definition: logproto-buffered-server.h:46
gint64 pending_raw_stream_pos
Definition: logproto-buffered-server.h:53
gint32 pending_raw_buffer_size
Definition: logproto-buffered-server.h:56
guint32 buffer_size
Definition: logproto-buffered-server.h:47
PersistableStateHeader header
Definition: logproto-buffered-server.h:42
guint8 raw_buffer_leftover_size
Definition: logproto-buffered-server.h:43
gint64 raw_stream_pos
Definition: logproto-buffered-server.h:52
Definition: transport-aux-data.h:30
Definition: persistable-state-header.h:31
Definition: logproto-buffered-server.h:65
GIConv convert
Definition: logproto-buffered-server.h:92
GIOStatus io_status
Definition: logproto-buffered-server.h:88
gint(* read_data)(LogProtoBufferedServer *self, guchar *buf, gsize len, LogTransportAuxData *aux)
Definition: logproto-buffered-server.h:69
guint flush_partial_message
Definition: logproto-buffered-server.h:86
gint convert_scale
Definition: logproto-buffered-server.h:98
PersistEntryHandle persist_handle
Definition: logproto-buffered-server.h:91
LogTransportAuxData buffer_aux
Definition: logproto-buffered-server.h:102
gchar * reverse_buffer
Definition: logproto-buffered-server.h:96
void(* flush)(LogProtoBufferedServer *self)
Definition: logproto-buffered-server.h:70
guint no_multi_read
Definition: logproto-buffered-server.h:85
guint stream_based
Definition: logproto-buffered-server.h:83
gint fetch_state
Definition: logproto-buffered-server.h:87
GIConv reverse_convert
Definition: logproto-buffered-server.h:95
PersistState * persist_state
Definition: logproto-buffered-server.h:90
guchar * buffer
Definition: logproto-buffered-server.h:93
gboolean(* fetch_from_buffer)(LogProtoBufferedServer *self, const guchar *buffer_start, gsize buffer_bytes, const guchar **msg, gsize *msg_len)
Definition: logproto-buffered-server.h:67
guint pos_tracking
Definition: logproto-buffered-server.h:78
gsize reverse_buffer_len
Definition: logproto-buffered-server.h:97
LogProtoBufferedServerState * state1
Definition: logproto-buffered-server.h:89
LogProtoServer super
Definition: logproto-buffered-server.h:66
LogTransportAuxData * aux
Definition: test_aux_data.c:28
LogMessage * msg
Definition: test_rename.c:35