#include <vlc_httpd.h>
-#define DEFAULT_PORT 8080
-#define DEFAULT_SSL_PORT 8443
-
/*****************************************************************************
* Module descriptor
*****************************************************************************/
* Exported prototypes
*****************************************************************************/
static const char *const ppsz_sout_options[] = {
- "user", "pwd", "mime", "cert", "key", "ca", "crl", NULL
+ "user", "pwd", "mime", NULL
};
static ssize_t Write( sout_access_out_t *, block_t * );
sout_access_out_t *p_access = (sout_access_out_t*)p_this;
sout_access_out_sys_t *p_sys;
- char *psz_file_name;
char *psz_user;
char *psz_pwd;
char *psz_mime;
config_ChainParse( p_access, SOUT_CFG_PREFIX, ppsz_sout_options, p_access->p_cfg );
- /* Skip everything before / - backward compatibiltiy with VLC 1.1 */
- const char *psz_parser = strchr( p_access->psz_path, '/' );
- if( psz_parser )
- psz_file_name = strdup( psz_parser );
- else
- psz_file_name = strdup( "/" );
+ const char *path = p_access->psz_path;
+ path += strcspn( path, "/" );
+ if( path > p_access->psz_path )
+ {
+ const char *port = strrchr( p_access->psz_path, ':' );
+ if( port != NULL && strchr( port, ']' ) != NULL )
+ port = NULL; /* IPv6 numeral */
+ if( port != p_access->psz_path )
+ {
+ int len = (port ? port : path) - p_access->psz_path;
+ msg_Warn( p_access, "\"%.*s\" HTTP host might be ignored in "
+ "multiple-host configurations, use at your own risks.",
+ len, p_access->psz_path );
+ msg_Info( p_access, "Consider passing --http-host=IP on the "
+ "command line instead." );
+
+ char host[len + 1];
+ strncpy( host, p_access->psz_path, len );
+ host[len] = '\0';
+
+ var_Create( p_access, "http-host", VLC_VAR_STRING );
+ var_SetString( p_access, "http-host", host );
+ }
+ if( port != NULL )
+ {
+ /* int len = path - ++port;
+ msg_Info( p_access, "Consider passing --%s-port=%.*s on the "
+ "command line instead.",
+ strcasecmp( p_access->psz_access, "https" )
+ ? "http" : "https", len, port ); */
+ port++;
+
+ int bind_port = atoi( port );
+ if( bind_port > 0 )
+ {
+ const char *var = strcasecmp( p_access->psz_access, "https" )
+ ? "http-port" : "https-port";
+ var_Create( p_access, var, VLC_VAR_INTEGER );
+ var_SetInteger( p_access, var, bind_port );
+ }
+ }
+ }
+ if( !*path )
+ path = "/";
/* TLS support */
if( p_access->psz_access && !strcmp( p_access->psz_access, "https" ) )
if( p_sys->p_httpd_host == NULL )
{
msg_Err( p_access, "cannot start HTTP server" );
- free( psz_file_name );
free( p_sys );
return VLC_EGENERIC;
}
}
p_sys->p_httpd_stream =
- httpd_StreamNew( p_sys->p_httpd_host, psz_file_name, psz_mime,
+ httpd_StreamNew( p_sys->p_httpd_host, path, psz_mime,
psz_user, psz_pwd, NULL );
free( psz_user );
free( psz_pwd );
if( p_sys->p_httpd_stream == NULL )
{
- msg_Err( p_access, "cannot add stream %s", psz_file_name );
+ msg_Err( p_access, "cannot add stream %s", path );
httpd_HostDelete( p_sys->p_httpd_host );
- free( psz_file_name );
free( p_sys );
return VLC_EGENERIC;
}
if( psz_name != NULL ) psz_name++;
else psz_name = psz_newuri;
- if( psz_file_name &&
- asprintf( &psz_txt, "path=%s", psz_file_name ) == -1 )
+ if( asprintf( &psz_txt, "path=%s", path ) == -1 )
{
free( psz_uri );
return VLC_ENOMEM;
p_sys->p_bonjour = NULL;
#endif
- free( psz_file_name );
-
p_sys->i_header_allocated = 1024;
p_sys->i_header_size = 0;
p_sys->p_header = xmalloc( p_sys->i_header_allocated );