crypto: refactor context creation to facilitate further work

Let the context creation functions decide how to handle multiple calls
and cache the crypto context. No functional changes.
This commit is contained in:
Jani Nikula 2015-12-14 09:38:50 -04:00 committed by David Bremner
parent a9fec12a08
commit 4419069472

View file

@ -22,14 +22,20 @@
/* Create a GPG context (GMime 2.6) */ /* Create a GPG context (GMime 2.6) */
static notmuch_crypto_context_t * static notmuch_crypto_context_t *
create_gpg_context (const char *gpgpath) create_gpg_context (notmuch_crypto_t *crypto)
{ {
notmuch_crypto_context_t *gpgctx; notmuch_crypto_context_t *gpgctx;
if (crypto->gpgctx)
return crypto->gpgctx;
/* TODO: GMimePasswordRequestFunc */ /* TODO: GMimePasswordRequestFunc */
gpgctx = g_mime_gpg_context_new (NULL, gpgpath ? gpgpath : "gpg"); gpgctx = g_mime_gpg_context_new (NULL, crypto->gpgpath ? crypto->gpgpath : "gpg");
if (! gpgctx) if (! gpgctx) {
fprintf (stderr, "Failed to construct gpg context.\n");
return NULL; return NULL;
}
crypto->gpgctx = gpgctx;
g_mime_gpg_context_set_use_agent ((GMimeGpgContext *) gpgctx, TRUE); g_mime_gpg_context_set_use_agent ((GMimeGpgContext *) gpgctx, TRUE);
g_mime_gpg_context_set_always_trust ((GMimeGpgContext *) gpgctx, FALSE); g_mime_gpg_context_set_always_trust ((GMimeGpgContext *) gpgctx, FALSE);
@ -57,12 +63,7 @@ notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char *protocol)
*/ */
if (strcasecmp (protocol, "application/pgp-signature") == 0 || if (strcasecmp (protocol, "application/pgp-signature") == 0 ||
strcasecmp (protocol, "application/pgp-encrypted") == 0) { strcasecmp (protocol, "application/pgp-encrypted") == 0) {
if (! crypto->gpgctx) { cryptoctx = create_gpg_context (crypto);
crypto->gpgctx = create_gpg_context (crypto->gpgpath);
if (! crypto->gpgctx)
fprintf (stderr, "Failed to construct gpg context.\n");
}
cryptoctx = crypto->gpgctx;
} else { } else {
fprintf (stderr, "Unknown or unsupported cryptographic protocol.\n"); fprintf (stderr, "Unknown or unsupported cryptographic protocol.\n");
} }