| // Copyright 2022 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "quiche/common/quiche_crypto_logging.h" | |
| #include "absl/status/status.h" | |
| #include "absl/strings/string_view.h" | |
| #include "openssl/err.h" | |
| #include "quiche/common/platform/api/quiche_logging.h" | |
| namespace quiche { | |
| void DLogOpenSslErrors() { | |
| #ifdef NDEBUG | |
| // Clear OpenSSL error stack. | |
| ClearOpenSslErrors(); | |
| #else | |
| while (uint32_t error = ERR_get_error()) { | |
| char buf[120]; | |
| ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf)); | |
| QUICHE_DLOG(ERROR) << "OpenSSL error: " << buf; | |
| } | |
| #endif | |
| } | |
| void ClearOpenSslErrors() { | |
| while (ERR_get_error()) { | |
| } | |
| } | |
| absl::Status SslErrorAsStatus(absl::string_view msg) { | |
| std::string message; | |
| absl::StrAppend(&message, msg, "OpenSSL error: "); | |
| while (uint32_t error = ERR_get_error()) { | |
| char buf[120]; | |
| ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf)); | |
| absl::StrAppend(&message, buf); | |
| } | |
| return absl::InternalError(message); | |
| } | |
| } // namespace quiche |