]> git.meshlink.io Git - catta/blob - server.h
add prioq abstract data type
[catta] / server.h
1 #ifndef fooflxserverhfoo
2 #define fooflxserverhfoo
3
4 #include "flx.h"
5 #include "iface.h"
6
7 struct _flxEntry;
8 typedef struct _flxEntry flxEntry;
9 struct _flxEntry {
10     flxRecord rr;
11     gint id;
12     gint interface;
13     guchar protocol;
14
15     gboolean unique;
16
17     flxEntry *next, *prev;
18     flxEntry *next_by_name, *prev_by_name;
19     flxEntry *next_by_id, *prev_by_id;
20 };
21
22 typedef struct _flxQueryJob {
23     gint ref;
24     flxQuery query;
25 } flxQueryJob;
26
27 struct _flxQueryJobInstance;
28 typedef struct _flxQueryJobInstance flxQueryJobInstance;
29 struct _flxQueryJobInstance {
30     flxQueryJob *job;
31     gint interface;
32     guchar protocol;
33     flxQueryJobInstance *next, *prev;
34 };
35
36 typedef struct _flxResponseJob {
37     gint ref;
38     flxRecord response;
39 } flxResponseJob;
40
41 struct _flxResponseJobInstance;
42 typedef struct _flxResponseJobInstance flxResponseJobInstance;
43 struct _flxResponseJobInstance {
44     flxResponseJob *job;
45     gint interface;
46     guchar protocol;
47     flxResponseJob *next, *prev;
48 };
49
50 struct _flxServer {
51     GMainContext *context;
52     flxInterfaceMonitor *monitor;
53
54     gint current_id;
55     
56     GHashTable *rrset_by_id;
57     GHashTable *rrset_by_name;
58
59     flxEntry *entries;
60
61     flxResponseJobInstance *first_response_job, *last_response_job;
62     flxQueryJobInstance *first_query_job, *last_query_job;
63 };
64
65 flxQueryJob* flx_query_job_new(void);
66 flxQueryJob* flx_query_job_ref(flxQueryJob *job);
67 void flx_query_job_unref(flxQueryJob *job);
68
69 void flx_server_post_query_job(flxServer *s, gint interface, guchar protocol, const flxQuery *q);
70 void flx_server_drop_query_job(flxServer *s, gint interface, guchar protocol, const flxQuery *q);
71
72 void flx_server_remove_query_job_instance(flxServer *s, flxQueryJobInstance *i);
73
74 gboolean flx_query_equal(const flxQuery *a, const flxQuery *b);
75
76
77 #endif