460b9539 |
1 | /* |
2 | * This file is part of DisOrder. |
3 | * Copyright (C) 2004, 2005, 2006 Richard Kettlewell |
4 | * |
5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by |
7 | * the Free Software Foundation; either version 2 of the License, or |
8 | * (at your option) any later version. |
9 | * |
10 | * This program is distributed in the hope that it will be useful, but |
11 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | * General Public License for more details. |
14 | * |
15 | * You should have received a copy of the GNU General Public License |
16 | * along with this program; if not, write to the Free Software |
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
18 | * USA |
19 | */ |
20 | |
21 | #ifndef CONFIGURATION_H |
22 | #define CONFIGURATION_H |
23 | |
9d5da576 |
24 | #include <ao/ao.h> |
25 | |
460b9539 |
26 | struct real_pcre; |
27 | |
28 | /* Configuration is kept in a @struct config@; the live configuration |
29 | * is always pointed to by @config@. Values in @config@ are UTF-8 encoded. |
30 | */ |
31 | |
32 | struct stringlist { |
33 | int n; |
34 | char **s; |
35 | }; |
36 | |
37 | struct stringlistlist { |
38 | int n; |
39 | struct stringlist *s; |
40 | }; |
41 | |
42 | struct collection { |
43 | char *module; |
44 | char *encoding; |
45 | char *root; |
46 | }; |
47 | |
48 | struct collectionlist { |
49 | int n; |
50 | struct collection *s; |
51 | }; |
52 | |
53 | struct namepart { |
54 | char *part; /* part */ |
55 | struct real_pcre *re; /* regexp */ |
56 | char *replace; /* replacement string */ |
57 | char *context; /* context glob */ |
58 | unsigned reflags; /* regexp flags */ |
59 | }; |
60 | |
61 | struct namepartlist { |
62 | int n; |
63 | struct namepart *s; |
64 | }; |
65 | |
66 | struct transform { |
67 | char *type; /* track or dir */ |
68 | char *context; /* sort or choose */ |
69 | char *replace; /* substitution string */ |
70 | struct real_pcre *re; /* compiled re */ |
71 | unsigned flags; /* regexp flags */ |
72 | }; |
73 | |
74 | struct transformlist { |
75 | int n; |
76 | struct transform *t; |
77 | }; |
78 | |
79 | struct config { |
80 | /* server config */ |
81 | struct stringlistlist player; /* players */ |
82 | struct stringlistlist allow; /* allowed users */ |
83 | struct stringlist scratch; /* scratch tracks */ |
84 | long gap; /* gap between tracks */ |
85 | long history; /* length of history */ |
86 | struct stringlist trust; /* trusted users */ |
87 | const char *user; /* user to run as */ |
88 | long nice_rescan; /* rescan subprocess niceness */ |
89 | struct stringlist plugins; /* plugin path */ |
90 | struct stringlist stopword; /* stopwords for track search */ |
91 | struct collectionlist collection; /* track collections */ |
92 | long checkpoint_kbyte; |
93 | long checkpoint_min; |
94 | char *mixer; /* mixer device file */ |
95 | char *channel; /* mixer channel */ |
96 | long prefsync; /* preflog sync intreval */ |
97 | struct stringlist listen; /* secondary listen address */ |
98 | const char *alias; /* alias format */ |
99 | int lock; /* server takes a lock */ |
100 | long nice_server; /* nice value for server */ |
101 | long nice_speaker; /* nice value for speaker */ |
9d5da576 |
102 | const char *speaker_command; /* command for speaker to run */ |
103 | ao_sample_format sample_format; /* sample format to enforce */ |
5330d674 |
104 | long sox_generation; /* sox syntax generation */ |
460b9539 |
105 | /* shared client/server config */ |
106 | const char *home; /* home directory for state files */ |
107 | /* client config */ |
108 | const char *username, *password; /* our own username and password */ |
109 | struct stringlist connect; /* connect address */ |
110 | /* web config */ |
111 | struct stringlist templates; /* template path */ |
112 | const char *url; /* canonical URL */ |
113 | long refresh; /* maximum refresh period */ |
114 | unsigned restrictions; /* restrictions */ |
459d4402 |
115 | long queue_pad; /* how far to pad queue with |
116 | * random tracks */ |
460b9539 |
117 | #define RESTRICT_SCRATCH 1 |
118 | #define RESTRICT_REMOVE 2 |
119 | #define RESTRICT_MOVE 4 |
120 | struct namepartlist namepart; /* transformations */ |
121 | int signal; /* termination signal */ |
122 | const char *device; /* ALSA output device */ |
123 | struct transformlist transform; /* path name transformations */ |
124 | |
125 | /* derived values: */ |
126 | int nparts; /* number of distinct name parts */ |
127 | char **parts; /* name part list */ |
128 | }; |
129 | |
130 | extern struct config *config; |
131 | /* the current configuration */ |
132 | |
133 | int config_read(void); |
134 | /* re-read config, return 0 on success or non-0 on error. |
135 | * Only updates @config@ if the new configuration is valid. */ |
136 | |
137 | char *config_get_file(const char *name); |
138 | /* get a filename within the home directory */ |
139 | |
140 | struct passwd; |
141 | |
142 | char *config_userconf(const char *home, const struct passwd *pw); |
143 | /* get the user's own private conffile, assuming their home dir is |
144 | * @home@ if not null and using @pw@ otherwise */ |
145 | |
146 | char *config_usersysconf(const struct passwd *pw ); |
147 | /* get the user's conffile in /etc */ |
148 | |
149 | char *config_private(void); |
150 | /* get the private config file */ |
151 | |
152 | extern char *configfile; |
153 | |
154 | #endif /* CONFIGURATION_H */ |
155 | |
156 | /* |
157 | Local Variables: |
158 | c-basic-offset:2 |
159 | comment-column:40 |
160 | End: |
161 | */ |