Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
0
Archivo: gnutls.c Proyecto: Adatan/vlc
/**
 * 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;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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;
}