vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Wed Jan 13 00:17:31 2016 +0200| [48f2d395b5f252f771bb330818d755799dd71285] | committer: Rémi Denis-Courmont
gnutls: use custom receive callback > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=48f2d395b5f252f771bb330818d755799dd71285 --- modules/misc/gnutls.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/modules/misc/gnutls.c b/modules/misc/gnutls.c index 34c1be9..2d76be0 100644 --- a/modules/misc/gnutls.c +++ b/modules/misc/gnutls.c @@ -130,8 +130,24 @@ static int gnutls_Error(vlc_tls_t *tls, int val) return -1; } -static ssize_t vlc_gnutls_writev (gnutls_transport_ptr_t ptr, - const giovec_t *giov, int iovcnt) +static ssize_t vlc_gnutls_read(gnutls_transport_ptr_t ptr, void *buf, + 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)) { @@ -297,8 +313,9 @@ static int gnutls_SessionOpen(vlc_tls_creds_t *creds, vlc_tls_t *tls, int type, free (protv); } - gnutls_transport_set_int (session, fd); - gnutls_transport_set_vec_push_function (session, vlc_gnutls_writev); + gnutls_transport_set_ptr(session, (void *)(intptr_t)fd); + gnutls_transport_set_vec_push_function(session, vlc_gnutls_writev); + gnutls_transport_set_pull_function(session, vlc_gnutls_read); tls->sys = session; tls->get_fd = gnutls_GetFD; tls->readv = gnutls_Recv; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
