sieve: simplify action logging API
* include/mailutils/sieve.h (mu_sieve_action_log_t): Change proto. * lib/sieve.c (_sieve_action_log): Rewrite. * libmu_sieve/util.c (mu_sieve_log_action): Rewrite. * python/libmu_py/sieve.c (_sieve_action_printer): Rewrite. * sieve/sieve.c (_sieve_action_log): Rewrite.
Showing
5 changed files
with
30 additions
and
28 deletions
... | @@ -35,9 +35,7 @@ typedef struct mu_sieve_machine *mu_sieve_machine_t; | ... | @@ -35,9 +35,7 @@ typedef struct mu_sieve_machine *mu_sieve_machine_t; |
35 | 35 | ||
36 | typedef int (*mu_sieve_handler_t) (mu_sieve_machine_t mach, | 36 | typedef int (*mu_sieve_handler_t) (mu_sieve_machine_t mach, |
37 | mu_list_t args, mu_list_t tags); | 37 | mu_list_t args, mu_list_t tags); |
38 | typedef void (*mu_sieve_action_log_t) (void *data, | 38 | typedef void (*mu_sieve_action_log_t) (mu_sieve_machine_t mach, |
39 | mu_stream_t stream, | ||
40 | size_t msgno, mu_message_t msg, | ||
41 | const char *action, | 39 | const char *action, |
42 | const char *fmt, va_list ap); | 40 | const char *fmt, va_list ap); |
43 | 41 | ... | ... |
... | @@ -28,15 +28,17 @@ struct sieve_log_data | ... | @@ -28,15 +28,17 @@ struct sieve_log_data |
28 | }; | 28 | }; |
29 | 29 | ||
30 | static void | 30 | static void |
31 | _sieve_action_log (void *data, | 31 | _sieve_action_log (mu_sieve_machine_t mach, |
32 | mu_stream_t stream, size_t msgno, | ||
33 | mu_message_t msg, | ||
34 | const char *action, const char *fmt, va_list ap) | 32 | const char *action, const char *fmt, va_list ap) |
35 | { | 33 | { |
36 | struct sieve_log_data *ldat = data; | 34 | struct sieve_log_data *ldat = mu_sieve_get_data (mach); |
37 | int pfx = 0; | 35 | int pfx = 0; |
36 | mu_stream_t stream; | ||
37 | mu_message_t msg = mu_sieve_get_message (mach); | ||
38 | 38 | ||
39 | mu_sieve_get_diag_stream (mach, &stream); | ||
39 | mu_stream_printf (stream, "\033s<%d>", MU_LOG_NOTICE); | 40 | mu_stream_printf (stream, "\033s<%d>", MU_LOG_NOTICE); |
41 | |||
40 | if (ldat) | 42 | if (ldat) |
41 | { | 43 | { |
42 | if (ldat->user) | 44 | if (ldat->user) |
... | @@ -70,6 +72,7 @@ _sieve_action_log (void *data, | ... | @@ -70,6 +72,7 @@ _sieve_action_log (void *data, |
70 | mu_stream_vprintf (stream, fmt, ap); | 72 | mu_stream_vprintf (stream, fmt, ap); |
71 | } | 73 | } |
72 | mu_stream_printf (stream, "\n"); | 74 | mu_stream_printf (stream, "\n"); |
75 | mu_stream_unref (stream); | ||
73 | } | 76 | } |
74 | 77 | ||
75 | static int | 78 | static int | ... | ... |
... | @@ -344,16 +344,11 @@ mu_sieve_log_action (mu_sieve_machine_t mach, const char *action, | ... | @@ -344,16 +344,11 @@ mu_sieve_log_action (mu_sieve_machine_t mach, const char *action, |
344 | 344 | ||
345 | if (!mach->logger) | 345 | if (!mach->logger) |
346 | return; | 346 | return; |
347 | |||
348 | mu_stream_ioctl (mach->errstream, MU_IOCTL_LOGSTREAM, | ||
349 | MU_IOCTL_LOGSTREAM_SET_LOCUS, &mach->locus); | ||
347 | va_start (ap, fmt); | 350 | va_start (ap, fmt); |
348 | mu_stream_printf (mach->errstream, "\033s<%d>", MU_LOG_INFO); | 351 | mach->logger (mach, action, fmt, ap); |
349 | if (mach->locus.mu_file) | ||
350 | mu_stream_printf (mach->errstream, "\033O<%d>\033f<%u>%s\033l<%u>", | ||
351 | MU_LOGMODE_LOCUS, | ||
352 | (unsigned) strlen (mach->locus.mu_file), | ||
353 | mach->locus.mu_file, | ||
354 | mach->locus.mu_line); | ||
355 | mach->logger (mach->data, mach->errstream, mach->msgno, mach->msg, | ||
356 | action, fmt, ap); | ||
357 | va_end (ap); | 352 | va_end (ap); |
358 | } | 353 | } |
359 | 354 | ... | ... |
... | @@ -236,8 +236,7 @@ api_sieve_message (PyObject *self, PyObject *args) | ... | @@ -236,8 +236,7 @@ api_sieve_message (PyObject *self, PyObject *args) |
236 | } | 236 | } |
237 | 237 | ||
238 | static void | 238 | static void |
239 | _sieve_action_printer (void *data, mu_stream_t stream, | 239 | _sieve_action_printer (mu_sieve_machine_t mach, |
240 | size_t msgno, mu_message_t msg, | ||
241 | const char *action, const char *fmt, va_list ap) | 240 | const char *action, const char *fmt, va_list ap) |
242 | { | 241 | { |
243 | PyObject *py_args; | 242 | PyObject *py_args; |
... | @@ -258,10 +257,12 @@ _sieve_action_printer (void *data, mu_stream_t stream, | ... | @@ -258,10 +257,12 @@ _sieve_action_printer (void *data, mu_stream_t stream, |
258 | PyStream *py_stm = PyStream_NEW (); | 257 | PyStream *py_stm = PyStream_NEW (); |
259 | if (py_stm) | 258 | if (py_stm) |
260 | { | 259 | { |
261 | py_stm->stm = stream; | 260 | size_t msgno; |
262 | mu_stream_ref (stream); | 261 | |
263 | 262 | mu_sieve_get_diag_stream (mach, &py_stm->stm); | |
264 | py_msg->msg = msg; | 263 | msgno = mu_sieve_get_message_num (mach); |
264 | |||
265 | py_msg->msg = mu_sieve_get_message (mach); | ||
265 | Py_INCREF (py_msg); | 266 | Py_INCREF (py_msg); |
266 | 267 | ||
267 | PyDict_SetItemString (py_dict, "msgno", | 268 | PyDict_SetItemString (py_dict, "msgno", |
... | @@ -272,7 +273,7 @@ _sieve_action_printer (void *data, mu_stream_t stream, | ... | @@ -272,7 +273,7 @@ _sieve_action_printer (void *data, mu_stream_t stream, |
272 | 273 | ||
273 | if (mu_vasnprintf (&buf, &buflen, fmt, ap)) | 274 | if (mu_vasnprintf (&buf, &buflen, fmt, ap)) |
274 | { | 275 | { |
275 | mu_stream_unref (stream); | 276 | mu_stream_destroy (&py_stm->stm); |
276 | return; | 277 | return; |
277 | } | 278 | } |
278 | PyDict_SetItemString (py_dict, "text", | 279 | PyDict_SetItemString (py_dict, "text", |
... | @@ -282,7 +283,7 @@ _sieve_action_printer (void *data, mu_stream_t stream, | ... | @@ -282,7 +283,7 @@ _sieve_action_printer (void *data, mu_stream_t stream, |
282 | py_args = PyTuple_New (1); | 283 | py_args = PyTuple_New (1); |
283 | if (py_args) | 284 | if (py_args) |
284 | { | 285 | { |
285 | struct _mu_py_sieve_logger *s = data; | 286 | struct _mu_py_sieve_logger *s = mu_sieve_get_data (mach); |
286 | PyObject *py_fnc = s->py_action_printer; | 287 | PyObject *py_fnc = s->py_action_printer; |
287 | 288 | ||
288 | Py_INCREF (py_dict); | 289 | Py_INCREF (py_dict); | ... | ... |
... | @@ -264,18 +264,21 @@ Compatibility debug flags:\n\ | ... | @@ -264,18 +264,21 @@ Compatibility debug flags:\n\ |
264 | }; | 264 | }; |
265 | 265 | ||
266 | static void | 266 | static void |
267 | _sieve_action_log (void *unused, | 267 | _sieve_action_log (mu_sieve_machine_t mach, |
268 | mu_stream_t stream, size_t msgno, | ||
269 | mu_message_t msg, | ||
270 | const char *action, const char *fmt, va_list ap) | 268 | const char *action, const char *fmt, va_list ap) |
271 | { | 269 | { |
272 | size_t uid = 0; | 270 | size_t uid = 0; |
271 | mu_message_t msg; | ||
272 | mu_stream_t stream; | ||
273 | |||
274 | mu_sieve_get_diag_stream (mach, &stream); | ||
275 | msg = mu_sieve_get_message (mach); | ||
273 | 276 | ||
274 | mu_message_get_uid (msg, &uid); | 277 | mu_message_get_uid (msg, &uid); |
275 | mu_stream_printf (stream, "\033s<%d>\033%c<%d>", MU_LOG_NOTICE, | 278 | mu_stream_printf (stream, "\033s<%d>\033%c<%d>", MU_LOG_NOTICE, |
276 | sieve_print_locus ? 'O' : 'X', MU_LOGMODE_LOCUS); | 279 | sieve_print_locus ? 'O' : 'X', MU_LOGMODE_LOCUS); |
277 | mu_stream_printf (stream, _("%s on msg uid %lu"), | 280 | mu_stream_printf (stream, _("%s on msg uid %lu"), |
278 | action, (unsigned long) uid); | 281 | action, (unsigned long) uid); |
279 | 282 | ||
280 | if (fmt && strlen (fmt)) | 283 | if (fmt && strlen (fmt)) |
281 | { | 284 | { |
... | @@ -283,6 +286,8 @@ _sieve_action_log (void *unused, | ... | @@ -283,6 +286,8 @@ _sieve_action_log (void *unused, |
283 | mu_stream_vprintf (stream, fmt, ap); | 286 | mu_stream_vprintf (stream, fmt, ap); |
284 | } | 287 | } |
285 | mu_stream_printf (stream, "\n"); | 288 | mu_stream_printf (stream, "\n"); |
289 | |||
290 | mu_stream_unref (stream); | ||
286 | } | 291 | } |
287 | 292 | ||
288 | static int | 293 | static int | ... | ... |
-
Please register or sign in to post a comment