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

Do not retry to HTTP connection with version 1.0 instead of 1.1...

...when the lower layer failed (ie TCP or SSL errors)
parent c16fe33f
...@@ -265,18 +265,28 @@ static int Open( vlc_object_t *p_this ) ...@@ -265,18 +265,28 @@ static int Open( vlc_object_t *p_this )
connect: connect:
/* Connect */ /* Connect */
if( Connect( p_access, 0 ) ) switch( Connect( p_access, 0 ) )
{ {
/* Retry with http 1.0 */ case -1:
msg_Dbg( p_access, "switching to HTTP version 1.0" );
p_sys->i_version = 0;
p_sys->b_seekable = VLC_FALSE;
if( p_access->b_die ||
Connect( p_access, 0 ) )
{
goto error; goto error;
}
case -2:
/* Retry with http 1.0 */
msg_Dbg( p_access, "switching to HTTP version 1.0" );
p_sys->i_version = 0;
p_sys->b_seekable = VLC_FALSE;
if( p_access->b_die || Connect( p_access, 0 ) )
goto error;
#ifdef DEBUG
case 0:
break;
default:
msg_Err( p_access, "You should not be here" );
abort();
#endif
} }
if( p_sys->i_code == 401 ) if( p_sys->i_code == 401 )
...@@ -787,10 +797,10 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -787,10 +797,10 @@ static int Connect( access_t *p_access, int64_t i_tell )
/* Open connection */ /* Open connection */
p_sys->fd = net_ConnectTCP( p_access, srv.psz_host, srv.i_port ); p_sys->fd = net_ConnectTCP( p_access, srv.psz_host, srv.i_port );
if( p_sys->fd < 0 ) if( p_sys->fd == -1 )
{ {
msg_Err( p_access, "cannot connect to %s:%d", srv.psz_host, srv.i_port ); msg_Err( p_access, "cannot connect to %s:%d", srv.psz_host, srv.i_port );
return VLC_EGENERIC; return -1;
} }
/* Initialize TLS/SSL session */ /* Initialize TLS/SSL session */
...@@ -806,7 +816,7 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -806,7 +816,7 @@ static int Connect( access_t *p_access, int64_t i_tell )
{ {
/* CONNECT is not in HTTP/1.0 */ /* CONNECT is not in HTTP/1.0 */
Disconnect( p_access ); Disconnect( p_access );
return VLC_EGENERIC; return -1;
} }
net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL, net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL,
...@@ -820,7 +830,7 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -820,7 +830,7 @@ static int Connect( access_t *p_access, int64_t i_tell )
{ {
msg_Err( p_access, "cannot establish HTTP/TLS tunnel" ); msg_Err( p_access, "cannot establish HTTP/TLS tunnel" );
Disconnect( p_access ); Disconnect( p_access );
return VLC_EGENERIC; return -1;
} }
sscanf( psz, "HTTP/%*u.%*u %3u", &i_status ); sscanf( psz, "HTTP/%*u.%*u %3u", &i_status );
...@@ -830,7 +840,7 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -830,7 +840,7 @@ static int Connect( access_t *p_access, int64_t i_tell )
{ {
msg_Err( p_access, "HTTP/TLS tunnel through proxy denied" ); msg_Err( p_access, "HTTP/TLS tunnel through proxy denied" );
Disconnect( p_access ); Disconnect( p_access );
return VLC_EGENERIC; return -1;
} }
do do
...@@ -840,7 +850,7 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -840,7 +850,7 @@ static int Connect( access_t *p_access, int64_t i_tell )
{ {
msg_Err( p_access, "HTTP proxy connection failed" ); msg_Err( p_access, "HTTP proxy connection failed" );
Disconnect( p_access ); Disconnect( p_access );
return VLC_EGENERIC; return -1;
} }
if( *psz == '\0' ) if( *psz == '\0' )
...@@ -858,12 +868,12 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -858,12 +868,12 @@ static int Connect( access_t *p_access, int64_t i_tell )
{ {
msg_Err( p_access, "cannot establish HTTP/TLS session" ); msg_Err( p_access, "cannot establish HTTP/TLS session" );
Disconnect( p_access ); Disconnect( p_access );
return VLC_EGENERIC; return -1;
} }
p_sys->p_vs = &p_sys->p_tls->sock; p_sys->p_vs = &p_sys->p_tls->sock;
} }
return Request( p_access, i_tell ); 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