cfgfile.h 6.6 KB
Newer Older
1
2
3
4
5
/* Icecast
 *
 * This program is distributed under the GNU General Public License, version 2.
 * A copy of this license is included with this source.
 *
6
 * Copyright 2000-2004, Jack Moffitt <jack@xiph.org>, 
7
8
9
10
 *                      Michael Smith <msmith@xiph.org>,
 *                      oddsock <oddsock@xiph.org>,
 *                      Karl Heyes <karl@xiph.org>
 *                      and others (see AUTHORS for details).
11
 * Copyright 2011,      Dave 'justdave' Miller <justdave@mozilla.com>.
12
 * Copyright 2011-2014, Philipp "ph3-der-loewe" Schafft <lion@lion.leolix.org>,
13
14
 */

Karl Heyes's avatar
Karl Heyes committed
15
16
#ifndef __CFGFILE_H__
#define __CFGFILE_H__
17

18
19
#define CONFIG_EINSANE  -1
#define CONFIG_ENOROOT  -2
20
#define CONFIG_EBADROOT -3
21
#define CONFIG_EPARSE   -4
22
23
24

#define MAX_YP_DIRECTORIES 25

25
struct _mount_proxy;
26

27
#include <libxml/tree.h>
Marvin Scholz's avatar
Marvin Scholz committed
28
29
#include "common/thread/thread.h"
#include "common/avl/avl.h"
30
#include "global.h"
31
#include "connection.h"
32

33
34
#define XMLSTR(str) ((xmlChar *)(str)) 

35
36
37
38
39
40
typedef enum _operation_mode {
 OMODE_DEFAULT = 0,
 OMODE_NORMAL,
 OMODE_LEGACY
} operation_mode;

41
typedef enum _http_header_type {
42
 /* static: headers are passed as is to the client. */
43
44
45
46
 HTTP_HEADER_TYPE_STATIC
} http_header_type;

typedef struct ice_config_http_header_tag {
47
    /* type of this header. See http_header_type */
48
    http_header_type type;
49
50

    /* name and value of the header */
51
52
    char *name;
    char *value;
53
54
55
56
57

    /* filters */
    int status;

    /* link to the next list element */
58
59
60
    struct ice_config_http_header_tag *next;
} ice_config_http_header_t;

61
typedef struct ice_config_dir_tag {
62
63
64
65
66
    char *host;
    int touch_interval;
    struct ice_config_dir_tag *next;
} ice_config_dir_t;

Michael Smith's avatar
Michael Smith committed
67
typedef struct _config_options {
68
    char *type;
Michael Smith's avatar
Michael Smith committed
69
70
71
72
73
    char *name;
    char *value;
    struct _config_options *next;
} config_options_t;

74
75
76
77
78
typedef enum _mount_type {
 MOUNT_TYPE_NORMAL,
 MOUNT_TYPE_DEFAULT
} mount_type;

79
typedef struct _mount_proxy {
Marvin Scholz's avatar
Marvin Scholz committed
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
    /* The mountpoint this proxy is used for */
    char *mountname;
    /* The type of the mount point */
    mount_type mounttype;
    /* Filename to dump this stream to (will be appended).
     * NULL to not dump.
     */
    char *dumpfile;
    /* Send contents of file to client before the stream */
    char *intro_filename;
    /* Switch new listener to fallback source when max listeners reached */
    int fallback_when_full;
    /* Max listeners for this mountpoint only.
     * -1 to not limit here (i.e. only use the global limit)
     */
    int max_listeners;
    /* Fallback mountname */
    char *fallback_mount;
    /* When this source arrives, do we steal back
     * clients from the fallback?
     */
    int fallback_override;
    /* Do we permit direct requests of this mountpoint?
     * (or only indirect, through fallbacks)
     */
    int no_mount;
    /* amount to send to a new client if possible, -1 take
     * from global setting
     */
    int burst_size;
Karl Heyes's avatar
Karl Heyes committed
110
    unsigned int queue_size_limit;
Marvin Scholz's avatar
Marvin Scholz committed
111
112
113
114
115
116
117
118
119
120
    /* Do we list this on the xsl pages */
    int hidden;
    /* source timeout in seconds */
    unsigned int source_timeout;
    /* character set if not utf8 */
    char *charset;
    /* outgoing per-stream metadata interval */
    int mp3_meta_interval;
    /* additional HTTP headers */
    ice_config_http_header_t *http_headers;
121

122
123
    struct event_registration_tag *event;

124
    char *cluster_password;
Philipp Schafft's avatar
Philipp Schafft committed
125
    struct auth_stack_tag *authstack;
126
    unsigned int max_listener_duration;
127
128
129
130
131
132
133
134
135
136

    char *stream_name;
    char *stream_description;
    char *stream_url;
    char *stream_genre;
    char *bitrate;
    char *type;
    char *subtype;
    int yp_public;

137
138
139
140
141
142
143
144
    struct _mount_proxy *next;
} mount_proxy;

typedef struct _aliases {
    char *source;
    char *destination;
    int port;
    char *bind_address;
145
    char *vhost;
146
    operation_mode omode;
147
    struct _aliases *next;
Philipp Schafft's avatar
Philipp Schafft committed
148
} aliases;
149

150
151
typedef struct _listener_t {
    struct _listener_t *next;
152
    int port;
153
    int so_sndbuf;
154
    char *bind_address;
155
    int shoutcast_compat;
156
    char *shoutcast_mount;
157
    int ssl;
158
159
} listener_t;

160
typedef struct ice_config_tag {
161
162
163
164
165
166
167
    char *config_filename;

    char *location;
    char *admin;

    int client_limit;
    int source_limit;
Karl Heyes's avatar
Karl Heyes committed
168
169
    unsigned int queue_size_limit;
    unsigned int burst_size;
170
171
172
173
    int client_timeout;
    int header_timeout;
    int source_timeout;
    int fileserve;
174
    int on_demand; /* global setting for all relays */
175

176
    char *shoutcast_mount;
Philipp Schafft's avatar
Philipp Schafft committed
177
    struct auth_stack_tag *authstack;
178

179
180
    struct event_registration_tag *event;

181
182
183
184
    int touch_interval;
    ice_config_dir_t *dir_list;

    char *hostname;
185
    int sane_hostname;
186
    int port;
187
    char *mimetypes_fn;
188

189
190
    listener_t *listen_sock;
    unsigned int listen_sock_count;
191
192
193
194

    char *master_server;
    int master_server_port;
    int master_update_interval;
195
    char *master_username;
196
197
    char *master_password;

198
199
    ice_config_http_header_t *http_headers;

200
201
202
    /* is TLS supported by the server? */
    int tls_ok;

203
204
205
206
    relay_server *relay;

    mount_proxy *mounts;

207
    char *server_id;
208
209
    char *base_dir;
    char *log_dir;
210
    char *pidfile;
211
    char *null_device;
212
213
    char *banfile;
    char *allowfile;
214
    char *cert_file;
215
    char *cipher_list;
216
217
218
219
220
221
    char *webroot_dir;
    char *adminroot_dir;
    aliases *aliases;

    char *access_log;
    char *error_log;
222
    char *playlist_log;
223
    int loglevel;
224
225
    int logsize;
    int logarchive;
226
227
228
229
230
231

    int chroot;
    int chuid;
    char *user;
    char *group;
    char *yp_url[MAX_YP_DIRECTORIES];
232
233
    int yp_url_timeout[MAX_YP_DIRECTORIES];
    int yp_touch_interval[MAX_YP_DIRECTORIES];
234
235
236
237
    int num_yp_directories;
} ice_config_t;

typedef struct {
238
    rwlock_t config_lock;
239
240
241
242
243
244
    mutex_t relay_lock;
} ice_config_locks;

void config_initialize(void);
void config_shutdown(void);

245
246
operation_mode config_str_to_omode(const char *str);

247
void config_reread_config(void);
248
249
250
251
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);
252
listener_t *config_clear_listener (listener_t *listener);
253
void config_clear(ice_config_t *config);
Marvin Scholz's avatar
Marvin Scholz committed
254
255
mount_proxy *config_find_mount(ice_config_t *config, const char *mount, mount_type type);
listener_t *config_get_listen_sock(ice_config_t *config, connection_t *con);
256

257
258
259
config_options_t *config_parse_options(xmlNodePtr node);
void config_clear_options(config_options_t *options);

260
261
262
263
264
int config_rehash(void);

ice_config_locks *config_locks(void);

ice_config_t *config_get_config(void);
265
ice_config_t *config_grab_config(void);
266
267
268
269
270
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
271
#endif  /* __CFGFILE_H__ */