2004-01-28 20:02:12 -05:00
|
|
|
/* Icecast
|
|
|
|
*
|
|
|
|
* This program is distributed under the GNU General Public License, version 2.
|
|
|
|
* A copy of this license is included with this source.
|
|
|
|
*
|
|
|
|
* Copyright 2000-2004, Jack Moffitt <jack@xiph.org,
|
|
|
|
* Michael Smith <msmith@xiph.org>,
|
|
|
|
* oddsock <oddsock@xiph.org>,
|
|
|
|
* Karl Heyes <karl@xiph.org>
|
|
|
|
* and others (see AUTHORS for details).
|
|
|
|
*/
|
|
|
|
|
2003-07-22 20:27:10 -04:00
|
|
|
#ifndef __CFGFILE_H__
|
|
|
|
#define __CFGFILE_H__
|
2003-07-20 21:39:39 -04:00
|
|
|
|
|
|
|
#define CONFIG_EINSANE -1
|
|
|
|
#define CONFIG_ENOROOT -2
|
|
|
|
#define CONFIG_EBADROOT -3
|
|
|
|
#define CONFIG_EPARSE -4
|
|
|
|
|
|
|
|
#define MAX_YP_DIRECTORIES 25
|
|
|
|
|
|
|
|
|
|
|
|
#include "thread/thread.h"
|
|
|
|
#include "avl/avl.h"
|
|
|
|
#include "global.h"
|
|
|
|
|
|
|
|
typedef struct ice_config_dir_tag
|
|
|
|
{
|
|
|
|
char *host;
|
|
|
|
int touch_interval;
|
|
|
|
struct ice_config_dir_tag *next;
|
|
|
|
} ice_config_dir_t;
|
|
|
|
|
2004-01-14 20:01:09 -05:00
|
|
|
typedef struct _config_options {
|
|
|
|
char *name;
|
|
|
|
char *value;
|
|
|
|
struct _config_options *next;
|
|
|
|
} config_options_t;
|
|
|
|
|
2003-07-20 21:39:39 -04:00
|
|
|
typedef struct _mount_proxy {
|
|
|
|
char *mountname; /* The mountpoint this proxy is used for */
|
|
|
|
|
|
|
|
char *username; /* Username and password for this mountpoint. If unset, */
|
|
|
|
char *password; /* falls back to global source password */
|
|
|
|
|
|
|
|
char *dumpfile; /* Filename to dump this stream to (will be appended). NULL
|
|
|
|
to not dump. */
|
2005-06-03 11:35:52 -04:00
|
|
|
char *intro_filename; /* Send contents of file to client before the stream */
|
2003-07-20 21:39:39 -04:00
|
|
|
int max_listeners; /* Max listeners for this mountpoint only. -1 to not
|
|
|
|
limit here (i.e. only use the global limit) */
|
2004-01-14 20:01:09 -05:00
|
|
|
char *fallback_mount; /* Fallback mountname */
|
|
|
|
|
|
|
|
int fallback_override; /* When this source arrives, do we steal back
|
|
|
|
clients from the fallback? */
|
|
|
|
int no_mount; /* Do we permit direct requests of this mountpoint? (or only
|
|
|
|
indirect, through fallbacks) */
|
2004-08-20 11:13:59 -04:00
|
|
|
int burst_size; /* amount to send to a new client if possible, -1 take
|
|
|
|
* from global setting */
|
|
|
|
unsigned int queue_size_limit;
|
2004-11-22 13:21:48 -05:00
|
|
|
int hidden; /* Do we list this on the xsl pages */
|
2004-08-20 11:13:59 -04:00
|
|
|
unsigned int source_timeout; /* source timeout in seconds */
|
2005-05-07 16:18:13 -04:00
|
|
|
int mp3_meta_interval; /* outgoing per-stream metadata interval */
|
2004-01-14 20:01:09 -05:00
|
|
|
|
|
|
|
char *auth_type; /* Authentication type */
|
2004-12-07 17:29:46 -05:00
|
|
|
char *cluster_password;
|
2004-01-14 20:01:09 -05:00
|
|
|
config_options_t *auth_options; /* Options for this type */
|
2005-06-09 20:37:09 -04:00
|
|
|
char *on_connect;
|
|
|
|
char *on_disconnect;
|
2005-05-30 10:50:57 -04:00
|
|
|
|
|
|
|
char *stream_name;
|
|
|
|
char *stream_description;
|
|
|
|
char *stream_url;
|
|
|
|
char *stream_genre;
|
|
|
|
char *bitrate;
|
|
|
|
char *type;
|
|
|
|
char *subtype;
|
|
|
|
int yp_public;
|
|
|
|
|
2003-07-20 21:39:39 -04:00
|
|
|
struct _mount_proxy *next;
|
|
|
|
} mount_proxy;
|
|
|
|
|
|
|
|
typedef struct _aliases {
|
|
|
|
char *source;
|
|
|
|
char *destination;
|
|
|
|
int port;
|
|
|
|
char *bind_address;
|
|
|
|
struct _aliases *next;
|
|
|
|
}aliases;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
int port;
|
|
|
|
char *bind_address;
|
2004-11-11 10:47:33 -05:00
|
|
|
int shoutcast_compat;
|
2003-07-20 21:39:39 -04:00
|
|
|
} listener_t;
|
|
|
|
|
|
|
|
typedef struct ice_config_tag
|
|
|
|
{
|
|
|
|
char *config_filename;
|
|
|
|
|
|
|
|
char *location;
|
|
|
|
char *admin;
|
|
|
|
|
|
|
|
int client_limit;
|
|
|
|
int source_limit;
|
2004-08-20 11:13:59 -04:00
|
|
|
unsigned int queue_size_limit;
|
2003-07-20 21:39:39 -04:00
|
|
|
int threadpool_size;
|
2004-08-20 11:13:59 -04:00
|
|
|
unsigned int burst_size;
|
2003-07-20 21:39:39 -04:00
|
|
|
int client_timeout;
|
|
|
|
int header_timeout;
|
|
|
|
int source_timeout;
|
|
|
|
int ice_login;
|
|
|
|
int fileserve;
|
2005-06-08 21:51:47 -04:00
|
|
|
int on_demand; /* global setting for all relays */
|
2003-07-20 21:39:39 -04:00
|
|
|
|
2004-11-17 11:02:04 -05:00
|
|
|
char *shoutcast_mount;
|
2003-07-20 21:39:39 -04:00
|
|
|
char *source_password;
|
|
|
|
char *admin_username;
|
|
|
|
char *admin_password;
|
2003-12-12 18:06:44 -05:00
|
|
|
char *relay_username;
|
|
|
|
char *relay_password;
|
2003-07-20 21:39:39 -04:00
|
|
|
|
|
|
|
int touch_interval;
|
|
|
|
ice_config_dir_t *dir_list;
|
|
|
|
|
|
|
|
char *hostname;
|
|
|
|
int port;
|
|
|
|
|
|
|
|
listener_t listeners[MAX_LISTEN_SOCKETS];
|
|
|
|
|
|
|
|
char *master_server;
|
|
|
|
int master_server_port;
|
|
|
|
int master_update_interval;
|
2005-05-12 20:35:08 -04:00
|
|
|
char *master_username;
|
2003-07-20 21:39:39 -04:00
|
|
|
char *master_password;
|
|
|
|
|
|
|
|
relay_server *relay;
|
|
|
|
|
|
|
|
mount_proxy *mounts;
|
|
|
|
|
|
|
|
char *base_dir;
|
|
|
|
char *log_dir;
|
2003-12-01 18:30:13 -05:00
|
|
|
char *pidfile;
|
2003-07-20 21:39:39 -04:00
|
|
|
char *webroot_dir;
|
|
|
|
char *adminroot_dir;
|
|
|
|
aliases *aliases;
|
|
|
|
|
|
|
|
char *access_log;
|
|
|
|
char *error_log;
|
2004-11-15 23:04:02 -05:00
|
|
|
char *playlist_log;
|
2003-07-20 21:39:39 -04:00
|
|
|
int loglevel;
|
|
|
|
|
|
|
|
int chroot;
|
|
|
|
int chuid;
|
|
|
|
char *user;
|
|
|
|
char *group;
|
|
|
|
char *yp_url[MAX_YP_DIRECTORIES];
|
|
|
|
int yp_url_timeout[MAX_YP_DIRECTORIES];
|
2004-10-25 17:10:10 -04:00
|
|
|
int yp_touch_interval[MAX_YP_DIRECTORIES];
|
2003-07-20 21:39:39 -04:00
|
|
|
int num_yp_directories;
|
|
|
|
} ice_config_t;
|
|
|
|
|
|
|
|
typedef struct {
|
2005-04-20 18:34:54 -04:00
|
|
|
rwlock_t config_lock;
|
2003-07-20 21:39:39 -04:00
|
|
|
mutex_t relay_lock;
|
|
|
|
mutex_t mounts_lock;
|
|
|
|
} ice_config_locks;
|
|
|
|
|
|
|
|
void config_initialize(void);
|
|
|
|
void config_shutdown(void);
|
|
|
|
|
|
|
|
int config_parse_file(const char *filename, ice_config_t *configuration);
|
|
|
|
int config_initial_parse_file(const char *filename);
|
|
|
|
int config_parse_cmdline(int arg, char **argv);
|
|
|
|
void config_set_config(ice_config_t *config);
|
|
|
|
void config_clear(ice_config_t *config);
|
2005-05-08 07:54:46 -04:00
|
|
|
mount_proxy *config_find_mount (ice_config_t *config, const char *mount);
|
2003-07-20 21:39:39 -04:00
|
|
|
|
|
|
|
int config_rehash(void);
|
|
|
|
|
|
|
|
ice_config_locks *config_locks(void);
|
|
|
|
|
|
|
|
ice_config_t *config_get_config(void);
|
2005-04-20 18:34:54 -04:00
|
|
|
ice_config_t *config_grab_config(void);
|
2003-07-20 21:39:39 -04:00
|
|
|
void config_release_config(void);
|
|
|
|
|
|
|
|
/* To be used ONLY in one-time startup code */
|
|
|
|
ice_config_t *config_get_config_unlocked(void);
|
|
|
|
|
2003-07-22 20:27:10 -04:00
|
|
|
#endif /* __CFGFILE_H__ */
|
2003-07-20 21:39:39 -04:00
|
|
|
|
|
|
|
|
|
|
|
|