]> git.meshlink.io Git - catta/blob - libavahi-core/psched.h
8f5e77c1840915a3af0a5454188dfcd3acd56416
[catta] / libavahi-core / psched.h
1 #ifndef foopschedhfoo
2 #define foopschedhfoo
3
4 typedef struct _AvahiQueryJob AvahiQueryJob;
5 typedef struct _AvahiResponseJob AvahiResponseJob;
6 typedef struct _AvahiPacketScheduler AvahiPacketScheduler;
7 typedef struct _AvahiKnownAnswer AvahiKnownAnswer;
8 typedef struct _AvahiProbeJob AvahiProbeJob;
9
10 #include "timeeventq.h"
11 #include "rr.h"
12 #include "llist.h"
13 #include "iface.h"
14
15 struct _AvahiQueryJob {
16     AvahiPacketScheduler *scheduler;
17     AvahiTimeEvent *time_event;
18     AvahiKey *key;
19     gboolean done;
20     GTimeVal delivery;
21     AVAHI_LLIST_FIELDS(AvahiQueryJob, jobs);
22 };
23
24 struct _AvahiResponseJob {
25     AvahiPacketScheduler *scheduler;
26     AvahiTimeEvent *time_event;
27     AvahiRecord *record;
28     AvahiAddress address;
29     gboolean address_valid;
30     gboolean done;
31     GTimeVal delivery;
32     gboolean flush_cache;
33     AVAHI_LLIST_FIELDS(AvahiResponseJob, jobs);
34 };
35
36 struct _AvahiKnownAnswer {
37     AvahiPacketScheduler *scheduler;
38     AvahiRecord *record;
39
40     AVAHI_LLIST_FIELDS(AvahiKnownAnswer, known_answer);
41 };
42
43 struct _AvahiProbeJob {
44     AvahiPacketScheduler *scheduler;
45     AvahiTimeEvent *time_event;
46     AvahiRecord *record;
47
48     gboolean chosen; /* Use for packet assembling */
49     GTimeVal delivery;
50     
51     AVAHI_LLIST_FIELDS(AvahiProbeJob, jobs);
52 };
53
54 struct _AvahiPacketScheduler {
55     AvahiServer *server;
56     
57     AvahiInterface *interface;
58
59     AVAHI_LLIST_HEAD(AvahiQueryJob, query_jobs);
60     AVAHI_LLIST_HEAD(AvahiResponseJob, response_jobs);
61     AVAHI_LLIST_HEAD(AvahiKnownAnswer, known_answers);
62     AVAHI_LLIST_HEAD(AvahiProbeJob, probe_jobs);
63 };
64
65 AvahiPacketScheduler *avahi_packet_scheduler_new(AvahiServer *server, AvahiInterface *i);
66 void avahi_packet_scheduler_free(AvahiPacketScheduler *s);
67
68 void avahi_packet_scheduler_post_query(AvahiPacketScheduler *s, AvahiKey *key, gboolean immediately);
69 void avahi_packet_scheduler_post_response(AvahiPacketScheduler *s, const AvahiAddress *a, AvahiRecord *record, gboolean flush_cache, gboolean immediately);
70 void avahi_packet_scheduler_post_probe(AvahiPacketScheduler *s, AvahiRecord *record, gboolean immediately);
71
72 void avahi_packet_scheduler_incoming_query(AvahiPacketScheduler *s, AvahiKey *key);
73 void avahi_packet_scheduler_incoming_response(AvahiPacketScheduler *s, AvahiRecord *record);
74 void avahi_packet_scheduler_incoming_known_answer(AvahiPacketScheduler *s, AvahiRecord *record, const AvahiAddress *a);
75
76 void avahi_packet_scheduler_flush_responses(AvahiPacketScheduler *s);
77
78 #endif