1#ifndef foollmnrqueryschedhbar 2#define foollmnrqueryschedhbar 3 4typedef struct AvahiLLMNRQueryJob AvahiLLMNRQueryJob; 5typedef struct AvahiLLMNRQueryScheduler AvahiLLMNRQueryScheduler; 6 7#include "iface.h" 8 9#define AVAHI_LLMNR_INTERVAL 1000 10#define AVAHI_LLMNR_JITTER 100 11 12struct AvahiLLMNRQueryJob { 13 AvahiLLMNRQueryScheduler *scheduler; 14 AvahiLLMNRQuery *lq; 15 16 int n_sent, prev_scheduled; 17 AvahiDnsPacket *p; 18 19 AvahiTimeEvent *time_event; 20 21 /* List of jobs maintained by AvahiLLMNRQueryScheduler*/ 22 AVAHI_LLIST_FIELDS(AvahiLLMNRQueryJob, jobs_by_scheduler); 23 24 /* List of jobs maintained by Interface. */ 25 /* Both contain the same data. */ 26 AVAHI_LLIST_FIELDS(AvahiLLMNRQueryJob, jobs_by_interface); 27}; 28 29struct AvahiLLMNRQueryScheduler { 30 AvahiInterface *i; 31 AvahiTimeEventQueue *time_event_queue; 32 33 /* For 'lq' lq->post_id */ 34 unsigned int next_id; 35 36 AVAHI_LLIST_HEAD(AvahiLLMNRQueryJob, jobs); 37}; 38 39/* Add new query scheduler for specified Interface*/ 40AvahiLLMNRQueryScheduler *avahi_llmnr_query_scheduler_new(AvahiInterface *i); 41 42/* This would destroy 'qj' as well as corresponding 'lq' object. */ 43void avahi_llmnr_query_job_destroy(AvahiLLMNRQueryScheduler *s, AvahiLLMNRQueryJob *qj); 44 45void avahi_llmnr_query_scheduler_free(AvahiLLMNRQueryScheduler *s); 46void avahi_llmnr_query_scheduler_clear(AvahiLLMNRQueryScheduler *s); 47 48/* Issue an 'AvahiLLMNRQueryJob' for 'AvahiLLMNRQuery' object(lq) on specified scheduler */ 49/* This would fill 'lq->post_id' */ 50int avahi_llmnr_query_scheduler_post(AvahiLLMNRQueryScheduler *s, AvahiLLMNRQuery *lq, int immediately); 51 52/* Remove AvahiLLMNRQuery and AvahiLLMNRQueryJob for this id. 53(id == ls->post_id, which was created during avahi_llmnr_query_scheduler_post(s, lq, immediately)) */ 54int avahi_llmnr_query_scheduler_withdraw_by_id(AvahiLLMNRQueryScheduler *s, unsigned id); 55void avahi_llmnr_query_job_remove(AvahiInterface *i, AvahiKey *key); 56 57#endif /*foollmnrquerychedhbar*/ 58