/*****************************************************************************
* http.c : HTTP/HTTPS Remote control interface
*****************************************************************************
- * Copyright (C) 2001-2005 the VideoLAN team
+ * Copyright (C) 2001-2006 the VideoLAN team
* $Id$
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
#define HOST_TEXT N_( "Host address" )
#define HOST_LONGTEXT N_( \
- "You can set the address and port the http interface will bind to." )
+ "Address and port the HTTP interface will listen on. It defaults to " \
+ "all network interfaces (0.0.0.0)." \
+ " If you want the telnet interface to be available only on the local " \
+ "machine, enter 127.0.0.1" )
#define SRC_TEXT N_( "Source directory" )
#define SRC_LONGTEXT N_( "Source directory" )
#define CHARSET_TEXT N_( "Charset" )
"Charset declared in Content-Type header (default UTF-8)." )
#define HANDLERS_TEXT N_( "Handlers" )
#define HANDLERS_LONGTEXT N_( \
- "List of extensions and executable paths (for instance: " \
+ "List of handler extensions and executable paths (for instance: " \
"php=/usr/bin/php,pl=/usr/bin/perl)." )
#define CERT_TEXT N_( "Certificate file" )
#define CERT_LONGTEXT N_( "HTTP interface x509 PEM certificate file " \
- "(enables SSL)" )
+ "(enables SSL)." )
#define KEY_TEXT N_( "Private key file" )
-#define KEY_LONGTEXT N_( "HTTP interface x509 PEM private key file" )
+#define KEY_LONGTEXT N_( "HTTP interface x509 PEM private key file." )
#define CA_TEXT N_( "Root CA file" )
#define CA_LONGTEXT N_( "HTTP interface x509 PEM trusted root CA " \
- "certificates file" )
+ "certificates file." )
#define CRL_TEXT N_( "CRL file" )
-#define CRL_LONGTEXT N_( "HTTP interace Certificates Revocation List file" )
+#define CRL_LONGTEXT N_( "HTTP interace Certificates Revocation List file." )
vlc_module_begin();
set_shortname( _("HTTP"));
* Local functions
*****************************************************************************/
#if !defined(__APPLE__) && !defined(SYS_BEOS) && !defined(WIN32)
-static int DirectoryCheck( char *psz_dir )
+static int DirectoryCheck( const char *psz_dir )
{
DIR *p_dir;
#ifdef HAVE_SYS_STAT_H
struct stat stat_info;
- if( utf8_stat( psz_dir, &stat_info ) == -1 || !S_ISDIR( stat_info.st_mode ) )
+ if( ( utf8_stat( psz_dir, &stat_info ) == -1 )
+ || !S_ISDIR( stat_info.st_mode ) )
{
return VLC_EGENERIC;
}
if( strcmp( psz_src, "UTF-8" ) )
{
- p_sys->iconv_from_utf8 = vlc_iconv_open( 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_src );
+ psz_encoding );
else
{
p_sys->iconv_to_utf8 = vlc_iconv_open( "UTF-8", psz_src );
p_sys->iconv_from_utf8 = p_sys->iconv_to_utf8 = (vlc_iconv_t)-1;
}
- p_sys->psz_charset = strdup( psz_src );
+ p_sys->psz_charset = psz_src;
psz_src = NULL;
/* determine file handler associations */
#else
psz_src = config_GetPsz( p_intf, "http-src" );
- if( !psz_src || *psz_src == '\0' )
+ if( ( psz_src == NULL ) || ( *psz_src == '\0' ) )
{
- if( !DirectoryCheck( "share/http" ) )
- {
- psz_src = strdup( "share/http" );
- }
- else if( !DirectoryCheck( DATA_PATH "/http" ) )
+ static char const* ppsz_paths[] = {
+ "share/http",
+ "../share/http",
+ DATA_PATH"/http",
+ NULL
+ };
+ unsigned i;
+
+ if( psz_src != NULL )
{
- psz_src = strdup( DATA_PATH "/http" );
+ free( psz_src );
+ psz_src = NULL;
}
+
+ for( i = 0; ppsz_paths[i] != NULL; i++ )
+ if( !DirectoryCheck( ppsz_paths[i] ) )
+ {
+ psz_src = strdup( ppsz_paths[i] );
+ break;
+ }
}
#endif
if( !psz_src || *psz_src == '\0' )
{
- msg_Err( p_intf, "invalid src dir" );
+ msg_Err( p_intf, "invalid web interface source directory" );
goto failed;
}
if( p_sys->i_files <= 0 )
{
- msg_Err( p_intf, "cannot find any files (%s)", psz_src );
+ msg_Err( p_intf, "cannot find any file in directory %s", psz_src );
goto failed;
}
p_intf->pf_run = Run;
audio_volume_t i_volume;
char volume[5];
char state[8];
+ char stats[20];
#define p_sys p_args->p_intf->p_sys
if( p_sys->p_input )
E_(mvar_AppendNewVar)( p_args->vars, "stream_state", state );
E_(mvar_AppendNewVar)( p_args->vars, "charset", ((intf_sys_t *)p_args->p_intf->p_sys)->psz_charset );
+ /* Stats */
+#define p_sys p_args->p_intf->p_sys
+ if( p_sys->p_input )
+ {
+ input_item_t *p_item = p_sys->p_input->input.p_item;
+ if( p_item )
+ {
+ vlc_mutex_lock( &p_item->p_stats->lock );
+#define STATS_INT( n ) sprintf( stats, "%d", p_item->p_stats->i_ ## n ); \
+ E_(mvar_AppendNewVar)( p_args->vars, #n, stats );
+#define STATS_FLOAT( n ) sprintf( stats, "%f", p_item->p_stats->f_ ## n ); \
+ E_(mvar_AppendNewVar)( p_args->vars, #n, stats );
+ STATS_INT( read_bytes )
+ STATS_FLOAT( input_bitrate )
+ STATS_INT( demux_read_bytes )
+ STATS_FLOAT( demux_bitrate )
+ STATS_INT( decoded_video )
+ STATS_INT( displayed_pictures )
+ STATS_INT( lost_pictures )
+ STATS_INT( decoded_audio )
+ STATS_INT( played_abuffers )
+ STATS_INT( lost_abuffers )
+ STATS_INT( sent_packets )
+ STATS_INT( sent_bytes )
+ STATS_FLOAT( send_bitrate )
+#undef STATS_INT
+#undef STATS_FLOAT
+ vlc_mutex_unlock( &p_item->p_stats->lock );
+ }
+ }
+#undef p_sys
+
E_(SSInit)( &p_args->stack );
/* allocate output */