static int gnutls_Shutdown(vlc_tls_t *tls, bool duplex) { gnutls_session_t session = tls->sys; ssize_t val; /* Flush any pending data */ val = gnutls_record_uncork(session, 0); if (val < 0) return gnutls_Error(tls, val); val = gnutls_bye(session, duplex ? GNUTLS_SHUT_RDWR : GNUTLS_SHUT_WR); if (val < 0) return gnutls_Error(tls, val); return 0; }
static int gnutls_Shutdown(vlc_tls_t *tls, bool duplex) { gnutls_session_t session = tls->sys; int val = gnutls_bye(session, duplex ? GNUTLS_SHUT_RDWR : GNUTLS_SHUT_WR); return (val < 0) ? gnutls_Error(tls, val) : 0; }
static ssize_t gnutls_Recv (vlc_tls_t *tls, void *buf, size_t length) { gnutls_session_t session = tls->sys; ssize_t val = gnutls_record_recv (session, buf, length); return (val < 0) ? gnutls_Error (tls, val) : val; }
/** * Receives data through a TLS session. */ static int gnutls_Recv (void *opaque, void *buf, size_t length) { assert (opaque != NULL); vlc_tls_t *tls = opaque; gnutls_session_t session = tls->sys; int val = gnutls_record_recv (session, buf, length); return (val < 0) ? gnutls_Error (tls, val) : val; }
static ssize_t gnutls_Recv(vlc_tls_t *tls, struct iovec *iov, unsigned count) { gnutls_session_t session = tls->sys; size_t rcvd = 0; while (count > 0) { ssize_t val = gnutls_record_recv(session, iov->iov_base, iov->iov_len); if (val < 0) return rcvd ? (ssize_t)rcvd : gnutls_Error(tls, val); rcvd += val; if ((size_t)val < iov->iov_len) break; iov++; count--; } return rcvd; }
static ssize_t gnutls_Send (vlc_tls_t *tls, const struct iovec *iov, unsigned count) { gnutls_session_t session = tls->sys; ssize_t val; if (!gnutls_record_check_corked(session)) { gnutls_record_cork(session); while (count > 0) { val = gnutls_record_send(session, iov->iov_base, iov->iov_len); if (val < (ssize_t)iov->iov_len) break; iov++; count--; } } val = gnutls_record_uncork(session, 0); return (val < 0) ? gnutls_Error (tls, val) : val; }