1 /*****************************************************************************
3 *****************************************************************************
4 * Copyright (C) 2001-2003 VideoLAN
5 * $Id: httpd.h,v 1.7 2003/07/11 09:50:10 gbazin Exp $
7 * Authors: Laurent Aimar <fenrir@via.ecp.fr>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
22 *****************************************************************************/
24 typedef struct httpd_host_t httpd_host_t;
26 typedef struct httpd_file_t httpd_file_t;
27 //typedef struct httpd_stream_t httpd_stream_t;
28 typedef httpd_file_t httpd_stream_t;
30 typedef struct httpd_file_callback_args_t httpd_file_callback_args_t;
31 typedef int (*httpd_file_callback)( httpd_file_callback_args_t *p_args,
32 uint8_t *p_request, int i_request, uint8_t **pp_data, int *pi_data );
34 typedef struct httpd_sys_t httpd_sys_t;
40 HTTPD_GET_CONNECTIONS,
41 HTTPD_GET_ACL, /* not implemented */
44 HTTPD_SET_ACL /* not implemented */
60 typedef struct httpd_t httpd_t;
69 httpd_host_t *(*pf_register_host) ( httpd_t *, char *, int );
70 void (*pf_unregister_host) ( httpd_t *, httpd_host_t * );
72 httpd_file_t *(*pf_register_file) ( httpd_t *,
73 char *psz_file, char *psz_mime,
74 char *psz_user, char *psz_password,
75 httpd_file_callback pf_get,
76 httpd_file_callback pf_post,
77 httpd_file_callback_args_t *p_args );
78 void (*pf_unregister_file) ( httpd_t *, httpd_file_t * );
80 httpd_stream_t *(*pf_register_stream) ( httpd_t *,
81 char *psz_file, char *psz_mime,
82 char *psz_user, char *psz_password );
83 int (*pf_send_stream) ( httpd_t *,
86 int (*pf_header_stream) ( httpd_t *,
89 void (*pf_unregister_stream) ( httpd_t *, httpd_stream_t * );
90 int (*pf_control) ( httpd_t *,
92 void *arg1, void *arg2 );
96 /*****************************************************************************
98 * Return the running httpd instance (if none and b_create then a new one is created)
100 *****************************************************************************/
102 static inline httpd_t* httpd_Find( vlc_object_t *p_this, vlc_bool_t b_create )
104 httpd_t *p_httpd = NULL;
107 var_Get( p_this->p_libvlc, "httpd", &lockval );
108 vlc_mutex_lock( lockval.p_address );
110 p_httpd = vlc_object_find( p_this, VLC_OBJECT_HTTPD, FIND_ANYWHERE );
111 if( !p_httpd && b_create)
113 msg_Info(p_this, "creating new http daemon" );
115 p_httpd = vlc_object_create( p_this, VLC_OBJECT_HTTPD );
118 msg_Err( p_this, "out of memory" );
119 vlc_mutex_unlock( lockval.p_address );
123 p_httpd->p_module = module_Need( p_httpd, "httpd", "" );
125 if( !p_httpd->p_module )
127 msg_Err( p_this, "no suitable httpd module" );
128 vlc_object_destroy( p_httpd );
129 vlc_mutex_unlock( lockval.p_address );
133 vlc_object_yield( p_httpd );
134 vlc_object_attach( p_httpd, p_this->p_vlc );
136 vlc_mutex_unlock( lockval.p_address );
141 static inline void httpd_Release( httpd_t *p_httpd )
143 vlc_object_release( p_httpd );
145 if( p_httpd->i_refcount <= 0 )
147 msg_Info( p_httpd, "destroying unused httpd" );
148 vlc_object_detach( p_httpd );
149 module_Unneed( p_httpd, p_httpd->p_module );
150 vlc_object_destroy( p_httpd );