Commit Diff


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);