Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog1
-rwxr-xr-xconfigure1
-rw-r--r--doc/general_contents.texi1
-rw-r--r--doc/protocols.texi6
-rw-r--r--libavformat/Makefile1
-rw-r--r--libavformat/gopher.c30
-rw-r--r--libavformat/protocols.c1
-rw-r--r--libavformat/version.h2
8 files changed, 38 insertions, 5 deletions
diff --git a/Changelog b/Changelog
index b28a8c59f1..73deaf6b0f 100644
--- a/Changelog
+++ b/Changelog
@@ -81,6 +81,7 @@ version <next>:
- 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 <parazyd@dyne.org>
*
* 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, \