GNUTLS: Add dedicated socket send/recv functions
This avoids a compiler warning regarding casting a file descriptor to a pointer (as input to gnutls_transport_set_ptr()), and also ensures that the pointer is valid for the lifetime of the session.
This commit is contained in:
parent
3f32d48dab
commit
5797027e9f
1 changed files with 23 additions and 0 deletions
|
@ -73,6 +73,9 @@ struct ssl_connect
|
||||||
|
|
||||||
static void rb_ssl_connect_realcb(rb_fde_t *, int, struct ssl_connect *);
|
static void rb_ssl_connect_realcb(rb_fde_t *, int, struct ssl_connect *);
|
||||||
|
|
||||||
|
static ssize_t rb_sock_net_recv(gnutls_transport_ptr_t, void *, size_t);
|
||||||
|
static ssize_t rb_sock_net_xmit(gnutls_transport_ptr_t, const void *, size_t);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -111,6 +114,22 @@ rb_ssl_cert_auth_cb(gnutls_session_t session,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t
|
||||||
|
rb_sock_net_recv(gnutls_transport_ptr_t context_ptr, void *const buf, const size_t count)
|
||||||
|
{
|
||||||
|
const int fd = rb_get_fd((rb_fde_t *)context_ptr);
|
||||||
|
|
||||||
|
return recv(fd, buf, count, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t
|
||||||
|
rb_sock_net_xmit(gnutls_transport_ptr_t context_ptr, const void *const buf, const size_t count)
|
||||||
|
{
|
||||||
|
const int fd = rb_get_fd((rb_fde_t *)context_ptr);
|
||||||
|
|
||||||
|
return send(fd, buf, count, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rb_ssl_init_fd(rb_fde_t *const F, const rb_fd_tls_direction dir)
|
rb_ssl_init_fd(rb_fde_t *const F, const rb_fd_tls_direction dir)
|
||||||
{
|
{
|
||||||
|
@ -141,6 +160,10 @@ rb_ssl_init_fd(rb_fde_t *const F, const rb_fd_tls_direction dir)
|
||||||
gnutls_dh_set_prime_bits(SSL_P(F), 1024);
|
gnutls_dh_set_prime_bits(SSL_P(F), 1024);
|
||||||
gnutls_priority_set(SSL_P(F), default_priority);
|
gnutls_priority_set(SSL_P(F), default_priority);
|
||||||
|
|
||||||
|
gnutls_transport_set_ptr(SSL_P(F), (gnutls_transport_ptr_t) F);
|
||||||
|
gnutls_transport_set_pull_function(SSL_P(F), rb_sock_net_recv);
|
||||||
|
gnutls_transport_set_push_function(SSL_P(F), rb_sock_net_xmit);
|
||||||
|
|
||||||
if(dir == RB_FD_TLS_DIRECTION_IN)
|
if(dir == RB_FD_TLS_DIRECTION_IN)
|
||||||
gnutls_certificate_server_set_request(SSL_P(F), GNUTLS_CERT_REQUEST);
|
gnutls_certificate_server_set_request(SSL_P(F), GNUTLS_CERT_REQUEST);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue