Commit cd7ab6ee authored by Konstantin Pavlov's avatar Konstantin Pavlov Committed by Jean-Baptiste Kempf

m3u: Check Content-type if available.

(cherry picked from commit 0e3e2b84b9c0891f9496b39184d2adea9fff4117)
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 343aa93d
...@@ -49,6 +49,7 @@ static int Demux( demux_t *p_demux); ...@@ -49,6 +49,7 @@ static int Demux( demux_t *p_demux);
static int Control( demux_t *p_demux, int i_query, va_list args ); static int Control( demux_t *p_demux, int i_query, va_list args );
static void parseEXTINF( char *psz_string, char **ppsz_artist, char **ppsz_name, int *pi_duration ); static void parseEXTINF( char *psz_string, char **ppsz_artist, char **ppsz_name, int *pi_duration );
static bool ContainsURL( demux_t *p_demux ); static bool ContainsURL( demux_t *p_demux );
static bool CheckContentType( stream_t * p_stream, const char * psz_ctype );
static char *GuessEncoding (const char *str) static char *GuessEncoding (const char *str)
{ {
...@@ -73,14 +74,16 @@ int Import_M3U( vlc_object_t *p_this ) ...@@ -73,14 +74,16 @@ int Import_M3U( vlc_object_t *p_this )
if( POKE( p_peek, "RTSPtext", 8 ) /* QuickTime */ if( POKE( p_peek, "RTSPtext", 8 ) /* QuickTime */
|| POKE( p_peek, "\xef\xbb\xbf" "#EXTM3U", 10) /* BOM at start */ || POKE( p_peek, "\xef\xbb\xbf" "#EXTM3U", 10) /* BOM at start */
|| demux_IsPathExtension( p_demux, ".m3u8" ) || demux_IsPathExtension( p_demux, ".m3u8" )
|| demux_IsForced( p_demux, "m3u8" ) ) || demux_IsForced( p_demux, "m3u8" )
|| CheckContentType( p_demux->s, "application/vnd.apple.mpegurl" ) )
pf_dup = CheckUnicode; /* UTF-8 */ pf_dup = CheckUnicode; /* UTF-8 */
else else
if( POKE( p_peek, "#EXTM3U", 7 ) if( POKE( p_peek, "#EXTM3U", 7 )
|| demux_IsPathExtension( p_demux, ".m3u" ) || demux_IsPathExtension( p_demux, ".m3u" )
|| demux_IsPathExtension( p_demux, ".vlc" ) || demux_IsPathExtension( p_demux, ".vlc" )
|| demux_IsForced( p_demux, "m3u" ) || demux_IsForced( p_demux, "m3u" )
|| ContainsURL( p_demux ) ) || ContainsURL( p_demux )
|| CheckContentType( p_demux->s, "audio/x-mpegurl") )
pf_dup = GuessEncoding; pf_dup = GuessEncoding;
else else
return VLC_EGENERIC; return VLC_EGENERIC;
...@@ -126,6 +129,17 @@ static bool ContainsURL( demux_t *p_demux ) ...@@ -126,6 +129,17 @@ static bool ContainsURL( demux_t *p_demux )
return false; return false;
} }
static bool CheckContentType( stream_t * p_stream, const char * psz_ctype )
{
char *psz_check = stream_ContentType( p_stream );
if( !psz_check ) return false;
int i_res = strncasecmp( psz_check, psz_ctype, strlen( psz_check ) );
free( psz_check );
return ( i_res == 0 ) ? true : false;
}
/***************************************************************************** /*****************************************************************************
* Deactivate: frees unused data * Deactivate: frees unused data
*****************************************************************************/ *****************************************************************************/
......
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