hsgnutls-0.2.3.2: helpers.c
#include <gnutls/gnutls.h>
#include <gcrypt.h>
#include <errno.h>
#include <pthread.h>
#include <stdlib.h>
long gnutls_io_wrap_h(void*,void*,size_t,int*);
void freeStablePtr(void *ptr);
#ifdef COMPAT_GNUTLS_1_0
typedef gnutls_transport_ptr gnutls_transport_ptr_t;
typedef gnutls_connection_end gnutls_connection_end_t;
typedef gnutls_session gnutls_session_t;
#endif
static ssize_t gnutls_io_wrap_c(gnutls_transport_ptr_t tr, void* buf, size_t len)
{
int err, res;
res = gnutls_io_wrap_h(tr,buf,len,&err);
errno = err;
return res;
}
void replace_transport_stable_ptrs(gnutls_session_t session, void *p1, void *p2) {
void *o1, *o2;
gnutls_transport_get_ptr2(session, &o1, &o2);
gnutls_transport_set_ptr2(session, p1, p2);
freeStablePtr(o1);
freeStablePtr(o2);
}
gnutls_session_t init_session_wrap(gnutls_connection_end_t con_end, void *sptr1, void *sptr2, int *err) {
gnutls_session_t ses;
*err = gnutls_init(&ses, con_end);
if(*err != 0) return 0;
gnutls_transport_set_push_function(ses,(gnutls_push_func)&gnutls_io_wrap_c);
gnutls_transport_set_pull_function(ses,&gnutls_io_wrap_c);
gnutls_transport_set_ptr2(ses, sptr1, sptr2);
gnutls_set_default_priority(ses);
return ses;
}
GCRY_THREAD_OPTION_PTHREAD_IMPL;
void gcry_init_helper(void) {
gcry_control(GCRYCTL_DISABLE_SECMEM_WARN);
gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0);
}