X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcontrol%2Fhttp%2Fhttp.c;h=bf65904f93b405b29da2c87b7a68a1f87de6f00f;hb=27d483e9ef7a451397d7857251c8d67097661f1d;hp=c856697eac5a8eb60223c0c19ec26e234262eedc;hpb=dd2cedba348e52f0c222237604b5cb410d2f1c2f;p=vlc diff --git a/modules/control/http/http.c b/modules/control/http/http.c index c856697eac..bf65904f93 100644 --- a/modules/control/http/http.c +++ b/modules/control/http/http.c @@ -22,8 +22,12 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif #include "http.h" +#include /***************************************************************************** * Module descriptor @@ -39,9 +43,6 @@ static void Close( vlc_object_t * ); "machine, enter 127.0.0.1" ) #define SRC_TEXT N_( "Source directory" ) #define SRC_LONGTEXT N_( "Source directory" ) -#define CHARSET_TEXT N_( "Charset" ) -#define CHARSET_LONGTEXT N_( \ - "Charset declared in Content-Type header (default UTF-8)." ) #define HANDLERS_TEXT N_( "Handlers" ) #define HANDLERS_LONGTEXT N_( \ "List of handler extensions and executable paths (for instance: " \ @@ -66,18 +67,18 @@ vlc_module_begin(); set_description( _("HTTP remote control interface") ); set_category( CAT_INTERFACE ); set_subcategory( SUBCAT_INTERFACE_MAIN ); - add_string ( "http-host", NULL, NULL, HOST_TEXT, HOST_LONGTEXT, VLC_TRUE ); - add_string ( "http-src", NULL, NULL, SRC_TEXT, SRC_LONGTEXT, VLC_TRUE ); - add_string ( "http-charset", "UTF-8", NULL, CHARSET_TEXT, CHARSET_LONGTEXT, VLC_TRUE ); + add_string ( "http-host", NULL, NULL, HOST_TEXT, HOST_LONGTEXT, true ); + add_string ( "http-src", NULL, NULL, SRC_TEXT, SRC_LONGTEXT, true ); + add_obsolete_string ( "http-charset" ); #if defined( HAVE_FORK ) || defined( WIN32 ) - add_string ( "http-handlers", NULL, NULL, HANDLERS_TEXT, HANDLERS_LONGTEXT, VLC_TRUE ); + add_string ( "http-handlers", NULL, NULL, HANDLERS_TEXT, HANDLERS_LONGTEXT, true ); #endif - add_bool ( "http-album-art", VLC_FALSE, NULL, ART_TEXT, ART_LONGTEXT, VLC_TRUE ); + add_bool ( "http-album-art", false, NULL, ART_TEXT, ART_LONGTEXT, true ); set_section( N_("HTTP SSL" ), 0 ); - add_string ( "http-intf-cert", NULL, NULL, CERT_TEXT, CERT_LONGTEXT, VLC_TRUE ); - add_string ( "http-intf-key", NULL, NULL, KEY_TEXT, KEY_LONGTEXT, VLC_TRUE ); - add_string ( "http-intf-ca", NULL, NULL, CA_TEXT, CA_LONGTEXT, VLC_TRUE ); - add_string ( "http-intf-crl", NULL, NULL, CRL_TEXT, CRL_LONGTEXT, VLC_TRUE ); + add_string ( "http-intf-cert", NULL, NULL, CERT_TEXT, CERT_LONGTEXT, true ); + add_string ( "http-intf-key", NULL, NULL, KEY_TEXT, KEY_LONGTEXT, true ); + add_string ( "http-intf-ca", NULL, NULL, CA_TEXT, CA_LONGTEXT, true ); + add_string ( "http-intf-crl", NULL, NULL, CRL_TEXT, CRL_LONGTEXT, true ); set_capability( "interface", 0 ); set_callbacks( Open, Close ); vlc_module_end(); @@ -86,7 +87,6 @@ vlc_module_end(); /***************************************************************************** * Local prototypes *****************************************************************************/ -static void Run ( intf_thread_t *p_intf ); int E_(ArtCallback)( httpd_handler_sys_t *p_args, httpd_handler_t *p_handler, char *_p_url, uint8_t *_p_request, int i_type, @@ -134,9 +134,9 @@ static int Open( vlc_object_t *p_this ) const char *psz_cert = NULL, *psz_key = NULL, *psz_ca = NULL, *psz_crl = NULL; int i_port = 0; - char *psz_src; + char *psz_src = NULL; - psz_address = var_GetNonEmptyString(p_intf->p_libvlc, "http-host"); + psz_address = var_CreateGetNonEmptyString( p_intf, "http-host" ); if( psz_address != NULL ) { char *psz_parser = strchr( psz_address, ':' ); @@ -162,52 +162,6 @@ static int Open( vlc_object_t *p_this ) p_sys->i_port = i_port; p_sys->p_art_handler = NULL; - /* determine Content-Type value for HTML pages */ - psz_src = config_GetPsz( p_intf, "http-charset" ); - if( psz_src == NULL || !*psz_src ) - { - if( psz_src != NULL ) free( psz_src ); - psz_src = strdup("UTF-8"); - } - - p_sys->psz_html_type = malloc( 20 + strlen( psz_src ) ); - if( p_sys->psz_html_type == NULL ) - { - pl_Release( p_this ); - free( p_sys->psz_address ); - free( p_sys ); - free( psz_src ); - return VLC_ENOMEM ; - } - sprintf( p_sys->psz_html_type, "text/html; charset=%s", psz_src ); - msg_Dbg( p_intf, "using charset=%s", psz_src ); - - if( strcmp( psz_src, "UTF-8" ) ) - { - char psz_encoding[strlen( psz_src ) + sizeof( "//translit")]; - sprintf( psz_encoding, "%s//translit", psz_src); - - p_sys->iconv_from_utf8 = vlc_iconv_open( psz_encoding, "UTF-8" ); - if( p_sys->iconv_from_utf8 == (vlc_iconv_t)-1 ) - msg_Warn( p_intf, "unable to perform charset conversion to %s", - psz_encoding ); - else - { - p_sys->iconv_to_utf8 = vlc_iconv_open( "UTF-8", psz_src ); - if( p_sys->iconv_to_utf8 == (vlc_iconv_t)-1 ) - msg_Warn( p_intf, - "unable to perform charset conversion from %s", - psz_src ); - } - } - else - { - p_sys->iconv_from_utf8 = p_sys->iconv_to_utf8 = (vlc_iconv_t)-1; - } - - p_sys->psz_charset = psz_src; - psz_src = NULL; - /* determine file handler associations */ p_sys->i_handlers = 0; p_sys->pp_handlers = NULL; @@ -248,8 +202,7 @@ static int Open( vlc_object_t *p_this ) TAB_APPEND( p_sys->i_handlers, p_sys->pp_handlers, p_handler ); } } - if( psz_src != NULL ) - free( psz_src ); + free( psz_src ); #endif /* determine SSL configuration */ @@ -280,7 +233,6 @@ static int Open( vlc_object_t *p_this ) { msg_Err( p_intf, "cannot listen on %s:%d", psz_address, i_port ); pl_Release( p_this ); - free( p_sys->psz_html_type ); free( p_sys->psz_address ); free( p_sys ); return VLC_EGENERIC; @@ -311,19 +263,20 @@ static int Open( vlc_object_t *p_this ) if( ( psz_src == NULL ) || ( *psz_src == '\0' ) ) { - static char const* ppsz_paths[] = { + const char *data_path = config_GetDataDir (); + char buf[strlen (data_path) + sizeof ("/http")]; + snprintf (buf, sizeof (buf), "%s/http", data_path); + + const char const* ppsz_paths[] = { "share/http", "../share/http", - DATA_PATH"/http", + buf, NULL }; unsigned i; - if( psz_src != NULL ) - { - free( psz_src ); - psz_src = NULL; - } + free( psz_src ); + psz_src = NULL; for( i = 0; ppsz_paths[i] != NULL; i++ ) if( !DirectoryCheck( ppsz_paths[i] ) ) @@ -354,7 +307,6 @@ static int Open( vlc_object_t *p_this ) goto failed; } - p_intf->pf_run = Run; free( psz_src ); if( config_GetInt( p_intf, "http-album-art" ) ) @@ -383,11 +335,6 @@ failed: free( p_sys->pp_files ); httpd_HostDelete( p_sys->p_httpd_host ); free( p_sys->psz_address ); - free( p_sys->psz_html_type ); - if( p_sys->iconv_from_utf8 != (vlc_iconv_t)-1 ) - vlc_iconv_close( p_sys->iconv_from_utf8 ); - if( p_sys->iconv_to_utf8 != (vlc_iconv_t)-1 ) - vlc_iconv_close( p_sys->iconv_to_utf8 ); free( p_sys ); pl_Release( p_this ); return VLC_EGENERIC; @@ -422,10 +369,7 @@ static void Close ( vlc_object_t *p_this ) free( p_sys->pp_files[i]->name ); free( p_sys->pp_files[i] ); } - if( p_sys->pp_files ) - { - free( p_sys->pp_files ); - } + free( p_sys->pp_files ); for( i = 0; i < p_sys->i_handlers; i++ ) { http_association_t *p_handler = p_sys->pp_handlers[i]; @@ -443,28 +387,10 @@ static void Close ( vlc_object_t *p_this ) httpd_HandlerDelete( p_sys->p_art_handler ); httpd_HostDelete( p_sys->p_httpd_host ); free( p_sys->psz_address ); - free( p_sys->psz_html_type ); - - if( p_sys->iconv_from_utf8 != (vlc_iconv_t)-1 ) - vlc_iconv_close( p_sys->iconv_from_utf8 ); - if( p_sys->iconv_to_utf8 != (vlc_iconv_t)-1 ) - vlc_iconv_close( p_sys->iconv_to_utf8 ); free( p_sys ); pl_Release( p_this ); } -/***************************************************************************** - * Run: http interface thread - *****************************************************************************/ -static void Run( intf_thread_t *p_intf ) -{ - while( !intf_ShouldDie( p_intf ) ) - { - /* Wait a bit */ - msleep( INTF_IDLE_SLEEP ); - } -} - /**************************************************************************** * HttpCallback: **************************************************************************** @@ -517,9 +443,9 @@ static void ParseExecute( httpd_file_sys_t *p_args, char *p_buffer, var_Get( p_sys->p_input, "position", &val); sprintf( position, "%d" , (int)((val.f_float) * 100.0)); var_Get( p_sys->p_input, "time", &val); - sprintf( time, I64Fi, (int64_t)val.i_time / I64C(1000000) ); + sprintf( time, "%"PRIi64, (int64_t)val.i_time / INT64_C(1000000) ); var_Get( p_sys->p_input, "length", &val); - sprintf( length, I64Fi, (int64_t)val.i_time / I64C(1000000) ); + sprintf( length, "%"PRIi64, (int64_t)val.i_time / INT64_C(1000000) ); var_Get( p_sys->p_input, "state", &val ); if( val.i_int == PLAYING_S ) @@ -572,7 +498,7 @@ static void ParseExecute( httpd_file_sys_t *p_args, char *p_buffer, E_(mvar_AppendNewVar)( p_args->vars, "stream_length", length ); E_(mvar_AppendNewVar)( p_args->vars, "volume", volume ); E_(mvar_AppendNewVar)( p_args->vars, "stream_state", state ); - E_(mvar_AppendNewVar)( p_args->vars, "charset", p_sys->psz_charset ); + E_(mvar_AppendNewVar)( p_args->vars, "charset", "UTF-8" ); /* Stats */ if( p_sys->p_input ) @@ -635,6 +561,7 @@ int E_(HttpCallback)( httpd_file_sys_t *p_args, uint8_t *_p_request, uint8_t **_pp_data, int *pi_data ) { + VLC_UNUSED(p_file); char *p_request = (char *)_p_request; char **pp_data = (char **)_pp_data; FILE *f; @@ -679,6 +606,7 @@ int E_(HandlerCallback)( httpd_handler_sys_t *p_args, char *psz_remote_addr, char *psz_remote_host, uint8_t **_pp_data, int *pi_data ) { + VLC_UNUSED(p_handler); VLC_UNUSED(_p_in); char *p_url = (char *)_p_url; char *p_request = (char *)_p_request; char **pp_data = (char **)_pp_data; @@ -860,8 +788,7 @@ int E_(HandlerCallback)( httpd_handler_sys_t *p_args, NULL ); TAB_REMOVE( p_args->p_association->i_argc, p_args->p_association->ppsz_argv, psz_file ); - if( psz_cwd != NULL ) - free( psz_cwd ); + free( psz_cwd ); while( i_env ) TAB_REMOVE( i_env, ppsz_env, ppsz_env[0] ); @@ -906,6 +833,10 @@ int E_(ArtCallback)( httpd_handler_sys_t *p_args, char *psz_remote_addr, char *psz_remote_host, uint8_t **pp_data, int *pi_data ) { + VLC_UNUSED(p_handler); VLC_UNUSED(_p_url); VLC_UNUSED(i_type); + VLC_UNUSED(p_in); VLC_UNUSED(i_in); VLC_UNUSED(psz_remote_addr); + VLC_UNUSED(psz_remote_host); + char *psz_art = NULL; intf_thread_t *p_intf = p_args->file.p_intf; intf_sys_t *p_sys = p_intf->p_sys; @@ -920,7 +851,7 @@ int E_(ArtCallback)( httpd_handler_sys_t *p_args, if( i_id ) { playlist_item_t *p_pl_item = playlist_ItemGetById( p_sys->p_playlist, - i_id, VLC_FALSE ); + i_id, false ); if( p_pl_item ) p_item = p_pl_item->p_input; }