]> git.meshlink.io Git - catta/blob - psched.h
add support for dots and backslashes in domain names (required for DNS-SD)
[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 typedef struct _flxProbeJob flxProbeJob;
9
10 #include "timeeventq.h"
11 #include "rr.h"
12 #include "llist.h"
13 #include "iface.h"
14
15 struct _flxQueryJob {
16     flxPacketScheduler *scheduler;
17     flxTimeEvent *time_event;
18     flxKey *key;
19     gboolean done;
20     GTimeVal delivery;
21     FLX_LLIST_FIELDS(flxQueryJob, jobs);
22 };
23
24 struct _flxResponseJob {
25     flxPacketScheduler *scheduler;
26     flxTimeEvent *time_event;
27     flxRecord *record;
28     flxAddress address;
29     gboolean address_valid;
30     gboolean done;
31     GTimeVal delivery;
32     gboolean flush_cache;
33     FLX_LLIST_FIELDS(flxResponseJob, jobs);
34 };
35
36 struct _flxKnownAnswer {
37     flxPacketScheduler *scheduler;
38     flxRecord *record;
39
40     FLX_LLIST_FIELDS(flxKnownAnswer, known_answer);
41 };
42
43 struct _flxProbeJob {
44     flxPacketScheduler *scheduler;
45     flxTimeEvent *time_event;
46     flxRecord *record;
47
48     gboolean chosen; /* Use for packet assembling */
49     GTimeVal delivery;
50     
51     FLX_LLIST_FIELDS(flxProbeJob, jobs);
52 };
53
54 struct _flxPacketScheduler {
55     flxServer *server;
56     
57     flxInterface *interface;
58
59     FLX_LLIST_HEAD(flxQueryJob, query_jobs);
60     FLX_LLIST_HEAD(flxResponseJob, response_jobs);
61     FLX_LLIST_HEAD(flxKnownAnswer, known_answers);
62     FLX_LLIST_HEAD(flxProbeJob, probe_jobs);
63 };
64
65 flxPacketScheduler *flx_packet_scheduler_new(flxServer *server, flxInterface *i);
66 void flx_packet_scheduler_free(flxPacketScheduler *s);
67
68 void flx_packet_scheduler_post_query(flxPacketScheduler *s, flxKey *key, gboolean immediately);
69 void flx_packet_scheduler_post_response(flxPacketScheduler *s, const flxAddress *a, flxRecord *record, gboolean flush_cache, gboolean immediately);
70 void flx_packet_scheduler_post_probe(flxPacketScheduler *s, flxRecord *record, gboolean immediately);
71
72 void flx_packet_scheduler_incoming_query(flxPacketScheduler *s, flxKey *key);
73 void flx_packet_scheduler_incoming_response(flxPacketScheduler *s, flxRecord *record);
74 void flx_packet_scheduler_incoming_known_answer(flxPacketScheduler *s, flxRecord *record, const flxAddress *a);
75
76 void flx_packet_scheduler_flush_responses(flxPacketScheduler *s);
77
78 #endif