Commit Diff


commit - ad394dccdd83054bf6379b35acf8ec0782451d4d
commit + a28aed5294bf63bca867930a579f60c9cd7e5688
blob - 27184b20e50af303d044271140c7e5b737f04d3a
blob + 4b27868ec32fcc96ec3ffd47220c27aebe999789
--- smtp_proc.c
+++ smtp_proc.c
@@ -41,6 +41,8 @@ static ssize_t smtp_getline(char ** restrict, size_t *
 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_data(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 *,
@@ -59,6 +61,7 @@ struct smtp_callback {
 	void *cb;
 } smtp_callbacks[] = {
         {"filter", "connect", "smtp-in", .smtp_filter = smtp_connect, NULL},
+        {"filter", "data", "smtp-in", .smtp_filter = smtp_data, NULL},
         {"filter", "data-line", "smtp-in", .smtp_filter = smtp_dataline, NULL},
 	{"report", "link-disconnect", "smtp-in",
 	    .smtp_report = smtp_in_link_disconnect, NULL}
@@ -74,6 +77,13 @@ smtp_register_filter_connect(void (*cb)(char *, int, s
 }
 
 int
+smtp_register_filter_data(void (*cb)(char *, int, struct timespec *, char *,
+    char *, uint64_t, uint64_t))
+{
+	return smtp_register("filter", "data", "smtp-in", (void *)cb);
+}
+
+int
 smtp_register_filter_dataline(void (*cb)(char *, int, struct timespec *, char *,
     char *, uint64_t, uint64_t, char *))
 {
@@ -273,10 +283,21 @@ smtp_connect(struct smtp_callback *cb, int version, st
 }
 
 static void
+smtp_data(struct smtp_callback *cb, int version, struct timespec *tm,
+    uint64_t reqid, uint64_t token, char *params)
+{
+	void (*f)(char *, int, struct timespec *, char *, char *, uint64_t,
+	    uint64_t);
+
+	f = cb->cb;
+	f(cb->type, version, tm, cb->direction, cb->phase, reqid, token);
+}
+
+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,
+	void (*f)(char *, int, struct timespec *, char *, char *, uint64_t,
 	    uint64_t, char *);
 
 	f = cb->cb;
blob - d44b76f095cc3293fd250780da6f9b83a4d621a3
blob + 39a43d963a2e37a9f520a2229d53d6b73694db1e
--- smtp_proc.h
+++ smtp_proc.h
@@ -27,6 +27,8 @@ struct inx_addr {
 
 int smtp_register_filter_connect(void (*)(char *, int, struct timespec *,
     char *, char *, uint64_t, uint64_t, char *, struct inx_addr *));
+int smtp_register_filter_data(void (*)(char *, int, struct timespec *, char *,
+    char *, uint64_t, uint64_t));
 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 *,