[vlc-devel] [PATCH] http: Mark the http-reconnect option as plugin-safe

Luca Barbato lu_zero at gentoo.org
Sat Sep 26 21:10:56 CEST 2015


On 26/09/15 20:34, Rémi Denis-Courmont wrote:
> Le 2015-09-26 21:16, Luca Barbato a écrit :
>> On 26/09/15 18:57, Rémi Denis-Courmont wrote:
>>> Le 2015-09-26 19:44, Luca Barbato a écrit :
>>>> On 26/09/15 12:34, Rémi Denis-Courmont wrote:
>>>>> TBH, I would much prefer obsoleting the option and reconnecting
>>>>> automatically when appropriate (i.e. connection broken before known
>>>>> end
>>>>> of file).
>>>>
>>>> I might try to find some time to do that later, that would require to:
>>>>
>>>> - have the fact the connection is broken reported by the lower layer
>>>> - get the expected end of file or know that the file doesn't have an
>>>> end.
>>>>
>>>>
>>>> In the mean time I'd merge it and get some plugin users happier.
>>>>
>>>> Would it be ok?
>>>
>>> Exposing http-reconnect to playlist and then removing it later is not a
>>> good idea. I am also not convinced that allowing random playlist files
>>> to enable http-reconnect against third party web servers is a good idea
>>> either.
>>
>> I think for the plugin users it makes sense to have it, no matter what,
>
> The NPAPI plugin is dead. Google killed it. Mozilla is killing it. I
> forget when it last worked with Apple, if ever. Anyone depending on the
> web plugin is running full speed toward a wall of hard concrete that is
> now getting dangerously close. So whitelisting is all about playlist
> files now. Not that it makes much difference though.
>
> However I don't want to deal with demuxer bugs stemming from unvalidated
> HTTP resumption, or with web server operators annoyed by VLC's
> misbehaviour. The correct way to do with is with If-Match (possibly with
> fallback to If-Not-Modified-Since), not with a user option.
>

The problem I'm trying to solve is as stupid as it sounds:

- Pause cause the tcp connection to timeout
- Reading from the dead tcp link returns 0 instead of a different error
- the http layer happily takes it as end of file.
- Returning from pause gets you to close vlc.

So far I hadn't tried to figure out if at the tcp level there is a way 
to send an error that let me know that http has to reconnect, an 
approximation could be something around:

diff --git a/modules/access/http.c b/modules/access/http.c
index ae0f722..1caec1c 100644
--- a/modules/access/http.c
+++ b/modules/access/http.c
@@ -686,7 +686,8 @@ static ssize_t Read( access_t *p_access, uint8_t 
*p_buffer, size_t i_len )
              p_sys->b_continuous = true;
          }
          Disconnect( p_access );
-        if( p_sys->b_reconnect )
+        if( p_sys->b_reconnect ||
+            ( p_sys->b_has_size && p_sys->p_sys->i_remaining ))
          {
              msg_Dbg( p_access, "got disconnected, trying to reconnect" );
              if( Connect( p_access, p_sys->offset ) )
@@ -695,9 +696,13 @@ static ssize_t Read( access_t *p_access, uint8_t 
*p_buffer, size_t i_len )
              }
              else
              {
+                int reconnect = p_sys->b_reconnect;
+                int has_size  = p_sys->b_has_size;
                  p_sys->b_reconnect = false;
+                p_sys->b_has_size = false;
                  i_read = Read( p_access, p_buffer, i_len );
-                p_sys->b_reconnect = true;
+                p_sys->b_reconnect = reconnect;
+                p_sys->b_has_size  = has_size;

                  return i_read;
              }

Works just if the file size is known but is better than the current 
situation and shouldn't cause problems that I can see.

lu





More information about the vlc-devel mailing list