X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess_output%2Fhttp.c;h=d1535742c34c6ec1103df00dcb7edc0978c562f9;hb=98b991662f8935f2c952895581d84d082aa15557;hp=ec8fcce3485779be1da37c5591466aefd9d03719;hpb=e5c2a63d04075e767924ee7cbf9cc0b1538fb329;p=vlc diff --git a/modules/access_output/http.c b/modules/access_output/http.c index ec8fcce348..d1535742c3 100644 --- a/modules/access_output/http.c +++ b/modules/access_output/http.c @@ -51,9 +51,6 @@ #include -#define DEFAULT_PORT 8080 -#define DEFAULT_SSL_PORT 8443 - /***************************************************************************** * Module descriptor *****************************************************************************/ @@ -100,7 +97,7 @@ vlc_module_end () * 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 * ); @@ -134,11 +131,6 @@ static int Open( vlc_object_t *p_this ) sout_access_out_t *p_access = (sout_access_out_t*)p_this; sout_access_out_sys_t *p_sys; - char *psz_parser; - - char *psz_bind_addr; - int i_bind_port; - char *psz_file_name; char *psz_user; char *psz_pwd; char *psz_mime; @@ -149,68 +141,63 @@ static int Open( vlc_object_t *p_this ) config_ChainParse( p_access, SOUT_CFG_PREFIX, ppsz_sout_options, p_access->p_cfg ); - /* p_access->psz_path = "hostname:port/filename" */ - psz_bind_addr = strdup( p_access->psz_path ); - - i_bind_port = 0; - - psz_parser = strchr( psz_bind_addr, '/' ); - if( psz_parser ) + const char *path = p_access->psz_path; + /* Skip everything before / - backward compatibiltiy with VLC 1.1 */ + path += strcspn( path, "/" ); + if( path > p_access->psz_path ) { - psz_file_name = strdup( psz_parser ); - *psz_parser = '\0'; - } - else - psz_file_name = strdup( "/" ); - - if( psz_bind_addr[0] == '[' ) - { - psz_bind_addr++; - psz_parser = strstr( psz_bind_addr, "]:" ); - if( psz_parser ) + const char *port = strrchr( p_access->psz_path, ':' ); + if( port != NULL && strchr( port, ']' ) != NULL ) + port = NULL; /* IPv6 numeral */ + if( port != p_access->psz_path ) { - *psz_parser = '\0'; - i_bind_port = atoi( psz_parser + 2 ); + int len = (port ? port : path) - p_access->psz_path; + /* msg_Err( p_access, "\"%.*s\" HTTP host ignored", len, + p_access->psz_path ); + msg_Info( p_access, + "Pass --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 ); } - psz_parser = psz_bind_addr - 1; - } - else - { - psz_parser = strrchr( psz_bind_addr, ':' ); - if( psz_parser ) + if( port != NULL ) { - *psz_parser = '\0'; - i_bind_port = atoi( psz_parser + 1 ); + /* int len = path - ++port; + msg_Err( p_access, "\"%.*s\" HTTP port ignored", len, port ); + msg_Info( p_access, "Pass --%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 ); + } } - psz_parser = psz_bind_addr; } + if( !*path ) + path = "/"; /* TLS support */ if( p_access->psz_access && !strcmp( p_access->psz_access, "https" ) ) - { - if( i_bind_port <= 0 ) - i_bind_port = DEFAULT_SSL_PORT; - p_sys->p_httpd_host = vlc_https_HostNew( VLC_OBJECT(p_access), - psz_bind_addr, i_bind_port ); - } + p_sys->p_httpd_host = vlc_https_HostNew( VLC_OBJECT(p_access) ); else - { - if( i_bind_port <= 0 ) - i_bind_port = DEFAULT_PORT; - p_sys->p_httpd_host = vlc_http_HostNew( VLC_OBJECT(p_access), - psz_bind_addr, i_bind_port ); - } + p_sys->p_httpd_host = vlc_http_HostNew( VLC_OBJECT(p_access) ); if( p_sys->p_httpd_host == NULL ) { - msg_Err( p_access, "cannot listen on %s port %d", - psz_bind_addr, i_bind_port ); - free( psz_file_name ); - free( psz_parser ); + msg_Err( p_access, "cannot start HTTP server" ); free( p_sys ); return VLC_EGENERIC; } - free( psz_parser ); psz_user = var_GetNonEmptyString( p_access, SOUT_CFG_PREFIX "user" ); psz_pwd = var_GetNonEmptyString( p_access, SOUT_CFG_PREFIX "pwd" ); @@ -224,7 +211,7 @@ static int Open( vlc_object_t *p_this ) } 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 ); @@ -232,10 +219,9 @@ static int Open( vlc_object_t *p_this ) 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; } @@ -252,8 +238,7 @@ static int Open( vlc_object_t *p_this ) 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; @@ -273,8 +258,6 @@ static int Open( vlc_object_t *p_this ) 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 );