webrtc/rtc_base/opensslsessioncache.cc
Benjamin Wright 19aab2ee7c Refactor OpenSSLSessionCache out of OpenSSLAdapterFactory.
This changeset refactors the OpenSSLSessionCache out of the Factory. Instead of
directly injecting a pointer to the factory to each OpenSSLAdapter instead just
a pointer to the OpenSSLSessionCache is submitted which the Factory is the sole
owner of. This provides a cleaner dependency injection interface and allows the
OpenSSLSessionCache to be tested independently of the factory that uses it. It
also allows for the factories role to be more clearly defined allowing for
additional dependency injection in future updates.

This change also removes the habit of having OpenSSL typedefs around certain
functions and instead uses the standardised ossl_typ.h header which contains
these typedefs. This makes the headers more directly tied to just what they are
responsible for doing.

Bug: webrtc:9085
Change-Id: I7938178b70acc613856139d387a1b46928dca6ad
Reviewed-on: https://webrtc-review.googlesource.com/66941
Commit-Queue: Benjamin Wright <benwright@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22758}
2018-04-06 01:01:48 +00:00

52 lines
1.5 KiB
C++

/*
* Copyright 2018 The WebRTC Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "rtc_base/opensslsessioncache.h"
#include "rtc_base/checks.h"
#include "rtc_base/openssl.h"
namespace rtc {
OpenSSLSessionCache::OpenSSLSessionCache(SSLMode ssl_mode, SSL_CTX* ssl_ctx)
: ssl_mode_(ssl_mode), ssl_ctx_(ssl_ctx) {
// It is invalid to pass in a null context.
RTC_DCHECK(ssl_ctx != nullptr);
SSL_CTX_up_ref(ssl_ctx);
}
OpenSSLSessionCache::~OpenSSLSessionCache() {
for (auto it : sessions_) {
SSL_SESSION_free(it.second);
}
SSL_CTX_free(ssl_ctx_);
}
SSL_SESSION* OpenSSLSessionCache::LookupSession(
const std::string& hostname) const {
auto it = sessions_.find(hostname);
return (it != sessions_.end()) ? it->second : nullptr;
}
void OpenSSLSessionCache::AddSession(const std::string& hostname,
SSL_SESSION* new_session) {
SSL_SESSION* old_session = LookupSession(hostname);
SSL_SESSION_free(old_session);
sessions_[hostname] = new_session;
}
SSL_CTX* OpenSSLSessionCache::GetSSLContext() const {
return ssl_ctx_;
}
SSLMode OpenSSLSessionCache::GetSSLMode() const {
return ssl_mode_;
}
} // namespace rtc