gengetopt improvements
[paraslash.git] / db.h
1 /*
2  * Copyright (C) 2005-2006 Andre Noll <maan@systemlinux.org>
3  *
4  *     This program is free software; you can redistribute it and/or modify
5  *     it under the terms of the GNU General Public License as published by
6  *     the Free Software Foundation; either version 2 of the License, or
7  *     (at your option) any later version.
8  *
9  *     This program is distributed in the hope that it will be useful,
10  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *     GNU General Public License for more details.
13  *
14  *     You should have received a copy of the GNU General Public License
15  *     along with this program; if not, write to the Free Software
16  *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
17  */
18
19 /** \file db.h data structures common to all audio file selectors */
20
21 #include <sys/select.h>
22
23
24 int find_audio_files(const char *dirname, int (*f)(const char *, const char *));
25
26 /**
27  * describes one supported audio file selector
28  *
29  * There is one such struct for each supported selector.  During the startup
30  * part of para_server the \a init() function of the activated selector gets
31  * called which fills in all other function pointers.
32
33  *
34  *
35  */
36 struct audio_file_selector {
37 /**
38  * name name of this selector
39  */
40 const char *name;
41 /**
42  * the init routine of the selector
43  *
44  * It should check its command line options and do all necessary initialization
45  * like connecting to a database server.
46  *
47  * A negative return value indicates an initialization error and means that
48  * this selector should be ignored for now (it may later be activated again via
49  * the chs command).
50  *
51  * If \a init() returns success (non-negative return value), it must have
52  * initialized in all non-optional function pointers of the given selector
53  * struct. Moreover, \a cmd_list must point to a NULL-terminated array which
54  * holds the list of all commands that are supported by this selector.
55  */
56 int (*init)(struct audio_file_selector *self);
57 /**
58  * list of commands supported by this selector
59  */
60 struct server_command *cmd_list;
61 /**
62  * pointer to function returning list of at most \a num audio files to be
63  * streamed next
64  *
65  * \a get_audio_file_list() must return a pointer to a array of at most \a num
66  * char* pointers (terminated by a NULL pointer), or NULL on errors.  Both the
67  * array and its contents must be dynamically allocated and are freed by the
68  * caller.
69  *
70 */
71 char **(*get_audio_file_list)(unsigned int num);
72 /**
73  *
74  * the update hook
75  *
76  * The \a update_audio_file pointer is optional and need not be supplied. In this
77  * case it is not neccessary to init this pointer from within init(). If
78  * \a update_audio_file is non-NULL, the function it points to gets called
79  * whenever a new audio file was successfully loaded and is going to be
80  * streamed by any of paraslash's senders. The full path of the audio file is
81  * passed \a update_audio_file().
82  *
83  */
84 void (*update_audio_file)(char *audio_file);
85 /**
86  *
87  * shutdown this selector and free all resources
88  *
89  * This gets called whenever the audio file selector changes. The reason for
90  * this change might be that some user sent the chs command, that para_server
91  * receives the HUP signal, or that para_server shuts down. It is assumed to
92  * succeed.
93  */
94 void (*shutdown)(void);
95 /**
96  *
97  * add file descriptors to fd_sets
98  *
99  * The pre_select function of the activated selector gets called just before
100  * para_server enters its main select loop. The selector may add its own file
101  * descriptors to the \a rfds or the \a wfds set.
102  *
103  * If a file descriptor was added, \a max_fileno must be increased by
104  * this function, if neccessary.
105  *
106  * \sa select(2)
107  */
108 int (*pre_select)(fd_set *rfds, fd_set *wfds);
109 /**
110  * handle the file descriptors which are ready for I/O
111  *
112  * If the pre_select hook added one ore more file descriptors to the read or write
113  * set, this is the hook to check the result and do any I/O on those descriptors
114  * which are ready for reading/writing.
115  */
116 void (*post_select)(fd_set *rfds, fd_set *wfds);
117 /**
118  * each selector has its private data pointer */
119 void *private_data;
120 };
121
122 int mysql_selector_init(struct audio_file_selector*);
123 int playlist_selector_init(struct audio_file_selector*);
124 int random_selector_init(struct audio_file_selector*);
125