Commit 48f2d395 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

gnutls: use custom receive callback

parent 51b1df72
...@@ -130,8 +130,24 @@ static int gnutls_Error(vlc_tls_t *tls, int val) ...@@ -130,8 +130,24 @@ static int gnutls_Error(vlc_tls_t *tls, int val)
return -1; return -1;
} }
static ssize_t vlc_gnutls_writev (gnutls_transport_ptr_t ptr, static ssize_t vlc_gnutls_read(gnutls_transport_ptr_t ptr, void *buf,
const giovec_t *giov, int iovcnt) size_t length)
{
int fd = (intptr_t)ptr;
struct iovec iov = {
.iov_base = buf,
.iov_len = length,
};
struct msghdr msg = {
.msg_iov = &iov,
.msg_iovlen = 1,
};
return recvmsg(fd, &msg, 0);
}
static ssize_t vlc_gnutls_writev(gnutls_transport_ptr_t ptr,
const giovec_t *giov, int iovcnt)
{ {
if (unlikely((unsigned)iovcnt > IOV_MAX)) if (unlikely((unsigned)iovcnt > IOV_MAX))
{ {
...@@ -297,8 +313,9 @@ static int gnutls_SessionOpen(vlc_tls_creds_t *creds, vlc_tls_t *tls, int type, ...@@ -297,8 +313,9 @@ static int gnutls_SessionOpen(vlc_tls_creds_t *creds, vlc_tls_t *tls, int type,
free (protv); free (protv);
} }
gnutls_transport_set_int (session, fd); gnutls_transport_set_ptr(session, (void *)(intptr_t)fd);
gnutls_transport_set_vec_push_function (session, vlc_gnutls_writev); gnutls_transport_set_vec_push_function(session, vlc_gnutls_writev);
gnutls_transport_set_pull_function(session, vlc_gnutls_read);
tls->sys = session; tls->sys = session;
tls->get_fd = gnutls_GetFD; tls->get_fd = gnutls_GetFD;
tls->readv = gnutls_Recv; tls->readv = gnutls_Recv;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment