diff --git a/Changelog b/Changelog index b28a8c59f1..73deaf6b0f 100644 --- a/Changelog +++ b/Changelog @@ -81,6 +81,7 @@ version : - TTML subtitle encoder and muxer - identity video filter - msad video filter +- gophers protocol version 4.3: diff --git a/configure b/configure index 1c0888ffa6..13f8e0580b 100755 --- a/configure +++ b/configure @@ -3450,6 +3450,7 @@ ffrtmphttp_protocol_conflict="librtmp_protocol" ffrtmphttp_protocol_select="http_protocol" ftp_protocol_select="tcp_protocol" gopher_protocol_select="tcp_protocol" +gophers_protocol_select="tls_protocol" http_protocol_select="tcp_protocol" http_protocol_suggest="zlib" httpproxy_protocol_select="tcp_protocol" diff --git a/doc/general_contents.texi b/doc/general_contents.texi index 58c9bcf747..33ece6e884 100644 --- a/doc/general_contents.texi +++ b/doc/general_contents.texi @@ -1371,6 +1371,7 @@ performance on systems without hardware floating point support). @item file @tab X @item FTP @tab X @item Gopher @tab X +@item Gophers @tab X @item HLS @tab X @item HTTP @tab X @item HTTPS @tab X diff --git a/doc/protocols.texi b/doc/protocols.texi index c0b511b7a4..2b2fab8752 100644 --- a/doc/protocols.texi +++ b/doc/protocols.texi @@ -341,6 +341,12 @@ operation. ff* tools may produce incomplete content due to server limitations. Gopher protocol. +@section gophers + +Gophers protocol. + +The Gopher protocol with TLS encapsulation. + @section hls Read Apple HTTP Live Streaming compliant segmented stream as diff --git a/libavformat/Makefile b/libavformat/Makefile index 0504f47f88..8ce53d5a8c 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -621,6 +621,7 @@ OBJS-$(CONFIG_FFRTMPHTTP_PROTOCOL) += rtmphttp.o OBJS-$(CONFIG_FILE_PROTOCOL) += file.o OBJS-$(CONFIG_FTP_PROTOCOL) += ftp.o urldecode.o OBJS-$(CONFIG_GOPHER_PROTOCOL) += gopher.o +OBJS-$(CONFIG_GOPHERS_PROTOCOL) += gopher.o OBJS-$(CONFIG_HLS_PROTOCOL) += hlsproto.o OBJS-$(CONFIG_HTTP_PROTOCOL) += http.o httpauth.o urldecode.o OBJS-$(CONFIG_HTTPPROXY_PROTOCOL) += http.o httpauth.o urldecode.o diff --git a/libavformat/gopher.c b/libavformat/gopher.c index 7c88ab01a8..9bbe171640 100644 --- a/libavformat/gopher.c +++ b/libavformat/gopher.c @@ -2,6 +2,7 @@ * Gopher protocol * * Copyright (c) 2009 Toshimitsu Kimura + * Copyright (c) 2021 parazyd * * based on libavformat/http.c, Copyright (c) 2000, 2001 Fabrice Bellard * @@ -22,6 +23,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "config.h" + #include "libavutil/avstring.h" #include "avformat.h" #include "internal.h" @@ -75,19 +78,23 @@ static int gopher_close(URLContext *h) static int gopher_open(URLContext *h, const char *uri, int flags) { GopherContext *s = h->priv_data; - char hostname[1024], auth[1024], path[1024], buf[1024]; + char proto[10], hostname[1024], auth[1024], path[1024], buf[1024]; int port, err; + const char *lower_proto = "tcp"; h->is_streamed = 1; /* needed in any case to build the host string */ - av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port, - path, sizeof(path), uri); + av_url_split(proto, sizeof(proto), auth, sizeof(auth), + hostname, sizeof(hostname), &port, path, sizeof(path), uri); if (port < 0) port = 70; - ff_url_join(buf, sizeof(buf), "tcp", NULL, hostname, port, NULL); + if (!strcmp(proto, "gophers")) + lower_proto = "tls"; + + ff_url_join(buf, sizeof(buf), lower_proto, NULL, hostname, port, NULL); s->hd = NULL; err = ffurl_open_whitelist(&s->hd, buf, AVIO_FLAG_READ_WRITE, @@ -110,6 +117,7 @@ static int gopher_read(URLContext *h, uint8_t *buf, int size) return len; } +#if CONFIG_GOPHER_PROTOCOL const URLProtocol ff_gopher_protocol = { .name = "gopher", .url_open = gopher_open, @@ -120,3 +128,17 @@ const URLProtocol ff_gopher_protocol = { .flags = URL_PROTOCOL_FLAG_NETWORK, .default_whitelist = "gopher,tcp" }; +#endif /* CONFIG_GOPHER_PROTOCOL */ + +#if CONFIG_GOPHERS_PROTOCOL +const URLProtocol ff_gophers_protocol = { + .name = "gophers", + .url_open = gopher_open, + .url_read = gopher_read, + .url_write = gopher_write, + .url_close = gopher_close, + .priv_data_size = sizeof(GopherContext), + .flags = URL_PROTOCOL_FLAG_NETWORK, + .default_whitelist = "gopher,gophers,tcp,tls" +}; +#endif /* CONFIG_GOPHERS_PROTOCOL */ diff --git a/libavformat/protocols.c b/libavformat/protocols.c index 7df18fbb3b..9e77dc2506 100644 --- a/libavformat/protocols.c +++ b/libavformat/protocols.c @@ -34,6 +34,7 @@ extern const URLProtocol ff_ffrtmphttp_protocol; extern const URLProtocol ff_file_protocol; extern const URLProtocol ff_ftp_protocol; extern const URLProtocol ff_gopher_protocol; +extern const URLProtocol ff_gophers_protocol; extern const URLProtocol ff_hls_protocol; extern const URLProtocol ff_http_protocol; extern const URLProtocol ff_httpproxy_protocol; diff --git a/libavformat/version.h b/libavformat/version.h index 2a2804582c..6f55726afd 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,7 +32,7 @@ // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 58 -#define LIBAVFORMAT_VERSION_MINOR 72 +#define LIBAVFORMAT_VERSION_MINOR 73 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \