heavy simplification, and fix(/remove) piles of error cases.
Server gets to choose the charset anyway.
"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: " \
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_obsolete_string ( "http-charset" );
#if defined( HAVE_FORK ) || defined( WIN32 )
add_string ( "http-handlers", NULL, NULL, HANDLERS_TEXT, HANDLERS_LONGTEXT, VLC_TRUE );
#endif
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");
if( psz_address != NULL )
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;
{
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;
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;
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 );
}
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 )
/** This function returns the real path of a file or directory */
char *E_(RealPath)( intf_thread_t *p_intf, const char *psz_src );
-/* Locale handling functions */
-
-/** This fuction converts a locale string to UTF-8 */
-char *E_(FromUTF8)( intf_thread_t *p_intf, char *psz_utf8 );
-/** This function converts an UTF-8 to locale */
-char *E_(ToUTF8)( intf_thread_t *p_intf, char *psz_local );
-
/** This command parses the "seek" command for the HTTP interface
* and performs the requested action */
void E_(HandleSeek)( intf_thread_t *p_intf, char *p_value );
playlist_t *p_playlist;
input_thread_t *p_input;
vlm_t *p_vlm;
- char *psz_html_type;
- char *psz_charset;
- vlc_iconv_t iconv_from_utf8, iconv_to_utf8;
char *psz_address;
unsigned short i_port;
for ( i = 0; i < input_GetItem(p_input)->i_categories; i++ )
{
info_category_t *p_category = input_GetItem(p_input)->pp_categories[i];
- char *psz;
mvar_t *cat = E_(mvar_New)( name, "set" );
mvar_t *iset = E_(mvar_New)( "info", "set" );
- psz = E_(FromUTF8)( p_intf, p_category->psz_name );
- E_(mvar_AppendNewVar)( cat, "name", psz );
- free( psz );
+ E_(mvar_AppendNewVar)( cat, "name", p_category->psz_name );
E_(mvar_AppendVar)( cat, iset );
for ( j = 0; j < p_category->i_infos; j++ )
{
info_t *p_info = p_category->pp_infos[j];
mvar_t *info = E_(mvar_New)( "info", "" );
- char *psz_name = E_(FromUTF8)( p_intf, p_info->psz_name );
- char *psz_value = E_(FromUTF8)( p_intf, p_info->psz_value );
/* msg_Dbg( p_input, "adding info name=%s value=%s",
psz_name, psz_value ); */
- E_(mvar_AppendNewVar)( info, "name", psz_name );
- E_(mvar_AppendNewVar)( info, "value", psz_value );
- free( psz_name );
- free( psz_value );
+ E_(mvar_AppendNewVar)( info, "name", p_info->psz_name );
+ E_(mvar_AppendNewVar)( info, "value", p_info->psz_value );
E_(mvar_AppendVar)( iset, info );
}
E_(mvar_AppendVar)( s, cat );
{
case VLC_VAR_STRING:
itm = E_(mvar_New)( name, "set" );
- psz = E_(FromUTF8)( p_intf, text_list.p_list->p_values[i].psz_string );
+ /* FIXME: Memory leak here?? (remove strdup?) */
+ psz = strdup( text_list.p_list->p_values[i].psz_string );
E_(mvar_AppendNewVar)( itm, "name", psz );
- psz = E_(FromUTF8)( p_intf, val_list.p_list->p_values[i].psz_string );
- E_(mvar_AppendNewVar)( itm, "id", psz );
- free( psz );
+ E_(mvar_AppendNewVar)( itm, "id", val_list.p_list->p_values[i].psz_string );
snprintf( psz_int, sizeof(psz_int), "%d",
( !strcmp( val.psz_string,
val_list.p_list->p_values[i].psz_string )
case VLC_VAR_INTEGER:
itm = E_(mvar_New)( name, "set" );
- psz = E_(FromUTF8)( p_intf, text_list.p_list->p_values[i].psz_string );
+ psz = strdup( text_list.p_list->p_values[i].psz_string );
E_(mvar_AppendNewVar)( itm, "name", psz );
snprintf( psz_int, sizeof(psz_int), "%d",
val_list.p_list->p_values[i].i_int );
for( i = 0; i < i_dir_content; i++ )
{
- char *psz_dir_content = ppsz_dir_content[i];
- char psz_tmp[strlen( psz_dir ) + 1 + strlen( psz_dir_content ) + 1];
+ char *psz_name = ppsz_dir_content[i], *psz_ext, *psz_dummy;
+ char psz_tmp[strlen( psz_dir ) + 1 + strlen( psz_name ) + 1];
mvar_t *f;
- char *psz_name, *psz_ext, *psz_dummy;
#if defined( WIN32 )
if( psz_dir[0] == '\0' || (psz_dir[0] == '\\' && psz_dir[1] == '\0') )
{
- strcpy( psz_tmp, psz_dir_content );
+ strcpy( psz_tmp, psz_name );
}
else
#endif
{
- sprintf( psz_tmp, "%s"DIR_SEP"%s", psz_dir, psz_dir_content );
+ sprintf( psz_tmp, "%s"DIR_SEP"%s", psz_dir, psz_name );
#ifdef HAVE_SYS_STAT_H
if( utf8_stat( psz_tmp, &stat_info ) == -1 )
{
- free( psz_dir_content );
+ free( psz_name );
continue;
}
#endif
}
f = E_(mvar_New)( name, "set" );
- psz_name = E_(FromUTF8)( p_intf, psz_dir_content );
-
/* put lower-case file extension in 'ext' */
psz_ext = strrchr( psz_name, '.' );
psz_ext = strdup( psz_ext != NULL ? psz_ext + 1 : "" );
E_(mvar_AppendVar)( s, f );
free( psz_name );
- free( psz_dir_content );
}
free( psz_dir );
char *value = E_(ExtractURIString)( url, name );
if( value != NULL )
{
- char *tmp;
decode_URI( value );
- tmp = E_(FromUTF8)( p_intf, value );
- E_(SSPush)( st, tmp );
- free( tmp );
+ E_(SSPush)( st, value );
free( value );
}
else
else if( !strcmp( s, "url_encode" ) )
{
char *url = E_(SSPop)( st );
- char *value;
-
- value = E_(ToUTF8)( p_intf, url );
- free( url );
- url = value;
- value = vlc_UrlEncode( url );
+ char *value = vlc_UrlEncode( url );
free( url );
E_(SSPush)( st, value );
free( value );
{
char *psz_name = E_(SSPop)( st );
char *mrl = E_(SSPop)( st );
- char *tmp;
input_item_t *p_input;
int i_ret;
- tmp = E_(ToUTF8)( p_intf, psz_name );
- free( psz_name );
- psz_name = tmp;
- tmp = E_(ToUTF8)( p_intf, mrl );
- free( mrl );
- mrl = tmp;
-
p_input = E_(MRLParse)( p_intf, mrl, psz_name );
char *psz_uri = input_item_GetURI( p_input );
if( !f->b_handler )
{
- char *psz_type = strdup( p_sys->psz_html_type );
+ char *psz_type = strdup( "text/html; charset=UTF-8" );
if( strstr( &dir[strlen( psz_root )], ".xml" ) )
{
char *psz = strstr( psz_type, "html;" );
}
-/**************************************************************************
- * Locale functions
- **************************************************************************/
-char *E_(FromUTF8)( intf_thread_t *p_intf, char *psz_utf8 )
-{
- intf_sys_t *p_sys = p_intf->p_sys;
-
- if( psz_utf8 == NULL )
- return NULL;
-
- if ( p_sys->iconv_from_utf8 != (vlc_iconv_t)-1 )
- {
- size_t i_in = strlen(psz_utf8);
- size_t i_out = i_in * 2;
- char *psz_local = malloc(i_out + 1);
- char *psz_out = psz_local;
- size_t i_ret;
- char psz_tmp[i_in + 1];
- const char *psz_in = psz_tmp;
- strcpy( psz_tmp, psz_utf8 );
-
- i_in = strlen( psz_tmp );
-
- i_ret = vlc_iconv( p_sys->iconv_from_utf8, &psz_in, &i_in,
- &psz_out, &i_out );
- if( i_ret == (size_t)-1 || i_in )
- {
- msg_Warn( p_intf,
- "failed to convert \"%s\" to desired charset (%m)",
- psz_utf8 );
- free( psz_local );
- return strdup( psz_utf8 );
- }
-
- *psz_out = '\0';
- return psz_local;
- }
- else
- return strdup( psz_utf8 );
-}
-
-char *E_(ToUTF8)( intf_thread_t *p_intf, char *psz_local )
-{
- intf_sys_t *p_sys = p_intf->p_sys;
-
- if ( p_sys->iconv_to_utf8 != (vlc_iconv_t)-1 )
- {
- const char *psz_in = psz_local;
- size_t i_in = strlen(psz_in);
- size_t i_out = i_in * 6;
- char *psz_utf8 = malloc(i_out + 1);
- char *psz_out = psz_utf8;
-
- size_t i_ret = vlc_iconv( p_sys->iconv_to_utf8, &psz_in, &i_in,
- &psz_out, &i_out );
- if( i_ret == (size_t)-1 || i_in )
- {
- msg_Warn( p_intf,
- "failed to convert \"%s\" to desired charset (%m)",
- psz_local );
- free( psz_utf8 );
- return strdup( psz_local );
- }
-
- *psz_out = '\0';
- return psz_utf8;
- }
- else
- return strdup( psz_local );
-}
-
/*************************************************************************
* Playlist stuff
*************************************************************************/
if( p_node->i_children == -1 )
{
char value[512];
- char *psz, *psz_utf8;
+ char *psz;
mvar_t *itm = E_(mvar_New)( name, "set" );
if( p_pl->status.p_item && p_node &&
sprintf( value, "%d", p_node->i_id );
E_(mvar_AppendNewVar)( itm, "index", value );
- psz_utf8 = input_item_GetName( p_node->p_input );
- psz = E_(FromUTF8)( p_intf, psz_utf8 );
+ psz = input_item_GetName( p_node->p_input );
E_(mvar_AppendNewVar)( itm, "name", psz );
- free( psz_utf8 );
free( psz );
- psz_utf8 = input_item_GetURI( p_node->p_input );
- psz = E_(FromUTF8)( p_intf, psz_utf8 );
+ psz = input_item_GetURI( p_node->p_input );
E_(mvar_AppendNewVar)( itm, "uri", psz );
- free( psz_utf8 );
free( psz );
sprintf( value, "Item");
else
{
char value[512];
- char *psz;
int i_child;
mvar_t *itm = E_(mvar_New)( name, "set" );
- psz = E_(FromUTF8)( p_intf, p_node->p_input->psz_name );
- E_(mvar_AppendNewVar)( itm, "name", psz );
- E_(mvar_AppendNewVar)( itm, "uri", psz );
- free( psz );
+ E_(mvar_AppendNewVar)( itm, "name", p_node->p_input->psz_name );
+ E_(mvar_AppendNewVar)( itm, "uri", p_node->p_input->psz_name );
sprintf( value, "Node" );
E_(mvar_AppendNewVar)( itm, "type", value );