]> git.sesse.net Git - vlc/commitdiff
Revert "Use separate HTTPd host per protocol"
authorPierre Ynard <linkfanel@yahoo.fr>
Mon, 24 Oct 2011 01:33:11 +0000 (03:33 +0200)
committerPierre Ynard <linkfanel@yahoo.fr>
Mon, 24 Oct 2011 01:33:11 +0000 (03:33 +0200)
This reverts commit f06b4d30510f4528dac682d9c02ab0238a0993ed.
This way provides more use-cases that are more useful.

Conflicts:

src/network/httpd.c

src/network/httpd.c

index 7c0819297f70e50105631d69acecc7f58fc6da3c..73ca028fef7419c657ed678809e5b8db0bba20e1 100644 (file)
@@ -79,6 +79,7 @@ struct httpd_host_t
     /* address/port and socket for listening at connections */
     int         *fds;
     unsigned     nfd;
+    unsigned     port;
 
     vlc_thread_t thread;
     vlc_mutex_t lock;
@@ -951,21 +952,13 @@ void httpd_StreamDelete( httpd_stream_t *stream )
  * Low level
  *****************************************************************************/
 static void* httpd_HostThread( void * );
-static httpd_host_t *httpd_HostCreate( vlc_object_t *, httpd_host_t **,
-                                       const char *, const char *,
-                                       vlc_tls_creds_t * );
-
-static struct httpd_t
-{
-    vlc_mutex_t  mutex;
-    httpd_host_t *http, *https, *rtsp;
-} httpd = { VLC_STATIC_MUTEX, NULL, NULL, NULL };
+static httpd_host_t *httpd_HostCreate( vlc_object_t *, const char *,
+                                       const char *, vlc_tls_creds_t * );
 
 /* create a new host */
 httpd_host_t *vlc_http_HostNew( vlc_object_t *p_this )
 {
-    return httpd_HostCreate( p_this, &httpd.http,
-                             "http-host", "http-port", NULL );
+    return httpd_HostCreate( p_this, "http-host", "http-port", NULL );
 }
 
 httpd_host_t *vlc_https_HostNew( vlc_object_t *obj )
@@ -1015,8 +1008,7 @@ httpd_host_t *vlc_https_HostNew( vlc_object_t *obj )
         free( crl );
     }
 
-    return httpd_HostCreate( obj, &httpd.https,
-                             "http-host", "https-port", tls );
+    return httpd_HostCreate( obj, "http-host", "https-port", tls );
 
 error:
     vlc_tls_ServerDelete( tls );
@@ -1025,25 +1017,38 @@ error:
 
 httpd_host_t *vlc_rtsp_HostNew( vlc_object_t *p_this )
 {
-    return httpd_HostCreate( p_this, &httpd.rtsp,
-                             "rtsp-host", "rtsp-port", NULL );
+    return httpd_HostCreate( p_this, "rtsp-host", "rtsp-port", NULL );
 }
 
+static struct httpd_t
+{
+    vlc_mutex_t  mutex;
+
+    httpd_host_t **host;
+    int          i_host;
+} httpd = { VLC_STATIC_MUTEX, NULL, 0 };
+
 static httpd_host_t *httpd_HostCreate( vlc_object_t *p_this,
-                                       httpd_host_t **hostp,
                                        const char *hostvar,
                                        const char *portvar,
                                        vlc_tls_creds_t *p_tls )
 {
     httpd_host_t *host;
+    unsigned port = var_InheritInteger( p_this, portvar );
 
     /* to be sure to avoid multiple creation */
     vlc_mutex_lock( &httpd.mutex );
 
     /* verify if it already exist */
-    host = *hostp;
-    if( host != NULL )
+    for( int i = 0; i < httpd.i_host; i++ )
     {
+        host = httpd.host[i];
+
+        /* cannot mix TLS and non-TLS hosts */
+        if( host->port != port
+         || (host->p_tls != NULL) != (p_tls != NULL) )
+            continue;
+
         /* Increase existing matching host reference count.
          * The reference count is written under both the global httpd and the
          * host lock. It is read with either or both locks held. The global
@@ -1058,6 +1063,8 @@ static httpd_host_t *httpd_HostCreate( vlc_object_t *p_this,
         return host;
     }
 
+    host = NULL;
+
     /* create the new host */
     host = (httpd_host_t *)vlc_custom_create( p_this, sizeof (*host),
                                               "http host" );
@@ -1069,7 +1076,6 @@ static httpd_host_t *httpd_HostCreate( vlc_object_t *p_this,
     host->i_ref = 1;
 
     char *hostname = var_InheritString( p_this, hostvar );
-    unsigned port = var_InheritInteger( p_this, portvar );
     host->fds = net_ListenTCP( p_this, hostname, port );
     free( hostname );
     if( host->fds == NULL )
@@ -1085,6 +1091,7 @@ static httpd_host_t *httpd_HostCreate( vlc_object_t *p_this,
         goto error;
     }
 
+    host->port     = port;
     host->i_url    = 0;
     host->url      = NULL;
     host->i_client = 0;
@@ -1099,7 +1106,8 @@ static httpd_host_t *httpd_HostCreate( vlc_object_t *p_this,
         goto error;
     }
 
-    *hostp = host;
+    /* now add it to httpd */
+    TAB_APPEND( httpd.i_host, httpd.host, host );
     vlc_mutex_unlock( &httpd.mutex );
 
     return host;
@@ -1144,6 +1152,7 @@ void httpd_HostDelete( httpd_host_t *host )
         msg_Dbg( host, "httpd_HostDelete: host still in use" );
         return;
     }
+    TAB_REMOVE( httpd.i_host, httpd.host, host );
 
     vlc_object_kill( host );
     vlc_join( host->thread, NULL );
@@ -1172,14 +1181,6 @@ void httpd_HostDelete( httpd_host_t *host )
     vlc_cond_destroy( &host->wait );
     vlc_mutex_destroy( &host->lock );
     vlc_object_release( host );
-    if( host == httpd.http )
-        httpd.http = NULL;
-    else if( host == httpd.https )
-        httpd.https = NULL;
-    else if( host == httpd.rtsp )
-        httpd.rtsp = NULL;
-    else
-        assert(0);
     vlc_mutex_unlock( &httpd.mutex );
 }