]> git.meshlink.io Git - catta/blob - psched.h
add known answer suppresion server part
[catta] / psched.h
1 #ifndef foopschedhfoo
2 #define foopschedhfoo
3
4 typedef struct _flxQueryJob flxQueryJob;
5 typedef struct _flxResponseJob flxResponseJob;
6 typedef struct _flxPacketScheduler flxPacketScheduler;
7 typedef struct _flxKnownAnswer flxKnownAnswer;
8
9 #include "timeeventq.h"
10 #include "rr.h"
11 #include "llist.h"
12 #include "iface.h"
13
14 struct _flxQueryJob {
15     flxPacketScheduler *scheduler;
16     flxTimeEvent *time_event;
17     flxKey *key;
18     gboolean done;
19     GTimeVal delivery;
20     FLX_LLIST_FIELDS(flxQueryJob, jobs);
21 };
22
23 struct _flxResponseJob {
24     flxPacketScheduler *scheduler;
25     flxTimeEvent *time_event;
26     flxRecord *record;
27     flxAddress address;
28     gboolean address_valid;
29     gboolean done;
30     GTimeVal delivery;
31     FLX_LLIST_FIELDS(flxResponseJob, jobs);
32 };
33
34 struct _flxKnownAnswer {
35     flxPacketScheduler *scheduler;
36     flxRecord *record;
37
38     FLX_LLIST_FIELDS(flxKnownAnswer, known_answer);
39 };
40
41 struct _flxPacketScheduler {
42     flxServer *server;
43     
44     flxInterface *interface;
45
46     FLX_LLIST_HEAD(flxQueryJob, query_jobs);
47     FLX_LLIST_HEAD(flxResponseJob, response_jobs);
48     FLX_LLIST_HEAD(flxKnownAnswer, known_answers);
49 };
50
51 flxPacketScheduler *flx_packet_scheduler_new(flxServer *server, flxInterface *i);
52 void flx_packet_scheduler_free(flxPacketScheduler *s);
53
54 void flx_packet_scheduler_post_query(flxPacketScheduler *s, flxKey *key, gboolean immediately);
55 void flx_packet_scheduler_post_response(flxPacketScheduler *s, const flxAddress *a, flxRecord *record, gboolean immediately);
56
57 void flx_packet_scheduler_incoming_query(flxPacketScheduler *s, flxKey *key);
58 void flx_packet_scheduler_incoming_response(flxPacketScheduler *s, flxRecord *record);
59 void flx_packet_scheduler_incoming_known_answer(flxPacketScheduler *s, flxRecord *record, const flxAddress *a);
60
61 void flx_packet_scheduler_flush_responses(flxPacketScheduler *s);
62
63 #endif