Commit 99ce7125 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

http: add --http2 to force HTTP/2

This is currently and transitionally used to test HTTP/2 over TLS.
Eventually, this should be done automatically.

Going forward, this will either be removed or used without TLS.
parent e8955e0d
......@@ -117,6 +117,8 @@ vlc_module_begin ()
change_safe()
add_bool( "http-forward-cookies", true, FORWARD_COOKIES_TEXT,
FORWARD_COOKIES_LONGTEXT, true )
add_bool( "http2", false, N_("HTTP 2.0"),
N_("Negotiate HTTP version 2.0"), true )
/* 'itpc' = iTunes Podcast */
add_shortcut( "http", "https", "unsv", "itpc", "icyx" )
set_callbacks( Open, Close )
......@@ -992,19 +994,20 @@ static int Connect( access_t *p_access, uint64_t i_tell )
/* Initialize TLS/SSL session */
if( p_sys->p_creds != NULL )
{
bool http2 = var_InheritBool( p_access, "http2" );
if( (p_sys->b_proxy || http2) && p_sys->i_version == 0 )
{ /* ALPN and CONNECT are not compatible with HTTP/1.0 */
Disconnect( p_access );
return -1;
}
/* CONNECT to establish TLS tunnel through HTTP proxy */
if( p_sys->b_proxy )
{
char *psz;
unsigned i_status;
if( p_sys->i_version == 0 )
{
/* CONNECT is not in HTTP/1.0 */
Disconnect( p_access );
return -1;
}
WriteHeaders( p_access,
"CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\n\r\n",
p_sys->url.psz_host, p_sys->url.i_port,
......@@ -1054,17 +1057,28 @@ static int Connect( access_t *p_access, uint64_t i_tell )
}
/* TLS/SSL handshake */
const char *alpn[] = { "http/1.1", NULL };
const char *alpn[3] = { "h2", "http/1.1", NULL };
char *alp;
p_sys->p_tls = vlc_tls_ClientSessionCreate( p_sys->p_creds, p_sys->fd,
p_sys->url.psz_host, "https",
p_sys->i_version ? alpn : NULL, NULL );
p_sys->i_version ? (alpn + !http2) : NULL, &alp );
if( p_sys->p_tls == NULL )
{
msg_Err( p_access, "cannot establish HTTP/TLS session" );
Disconnect( p_access );
return -1;
}
http2 = alp != NULL && !strcmp("h2", alp);
free( alp );
if( http2 )
{
msg_Dbg( p_access, "handing off to HTTP2 plugin" );
Disconnect( p_access );
return -1;
}
}
return Request( p_access, i_tell ) ? -2 : 0;
......
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