Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
class method
OpenSSL::SSL::Session.new
(::OpenSSL::SSL::SSLSocket | ::String sock_or_str) -> ::OpenSSL::SSL::Session
Session.new(ssl_socket) → Session
Session.new(string) → Session
ext/openssl/ossl_ssl_session.c
View on GitHub ↗
static VALUE
ossl_ssl_session_initialize(VALUE self, VALUE arg1)
{
SSL_SESSION *ctx;
ossl_want_uninitialized(self, &ossl_ssl_session_type);
if (rb_obj_is_instance_of(arg1, cSSLSocket)) {
SSL *ssl;
GetSSL(arg1, ssl);
if ((ctx = SSL_get1_session(ssl)) == NULL)
ossl_raise(eSSLSession, "no session available");
}
else {
BIO *in = ossl_obj2bio(&arg1);
ctx = d2i_SSL_SESSION_bio(in, NULL);
if (!ctx) {
OSSL_BIO_reset(in);
ctx = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL);
}
BIO_free(in);
if (!ctx)
ossl_raise(rb_eArgError, "unknown type");
}
RTYPEDDATA_DATA(self) = ctx;
return self;
}