[09/10] avformat: Add the https protocol

Message ID 1320154365-10834-9-git-send-email-martin@martin.st
State Committed
Headers show

Commit Message

Martin Storsjö Nov. 1, 2011, 1:32 p.m.
---
 Changelog                |    1 +
 configure                |    1 +
 libavformat/Makefile     |    1 +
 libavformat/allformats.c |    1 +
 libavformat/http.c       |   29 +++++++++++++++++++++++++----
 libavformat/version.h    |    2 +-
 6 files changed, 30 insertions(+), 5 deletions(-)

Comments

Luca Barbato Nov. 4, 2011, 9:24 p.m. | #1
On 11/1/11 6:32 AM, Martin Storsjö wrote:
> ---
>   Changelog                |    1 +
>   configure                |    1 +
>   libavformat/Makefile     |    1 +
>   libavformat/allformats.c |    1 +
>   libavformat/http.c       |   29 +++++++++++++++++++++++++----
>   libavformat/version.h    |    2 +-
>   6 files changed, 30 insertions(+), 5 deletions(-)
>

Looks fine.

lu

Patch

diff --git a/Changelog b/Changelog
index d34c952..1886a14 100644
--- a/Changelog
+++ b/Changelog
@@ -56,6 +56,7 @@  easier to use. The changes are:
 - Speex encoding via libspeex
 - 4:2:2 H.264 decoding support
 - Pulseaudio input device
+- TLS/SSL and HTTPS protocol support
 
 
 version 0.7:
diff --git a/configure b/configure
index 9fc0a0f..8e5a7cb 100755
--- a/configure
+++ b/configure
@@ -1478,6 +1478,7 @@  x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
 gopher_protocol_deps="network"
 http_protocol_deps="network"
 http_protocol_select="tcp_protocol"
+https_protocol_select="tls_protocol"
 mmsh_protocol_select="http_protocol"
 mmst_protocol_deps="network"
 rtmp_protocol_select="tcp_protocol"
diff --git a/libavformat/Makefile b/libavformat/Makefile
index 053f7f4..58ea672 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -322,6 +322,7 @@  OBJS-$(CONFIG_CRYPTO_PROTOCOL)           += crypto.o
 OBJS-$(CONFIG_FILE_PROTOCOL)             += file.o
 OBJS-$(CONFIG_GOPHER_PROTOCOL)           += gopher.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_MMST_PROTOCOL)             += mmst.o mms.o asf.o
 OBJS-$(CONFIG_MD5_PROTOCOL)              += md5proto.o
diff --git a/libavformat/allformats.c b/libavformat/allformats.c
index d078a15..01900e8 100644
--- a/libavformat/allformats.c
+++ b/libavformat/allformats.c
@@ -241,6 +241,7 @@  void av_register_all(void)
     REGISTER_PROTOCOL (FILE, file);
     REGISTER_PROTOCOL (GOPHER, gopher);
     REGISTER_PROTOCOL (HTTP, http);
+    REGISTER_PROTOCOL (HTTPS, https);
     REGISTER_PROTOCOL (MMSH, mmsh);
     REGISTER_PROTOCOL (MMST, mmst);
     REGISTER_PROTOCOL (MD5,  md5);
diff --git a/libavformat/http.c b/libavformat/http.c
index 10ec70f..fc440f4 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -92,8 +92,8 @@  void ff_http_init_auth_state(URLContext *dest, const URLContext *src)
 /* return non zero if error */
 static int http_open_cnx(URLContext *h)
 {
-    const char *path, *proxy_path;
-    char hostname[1024], hoststr[1024];
+    const char *path, *proxy_path, *lower_proto = "tcp";
+    char hostname[1024], hoststr[1024], proto[10];
     char auth[1024];
     char path1[1024];
     char buf[1024];
@@ -109,7 +109,8 @@  static int http_open_cnx(URLContext *h)
     /* fill the dest addr */
  redo:
     /* 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);
     ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL);
 
@@ -123,10 +124,15 @@  static int http_open_cnx(URLContext *h)
         else
             path = path1;
     }
+    if (!strcmp(proto, "https")) {
+        lower_proto = "tls";
+        if (port < 0)
+            port = 443;
+    }
     if (port < 0)
         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);
     if (err < 0)
         goto fail;
@@ -509,6 +515,7 @@  http_get_file_handle(URLContext *h)
     return ffurl_get_file_handle(s->hd);
 }
 
+#if CONFIG_HTTP_PROTOCOL
 URLProtocol ff_http_protocol = {
     .name                = "http",
     .url_open            = http_open,
@@ -520,3 +527,17 @@  URLProtocol ff_http_protocol = {
     .priv_data_size      = sizeof(HTTPContext),
     .priv_data_class     = &httpcontext_class,
 };
+#endif
+#if CONFIG_HTTPS_PROTOCOL
+URLProtocol ff_https_protocol = {
+    "https",
+    http_open,
+    http_read,
+    http_write,
+    http_seek,
+    http_close,
+    .url_get_file_handle = http_get_file_handle,
+    .priv_data_size = sizeof(HTTPContext),
+    .priv_data_class = &httpcontext_class,
+};
+#endif
diff --git a/libavformat/version.h b/libavformat/version.h
index 2b1ef95..c7b0778 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -24,7 +24,7 @@ 
 #include "libavutil/avutil.h"
 
 #define LIBAVFORMAT_VERSION_MAJOR 53
-#define LIBAVFORMAT_VERSION_MINOR 11
+#define LIBAVFORMAT_VERSION_MINOR 12
 #define LIBAVFORMAT_VERSION_MICRO  0
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \