vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Fri Dec 18 19:05:07 2015 +0200| [9a1082338a8d6e5af20e7087bc5a8a8613271a50] | committer: Rémi Denis-Courmont
https: move TLS receive function and remove non-TLS one > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9a1082338a8d6e5af20e7087bc5a8a8613271a50 --- modules/access/http/h2conn.c | 44 ++++++++++++++++++++++++++++++ modules/access/http/transport.c | 56 --------------------------------------- modules/access/http/transport.h | 11 -------- 3 files changed, 44 insertions(+), 67 deletions(-) diff --git a/modules/access/http/h2conn.c b/modules/access/http/h2conn.c index 42f9770..0199b51 100644 --- a/modules/access/http/h2conn.c +++ b/modules/access/http/h2conn.c @@ -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> @@ -505,6 +509,46 @@ static const struct vlc_h2_parser_cbs vlc_h2_conn_callbacks = }; /** + * 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. * * This function allocates memory for and receives a whole HTTP/2 frame from a diff --git a/modules/access/http/transport.c b/modules/access/http/transport.c index c02163a..32ca53b 100644 --- a/modules/access/http/transport.c +++ b/modules/access/http/transport.c @@ -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); diff --git a/modules/access/http/transport.h b/modules/access/http/transport.h index 8b9d45a..9c32d91 100644 --- a/modules/access/http/transport.h +++ b/modules/access/http/transport.h @@ -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); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
