Skip to content

Commit c9dbb50

Browse files
committed
msg-format: make it possible for a format plugin to specify a factory for LogProto
Some format plugins (notably the upcoming pacct) will possibly need a custom LogProto instance when reading binary file formats. This patch adds a construct_proto() virtual function to the MsgFormatHandler class for exactly this purpose. NOTE: this callback only works for file sources as of now, but may change in the future.
1 parent b106b2b commit c9dbb50

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

src/affile/affile.c

+15-14
Original file line numberDiff line numberDiff line change
@@ -155,20 +155,22 @@ affile_sd_construct_proto(AFFileSourceDriver *self, LogTransport *transport)
155155
{
156156
guint flags;
157157
LogProto *proto;
158-
159-
flags = ((self->reader_options.follow_freq > 0)
160-
? LPBS_IGNORE_EOF
161-
: LPBS_NOMREAD);
162-
163-
if (self->flags & AFFILE_PIPE)
164-
{
165-
if (self->reader_options.padding)
166-
proto = log_proto_record_server_new(transport, self->reader_options.padding, flags);
167-
else
168-
proto = log_proto_text_server_new(transport, self->reader_options.msg_size, flags);
169-
}
158+
MsgFormatHandler *handler;
159+
160+
flags =
161+
((self->reader_options.follow_freq > 0)
162+
? LPBS_IGNORE_EOF
163+
: LPBS_NOMREAD) |
164+
((self->flags & AFFILE_PIPE) ? 0 : LPBS_POS_TRACKING);
165+
166+
handler = self->reader_options.parse_options.format_handler;
167+
if ((handler && handler->construct_proto))
168+
proto = self->reader_options.parse_options.format_handler->construct_proto(&self->reader_options.parse_options, transport, flags);
169+
else if (self->reader_options.padding)
170+
proto = log_proto_record_server_new(transport, self->reader_options.padding, flags);
170171
else
171-
proto = log_proto_text_server_new(transport, self->reader_options.msg_size, LPBS_POS_TRACKING | flags);
172+
proto = log_proto_text_server_new(transport, self->reader_options.msg_size, flags);
173+
172174
return proto;
173175
}
174176

@@ -206,7 +208,6 @@ affile_sd_notify(LogPipe *s, LogPipe *sender, gint notify_code, gpointer user_da
206208
log_reader_set_follow_filename(self->reader, self->filename->str);
207209
log_reader_set_immediate_check(self->reader);
208210

209-
210211
log_pipe_append(self->reader, s);
211212
if (!log_pipe_init(self->reader, cfg))
212213
{

src/msg-format.h

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "syslog-ng.h"
55
#include "timeutils.h"
6+
#include "logproto.h"
67

78
#include <regex.h>
89

@@ -41,6 +42,7 @@ typedef struct _MsgFormatOptions
4142

4243
struct _MsgFormatHandler
4344
{
45+
LogProto *(*construct_proto)(MsgFormatOptions *options, LogTransport *transport, guint flags);
4446
void (*parse)(MsgFormatOptions *options, const guchar *data, gsize length, LogMessage *msg);
4547
};
4648

0 commit comments

Comments
 (0)