mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 04:18:08 +01:00
crypto: make crypto ctx initialization an array
Make it trivial to add handlers for new protocols without duplicating code. No functional changes.
This commit is contained in:
parent
4419069472
commit
cb494f72f3
1 changed files with 21 additions and 6 deletions
27
crypto.c
27
crypto.c
|
@ -43,12 +43,27 @@ create_gpg_context (notmuch_crypto_t *crypto)
|
|||
return gpgctx;
|
||||
}
|
||||
|
||||
static const struct {
|
||||
const char *protocol;
|
||||
notmuch_crypto_context_t *(*get_context) (notmuch_crypto_t *crypto);
|
||||
} protocols[] = {
|
||||
{
|
||||
.protocol = "application/pgp-signature",
|
||||
.get_context = create_gpg_context,
|
||||
},
|
||||
{
|
||||
.protocol = "application/pgp-encrypted",
|
||||
.get_context = create_gpg_context,
|
||||
},
|
||||
};
|
||||
|
||||
/* for the specified protocol return the context pointer (initializing
|
||||
* if needed) */
|
||||
notmuch_crypto_context_t *
|
||||
notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char *protocol)
|
||||
{
|
||||
notmuch_crypto_context_t *cryptoctx = NULL;
|
||||
size_t i;
|
||||
|
||||
if (! protocol) {
|
||||
fprintf (stderr, "Cryptographic protocol is empty.\n");
|
||||
|
@ -61,14 +76,14 @@ notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char *protocol)
|
|||
* parameter names as defined in this document are
|
||||
* case-insensitive." Thus, we use strcasecmp for the protocol.
|
||||
*/
|
||||
if (strcasecmp (protocol, "application/pgp-signature") == 0 ||
|
||||
strcasecmp (protocol, "application/pgp-encrypted") == 0) {
|
||||
cryptoctx = create_gpg_context (crypto);
|
||||
} else {
|
||||
fprintf (stderr, "Unknown or unsupported cryptographic protocol.\n");
|
||||
for (i = 0; i < ARRAY_SIZE (protocols); i++) {
|
||||
if (strcasecmp (protocol, protocols[i].protocol) == 0)
|
||||
return protocols[i].get_context (crypto);
|
||||
}
|
||||
|
||||
return cryptoctx;
|
||||
fprintf (stderr, "Unknown or unsupported cryptographic protocol.\n");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Reference in a new issue