mirror of https://git.ffmpeg.org/ffmpeg.git
Merge commit 'eb061ad6fd0e3cea7cf7cfbff0749bc90dd7d888'
* commit 'eb061ad6fd0e3cea7cf7cfbff0749bc90dd7d888': tls_gnutls: Readd support for nonblocking operation Merged-by: James Almer <jamrial@gmail.com>
This commit is contained in:
commit
2805c8dcfc
|
@ -75,6 +75,7 @@ static int print_tls_error(URLContext *h, int ret)
|
||||||
{
|
{
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
case GNUTLS_E_AGAIN:
|
case GNUTLS_E_AGAIN:
|
||||||
|
return AVERROR(EAGAIN);
|
||||||
case GNUTLS_E_INTERRUPTED:
|
case GNUTLS_E_INTERRUPTED:
|
||||||
#ifdef GNUTLS_E_PREMATURE_TERMINATION
|
#ifdef GNUTLS_E_PREMATURE_TERMINATION
|
||||||
case GNUTLS_E_PREMATURE_TERMINATION:
|
case GNUTLS_E_PREMATURE_TERMINATION:
|
||||||
|
@ -114,7 +115,10 @@ static ssize_t gnutls_url_pull(gnutls_transport_ptr_t transport,
|
||||||
return ret;
|
return ret;
|
||||||
if (ret == AVERROR_EXIT)
|
if (ret == AVERROR_EXIT)
|
||||||
return 0;
|
return 0;
|
||||||
errno = EIO;
|
if (ret == AVERROR(EAGAIN))
|
||||||
|
errno = EAGAIN;
|
||||||
|
else
|
||||||
|
errno = EIO;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +131,10 @@ static ssize_t gnutls_url_push(gnutls_transport_ptr_t transport,
|
||||||
return ret;
|
return ret;
|
||||||
if (ret == AVERROR_EXIT)
|
if (ret == AVERROR_EXIT)
|
||||||
return 0;
|
return 0;
|
||||||
errno = EIO;
|
if (ret == AVERROR(EAGAIN))
|
||||||
|
errno = EAGAIN;
|
||||||
|
else
|
||||||
|
errno = EIO;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,7 +230,11 @@ fail:
|
||||||
static int tls_read(URLContext *h, uint8_t *buf, int size)
|
static int tls_read(URLContext *h, uint8_t *buf, int size)
|
||||||
{
|
{
|
||||||
TLSContext *c = h->priv_data;
|
TLSContext *c = h->priv_data;
|
||||||
int ret = gnutls_record_recv(c->session, buf, size);
|
int ret;
|
||||||
|
// Set or clear the AVIO_FLAG_NONBLOCK on c->tls_shared.tcp
|
||||||
|
c->tls_shared.tcp->flags &= ~AVIO_FLAG_NONBLOCK;
|
||||||
|
c->tls_shared.tcp->flags |= h->flags & AVIO_FLAG_NONBLOCK;
|
||||||
|
ret = gnutls_record_recv(c->session, buf, size);
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
return ret;
|
return ret;
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
|
@ -234,7 +245,11 @@ static int tls_read(URLContext *h, uint8_t *buf, int size)
|
||||||
static int tls_write(URLContext *h, const uint8_t *buf, int size)
|
static int tls_write(URLContext *h, const uint8_t *buf, int size)
|
||||||
{
|
{
|
||||||
TLSContext *c = h->priv_data;
|
TLSContext *c = h->priv_data;
|
||||||
int ret = gnutls_record_send(c->session, buf, size);
|
int ret;
|
||||||
|
// Set or clear the AVIO_FLAG_NONBLOCK on c->tls_shared.tcp
|
||||||
|
c->tls_shared.tcp->flags &= ~AVIO_FLAG_NONBLOCK;
|
||||||
|
c->tls_shared.tcp->flags |= h->flags & AVIO_FLAG_NONBLOCK;
|
||||||
|
ret = gnutls_record_send(c->session, buf, size);
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
return ret;
|
return ret;
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
|
|
Loading…
Reference in New Issue