commit 02090eee90037052ff7d8ba498d53d511600a60d from: Martijn van Duren date: Fri Mar 29 09:45:14 2019 UTC Add support for filtering datalines commit - 953e2ad7af92aeab3b6c1195055a5ab0efbc1285 commit + 02090eee90037052ff7d8ba498d53d511600a60d blob - a6a3c54b893193042acad2bca58dbf1f4cb8ebee blob + 4259c29d3a186d6194fa479df99fd2ef66321488 --- smtp_proc.c +++ smtp_proc.c @@ -24,6 +24,8 @@ static int smtp_register(char *, char *, char *, void static void smtp_newline(int, short, void *); static void smtp_connect(struct smtp_callback *, int, struct timespec *, uint64_t, uint64_t, char *); +static void smtp_dataline(struct smtp_callback *, int, struct timespec *, + uint64_t, uint64_t, char *); static void smtp_in_link_disconnect(struct smtp_callback *, int, struct timespec *, uint64_t, char *); @@ -40,6 +42,7 @@ struct smtp_callback { void *cb; } smtp_callbacks[] = { {"filter", "connect", "smtp-in", .smtp_filter = smtp_connect, NULL}, + {"filter", "data-line", "smtp-in", .smtp_filter = smtp_dataline, NULL}, {"report", "link-disconnect", "smtp-in", .smtp_report = smtp_in_link_disconnect, NULL} }; @@ -54,6 +57,13 @@ smtp_register_filter_connect(void (*cb)(char *, int, s } int +smtp_register_filter_dataline(void (*cb)(char *, int, struct timespec *, char *, + char *, uint64_t, uint64_t, char *)) +{ + return smtp_register("filter", "data-line", "smtp-in", (void *)cb); +} + +int smtp_in_register_report_disconnect(void (*cb)(char *, int, struct timespec *, char *, char *, uint64_t)) { @@ -195,6 +205,18 @@ smtp_connect(struct smtp_callback *cb, int version, st } static void +smtp_dataline(struct smtp_callback *cb, int version, struct timespec *tm, + uint64_t reqid, uint64_t token, char *line) +{ + void (*f)(char *, int, struct timespec *,char *, char *, uint64_t, + uint64_t, char *); + + f = cb->cb; + f(cb->type, version, tm, cb->direction, cb->phase, reqid, token, + line); +} + +static void smtp_in_link_disconnect(struct smtp_callback *cb, int version, struct timespec *tm, uint64_t reqid, char *params) { @@ -244,6 +266,19 @@ smtp_filter_disconnect(uint64_t reqid, uint64_t token, fflush(stdout); } +void +smtp_filter_dataline(uint64_t reqid, uint64_t token, const char *line, ...) +{ + va_list ap; + + printf("filter-dataline|%016"PRIx64"|%016"PRIx64"|", token, reqid); + va_start(ap, line); + vprintf(line, ap); + va_end(ap); + putchar('\n'); + fflush(stdout); +} + static int smtp_register(char *type, char *phase, char *direction, void *cb) { blob - 43d69e151aac1d3635863d111416bf3586f43395 blob + 0ac5e466a2f1b635cc6ffd4e0731d9750ab386c0 --- smtp_proc.h +++ smtp_proc.h @@ -10,8 +10,10 @@ struct inx_addr { }; }; -int smtp_register_filter_connect(void (*cb)(char *, int, struct timespec *, +int smtp_register_filter_connect(void (*)(char *, int, struct timespec *, char *, char *, uint64_t, uint64_t, char *, struct inx_addr *)); +int smtp_register_filter_dataline(void (*)(char *, int, struct timespec *, char *, + char *, uint64_t, uint64_t, char *)); int smtp_in_register_report_disconnect(void (*)(char *, int, struct timespec *, char *, char *, uint64_t)); void smtp_filter_proceed(uint64_t, uint64_t); @@ -19,4 +21,6 @@ void smtp_filter_reject(uint64_t, uint64_t, int, const __attribute__((__format__ (printf, 4, 5))); void smtp_filter_disconnect(uint64_t, uint64_t, const char *, ...) __attribute__((__format__ (printf, 3, 4))); +void smtp_filter_dataline(uint64_t, uint64_t, const char *, ...) + __attribute__((__format__ (printf, 3, 4))); void smtp_run(void);