author | Tero Marttila <terom@fixme.fi> |
Tue, 07 Apr 2009 21:09:25 +0300 | |
changeset 119 | 64f50072db9e |
child 127 | 94e6c3b4230f |
permissions | -rw-r--r-- |
119
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include "logwatch.h" |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#include "../log.h" |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
#include <stdlib.h> |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
void logwatch_source_on_line (char *line, void *arg) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
{ |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
struct logwatch_source *source = arg; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
log_info("%s", line); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
} |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
void logwatch_source_on_error (struct error_info *err, void *arg) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
{ |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
struct logwatch_source *source = arg; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
log_error("%s", error_msg(err)); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
} |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
static const struct line_proto_callbacks lp_callbacks = { |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
.on_line = logwatch_source_on_line, |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
.on_error = logwatch_source_on_error, |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
}; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
/** |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
* Initialize with the given sock |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
*/ |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
err_t logwatch_source_init (struct logwatch_source *source, struct logwatch *ctx, struct sock_stream *stream, struct error_info *err) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
{ |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
source->ctx = ctx; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
// create the lp to wrap the sock |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
if (line_proto_create(&source->lp, stream, LOGWATCH_SOURCE_LINE_MAX, &lp_callbacks, source, err)) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
goto error; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
// add to logwatch_sources |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
TAILQ_INSERT_TAIL(&ctx->sources, source, logwatch_sources); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
// ok |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
return SUCCESS; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
error: |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
return ERROR_CODE(err); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
} |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
struct logwatch_source* logwatch_open_fifo (struct logwatch *ctx, const char *path, struct error_info *err) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
{ |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
struct logwatch_source *source; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
struct sock_stream *stream = NULL; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
// alloc |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
if ((source = calloc(1, sizeof(*source))) == NULL) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
JUMP_SET_ERROR(err, ERR_CALLOC); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
// open |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
if (fifo_open_read(&stream, path, err)) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
goto error; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
// init |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
if (logwatch_source_init(source, ctx, stream, err)) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
goto error; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
// ok |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
return source; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
error: |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
// cleanup |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |
if (stream) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
69 |
sock_stream_release(stream); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
if (source) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
free(source); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
74 |
return NULL; |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
75 |
} |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
76 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
77 |
void logwatch_source_destroy (struct logwatch_source *source) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
78 |
{ |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
79 |
// release the line_proto |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
80 |
if (source->lp) |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
line_proto_release(source->lp); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
82 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
83 |
// remove from the list |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
84 |
TAILQ_REMOVE(&source->ctx->sources, source, logwatch_sources); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
|
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
free(source); |
64f50072db9e
add logwatch module, that can already open FIFOs
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
87 |
} |