Next: Engine Configuration, Previous: Engine Version Check, Up: Protocols and Engines [Contents][Index]
The gpgme_engine_info_t type specifies a pointer to a structure
describing a crypto engine.  The structure contains the following
elements:
gpgme_engine_info_t nextThis is a pointer to the next engine info structure in the linked
list, or NULL if this is the last element.
gpgme_protocol_t protocolThis is the protocol for which the crypto engine is used.  You can
convert this to a string with gpgme_get_protocol_name for
printing.
const char *file_nameThis is a string holding the file name of the executable of the crypto
engine.  Currently, it is never NULL, but using NULL is
reserved for future use, so always check before you use it.
const char *home_dirThis is a string holding the directory name of the crypto engine’s
configuration directory.  If it is NULL, then the default
directory is used.  See gpgme_get_dirinfo on how to get the
default directory.
const char *versionThis is a string containing the version number of the crypto engine.
It might be NULL if the version number can not be determined,
for example because the executable doesn’t exist or is invalid.
const char *req_versionThis is a string containing the minimum required version number of the
crypto engine for GPGME to work correctly.  This is the
version number that gpgme_engine_check_version verifies
against.  Currently, it is never NULL, but using NULL is
reserved for future use, so always check before you use it.
The function gpgme_get_engine_info returns a linked list of
engine info structures in info.  Each info structure describes
the defaults of one configured backend.
The memory for the info structures is allocated the first time this function is invoked, and must not be freed by the caller.
This function returns the error code GPG_ERR_NO_ERROR if
successful, and a system error if the memory could not be allocated.
Here is an example how you can provide more diagnostics if you receive an error message which indicates that the crypto engine is invalid.
gpgme_ctx_t ctx;
gpgme_error_t err;
[...]
if (gpgme_err_code (err) == GPG_ERR_INV_ENGINE)
  {
    gpgme_engine_info_t info;
    err = gpgme_get_engine_info (&info);
    if (!err)
      {
        while (info && info->protocol != gpgme_get_protocol (ctx))
          info = info->next;
        if (!info)
          fprintf (stderr, "GPGME compiled without support for protocol %s",
                   gpgme_get_protocol_name (info->protocol));
        else if (info->file_name && !info->version)
          fprintf (stderr, "Engine %s not installed properly",
                   info->file_name);
        else if (info->file_name && info->version && info->req_version)
          fprintf (stderr, "Engine %s version %s installed, "
                   "but at least version %s required", info->file_name,
                   info->version, info->req_version);
        else
          fprintf (stderr, "Unknown problem with engine for protocol %s",
                   gpgme_get_protocol_name (info->protocol));
      }
  }
Next: Engine Configuration, Previous: Engine Version Check, Up: Protocols and Engines [Contents][Index]