#include <grpc/support/port_platform.h>
#include "src/core/tsi/ssl/key_logging/ssl_key_logging.h"
#include <map>
#include <grpc/support/log.h>
#include "src/core/lib/gprpp/crash.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/slice/slice_internal.h"
TlsSessionKeyLogger;
namespace tsi {
namespace {
gpr_once g_cache_mutex_init = …;
grpc_core::Mutex* g_tls_session_key_log_cache_mu = …;
TlsSessionKeyLoggerCache* g_cache_instance
ABSL_GUARDED_BY(g_tls_session_key_log_cache_mu) = …;
void do_cache_mutex_init(void) { … }
}
TlsSessionKeyLoggerCache::TlsSessionKeyLogger::TlsSessionKeyLogger(
std::string tls_session_key_log_file_path,
grpc_core::RefCountedPtr<TlsSessionKeyLoggerCache> cache)
: tls_session_key_log_file_path_(std::move(tls_session_key_log_file_path)),
cache_(std::move(cache)) {
GPR_ASSERT(!tls_session_key_log_file_path_.empty());
GPR_ASSERT(cache_ != nullptr);
fd_ = fopen(tls_session_key_log_file_path_.c_str(), "a");
if (fd_ == nullptr) {
grpc_error_handle error = GRPC_OS_ERROR(errno, "fopen");
gpr_log(GPR_ERROR,
"Ignoring TLS Key logging. ERROR Opening TLS Keylog "
"file: %s",
grpc_core::StatusToString(error).c_str());
}
cache_->tls_session_key_logger_map_.emplace(tls_session_key_log_file_path_,
this);
};
TlsSessionKeyLoggerCache::TlsSessionKeyLogger::~TlsSessionKeyLogger() { … }
void TlsSessionKeyLoggerCache::TlsSessionKeyLogger::LogSessionKeys(
SSL_CTX* , const std::string& session_keys_info) { … }
TlsSessionKeyLoggerCache::TlsSessionKeyLoggerCache()
ABSL_EXCLUSIVE_LOCKS_REQUIRED(g_tls_session_key_log_cache_mu) { … }
TlsSessionKeyLoggerCache::~TlsSessionKeyLoggerCache() { … }
grpc_core::RefCountedPtr<TlsSessionKeyLogger> TlsSessionKeyLoggerCache::Get(
std::string tls_session_key_log_file_path) { … }
};