From d75c118aae18e20f08dbbb69c7998e1f3694ccd0 Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Mon, 4 Jul 2016 11:25:40 +0200 Subject: [PATCH] Cpp: Add support for pinentry_mode * lang/cpp/src/context.cpp (Context::pinentryMode): Return mode. (Context::setPinentryMode): Set mode. * lang/cpp/src/context.h (PinentryMode): Add enum. --- lang/cpp/src/context.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ lang/cpp/src/context.h | 10 ++++++++++ 2 files changed, 50 insertions(+) diff --git a/lang/cpp/src/context.cpp b/lang/cpp/src/context.cpp index 085b835f..9e31b6a9 100644 --- a/lang/cpp/src/context.cpp +++ b/lang/cpp/src/context.cpp @@ -1255,6 +1255,46 @@ Error Context::lastError() const return Error(d->lasterr); } +Context::PinentryMode Context::pinentryMode() const +{ + switch (gpgme_get_pinentry_mode (d->ctx)) { + case GPGME_PINENTRY_MODE_ASK: + return PinentryAsk; + case GPGME_PINENTRY_MODE_CANCEL: + return PinentryCancel; + case GPGME_PINENTRY_MODE_ERROR: + return PinentryError; + case GPGME_PINENTRY_MODE_LOOPBACK: + return PinentryLoopback; + case GPGME_PINENTRY_MODE_DEFAULT: + default: + return PinentryDefault; + } +} + +Error Context::setPinentryMode(PinentryMode which) +{ + gpgme_pinentry_mode_t mode; + switch (which) { + case PinentryAsk: + mode = GPGME_PINENTRY_MODE_ASK; + break; + case PinentryCancel: + mode = GPGME_PINENTRY_MODE_CANCEL; + break; + case PinentryError: + mode = GPGME_PINENTRY_MODE_ERROR; + break; + case PinentryLoopback: + mode = GPGME_PINENTRY_MODE_LOOPBACK; + break; + case PinentryDefault: + default: + mode = GPGME_PINENTRY_MODE_DEFAULT; + } + return Error(d->lasterr = gpgme_set_pinentry_mode(d->ctx, mode)); +} + std::ostream &operator<<(std::ostream &os, Protocol proto) { os << "GpgME::Protocol("; diff --git a/lang/cpp/src/context.h b/lang/cpp/src/context.h index a8112d62..c9c2af73 100644 --- a/lang/cpp/src/context.h +++ b/lang/cpp/src/context.h @@ -117,6 +117,16 @@ public: GpgME::Error setEngineFileName(const char *filename); GpgME::Error setEngineHomeDirectory(const char *filename); + enum PinentryMode{ + PinentryDefault = 0, + PinentryAsk = 1, + PinentryCancel = 2, + PinentryError = 3, + PinentryLoopback = 4 + }; + GpgME::Error setPinentryMode(PinentryMode which); + PinentryMode pinentryMode() const; + private: friend class ::GpgME::EventLoopInteractor; void installIOCallbacks(gpgme_io_cbs *iocbs);