tools: Give mime parser callbacks access to the rfc822 parser.
authorWerner Koch <wk@gnupg.org>
Thu, 29 Sep 2016 06:11:32 +0000 (08:11 +0200)
committerWerner Koch <wk@gnupg.org>
Thu, 29 Sep 2016 15:56:37 +0000 (17:56 +0200)
* 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 <wk@gnupg.org>
tools/mime-parser.c
tools/mime-parser.h

index 7ac3c69..0ca5452 100644 (file)
@@ -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
index ab0d792..b217a2c 100644 (file)
@@ -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*/