]> git.tue.mpg.de Git - paraslash.git/commitdiff
add dbtool hooks
authorAndre <maan@p133.(none)>
Tue, 21 Feb 2006 08:09:36 +0000 (09:09 +0100)
committerAndre <maan@p133.(none)>
Tue, 21 Feb 2006 08:09:36 +0000 (09:09 +0100)
pre_select/post_select. Also, add a private_dbtool pointer for
each audio format to mmd.

db.h
para.h
server.c
server.h

diff --git a/db.h b/db.h
index 960bf59f2e2a6bce0bf9300e68303031f47b2a63..328f7de8cd748814c67542f431c8ca83b782141e 100644 (file)
--- a/db.h
+++ b/db.h
@@ -18,6 +18,8 @@
 
 /** \file db.h data structures common to all database tools */
 
+#include <sys/select.h>
+
 int find_audio_files(const char *dirname, int (*f)(const char *, const char *));
 
 /**
@@ -78,7 +80,7 @@ char **(*get_audio_file_list)(unsigned int num);
  * passed \a update_audio_file().
  *
  */
-void  (*update_audio_file)(char *audio_file);
+void (*update_audio_file)(char *audio_file);
 /**
  *
  * shutdown this database tool and free all resources
@@ -86,8 +88,30 @@ void  (*update_audio_file)(char *audio_file);
  * This gets called whenever the database tool changes (via the cdt command),
  * or when para_server receives the HUP signal, or when para_server shuts down.
  * It is assumed to succeed.
-*/
+ */
 void (*shutdown)(void);
+/**
+ *
+ * add file descriptors to fd_sets
+ *
+ * The pre_select function of the activated database tool gets called just
+ * before para_server enters its main select loop. The dbtool may add its own
+ * file descriptors to the \a rfds or the \a wfds set.
+ *
+ * If a file descriptor was added, \a max_fileno must be increased by
+ * this function, if neccessary.
+ *
+ * \sa select(2)
+ */
+int (*pre_select)(fd_set *rfds, fd_set *wfds);
+/**
+ * handle the file descriptors which are ready for I/O
+ *
+ * If the pre_select hook added one ore more file descriptors to the read or write
+ * set, this is the hook to check the result and do any I/O on those descriptors
+ * which are ready for reading/writing.
+ */
+void (*post_select)(fd_set *rfds, fd_set *wfds);
 };
 
 int mysql_dbtool_init(struct dbtool*);
diff --git a/para.h b/para.h
index 049262d39d75074a84e7bdf984e4e1c1c48258bd..e645cb1cd8259e6bf59a48ef8531abe8797d5d2e 100644 (file)
--- a/para.h
+++ b/para.h
@@ -225,3 +225,9 @@ __printf_2_3 void para_log(int, char*, ...);
 
 
 
+enum supported_dbtools {DBT_DOPEY,
+#ifdef HAVE_MYSQL
+       DBT_MYSQL,
+#endif
+       NUM_DBTOOLS
+};
index 71ee9eb6321b7b34e9c61b0a9bd9389aa391f65f..8d9435337c904ab23801607c8895ed42423ca845 100644 (file)
--- a/server.c
+++ b/server.c
@@ -66,12 +66,16 @@ struct dbtool dblist[] = {
                .name = "dopey",
                .init = dopey_dbtool_init,
                .update_audio_file = NULL,
+               .pre_select = NULL,
+               .post_select = NULL,
        },
 #ifdef HAVE_MYSQL
        {
                .name = "mysql",
                .init = mysql_dbtool_init,
                .update_audio_file = NULL,
+               .pre_select = NULL,
+               .post_select = NULL,
        },
 #endif
        {
index b01c3f6a926da6122f0c2931ac200e06d7006436..ba9b39e45359ef08deba2c2ead21d4acfc4616b2 100644 (file)
--- a/server.h
+++ b/server.h
@@ -145,8 +145,10 @@ struct misc_meta_data{
        int dbt_num;
 /** commands set this to non-zero to request a database tool change */
        int dbt_change;
-/* used by the sender command */
+/** used by the sender command */
        struct sender_command_data sender_cmd_data;
+/** each dbtool has its private data pointer */
+       void *private_dbtool_data[NUM_DBTOOLS];
 };