* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include <vlc/vlc.h>
+#include <vlc_httpd.h>
#ifdef ENABLE_HTTPD
#include <assert.h>
-#include <vlc_httpd.h>
#include <vlc_network.h>
#include <vlc_tls.h>
#include <vlc_acl.h>
{ ".jpg", "image/jpeg" },
{ ".jpeg", "image/jpeg" },
{ ".png", "image/png" },
- { ".mpjpeg","multipart/x-mixed-replace; boundary=This Random String" },
+ /* same as modules/mux/mpjpeg.c here: */
+ { ".mpjpeg","multipart/x-mixed-replace; boundary=7b3cc56e5f51db803f790dad720ed50a" },
/* media mime */
{ ".avi", "video/avi" },
{ 452, "Conference not found" },
{ 453, "Not enough bandwidth" },*/
{ 454, "Session not found" },
- /*{ 455, "Method not valid in this State" },
+ /*{ 455, "Method not valid in this State" },*/
{ 456, "Header field not valid for resource" },
- { 457, "Invalid range" },
+ /*{ 457, "Invalid range" },
{ 458, "Read-only parameter" },*/
{ 459, "Aggregate operation not allowed" },
{ 460, "Non-aggregate operation not allowed" },
psz_connection = httpd_MsgGet( &cl->query, "Connection" );
if( psz_connection != NULL )
{
- httpd_MsgAdd( answer, "Connection", psz_connection );
+ httpd_MsgAdd( answer, "Connection", "%s", psz_connection );
}
httpd_MsgAdd( answer, "Content-Length", "%d", answer->i_body );
return file;
}
-void httpd_FileDelete( httpd_file_t *file )
+httpd_file_sys_t *httpd_FileDelete( httpd_file_t *file )
{
+ httpd_file_sys_t *p_sys = file->p_sys;
+
httpd_UrlDelete( file->url );
free( file->psz_url );
free( file->psz_mime );
free( file );
+
+ return p_sys;
}
/*****************************************************************************
return handler;
}
-void httpd_HandlerDelete( httpd_handler_t *handler )
+httpd_handler_sys_t *httpd_HandlerDelete( httpd_handler_t *handler )
{
+ httpd_handler_sys_t *p_sys = handler->p_sys;
httpd_UrlDelete( handler->url );
free( handler );
+ return p_sys;
}
/*****************************************************************************
int httpd_StreamHeader( httpd_stream_t *stream, uint8_t *p_data, int i_data )
{
vlc_mutex_lock( &stream->lock );
- if( stream->p_header )
- {
- free( stream->p_header );
- stream->p_header = NULL;
- }
+ free( stream->p_header );
+ stream->p_header = NULL;
+
stream->i_header = i_data;
if( i_data > 0 )
{
{
httpd_UrlDelete( stream->url );
vlc_mutex_destroy( &stream->lock );
- if( stream->psz_mime ) free( stream->psz_mime );
- if( stream->p_header ) free( stream->p_header );
- if( stream->p_buffer ) free( stream->p_buffer );
+ free( stream->psz_mime );
+ free( stream->p_header );
+ free( stream->p_buffer );
free( stream );
}
httpd = (httpd_t *)vlc_custom_create( p_this, sizeof (*httpd),
VLC_OBJECT_HTTPD,
psz_object_type );
- if (httpd == NULL)
+ if( httpd == NULL )
{
vlc_mutex_unlock( lockval.p_address );
free( psz_host );
goto error;
vlc_object_lock( host );
- if( vlc_object_waitpipe( host ) == -1 )
+ if( vlc_object_waitpipe( VLC_OBJECT( host ) ) == -1 )
{
+ msg_Err( host, "signaling pipe error: %m" );
vlc_object_unlock( host );
goto error;
}
{
vlc_object_release( httpd );
vlc_object_detach( httpd );
- vlc_object_destroy( httpd );
+ vlc_object_release( httpd );
}
vlc_mutex_unlock( lockval.p_address );
{
net_ListenClose( host->fds );
vlc_mutex_destroy( &host->lock );
- vlc_object_destroy( host );
+ vlc_object_release( host );
}
if( p_tls != NULL )
free( host->psz_hostname );
vlc_mutex_destroy( &host->lock );
- vlc_object_destroy( host );
+ vlc_object_release( host );
vlc_object_release( httpd );
if( httpd->i_host <= 0 )
{
msg_Dbg( httpd, "no host left, stopping httpd" );
vlc_object_detach( httpd );
- vlc_object_destroy( httpd );
+ vlc_object_release( httpd );
}
vlc_mutex_unlock( lockval.p_address );
}
{
int i;
- if( msg->psz_url )
- {
- free( msg->psz_url );
- }
- if( msg->psz_args )
- {
- free( msg->psz_args );
- }
+ free( msg->psz_url );
+ free( msg->psz_args );
for( i = 0; i < msg->i_name; i++ )
{
free( msg->name[i] );
free( msg->value[i] );
}
- if( msg->name )
- {
- free( msg->name );
- }
- if( msg->value )
- {
- free( msg->value );
- }
- if( msg->p_body )
- {
- free( msg->p_body );
- }
+ free( msg->name );
+ free( msg->value );
+ free( msg->p_body );
httpd_MsgInit( msg );
}
httpd_MsgClean( &cl->answer );
httpd_MsgClean( &cl->query );
- if( cl->p_buffer )
- {
- free( cl->p_buffer );
- cl->p_buffer = NULL;
- }
+ free( cl->p_buffer );
+ cl->p_buffer = NULL;
}
static httpd_client_t *httpd_ClientNew( int fd, tls_session_t *p_tls, mtime_t now )
counter_t *p_total_counter = stats_CounterCreate( host, VLC_VAR_INTEGER, STATS_COUNTER );
counter_t *p_active_counter = stats_CounterCreate( host, VLC_VAR_INTEGER, STATS_COUNTER );
int evfd;
- vlc_bool_t b_die = VLC_FALSE;
+ vlc_bool_t b_die;
vlc_object_lock( host );
- evfd = vlc_object_waitpipe( host );
+ evfd = vlc_object_waitpipe( VLC_OBJECT( host ) );
+ b_die = !vlc_object_alive( host );
vlc_object_unlock( host );
while( !b_die )
{
httpd_client_t *cl;
int i_state = -1;
+ int fd = ufd[nfd].fd;
- assert (ufd[nfd].fd == host->fds[nfd]);
+ assert (fd == host->fds[nfd]);
if( ufd[nfd].revents == 0 )
continue;
/* */
- int kludge[] = { ufd[nfd].fd, -1 };
- int fd = net_Accept( host, kludge, 0 );
- if( fd < 0 )
+ fd = accept (fd, NULL, NULL);
+ if (fd == -1)
continue;
+ net_SetupSocket (fd);
if( p_tls != NULL )
{
switch( tls_ServerSessionHandshake( p_tls, fd ) )
#else /* ENABLE_HTTPD */
/* We just define an empty wrapper */
-httpd_host_t *httpd_TLSHostNew( vlc_object_t *a, char *b, int c,
- tls_server_t *d )
+httpd_host_t *httpd_TLSHostNew( vlc_object_t *a, const char *b,
+ int c,
+ const char *e, const char *f,
+ const char *g, const char* h)
{
msg_Err( a, "HTTP daemon support is disabled" );
return NULL;
}
-httpd_host_t *httpd_HostNew( vlc_object_t *a, char *b, int c )
+httpd_host_t *httpd_HostNew( vlc_object_t *a, const char *b,
+ int c )
{
msg_Err( a, "HTTP daemon support is disabled" );
return NULL;
{
}
-httpd_url_t *httpd_UrlNew( httpd_host_t *host, char *psz_url,
- char *psz_user, char *psz_password,
+httpd_url_t *httpd_UrlNew( httpd_host_t *host, const char *psz_url,
+ const char *psz_user, const char *psz_password,
const vlc_acl_t *p_acl )
{
return NULL;
}
-httpd_url_t *httpd_UrlNewUnique( httpd_host_t *host, char *psz_url,
- char *psz_user, char *psz_password,
+httpd_url_t *httpd_UrlNewUnique( httpd_host_t *host, const char *psz_url,
+ const char *psz_user, const char *psz_password,
const vlc_acl_t *p_acl )
{
return NULL;
{
}
-char* httpd_ClientIP( httpd_client_t *cl, char *psz_ip )
+char* httpd_ClientIP( const httpd_client_t *cl, char *psz_ip )
{
return NULL;
}
-char* httpd_ServerIP( httpd_client_t *cl, char *psz_ip )
+char* httpd_ServerIP( const httpd_client_t *cl, char *psz_ip )
{
return NULL;
}
{
}
-void httpd_FileDelete( httpd_file_t *a )
+httpd_file_sys_t *httpd_FileDelete( httpd_file_t *file )
{
+ return NULL;
}
-httpd_file_t *httpd_FileNew( httpd_host_t *a, char *b, char *c, char *d,
- char *e, httpd_file_callback_t f,
- httpd_file_sys_t *g )
+httpd_file_t *httpd_FileNew( httpd_host_t *host,
+ const char *psz_url, const char *psz_mime,
+ const char *psz_user, const char *psz_password,
+ const vlc_acl_t *p_acl, httpd_file_callback_t pf_fill,
+ httpd_file_sys_t *p_sys )
{
return NULL;
}
return NULL;
}
-void httpd_HandlerDelete( httpd_handler_t *handler )
+httpd_handler_sys_t *httpd_HandlerDelete( httpd_handler_t *handler )
{
+ return NULL;
}
void httpd_RedirectDelete( httpd_redirect_t *a )
{
}
-httpd_redirect_t *httpd_RedirectNew( httpd_host_t *a,
- char *b, char *c )
+httpd_redirect_t *httpd_RedirectNew( httpd_host_t *host, const char *psz_url_dst,
+ const char *psz_url_src )
{
return NULL;
}
return 0;
}
-httpd_stream_t *httpd_StreamNew( httpd_host_t *a, char *b, char *c,
- char *d, char *e )
+httpd_stream_t *httpd_StreamNew( httpd_host_t *host,
+ const char *psz_url, const char *psz_mime,
+ const char *psz_user, const char *psz_password,
+ const vlc_acl_t *p_acl )
{
return NULL;
}
{
}
-const char *httpd_MsgGet ( httpd_message_t *a, const char *b )
+const char *httpd_MsgGet( const httpd_message_t *msg, const char *name )
{
return "";
}