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 <wk@gnupg.org>
This commit is contained in:
Werner Koch 2016-09-29 08:11:32 +02:00
parent 9e6f8a55ed
commit 4ac138c84d
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
2 changed files with 24 additions and 0 deletions

View 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

View 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*/