diff options
| author | Andre Heinecke <[email protected]> | 2017-03-22 15:38:35 +0000 | 
|---|---|---|
| committer | Andre Heinecke <[email protected]> | 2017-03-22 15:43:33 +0000 | 
| commit | 8ddb42ada46f00d8393f6c2df7d6b79a4a5878f0 (patch) | |
| tree | 0c440c121b54f53330e42da51dc561e85227b851 | |
| parent | qt: Initialize library first in tests (diff) | |
| download | gpgme-8ddb42ada46f00d8393f6c2df7d6b79a4a5878f0.tar.gz gpgme-8ddb42ada46f00d8393f6c2df7d6b79a4a5878f0.zip | |
cpp: Wrap keylist_from_data
* lang/cpp/data.h, lang/cpp/data.cpp (GpgME::Data::toKeys): New.
--
Doing this in data instead of Context is a bit more idiomatic. But
this could also be added to Context.
Diffstat (limited to '')
| -rw-r--r-- | NEWS | 1 | ||||
| -rw-r--r-- | lang/cpp/src/data.cpp | 24 | ||||
| -rw-r--r-- | lang/cpp/src/data.h | 5 | 
3 files changed, 30 insertions, 0 deletions
| @@ -26,6 +26,7 @@ Noteworthy changes in version 1.8.1 (unreleased)   cpp: GpgGenCardKeyInteractor                       NEW.   cpp: Subkey::keyGrip                               NEW.   cpp: Subkey::isDeVs                                NEW. + cpp: Data::toKeys                                  NEW.   qt: CryptoConfig::stringValueList()                NEW.   py: Context.__init__        EXTENDED: New keyword arg home_dir.   py: Context.home_dir        NEW. diff --git a/lang/cpp/src/data.cpp b/lang/cpp/src/data.cpp index 2cb4fa88..32ca561b 100644 --- a/lang/cpp/src/data.cpp +++ b/lang/cpp/src/data.cpp @@ -25,6 +25,7 @@  #endif  #include "data_p.h" +#include "context_p.h"  #include <error.h>  #include <interfaces/dataprovider.h> @@ -230,3 +231,26 @@ off_t GpgME::Data::seek(off_t offset, int whence)  {      return gpgme_data_seek(d->data, offset, whence);  } + +std::vector<GpgME::Key> GpgME::Data::toKeys(Protocol proto) const +{ +    std::vector<GpgME::Key> ret; +    if (isNull()) { +        return ret; +    } +    auto ctx = GpgME::Context::createForProtocol(proto); +    if (!ctx) { +        return ret; +    } + +    if (gpgme_op_keylist_from_data_start (ctx->impl()->ctx, d->data, 0)) { +        return ret; +    } + +    gpgme_key_t key; +    while (!gpgme_op_keylist_next (ctx->impl()->ctx, &key)) { +        ret.push_back(GpgME::Key(key, false)); +    } +    delete ctx; +    return ret; +} diff --git a/lang/cpp/src/data.h b/lang/cpp/src/data.h index 50bdf627..cc7906fb 100644 --- a/lang/cpp/src/data.h +++ b/lang/cpp/src/data.h @@ -24,6 +24,7 @@  #define __GPGMEPP_DATA_H__  #include "global.h" +#include "key.h"  #include <sys/types.h> // for size_t, off_t  #include <cstdio> // FILE @@ -109,6 +110,10 @@ public:      ssize_t write(const void *buffer, size_t length);      off_t seek(off_t offset, int whence); +    /** Try to parse the data to a key object using the +     * Protocol proto. Returns an empty list on error.*/ +    std::vector<Key> toKeys(const Protocol proto = Protocol::OpenPGP) const; +      class Private;      Private *impl()      { | 
