class OpenSSL::SSL::Session - Documentation for Ruby 2.3.0 (original) (raw)

Public Class Methods

new(SSLSocket | string) → session click to toggle source

Parameters

SSLSocket is an OpenSSL::SSL::SSLSocket string must be a DER or PEM encoded Session.

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 (!ssl || (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;

}

Public Instance Methods

session1 == session2 → boolean click to toggle source

static VALUE ossl_ssl_session_eq(VALUE val1, VALUE val2) { SSL_SESSION *ctx1, *ctx2;

    GetSSLSession(val1, ctx1);
    SafeGetSSLSession(val2, ctx2);

    switch (SSL_SESSION_cmp(ctx1, ctx2)) {
    case 0:                return Qtrue;
    default:       return Qfalse;
    }

}

id → aString click to toggle source

Returns the Session ID.

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);

}

time → Time click to toggle source

Gets start time of the session.

static VALUE ossl_ssl_session_get_time(VALUE self) { SSL_SESSION *ctx; time_t t;

    GetSSLSession(self, ctx);

    t = SSL_SESSION_get_time(ctx);

    if (t == 0)
            return Qnil;

    return rb_funcall(rb_cTime, rb_intern("at"), 1, TIMET2NUM(t));

}

time=(Time) → Time click to toggle source

time=(integer) → Time

Sets start time of the session. Time resolution is in seconds.

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 click to toggle source

Gets how long until the session expires in seconds.

static VALUE ossl_ssl_session_get_timeout(VALUE self) { SSL_SESSION *ctx; time_t t;

    GetSSLSession(self, ctx);

    t = SSL_SESSION_get_timeout(ctx);

    return TIMET2NUM(t);

}

timeout=(integer) → integer click to toggle source

Sets how long until the session expires in seconds.

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);

}

to_der → aString click to toggle source

Returns an ASN1 encoded String that contains the Session object.

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 click to toggle source

Returns a PEM encoded String that contains the Session object.

static VALUE ossl_ssl_session_to_pem(VALUE self) { SSL_SESSION *ctx; BIO *out; BUF_MEM *buf; VALUE str; int i;

    GetSSLSession(self, ctx);

    if (!(out = BIO_new(BIO_s_mem()))) {
            ossl_raise(eSSLSession, "BIO_s_mem()");
    }

    if (!(i=PEM_write_bio_SSL_SESSION(out, ctx))) {
            BIO_free(out);
            ossl_raise(eSSLSession, "SSL_SESSION_print()");
    }

    BIO_get_mem_ptr(out, &buf);
    str = rb_str_new(buf->data, buf->length);
    BIO_free(out);

    return str;

}

to_text → String click to toggle source

Shows everything in the Session object.

static VALUE ossl_ssl_session_to_text(VALUE self) { SSL_SESSION *ctx; BIO *out; BUF_MEM *buf; VALUE str;

    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()");
    }

    BIO_get_mem_ptr(out, &buf);
    str = rb_str_new(buf->data, buf->length);
    BIO_free(out);

    return str;

}