aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Heinecke <[email protected]>2017-03-22 15:38:35 +0000
committerAndre Heinecke <[email protected]>2017-03-22 15:43:33 +0000
commit8ddb42ada46f00d8393f6c2df7d6b79a4a5878f0 (patch)
tree0c440c121b54f53330e42da51dc561e85227b851
parentqt: Initialize library first in tests (diff)
downloadgpgme-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.
-rw-r--r--NEWS1
-rw-r--r--lang/cpp/src/data.cpp24
-rw-r--r--lang/cpp/src/data.h5
3 files changed, 30 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 367b718f..d03fe80b 100644
--- a/NEWS
+++ b/NEWS
@@ -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()
{