From 4ac138c84d0f344ca9442f90c96f0e1f76062a4a Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 29 Sep 2016 08:11:32 +0200 Subject: [PATCH] tools: Give mime parser callbacks access to the rfc822 parser. * tools/mime-parser.c (mime_parser_context_s): Add field MSG. (parse_message_cb): Set it. (mime_parser_rfc822parser): New. * tools/mime-parser.h: Declare rfc822parse_t for the new prototype. Signed-off-by: Werner Koch --- tools/mime-parser.c | 17 +++++++++++++++++ tools/mime-parser.h | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/tools/mime-parser.c b/tools/mime-parser.c index 7ac3c69cb..0ca5452c3 100644 --- a/tools/mime-parser.c +++ b/tools/mime-parser.c @@ -64,6 +64,9 @@ struct mime_parser_context_s /* The callback to collect a signature. */ gpg_error_t (*collect_signature) (void *cookie, const char *data); + /* The RFC822 parser context is stored here during callbacks. */ + rfc822parse_t msg; + /* Helper to convey error codes from user callbacks. */ gpg_error_t err; @@ -189,6 +192,9 @@ parse_message_cb (void *opaque, rfc822parse_event_t event, rfc822parse_t msg) const char *s; int rc = 0; + /* Make the RFC822 parser context availabale for callbacks. */ + ctx->msg = msg; + if (ctx->debug) show_message_parser_event (event); @@ -475,6 +481,8 @@ parse_message_cb (void *opaque, rfc822parse_event_t event, rfc822parse_t msg) } } + ctx->msg = NULL; + return rc; } @@ -599,6 +607,15 @@ mime_parser_set_collect_signature (mime_parser_t ctx, } +/* Return the RFC888 parser context. This is only available inside a + * callback. */ +rfc822parse_t +mime_parser_rfc822parser (mime_parser_t ctx) +{ + return ctx->msg; +} + + /* Read and parse a message from FP and call the appropriate * callbacks. */ gpg_error_t diff --git a/tools/mime-parser.h b/tools/mime-parser.h index ab0d79288..b217a2c8f 100644 --- a/tools/mime-parser.h +++ b/tools/mime-parser.h @@ -48,5 +48,12 @@ void mime_parser_set_collect_signature (mime_parser_t ctx, gpg_error_t mime_parser_parse (mime_parser_t ctx, estream_t fp); +/* Duplicated declaration of the RFC822 parser context. */ +struct rfc822parse_context; +typedef struct rfc822parse_context *rfc822parse_t; + +rfc822parse_t mime_parser_rfc822parser (mime_parser_t ctx); + + #endif /*GNUPG_MIME_PARSER_H*/