]> git.meshlink.io Git - catta/blob - psched.h
add client part of known answer suppresion
[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     gboolean done;
28     GTimeVal delivery;
29     FLX_LLIST_FIELDS(flxResponseJob, jobs);
30 };
31
32 struct _flxKnownAnswer {
33     flxPacketScheduler *scheduler;
34     flxRecord *record;
35
36     FLX_LLIST_FIELDS(flxKnownAnswer, known_answer);
37 };
38
39 struct _flxPacketScheduler {
40     flxServer *server;
41     
42     flxInterface *interface;
43
44     FLX_LLIST_HEAD(flxQueryJob, query_jobs);
45     FLX_LLIST_HEAD(flxResponseJob, response_jobs);
46     FLX_LLIST_HEAD(flxKnownAnswer, known_answers);
47 };
48
49 flxPacketScheduler *flx_packet_scheduler_new(flxServer *server, flxInterface *i);
50 void flx_packet_scheduler_free(flxPacketScheduler *s);
51
52 void flx_packet_scheduler_post_query(flxPacketScheduler *s, flxKey *key, gboolean immediately);
53 void flx_packet_scheduler_post_response(flxPacketScheduler *s, flxRecord *record, gboolean immediately);
54
55 void flx_packet_scheduler_incoming_query(flxPacketScheduler *s, flxKey *key);
56 void flx_packet_scheduler_incoming_response(flxPacketScheduler *s, flxRecord *record);
57
58 void flx_packet_scheduler_flush_responses(flxPacketScheduler *s);
59
60 #endif