json: Implement op_version
* src/gpgme-json.c (op_version): New. (process_request): Extend for version. (protocol_to_string, add_ei_to_object): New helpers.
This commit is contained in:
parent
5fbf81c18b
commit
61f4532ba9
@ -780,7 +780,42 @@ add_signatures_object (cjson_t result, const char *name,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
protocol_to_string (gpgme_protocol_t proto)
|
||||||
|
{
|
||||||
|
switch (proto)
|
||||||
|
{
|
||||||
|
case GPGME_PROTOCOL_OpenPGP: return "OpenPGP";
|
||||||
|
case GPGME_PROTOCOL_CMS: return "CMS";
|
||||||
|
case GPGME_PROTOCOL_GPGCONF: return "gpgconf";
|
||||||
|
case GPGME_PROTOCOL_ASSUAN: return "assuan";
|
||||||
|
case GPGME_PROTOCOL_G13: return "g13";
|
||||||
|
case GPGME_PROTOCOL_UISERVER:return "uiserver";
|
||||||
|
case GPGME_PROTOCOL_SPAWN: return "spawn";
|
||||||
|
default:
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static gpg_error_t
|
||||||
|
add_ei_to_object (cjson_t result, gpgme_engine_info_t info)
|
||||||
|
{
|
||||||
|
if (!cJSON_AddStringToObject (result, "protocol",
|
||||||
|
protocol_to_string (info->protocol)))
|
||||||
|
return gpg_error_from_syserror ();
|
||||||
|
if (!cJSON_AddStringToObject (result, "fname", info->file_name))
|
||||||
|
return gpg_error_from_syserror ();
|
||||||
|
if (!cJSON_AddStringToObject (result, "version", info->version))
|
||||||
|
return gpg_error_from_syserror ();
|
||||||
|
if (!cJSON_AddStringToObject (result, "req_version", info->req_version))
|
||||||
|
return gpg_error_from_syserror ();
|
||||||
|
if (!cJSON_AddStringToObject (result, "homedir",
|
||||||
|
info->home_dir ?
|
||||||
|
info->home_dir :
|
||||||
|
"default"))
|
||||||
|
return gpg_error_from_syserror ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Implementation of the commands.
|
* Implementation of the commands.
|
||||||
@ -1504,8 +1539,57 @@ op_verify (cjson_t request, cjson_t result)
|
|||||||
gpgme_data_release (signature);
|
gpgme_data_release (signature);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char hlp_version[] =
|
||||||
|
"op: \"version\"\n"
|
||||||
|
"\n"
|
||||||
|
"Response on success:\n"
|
||||||
|
"gpgme: The GPGME Version.\n"
|
||||||
|
"info: dump of engine info. containing:\n"
|
||||||
|
" protocol: The protocol.\n"
|
||||||
|
" fname: The file name.\n"
|
||||||
|
" version: The version.\n"
|
||||||
|
" req_ver: The required version.\n"
|
||||||
|
" homedir: The homedir of the engine or \"default\".\n";
|
||||||
|
static gpg_error_t
|
||||||
|
op_version (cjson_t request, cjson_t result)
|
||||||
|
{
|
||||||
|
gpg_error_t err = 0;
|
||||||
|
gpgme_engine_info_t ei = NULL;
|
||||||
|
cjson_t infos = xjson_CreateArray ();
|
||||||
|
|
||||||
|
if (!cJSON_AddStringToObject (result, "gpgme", gpgme_check_version (NULL)))
|
||||||
|
{
|
||||||
|
cJSON_Delete (infos);
|
||||||
|
return gpg_error_from_syserror ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((err = gpgme_get_engine_info (&ei)))
|
||||||
|
{
|
||||||
|
cJSON_Delete (infos);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; ei; ei = ei->next)
|
||||||
|
{
|
||||||
|
cjson_t obj = xjson_CreateObject ();
|
||||||
|
if ((err = add_ei_to_object (obj, ei)))
|
||||||
|
{
|
||||||
|
cJSON_Delete (infos);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
cJSON_AddItemToArray (infos, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cJSON_AddItemToObject (result, "info", infos))
|
||||||
|
{
|
||||||
|
err = gpg_error_from_syserror ();
|
||||||
|
cJSON_Delete (infos);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static const char hlp_getmore[] =
|
static const char hlp_getmore[] =
|
||||||
"op: \"getmore\"\n"
|
"op: \"getmore\"\n"
|
||||||
@ -1644,6 +1728,8 @@ process_request (const char *request)
|
|||||||
{ "encrypt", op_encrypt, hlp_encrypt },
|
{ "encrypt", op_encrypt, hlp_encrypt },
|
||||||
{ "decrypt", op_decrypt, hlp_decrypt },
|
{ "decrypt", op_decrypt, hlp_decrypt },
|
||||||
{ "sign", op_sign, hlp_sign },
|
{ "sign", op_sign, hlp_sign },
|
||||||
|
{ "verify", op_verify, hlp_verify },
|
||||||
|
{ "version", op_version, hlp_version },
|
||||||
{ "getmore", op_getmore, hlp_getmore },
|
{ "getmore", op_getmore, hlp_getmore },
|
||||||
{ "help", op_help, hlp_help },
|
{ "help", op_help, hlp_help },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
|
Loading…
Reference in New Issue
Block a user