8 static VALUE eSSLSession;
11 ossl_ssl_session_free(
void *
ptr)
13 SSL_SESSION_free(
ptr);
17 "OpenSSL/SSL/Session",
19 0, ossl_ssl_session_free,
24 static VALUE ossl_ssl_session_alloc(
VALUE klass)
38 ossl_ssl_session_initialize(
VALUE self,
VALUE arg1)
43 ossl_raise(eSSLSession,
"SSL Session already initialized");
50 if ((ctx = SSL_get1_session(ssl)) ==
NULL)
51 ossl_raise(eSSLSession,
"no session available");
56 ctx = d2i_SSL_SESSION_bio(
in,
NULL);
72 ossl_ssl_session_initialize_copy(
VALUE self,
VALUE other)
74 SSL_SESSION *sess, *sess_other, *sess_new;
80 sess_new = ASN1_dup((i2d_of_void *)i2d_SSL_SESSION, (d2i_of_void *)d2i_SSL_SESSION,
86 SSL_SESSION_free(sess);
92 ossl_SSL_SESSION_cmp(
const SSL_SESSION *a,
const SSL_SESSION *b)
95 const unsigned char *a_sid = SSL_SESSION_get_id(a, &a_len);
97 const unsigned char *b_sid = SSL_SESSION_get_id(b, &b_len);
104 return CRYPTO_memcmp(a_sid, b_sid, a_len);
115 SSL_SESSION *ctx1, *ctx2;
120 switch (ossl_SSL_SESSION_cmp(ctx1, ctx2)) {
121 case 0:
return Qtrue;
133 ossl_ssl_session_get_time(
VALUE self)
139 t = SSL_SESSION_get_time(ctx);
155 ossl_ssl_session_get_timeout(
VALUE self)
161 t = SSL_SESSION_get_timeout(ctx);
184 SSL_SESSION_set_time(ctx,
t);
185 return ossl_ssl_session_get_time(
self);
201 SSL_SESSION_set_timeout(ctx,
t);
202 return ossl_ssl_session_get_timeout(
self);
211 static VALUE ossl_ssl_session_get_id(
VALUE self)
214 const unsigned char *p =
NULL;
219 p = SSL_SESSION_get_id(ctx, &i);
230 static VALUE ossl_ssl_session_to_der(
VALUE self)
238 len = i2d_SSL_SESSION(ctx,
NULL);
245 i2d_SSL_SESSION(ctx, &p);
256 static VALUE ossl_ssl_session_to_pem(
VALUE self)
263 if (!(out = BIO_new(BIO_s_mem()))) {
267 if (!PEM_write_bio_SSL_SESSION(out, ctx)) {
269 ossl_raise(eSSLSession,
"SSL_SESSION_print()");
283 static VALUE ossl_ssl_session_to_text(
VALUE self)
290 if (!(out = BIO_new(BIO_s_mem()))) {
294 if (!SSL_SESSION_print(out, ctx)) {
296 ossl_raise(eSSLSession,
"SSL_SESSION_print()");