// 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 <iterator>
#include <string>

#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, std::size(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, std::size(buf));
    absl::StrAppend(&message, buf);
  }
  return absl::Status(code, message);
}

}  // namespace quiche
