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);