]> git.meshlink.io Git - catta/blobdiff - server.h
add prioq abstract data type
[catta] / server.h
index 7c96e780152c07005b1784d704fe1d37b4ac93ea..f1a15fc9efc4e8ed2c4535f37ceeb2a439f51b81 100644 (file)
--- a/server.h
+++ b/server.h
@@ -4,19 +4,48 @@
 #include "flx.h"
 #include "iface.h"
 
+struct _flxEntry;
+typedef struct _flxEntry flxEntry;
 struct _flxEntry {
     flxRecord rr;
     gint id;
     gint interface;
+    guchar protocol;
 
-    int unique;
+    gboolean unique;
 
-    struct _flxEntry *next, *prev;
-    struct _flxEntry *next_by_name, *prev_by_name;
-    struct _flxEntry *next_by_id, *prev_by_id;
+    flxEntry *next, *prev;
+    flxEntry *next_by_name, *prev_by_name;
+    flxEntry *next_by_id, *prev_by_id;
 };
 
-typedef struct _flxEntry flxEntry;
+typedef struct _flxQueryJob {
+    gint ref;
+    flxQuery query;
+} flxQueryJob;
+
+struct _flxQueryJobInstance;
+typedef struct _flxQueryJobInstance flxQueryJobInstance;
+struct _flxQueryJobInstance {
+    flxQueryJob *job;
+    gint interface;
+    guchar protocol;
+    flxQueryJobInstance *next, *prev;
+};
+
+typedef struct _flxResponseJob {
+    gint ref;
+    flxRecord response;
+} flxResponseJob;
+
+struct _flxResponseJobInstance;
+typedef struct _flxResponseJobInstance flxResponseJobInstance;
+struct _flxResponseJobInstance {
+    flxResponseJob *job;
+    gint interface;
+    guchar protocol;
+    flxResponseJob *next, *prev;
+};
 
 struct _flxServer {
     GMainContext *context;
@@ -28,6 +57,21 @@ struct _flxServer {
     GHashTable *rrset_by_name;
 
     flxEntry *entries;
+
+    flxResponseJobInstance *first_response_job, *last_response_job;
+    flxQueryJobInstance *first_query_job, *last_query_job;
 };
 
+flxQueryJob* flx_query_job_new(void);
+flxQueryJob* flx_query_job_ref(flxQueryJob *job);
+void flx_query_job_unref(flxQueryJob *job);
+
+void flx_server_post_query_job(flxServer *s, gint interface, guchar protocol, const flxQuery *q);
+void flx_server_drop_query_job(flxServer *s, gint interface, guchar protocol, const flxQuery *q);
+
+void flx_server_remove_query_job_instance(flxServer *s, flxQueryJobInstance *i);
+
+gboolean flx_query_equal(const flxQuery *a, const flxQuery *b);
+
+
 #endif