ext/rubysl/openssl/ossl_ssl_session.c in rubysl-openssl-2.2.1 vs ext/rubysl/openssl/ossl_ssl_session.c in rubysl-openssl-2.3.0
- old
+ new
@@ -2,29 +2,30 @@
* Copyright (C) 2004-2007 Technorama Ltd. <oss-ruby@technorama.net>
*/
#include "ossl.h"
-#define GetSSLSession(obj, sess) do { \
- Data_Get_Struct((obj), SSL_SESSION, (sess)); \
- if (!(sess)) { \
- ossl_raise(rb_eRuntimeError, "SSL Session wasn't initialized."); \
- } \
-} while (0)
-
-#define SafeGetSSLSession(obj, sess) do { \
- OSSL_Check_Kind((obj), cSSLSession); \
- GetSSLSession((obj), (sess)); \
-} while (0)
-
-
VALUE cSSLSession;
static VALUE eSSLSession;
+static void
+ossl_ssl_session_free(void *ptr)
+{
+ SSL_SESSION_free(ptr);
+}
+
+const rb_data_type_t ossl_ssl_session_type = {
+ "OpenSSL/SSL/Session",
+ {
+ 0, ossl_ssl_session_free,
+ },
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
+};
+
static VALUE ossl_ssl_session_alloc(VALUE klass)
{
- return Data_Wrap_Struct(klass, 0, SSL_SESSION_free, NULL);
+ return TypedData_Wrap_Struct(klass, &ossl_ssl_session_type, NULL);
}
/*
* call-seq:
* Session.new(SSLSocket | string) => session
@@ -41,10 +42,10 @@
ossl_raise(eSSLSession, "SSL Session already initialized");
if (rb_obj_is_instance_of(arg1, cSSLSocket)) {
SSL *ssl;
- Data_Get_Struct(arg1, 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);