26 static int32_t getSessionServiceIdentityIdx() {
36 auto sessionData =
reinterpret_cast<const unsigned char*
>(str.
c_str());
38 return d2i_SSL_SESSION(
nullptr, &sessionData, str.
length());
49 int len = i2d_SSL_SESSION(session,
nullptr);
61 auto buf =
reinterpret_cast<unsigned char*
>(sessionData->writableData());
62 len = i2d_SSL_SESSION(session, &buf);
65 sessionData->append(len);
68 }
catch (
const std::bad_alloc& ex) {
69 LOG(ERROR) <<
"Failed to allocate memory for sessionData: " << ex.what();
79 if (!session || str.empty()) {
83 return SSL_SESSION_set_ex_data(
84 session, getSessionServiceIdentityIdx(), serviceExData) > 0;
92 auto data = SSL_SESSION_get_ex_data(session, getSessionServiceIdentityIdx());
100 auto sessionData = sessionToFbString(sess);
105 result.sessionData =
std::move(*sessionData);
107 if (serviceIdentity) {
108 result.serviceIdentity =
std::move(*serviceIdentity);
110 #ifdef WANGLE_HAVE_SSL_SESSION_DUP 111 result.sessionDuplicateTemplate =
118 #ifdef WANGLE_HAVE_SSL_SESSION_DUP 136 #ifdef WANGLE_HAVE_SSL_SESSION_DUP 137 return SSL_SESSION_dup(toClone);
139 auto sessionData = sessionToFbString(toClone);
143 auto clone = fbStringToSession(
std::move(*sessionData));
149 if (serviceIdentity) {
const value_type * c_str() const
folly::fbstring serviceIdentity
bool setSessionServiceIdentity(SSL_SESSION *session, const std::string &str)
folly::fbstring sessionData
static std::unique_ptr< IOBuf > create(std::size_t capacity)
std::shared_ptr< SSL_SESSION > sessionDuplicateTemplate
static void getSSLSessionExStrIndex(int *pindex)
folly::Optional< std::string > getSessionServiceIdentity(SSL_SESSION *session)
constexpr detail::Map< Move > move
folly::Optional< SSLSessionCacheData > getCacheDataForSession(SSL_SESSION *sess)
SSL_SESSION * getSessionFromCacheData(const SSLSessionCacheData &data)
std::basic_string< E, T, A > toStdString() const
SSL_SESSION * cloneSSLSession(SSL_SESSION *toClone)
static constexpr uint64_t data[1]