X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fhttp.c;h=a1d1d4a8a4f6b35db0d14c3a587c140efb36af9f;hb=100c925778cd6c96e5371777d49b326a05a2fae9;hp=46ed5a95e6d920b6226613da9e58eba1e9c26d8a;hpb=6b34b9ee3c89708dd39419c4af39ec8600510be0;p=vlc diff --git a/modules/access/http.c b/modules/access/http.c index 46ed5a95e6..a1d1d4a8a4 100644 --- a/modules/access/http.c +++ b/modules/access/http.c @@ -26,11 +26,8 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#define _GNU_SOURCE #include -#include -#include #include @@ -91,11 +88,12 @@ vlc_module_begin(); RECONNECT_LONGTEXT, VLC_TRUE ); add_bool( "http-continuous", 0, NULL, CONTINUOUS_TEXT, CONTINUOUS_LONGTEXT, VLC_TRUE ); - add_suppressed_string("http-user"); - add_suppressed_string("http-pwd"); + add_obsolete_string("http-user"); + add_obsolete_string("http-pwd"); add_shortcut( "http" ); add_shortcut( "https" ); add_shortcut( "unsv" ); + add_shortcut( "itpc" ); /* iTunes Podcast */ set_callbacks( Open, Close ); vlc_module_end(); @@ -338,12 +336,9 @@ connect: PL_LOCK; p_input_item = p_playlist->status.p_item->p_input; - vlc_mutex_lock( &p_input_item->lock ); - free( p_input_item->psz_uri ); + input_item_SetURI( p_input_item, p_sys->psz_location ); free( p_access->psz_path ); - p_input_item->psz_uri = strdup( p_sys->psz_location ); p_access->psz_path = strdup( p_sys->psz_location ); - vlc_mutex_unlock( &p_input_item->lock ); PL_UNLOCK; pl_Release( p_access ); @@ -351,10 +346,10 @@ connect: /* Clean up current Open() run */ vlc_UrlClean( &p_sys->url ); vlc_UrlClean( &p_sys->proxy ); - if( p_sys->psz_mime ) free( p_sys->psz_mime ); - if( p_sys->psz_pragma ) free( p_sys->psz_pragma ); - if( p_sys->psz_location ) free( p_sys->psz_location ); - if( p_sys->psz_user_agent ) free( p_sys->psz_user_agent ); + free( p_sys->psz_mime ); + free( p_sys->psz_pragma ); + free( p_sys->psz_location ); + free( p_sys->psz_user_agent ); Disconnect( p_access ); free( p_sys ); @@ -405,6 +400,10 @@ connect: /* Grrrr! detect ultravox server and force NSV demuxer */ p_access->psz_demux = strdup( "nsv" ); } + else if( !strcmp( p_access->psz_access, "itpc" ) ) + { + p_access->psz_demux = strdup( "podcast" ); + } else if( p_sys->psz_mime && !strncasecmp( p_sys->psz_mime, "application/xspf+xml", 20 ) && ( memchr( " ;\t", p_sys->psz_mime[20], 4 ) != NULL ) ) @@ -420,10 +419,10 @@ connect: error: vlc_UrlClean( &p_sys->url ); vlc_UrlClean( &p_sys->proxy ); - if( p_sys->psz_mime ) free( p_sys->psz_mime ); - if( p_sys->psz_pragma ) free( p_sys->psz_pragma ); - if( p_sys->psz_location ) free( p_sys->psz_location ); - if( p_sys->psz_user_agent ) free( p_sys->psz_user_agent ); + free( p_sys->psz_mime ); + free( p_sys->psz_pragma ); + free( p_sys->psz_location ); + free( p_sys->psz_user_agent ); Disconnect( p_access ); free( p_sys ); @@ -441,15 +440,15 @@ static void Close( vlc_object_t *p_this ) vlc_UrlClean( &p_sys->url ); vlc_UrlClean( &p_sys->proxy ); - if( p_sys->psz_mime ) free( p_sys->psz_mime ); - if( p_sys->psz_pragma ) free( p_sys->psz_pragma ); - if( p_sys->psz_location ) free( p_sys->psz_location ); + free( p_sys->psz_mime ); + free( p_sys->psz_pragma ); + free( p_sys->psz_location ); - if( p_sys->psz_icy_name ) free( p_sys->psz_icy_name ); - if( p_sys->psz_icy_genre ) free( p_sys->psz_icy_genre ); - if( p_sys->psz_icy_title ) free( p_sys->psz_icy_title ); + free( p_sys->psz_icy_name ); + free( p_sys->psz_icy_genre ); + free( p_sys->psz_icy_title ); - if( p_sys->psz_user_agent ) free( p_sys->psz_user_agent ); + free( p_sys->psz_user_agent ); Disconnect( p_access ); free( p_sys ); @@ -740,11 +739,11 @@ static int Control( access_t *p_access, int i_query, va_list args ) p_meta = (vlc_meta_t*)va_arg( args, vlc_meta_t* ); if( p_sys->psz_icy_name ) - vlc_meta_SetTitle( p_meta, p_sys->psz_icy_name ); + vlc_meta_Set( p_meta, vlc_meta_Title, p_sys->psz_icy_name ); if( p_sys->psz_icy_genre ) - vlc_meta_SetGenre( p_meta, p_sys->psz_icy_genre ); + vlc_meta_Set( p_meta, vlc_meta_Genre, p_sys->psz_icy_genre ); if( p_sys->psz_icy_title ) - vlc_meta_SetNowPlaying( p_meta, p_sys->psz_icy_title ); + vlc_meta_Set( p_meta, vlc_meta_NowPlaying, p_sys->psz_icy_title ); break; case ACCESS_GET_TITLE_INFO: @@ -770,13 +769,13 @@ static int Connect( access_t *p_access, int64_t i_tell ) vlc_url_t srv = p_sys->b_proxy ? p_sys->proxy : p_sys->url; /* Clean info */ - if( p_sys->psz_location ) free( p_sys->psz_location ); - if( p_sys->psz_mime ) free( p_sys->psz_mime ); - if( p_sys->psz_pragma ) free( p_sys->psz_pragma ); + free( p_sys->psz_location ); + free( p_sys->psz_mime ); + free( p_sys->psz_pragma ); - if( p_sys->psz_icy_genre ) free( p_sys->psz_icy_genre ); - if( p_sys->psz_icy_name ) free( p_sys->psz_icy_name ); - if( p_sys->psz_icy_title ) free( p_sys->psz_icy_title ); + free( p_sys->psz_icy_genre ); + free( p_sys->psz_icy_name ); + free( p_sys->psz_icy_title ); p_sys->psz_location = NULL; @@ -932,37 +931,41 @@ static int Request( access_t *p_access, int64_t i_tell ) } /* Authentication */ - if( p_sys->url.psz_username && *p_sys->url.psz_username ) + if( p_sys->url.psz_username || p_sys->url.psz_password ) { - char *buf; + char buf[strlen( p_sys->url.psz_username ?: "" ) + + strlen( p_sys->url.psz_password ?: "" ) + 2]; char *b64; - asprintf( &buf, "%s:%s", p_sys->url.psz_username, - p_sys->url.psz_password ? p_sys->url.psz_password : "" ); - + snprintf( buf, sizeof( buf ), "%s:%s", p_sys->url.psz_username ?: "", + p_sys->url.psz_password ?: "" ); b64 = vlc_b64_encode( buf ); - free( buf ); - net_Printf( VLC_OBJECT(p_access), p_sys->fd, pvs, - "Authorization: Basic %s\r\n", b64 ); - free( b64 ); + if( b64 != NULL ) + { + net_Printf( VLC_OBJECT(p_access), p_sys->fd, pvs, + "Authorization: Basic %s\r\n", b64 ); + free( b64 ); + } } /* Proxy Authentication */ - if( p_sys->proxy.psz_username && *p_sys->proxy.psz_username ) + if( p_sys->proxy.psz_username || p_sys->proxy.psz_password ) { - char *buf; + char buf[strlen( p_sys->proxy.psz_username ?: "" ) + + strlen( p_sys->proxy.psz_password ?: "" )]; char *b64; - asprintf( &buf, "%s:%s", p_sys->proxy.psz_username, - p_sys->proxy.psz_password ? p_sys->proxy.psz_password : "" ); - + snprintf( buf, sizeof( buf ), "%s:%s", p_sys->proxy.psz_username ?: "", + p_sys->proxy.psz_password ?: "" ); b64 = vlc_b64_encode( buf ); - free( buf ); - net_Printf( VLC_OBJECT(p_access), p_sys->fd, pvs, - "Proxy-Authorization: Basic %s\r\n", b64 ); - free( b64 ); + if( b64 != NULL) + { + net_Printf( VLC_OBJECT(p_access), p_sys->fd, pvs, + "Proxy-Authorization: Basic %s\r\n", b64 ); + free( b64 ); + } } /* ICY meta data request */ @@ -1067,7 +1070,7 @@ static int Request( access_t *p_access, int64_t i_tell ) if( p_sys->b_continuous ) { p_access->info.i_size = -1; - msg_Dbg( p_access, "this frame size="I64Fd, atoll(p ) ); + msg_Dbg( p_access, "this frame size=%lld", atoll(p ) ); p_sys->i_remaining = atoll( p ); } else