Commit 9a108233 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

https: move TLS receive function and remove non-TLS one

parent dcd5ac97
......@@ -23,8 +23,12 @@
#endif
#include <assert.h>
#include <errno.h>
#include <inttypes.h>
#include <stdlib.h>
#ifdef HAVE_POLL
# include <poll.h>
#endif
#include <vlc_common.h>
#include <vlc_block.h>
#include <vlc_interrupt.h>
......@@ -504,6 +508,46 @@ static const struct vlc_h2_parser_cbs vlc_h2_conn_callbacks =
vlc_h2_stream_reset,
};
/**
* Receives TLS data.
*
* Receives bytes from the peer through a TLS session.
* @note This may be a cancellation point.
* The caller is responsible for serializing reads on a given connection.
*/
static ssize_t vlc_https_recv(vlc_tls_t *tls, void *buf, size_t len)
{
struct pollfd ufd;
size_t count = 0;
ufd.fd = tls->fd;
ufd.events = POLLIN;
while (count < len)
{
int canc = vlc_savecancel();
ssize_t val = tls->recv(tls, (char *)buf + count, len - count);
vlc_restorecancel(canc);
if (val == 0)
break;
if (val >= 0)
{
count += val;
continue;
}
if (errno != EINTR && errno != EAGAIN)
return count ? (ssize_t)count : -1;
poll(&ufd, 1, -1);
}
return count;
}
/**
* Receives an HTTP/2 frame through TLS.
*
......
......@@ -36,62 +36,6 @@
#include "transport.h"
ssize_t vlc_https_recv(vlc_tls_t *tls, void *buf, size_t len)
{
struct pollfd ufd;
size_t count = 0;
ufd.fd = tls->fd;
ufd.events = POLLIN;
while (count < len)
{
int canc = vlc_savecancel();
ssize_t val = tls->recv(tls, (char *)buf + count, len - count);
vlc_restorecancel(canc);
if (val == 0)
break;
if (val >= 0)
{
count += val;
continue;
}
if (errno != EINTR && errno != EAGAIN)
return -1;
poll(&ufd, 1, -1);
}
return count;
}
ssize_t vlc_http_recv(int fd, void *buf, size_t len)
{
unsigned count = 0;
while (count < len)
{
ssize_t val = recv(fd, (char *)buf + count, len - count, MSG_WAITALL);
if (val == 0)
break;
if (val >= 0)
{
count += val;
continue;
}
if (errno != EINTR)
return -1;
}
return count;
}
static void cleanup_addrinfo(void *data)
{
freeaddrinfo(data);
......
......@@ -27,17 +27,6 @@
struct vlc_tls;
struct vlc_tls_creds;
ssize_t vlc_http_recv(int fd, void *buf, size_t len);
/**
* Receives TLS data.
*
* Receives bytes from the peer through a TLS session.
* @note This may be a cancellation point.
* The caller is responsible for serializing reads on a given connection.
*/
ssize_t vlc_https_recv(struct vlc_tls *tls, void *buf, size_t len);
struct vlc_tls *vlc_https_connect(struct vlc_tls_creds *creds,
const char *name, unsigned port,
bool *restrict two);
......
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