emile: update to latest GNUTLS/GCRYPT API.

This commit is contained in:
Cedric BAIL 2015-03-17 08:50:48 +01:00
parent 987607a3c2
commit 0fc4091b8c
1 changed files with 11 additions and 53 deletions

View File

@ -50,61 +50,14 @@ struct _Emile_SSL
Eina_Bool verify_basic : 1;
};
static int
_emile_thread_mutex_init(void **priv)
{
Eina_Lock *lock;
lock = malloc(sizeof (Eina_Lock));
if (!lock) return ENOMEM;
if (!eina_lock_new(lock))
{
free(lock);
return ENOMEM;
}
*priv = lock;
return 0;
}
static int
_emile_thread_mutex_destroy(void **priv)
{
eina_lock_free(*priv);
free(*priv);
return 0;
}
static int
_emile_thread_mutex_lock(void **priv)
{
if (eina_lock_take(*priv) == EINA_LOCK_FAIL)
return EINVAL;
return 0;
}
static int
_emile_thread_mutex_unlock(void **priv)
{
if (eina_lock_release(*priv) == EINA_LOCK_FAIL)
return EINVAL;
return 0;
}
static struct gcry_thread_cbs _emile_threads = {
(GCRY_THREAD_OPTION_PTHREAD | (GCRY_THREAD_OPTION_VERSION << 8)),
NULL, _emile_thread_mutex_init, _emile_thread_mutex_destroy,
_emile_thread_mutex_lock, _emile_thread_mutex_unlock,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
GCRY_THREAD_OPTION_PTHREAD_IMPL;
Eina_Bool
_emile_cipher_init(void)
{
if (gcry_control(GCRYCTL_SET_THREAD_CBS, &_emile_threads))
WRN(
"YOU ARE USING PTHREADS, BUT I CANNOT INITIALIZE THREADSAFE GCRYPT OPERATIONS!");
if (gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread))
WRN("YOU ARE USING PTHREADS, "
"BUT I CANNOT INITIALIZE THREADSAFE GCRYPT OPERATIONS!");
/* Before the library can be used, it must initialize itself if needed. */
if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P) == 0)
@ -466,6 +419,11 @@ emile_cipher_server_connect(Emile_Cipher_Type t)
ret = gnutls_credentials_set(r->session, GNUTLS_CRD_CERTIFICATE, r->cert);
return r;
on_error:
// FIXEM: cleanly destroy session
free(r);
return NULL;
}
EAPI Eina_Bool
@ -555,7 +513,7 @@ emile_cipher_read(Emile_SSL *emile, Eina_Binbuf *buffer)
if (emile->ssl_state == EMILE_SSL_STATE_HANDSHAKING)
{
DBG("Ongoing GNUTLS handshaking.");
_emile_cipher_handshaking(emile);
//_emile_cipher_handshaking(emile);
if (emile->ssl_state == EMILE_SSL_STATE_ERROR)
return -1;
return 0;
@ -564,7 +522,7 @@ emile_cipher_read(Emile_SSL *emile, Eina_Binbuf *buffer)
num = gnutls_record_recv(emile->session,
(void*) eina_binbuf_string_get(buffer),
eina_binbuf_length_get(buffer));
return 0;
return num;
}
EAPI int