| // 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 <cstdint> |
| #include <string> |
| |
| #include "absl/base/macros.h" |
| #include "absl/status/status.h" |
| #include "absl/strings/str_cat.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, absl::StatusCode code) { |
| 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::Status(code, message); |
| } |
| |
| } // namespace quiche |