cfgfile.h 3.99 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
/* 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).
 */

Karl Heyes's avatar
Karl Heyes committed
13 14
#ifndef __CFGFILE_H__
#define __CFGFILE_H__
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

#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;

Michael Smith's avatar
Michael Smith committed
35 36 37 38 39 40
typedef struct _config_options {
    char *name;
    char *value;
    struct _config_options *next;
} config_options_t;

41 42 43 44 45 46 47 48 49 50
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. */
    int max_listeners; /* Max listeners for this mountpoint only. -1 to not 
                          limit here (i.e. only use the global limit) */
Michael Smith's avatar
Michael Smith committed
51 52 53 54 55 56
    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) */
57 58
    unsigned queue_size_limit;
    unsigned source_timeout;  /* source timeout in seconds */
Michael Smith's avatar
Michael Smith committed
59 60 61

    char *auth_type; /* Authentication type */
    config_options_t *auth_options; /* Options for this type */
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
    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;
} listener_t;

typedef struct ice_config_tag
{
    char *config_filename;

    char *location;
    char *admin;

    int client_limit;
    int source_limit;
87
    unsigned queue_size_limit;
88 89 90 91 92 93 94 95 96 97
    int threadpool_size;
    int client_timeout;
    int header_timeout;
    int source_timeout;
    int ice_login;
    int fileserve;

    char *source_password;
    char *admin_username;
    char *admin_password;
98 99
    char *relay_username;
    char *relay_password;
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119

    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;
    char *master_password;

    relay_server *relay;

    mount_proxy *mounts;

    char *base_dir;
    char *log_dir;
120
    char *pidfile;
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
    char *webroot_dir;
    char *adminroot_dir;
    aliases *aliases;

    char *access_log;
    char *error_log;
    int loglevel;

    int chroot;
    int chuid;
    char *user;
    char *group;
    char *yp_url[MAX_YP_DIRECTORIES];
    int    yp_url_timeout[MAX_YP_DIRECTORIES];
    int num_yp_directories;
136
    int burst_on_connect;
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
} ice_config_t;

typedef struct {
    mutex_t config_lock;
    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);

int config_rehash(void);

ice_config_locks *config_locks(void);

ice_config_t *config_get_config(void);
void config_release_config(void);

/* To be used ONLY in one-time startup code */
ice_config_t *config_get_config_unlocked(void);

Karl Heyes's avatar
Karl Heyes committed
164
#endif  /* __CFGFILE_H__ */
165 166 167