]> git.sesse.net Git - vlc/blobdiff - modules/access_output/http.c
macosx: add trademark claim to about panel
[vlc] / modules / access_output / http.c
index 43aa6c5fce6f1c4a39da464d0184f2ed6fae3b9a..61095f5c749c37e9c6b0d5b44b83b4d8187ed5b2 100644 (file)
 
 #include <vlc_input.h>
 #include <vlc_playlist.h>
-
-#if 0 //def HAVE_AVAHI_CLIENT
-    #include "bonjour.h"
-
-    #if defined( WIN32 )
-        #define DIRECTORY_SEPARATOR '\\'
-    #else
-        #define DIRECTORY_SEPARATOR '/'
-    #endif
-#endif
-
 #include <vlc_httpd.h>
 
-#define DEFAULT_PORT        8080
-#define DEFAULT_SSL_PORT    8443
-
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
@@ -71,8 +57,6 @@ static void Close( vlc_object_t * );
 #define MIME_TEXT N_("Mime")
 #define MIME_LONGTEXT N_("MIME returned by the server (autodetected " \
                         "if not specified)." )
-#define BONJOUR_TEXT N_( "Advertise with Bonjour")
-#define BONJOUR_LONGTEXT N_( "Advertise the stream with the Bonjour protocol." )
 
 
 vlc_module_begin ()
@@ -88,10 +72,6 @@ vlc_module_begin ()
                   PASS_TEXT, PASS_LONGTEXT, true )
     add_string( SOUT_CFG_PREFIX "mime", "",
                 MIME_TEXT, MIME_LONGTEXT, true )
-#if 0 //def HAVE_AVAHI_CLIENT
-    add_bool( SOUT_CFG_PREFIX "bonjour", false,
-              BONJOUR_TEXT, BONJOUR_LONGTEXT, true);
-#endif
     set_callbacks( Open, Close )
 vlc_module_end ()
 
@@ -120,10 +100,6 @@ struct sout_access_out_sys_t
     int                 i_header_size;
     uint8_t             *p_header;
     bool          b_header_complete;
-
-#if 0 //def HAVE_AVAHI_CLIENT
-    void                *p_bonjour;
-#endif
 };
 
 /*****************************************************************************
@@ -134,7 +110,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_file_name;
     char                *psz_user;
     char                *psz_pwd;
     char                *psz_mime;
@@ -145,12 +120,50 @@ static int Open( vlc_object_t *p_this )
 
     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" ) )
@@ -161,7 +174,6 @@ static int Open( vlc_object_t *p_this )
     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;
     }
@@ -178,57 +190,21 @@ 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,
-                         psz_user, psz_pwd, NULL );
+        httpd_StreamNew( p_sys->p_httpd_host, path, psz_mime,
+                         psz_user, psz_pwd );
     free( psz_user );
     free( psz_pwd );
     free( psz_mime );
 
     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 0 //def HAVE_AVAHI_CLIENT
-    if( var_InheritBool(p_this, SOUT_CFG_PREFIX "bonjour") )
-    {
-        char                *psz_txt, *psz_name;
-        playlist_t          *p_playlist = pl_Get( p_access );
-
-        char *psz_uri = input_item_GetURI( p_playlist->status.p_item->p_input );
-        char *psz_newuri = psz_uri;
-        psz_name = strrchr( psz_newuri, DIRECTORY_SEPARATOR );
-        if( psz_name != NULL ) psz_name++;
-        else psz_name = psz_newuri;
-
-        if( psz_file_name &&
-            asprintf( &psz_txt, "path=%s", psz_file_name ) == -1 )
-            {
-                free( psz_uri );
-                return VLC_ENOMEM;
-            }
-
-        p_sys->p_bonjour = bonjour_start_service( (vlc_object_t *)p_access,
-                                    strcmp( p_access->psz_access, "https" )
-                                       ? "_vlc-http._tcp" : "_vlc-https._tcp",
-                                             psz_name, i_bind_port, psz_txt );
-        free( psz_uri );
-        free( psz_txt );
-
-        if( p_sys->p_bonjour == NULL )
-            msg_Err( p_access, "unable to start requested Bonjour announce" );
-    }
-    else
-        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 );
@@ -249,11 +225,6 @@ static void Close( vlc_object_t * p_this )
     sout_access_out_t       *p_access = (sout_access_out_t*)p_this;
     sout_access_out_sys_t   *p_sys = p_access->p_sys;
 
-#if 0 //def HAVE_AVAHI_CLIENT
-    if( p_sys->p_bonjour != NULL )
-        bonjour_stop_service( p_sys->p_bonjour );
-#endif
-
     httpd_StreamDelete( p_sys->p_httpd_stream );
     httpd_HostDelete( p_sys->p_httpd_host );