+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
* gtlsbackend-openssl.c
*
#include "gtlsclientconnection-openssl.h"
#include "gtlsfiledatabase-openssl.h"
-typedef struct _GTlsBackendOpensslPrivate
+struct _GTlsBackendOpenssl
{
+ GObject parent_instance;
+
GMutex mutex;
GTlsDatabase *default_database;
-} GTlsBackendOpensslPrivate;
+};
static void g_tls_backend_openssl_interface_init (GTlsBackendInterface *iface);
G_DEFINE_DYNAMIC_TYPE_EXTENDED (GTlsBackendOpenssl, g_tls_backend_openssl, G_TYPE_OBJECT, 0,
- G_ADD_PRIVATE_DYNAMIC (GTlsBackendOpenssl)
G_IMPLEMENT_INTERFACE_DYNAMIC (G_TYPE_TLS_BACKEND,
g_tls_backend_openssl_interface_init))
#pragma GCC diagnostic ignored "-Wunused-function"
#endif
-static unsigned long
+static size_t
id_cb (void)
{
- return (unsigned long) g_thread_self ();
+ return (size_t) g_thread_self ();
}
static void
/* Leak the module to keep it from being unloaded. */
plugin = g_type_get_plugin (G_TYPE_TLS_BACKEND_OPENSSL);
- if (plugin != NULL)
+ if (plugin)
g_type_plugin_use (plugin);
return NULL;
}
static void
g_tls_backend_openssl_init (GTlsBackendOpenssl *backend)
{
- GTlsBackendOpensslPrivate *priv;
-
- priv = g_tls_backend_openssl_get_instance_private (backend);
-
/* Once we call gtls_openssl_init(), we can't allow the module to be
* unloaded (since if openssl gets unloaded but gcrypt doesn't, then
* gcrypt will have dangling pointers to openssl's mutex functions).
*/
g_once (&openssl_inited, gtls_openssl_init, NULL);
- g_mutex_init (&priv->mutex);
+ g_mutex_init (&backend->mutex);
}
static void
int i;
GTlsBackendOpenssl *backend = G_TLS_BACKEND_OPENSSL (object);
- GTlsBackendOpensslPrivate *priv;
-
- priv = g_tls_backend_openssl_get_instance_private (backend);
- g_clear_object (&priv->default_database);
- g_mutex_clear (&priv->mutex);
+ g_clear_object (&backend->default_database);
+ g_mutex_clear (&backend->mutex);
CRYPTO_set_id_callback (NULL);
CRYPTO_set_locking_callback (NULL);
G_OBJECT_CLASS (g_tls_backend_openssl_parent_class)->finalize (object);
}
-static GTlsDatabase *
-g_tls_backend_openssl_real_create_database (GTlsBackendOpenssl *self,
- GError **error)
-{
- gchar *anchor_file = NULL;
- GTlsDatabase *database;
-
-#ifdef G_OS_WIN32
- if (g_getenv ("G_TLS_OPENSSL_HANDLE_CERT_RELOCATABLE") != NULL)
- {
- gchar *module_dir;
-
- module_dir = g_win32_get_package_installation_directory_of_module (NULL);
- anchor_file = g_build_filename (module_dir, "bin", "cert.pem", NULL);
- g_free (module_dir);
- }
-#endif
-
- if (anchor_file == NULL)
- {
- const gchar *openssl_cert_file;
-
- openssl_cert_file = g_getenv (X509_get_default_cert_file_env ());
- if (openssl_cert_file == NULL)
- openssl_cert_file = X509_get_default_cert_file ();
-
- anchor_file = g_strdup (openssl_cert_file);
- }
-
- database = g_tls_file_database_new (anchor_file, error);
- g_free (anchor_file);
-
- return database;
-}
-
static void
g_tls_backend_openssl_class_init (GTlsBackendOpensslClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->finalize = g_tls_backend_openssl_finalize;
-
- klass->create_database = g_tls_backend_openssl_real_create_database;
}
static void
{
}
-static GTlsDatabase*
+static GTlsDatabase *
g_tls_backend_openssl_get_default_database (GTlsBackend *backend)
{
GTlsBackendOpenssl *openssl_backend = G_TLS_BACKEND_OPENSSL (backend);
- GTlsBackendOpensslPrivate *priv;
GTlsDatabase *result;
GError *error = NULL;
- priv = g_tls_backend_openssl_get_instance_private (openssl_backend);
-
- g_mutex_lock (&priv->mutex);
+ g_mutex_lock (&openssl_backend->mutex);
- if (priv->default_database)
+ if (openssl_backend->default_database)
{
- result = g_object_ref (priv->default_database);
+ result = g_object_ref (openssl_backend->default_database);
}
else
{
- g_assert (G_TLS_BACKEND_OPENSSL_GET_CLASS (openssl_backend)->create_database);
- result = G_TLS_BACKEND_OPENSSL_GET_CLASS (openssl_backend)->create_database (openssl_backend, &error);
+ result = G_TLS_DATABASE (g_tls_database_openssl_new (&error));
if (error)
{
g_warning ("Couldn't load TLS file database: %s",
else
{
g_assert (result);
- priv->default_database = g_object_ref (result);
+ openssl_backend->default_database = g_object_ref (result);
}
}
- g_mutex_unlock (&priv->mutex);
+ g_mutex_unlock (&openssl_backend->mutex);
return result;
}
iface->get_server_connection_type = g_tls_server_connection_openssl_get_type;
iface->get_file_database_type = g_tls_file_database_openssl_get_type;
iface->get_default_database = g_tls_backend_openssl_get_default_database;
+ iface->get_dtls_client_connection_type = g_tls_client_connection_openssl_get_type;
+ iface->get_dtls_server_connection_type = g_tls_server_connection_openssl_get_type;
}
void
if (!module)
g_io_extension_point_register (G_TLS_BACKEND_EXTENSION_POINT_NAME);
g_io_extension_point_implement (G_TLS_BACKEND_EXTENSION_POINT_NAME,
- g_tls_backend_openssl_get_type(),
+ g_tls_backend_openssl_get_type (),
"openssl",
-1);
}