Commit 183baead authored by Martin Storsjö's avatar Martin Storsjö

avformat: Add the https protocol

Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 558d192d
...@@ -57,6 +57,7 @@ easier to use. The changes are: ...@@ -57,6 +57,7 @@ easier to use. The changes are:
- 4:2:2 H.264 decoding support - 4:2:2 H.264 decoding support
- Pulseaudio input device - Pulseaudio input device
- replacement Indeo 3 decoder - replacement Indeo 3 decoder
- TLS/SSL and HTTPS protocol support
version 0.7: version 0.7:
......
...@@ -1478,6 +1478,7 @@ x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes" ...@@ -1478,6 +1478,7 @@ x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
gopher_protocol_deps="network" gopher_protocol_deps="network"
http_protocol_deps="network" http_protocol_deps="network"
http_protocol_select="tcp_protocol" http_protocol_select="tcp_protocol"
https_protocol_select="tls_protocol"
mmsh_protocol_select="http_protocol" mmsh_protocol_select="http_protocol"
mmst_protocol_deps="network" mmst_protocol_deps="network"
rtmp_protocol_select="tcp_protocol" rtmp_protocol_select="tcp_protocol"
......
...@@ -322,6 +322,7 @@ OBJS-$(CONFIG_CRYPTO_PROTOCOL) += crypto.o ...@@ -322,6 +322,7 @@ OBJS-$(CONFIG_CRYPTO_PROTOCOL) += crypto.o
OBJS-$(CONFIG_FILE_PROTOCOL) += file.o OBJS-$(CONFIG_FILE_PROTOCOL) += file.o
OBJS-$(CONFIG_GOPHER_PROTOCOL) += gopher.o OBJS-$(CONFIG_GOPHER_PROTOCOL) += gopher.o
OBJS-$(CONFIG_HTTP_PROTOCOL) += http.o httpauth.o OBJS-$(CONFIG_HTTP_PROTOCOL) += http.o httpauth.o
OBJS-$(CONFIG_HTTPS_PROTOCOL) += http.o httpauth.o
OBJS-$(CONFIG_MMSH_PROTOCOL) += mmsh.o mms.o asf.o OBJS-$(CONFIG_MMSH_PROTOCOL) += mmsh.o mms.o asf.o
OBJS-$(CONFIG_MMST_PROTOCOL) += mmst.o mms.o asf.o OBJS-$(CONFIG_MMST_PROTOCOL) += mmst.o mms.o asf.o
OBJS-$(CONFIG_MD5_PROTOCOL) += md5proto.o OBJS-$(CONFIG_MD5_PROTOCOL) += md5proto.o
......
...@@ -241,6 +241,7 @@ void av_register_all(void) ...@@ -241,6 +241,7 @@ void av_register_all(void)
REGISTER_PROTOCOL (FILE, file); REGISTER_PROTOCOL (FILE, file);
REGISTER_PROTOCOL (GOPHER, gopher); REGISTER_PROTOCOL (GOPHER, gopher);
REGISTER_PROTOCOL (HTTP, http); REGISTER_PROTOCOL (HTTP, http);
REGISTER_PROTOCOL (HTTPS, https);
REGISTER_PROTOCOL (MMSH, mmsh); REGISTER_PROTOCOL (MMSH, mmsh);
REGISTER_PROTOCOL (MMST, mmst); REGISTER_PROTOCOL (MMST, mmst);
REGISTER_PROTOCOL (MD5, md5); REGISTER_PROTOCOL (MD5, md5);
......
...@@ -92,8 +92,8 @@ void ff_http_init_auth_state(URLContext *dest, const URLContext *src) ...@@ -92,8 +92,8 @@ void ff_http_init_auth_state(URLContext *dest, const URLContext *src)
/* return non zero if error */ /* return non zero if error */
static int http_open_cnx(URLContext *h) static int http_open_cnx(URLContext *h)
{ {
const char *path, *proxy_path; const char *path, *proxy_path, *lower_proto = "tcp";
char hostname[1024], hoststr[1024]; char hostname[1024], hoststr[1024], proto[10];
char auth[1024]; char auth[1024];
char path1[1024]; char path1[1024];
char buf[1024]; char buf[1024];
...@@ -109,7 +109,8 @@ static int http_open_cnx(URLContext *h) ...@@ -109,7 +109,8 @@ static int http_open_cnx(URLContext *h)
/* fill the dest addr */ /* fill the dest addr */
redo: redo:
/* needed in any case to build the host string */ /* needed in any case to build the host string */
av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port, av_url_split(proto, sizeof(proto), auth, sizeof(auth),
hostname, sizeof(hostname), &port,
path1, sizeof(path1), s->location); path1, sizeof(path1), s->location);
ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL); ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL);
...@@ -123,10 +124,15 @@ static int http_open_cnx(URLContext *h) ...@@ -123,10 +124,15 @@ static int http_open_cnx(URLContext *h)
else else
path = path1; path = path1;
} }
if (!strcmp(proto, "https")) {
lower_proto = "tls";
if (port < 0)
port = 443;
}
if (port < 0) if (port < 0)
port = 80; port = 80;
ff_url_join(buf, sizeof(buf), "tcp", NULL, hostname, port, NULL); ff_url_join(buf, sizeof(buf), lower_proto, NULL, hostname, port, NULL);
err = ffurl_open(&hd, buf, AVIO_FLAG_READ_WRITE); err = ffurl_open(&hd, buf, AVIO_FLAG_READ_WRITE);
if (err < 0) if (err < 0)
goto fail; goto fail;
...@@ -509,6 +515,7 @@ http_get_file_handle(URLContext *h) ...@@ -509,6 +515,7 @@ http_get_file_handle(URLContext *h)
return ffurl_get_file_handle(s->hd); return ffurl_get_file_handle(s->hd);
} }
#if CONFIG_HTTP_PROTOCOL
URLProtocol ff_http_protocol = { URLProtocol ff_http_protocol = {
.name = "http", .name = "http",
.url_open = http_open, .url_open = http_open,
...@@ -520,3 +527,17 @@ URLProtocol ff_http_protocol = { ...@@ -520,3 +527,17 @@ URLProtocol ff_http_protocol = {
.priv_data_size = sizeof(HTTPContext), .priv_data_size = sizeof(HTTPContext),
.priv_data_class = &httpcontext_class, .priv_data_class = &httpcontext_class,
}; };
#endif
#if CONFIG_HTTPS_PROTOCOL
URLProtocol ff_https_protocol = {
.name = "https",
.url_open = http_open,
.url_read = http_read,
.url_write = http_write,
.url_seek = http_seek,
.url_close = http_close,
.url_get_file_handle = http_get_file_handle,
.priv_data_size = sizeof(HTTPContext),
.priv_data_class = &httpcontext_class,
};
#endif
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "libavutil/avutil.h" #include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 53 #define LIBAVFORMAT_VERSION_MAJOR 53
#define LIBAVFORMAT_VERSION_MINOR 11 #define LIBAVFORMAT_VERSION_MINOR 12
#define LIBAVFORMAT_VERSION_MICRO 0 #define LIBAVFORMAT_VERSION_MICRO 0
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
......
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