Class: OpenSSL::SSL::Session
Relationships & Source Files | |
Namespace Children | |
Exceptions:
| |
Inherits: | Object |
Defined in: | ext/openssl/ossl_ssl_session.c |
Class Method Summary
-
.new(ssl_socket) ⇒ Session
constructor
Creates a new
Session
object from an instance ofSSLSocket
or DER/PEM encoded String.
Instance Attribute Summary
-
#time ⇒ Time
rw
Returns the time at which the session was established.
-
#time=(time)
rw
Sets start time of the session.
-
#timeout ⇒ Integer
rw
Returns the timeout value set for the session, in seconds from the established time.
-
#timeout=(integer)
rw
Sets how long until the session expires in seconds.
Instance Method Summary
-
#==(session2) ⇒ Boolean
Returns
true
if the twoSession
is the same,false
if not. -
#id ⇒ String
Returns the
Session
ID. - #initialize_copy(other)
-
#to_der ⇒ String
Returns an
::OpenSSL::ASN1
encoded String that contains theSession
object. -
#to_pem ⇒ String
Returns a PEM encoded String that contains the
Session
object. -
#to_text ⇒ String
Shows everything in the
Session
object.
Constructor Details
.new(ssl_socket) ⇒ Session
.new(string) ⇒ Session
Session
.new(string) ⇒ Session
Creates a new Session
object from an instance of SSLSocket
or DER/PEM encoded String.
# File 'ext/openssl/ossl_ssl_session.c', line 37
static VALUE ossl_ssl_session_initialize(VALUE self, VALUE arg1) { SSL_SESSION *ctx = NULL; if (RDATA(self)->data) ossl_raise(eSSLSession, "SSL Session already initialized"); 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 = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL); if (!ctx) { OSSL_BIO_reset(in); ctx = d2i_SSL_SESSION_bio(in, NULL); } BIO_free(in); if (!ctx) ossl_raise(rb_eArgError, "unknown type"); } /* should not happen */ if (ctx == NULL) ossl_raise(eSSLSession, "ctx not set - internal error"); RDATA(self)->data = ctx; return self; }
Instance Attribute Details
#time ⇒ Time
(rw)
Returns the time at which the session was established.
# File 'ext/openssl/ossl_ssl_session.c', line 137
static VALUE ossl_ssl_session_get_time(VALUE self) { SSL_SESSION *ctx; long t; GetSSLSession(self, ctx); t = SSL_SESSION_get_time(ctx); if (t == 0) return Qnil; return rb_funcall(rb_cTime, rb_intern("at"), 1, LONG2NUM(t)); }
#time=(time) (rw)
#time=(integer)
Sets start time of the session. Time resolution is in seconds.
# File 'ext/openssl/ossl_ssl_session.c', line 179
static VALUE ossl_ssl_session_set_time(VALUE self, VALUE time_v) { SSL_SESSION *ctx; long t; GetSSLSession(self, ctx); if (rb_obj_is_instance_of(time_v, rb_cTime)) { time_v = rb_funcall(time_v, rb_intern("to_i"), 0); } t = NUM2LONG(time_v); SSL_SESSION_set_time(ctx, t); return ossl_ssl_session_get_time(self); }
#timeout ⇒ Integer (rw)
Returns the timeout value set for the session, in seconds from the established time.
# File 'ext/openssl/ossl_ssl_session.c', line 159
static VALUE ossl_ssl_session_get_timeout(VALUE self) { SSL_SESSION *ctx; long t; GetSSLSession(self, ctx); t = SSL_SESSION_get_timeout(ctx); return LONG2NUM(t); }
#timeout=(integer) (rw)
Sets how long until the session expires in seconds.
# File 'ext/openssl/ossl_ssl_session.c', line 199
static VALUE ossl_ssl_session_set_timeout(VALUE self, VALUE time_v) { SSL_SESSION *ctx; long t; GetSSLSession(self, ctx); t = NUM2LONG(time_v); SSL_SESSION_set_timeout(ctx, t); return ossl_ssl_session_get_timeout(self); }
Instance Method Details
#==(session2) ⇒ Boolean
Returns true
if the two Session
is the same, false
if not.
# File 'ext/openssl/ossl_ssl_session.c', line 118
static VALUE ossl_ssl_session_eq(VALUE val1, VALUE val2) { SSL_SESSION *ctx1, *ctx2; GetSSLSession(val1, ctx1); GetSSLSession(val2, ctx2); switch (ossl_SSL_SESSION_cmp(ctx1, ctx2)) { case 0: return Qtrue; default: return Qfalse; } }
#id ⇒ String
Returns the Session
ID.
# File 'ext/openssl/ossl_ssl_session.c', line 216
static VALUE ossl_ssl_session_get_id(VALUE self) { SSL_SESSION *ctx; const unsigned char *p = NULL; unsigned int i = 0; GetSSLSession(self, ctx); p = SSL_SESSION_get_id(ctx, &i); return rb_str_new((const char *) p, i); }
#initialize_copy(other)
[ GitHub ]# File 'ext/openssl/ossl_ssl_session.c', line 76
static VALUE ossl_ssl_session_initialize_copy(VALUE self, VALUE other) { SSL_SESSION *sess, *sess_other, *sess_new; rb_check_frozen(self); sess = RTYPEDDATA_DATA(self); /* XXX */ GetSSLSession(other, sess_other); sess_new = ASN1_dup((i2d_of_void *)i2d_SSL_SESSION, (d2i_of_void *)d2i_SSL_SESSION, (char *)sess_other); if (!sess_new) ossl_raise(eSSLSession, "ASN1_dup"); RTYPEDDATA_DATA(self) = sess_new; SSL_SESSION_free(sess); return self; }
#to_der ⇒ String
Returns an ::OpenSSL::ASN1
encoded String that contains the Session
object.
# File 'ext/openssl/ossl_ssl_session.c', line 235
static VALUE ossl_ssl_session_to_der(VALUE self) { SSL_SESSION *ctx; unsigned char *p; int len; VALUE str; GetSSLSession(self, ctx); len = i2d_SSL_SESSION(ctx, NULL); if (len <= 0) { ossl_raise(eSSLSession, "i2d_SSL_SESSION"); } str = rb_str_new(0, len); p = (unsigned char *)RSTRING_PTR(str); i2d_SSL_SESSION(ctx, &p); ossl_str_adjust(str, p); return str; }
#to_pem ⇒ String
Returns a PEM encoded String that contains the Session
object.
# File 'ext/openssl/ossl_ssl_session.c', line 261
static VALUE ossl_ssl_session_to_pem(VALUE self) { SSL_SESSION *ctx; BIO *out; GetSSLSession(self, ctx); if (!(out = BIO_new(BIO_s_mem()))) { ossl_raise(eSSLSession, "BIO_s_mem()"); } if (!PEM_write_bio_SSL_SESSION(out, ctx)) { BIO_free(out); ossl_raise(eSSLSession, "SSL_SESSION_print()"); } return ossl_membio2str(out); }
#to_text ⇒ String
Shows everything in the Session
object. This is for diagnostic purposes.
# File 'ext/openssl/ossl_ssl_session.c', line 288
static VALUE ossl_ssl_session_to_text(VALUE self) { SSL_SESSION *ctx; BIO *out; GetSSLSession(self, ctx); if (!(out = BIO_new(BIO_s_mem()))) { ossl_raise(eSSLSession, "BIO_s_mem()"); } if (!SSL_SESSION_print(out, ctx)) { BIO_free(out); ossl_raise(eSSLSession, "SSL_SESSION_print()"); } return ossl_membio2str(out); }