In Files

  • openssl/ossl_ssl.c

Class/Module Index [+]

Quicksearch

OpenSSL::SSL::Session

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;

                Data_Get_Struct(arg1, SSL, 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) {
                        (void)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
 
               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, LONG2NUM(t));
}
            
timeout → integer click to toggle source

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 ULONG2NUM(t);
}
            
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 buf[1024*10], *p;
        int len;

        GetSSLSession(self, ctx);

        p = buf;
        len = i2d_SSL_SESSION(ctx, &p);

        if (len <= 0)
                ossl_raise(eSSLSession, "i2d_SSL_SESSION");
        else if (len >= sizeof(buf))
                ossl_raise(eSSLSession, "i2d_SSL_SESSION too large");

        return rb_str_new((const char *) p, len);
}
            
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;
}
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.

blog comments powered by Disqus