diff options
author | saturneric <[email protected]> | 2025-04-13 19:33:31 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2025-04-13 19:33:31 +0000 |
commit | 7ca18eb0e2c4204f749c682b66c862968e8d2f58 (patch) | |
tree | ba8e0303ebc6ec376b1be580408d9cd91f58f2d8 /src/core/function/gpg/GpgAssuanHelper.cpp | |
parent | feat: add openpgp smart card support (diff) | |
download | GpgFrontend-7ca18eb0e2c4204f749c682b66c862968e8d2f58.tar.gz GpgFrontend-7ca18eb0e2c4204f749c682b66c862968e8d2f58.zip |
feat: add SmartCardController
Diffstat (limited to 'src/core/function/gpg/GpgAssuanHelper.cpp')
-rw-r--r-- | src/core/function/gpg/GpgAssuanHelper.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/core/function/gpg/GpgAssuanHelper.cpp b/src/core/function/gpg/GpgAssuanHelper.cpp index 2351b9a2..8fa311dc 100644 --- a/src/core/function/gpg/GpgAssuanHelper.cpp +++ b/src/core/function/gpg/GpgAssuanHelper.cpp @@ -51,7 +51,7 @@ auto GpgAssuanHelper::ConnectToSocket(GpgComponentType type) -> bool { auto socket_path = ctx_.ComponentDirectory(type); if (socket_path.isEmpty()) { - LOG_F() << "socket path of component: " << component_type_to_q_string(type) + LOG_W() << "socket path of component: " << component_type_to_q_string(type) << " is empty"; return false; } @@ -65,7 +65,7 @@ auto GpgAssuanHelper::ConnectToSocket(GpgComponentType type) -> bool { launch_component(type); if (!info.exists()) { - LOG_F() << "socket path is still not exists: " << socket_path + LOG_W() << "socket path is still not exists: " << socket_path << "abort..."; return false; } @@ -77,17 +77,17 @@ auto GpgAssuanHelper::ConnectToSocket(GpgComponentType type) -> bool { auto err = assuan_socket_connect(a_ctx, info.absoluteFilePath().toUtf8(), ASSUAN_INVALID_PID, 0); if (err != GPG_ERR_NO_ERROR) { - LOG_F() << "failed to connect to socket:" << CheckGpgError(err); + LOG_W() << "failed to connect to socket:" << CheckGpgError(err); return false; } LOG_D() << "connected to socket by assuan protocol: " - << info.absoluteFilePath(); + << info.absoluteFilePath() << "channel:" << GetChannel(); err = assuan_transact(a_ctx, "GETINFO pid", simple_data_callback, nullptr, nullptr, nullptr, nullptr, nullptr); if (err != GPG_ERR_NO_ERROR) { - LOG_F() << "failed to test assuan connection:" << CheckGpgError(err); + LOG_W() << "failed to test assuan connection:" << CheckGpgError(err); return false; } @@ -111,12 +111,19 @@ auto GpgAssuanHelper::SendCommand(GpgComponentType type, const QString& command, context->status_cb = std::move(status_cb); context->inquery_cb = std::move(inquery_cb); + LOG_D() << "sending assuan command: " << command; + auto err = assuan_transact( assuan_ctx_[type], command.toUtf8(), default_data_callback, &context, default_inquery_callback, &context, default_status_callback, &context); if (err != GPG_ERR_NO_ERROR) { - LOG_F() << "failed to send assuan command :" << CheckGpgError(err); + LOG_W() << "failed to send assuan command:" << CheckGpgError(err); + + // broken pipe error, try reconnect next time + if (CheckGpgError(err) == 32877) { + assuan_ctx_.remove(type); + } return false; } @@ -153,7 +160,6 @@ auto GpgAssuanHelper::SendStatusCommand(GpgComponentType type, }; auto ret = SendCommand(type, command, d_cb, i_cb, s_cb); - return {ret, status_lines}; } @@ -185,7 +191,7 @@ auto GpgAssuanHelper::default_inquery_callback( void GpgAssuanHelper::launch_component(GpgComponentType type) { if (gpgconf_path_.isEmpty()) { - LOG_F() << "gpgconf_path is not collected by initializing"; + LOG_W() << "gpgconf_path is not collected by initializing"; return; } @@ -199,7 +205,7 @@ void GpgAssuanHelper::launch_component(GpgComponentType type) { process.start(); if (!process.waitForFinished()) { - LOG_F() << "failed to execute gpgconf" << process.arguments(); + LOG_E() << "failed to execute gpgconf" << process.arguments(); return; } } |