| #pragma once |
| |
| |
| #include "list.h" |
| |
| typedef struct DnssdService DnssdService; |
| typedef struct DnssdTxtData DnssdTxtData; |
| |
| typedef struct Manager Manager; |
| typedef struct DnsResourceRecord DnsResourceRecord; |
| typedef struct DnsTxtItem DnsTxtItem; |
| |
| enum { |
| DNS_TXT_ITEM_TEXT, |
| DNS_TXT_ITEM_DATA |
| }; |
| |
| struct DnssdTxtData { |
| DnsResourceRecord *rr; |
| |
| LIST_HEAD(DnsTxtItem, txt); |
| |
| LIST_FIELDS(DnssdTxtData, items); |
| }; |
| |
| struct DnssdService { |
| char *filename; |
| char *name; |
| char *name_template; |
| char *type; |
| uint16_t port; |
| uint16_t priority; |
| uint16_t weight; |
| |
| DnsResourceRecord *ptr_rr; |
| DnsResourceRecord *srv_rr; |
| |
| /* Section 6.8 of RFC 6763 allows having service |
| * instances with multiple TXT resource records. */ |
| LIST_HEAD(DnssdTxtData, txt_data_items); |
| |
| Manager *manager; |
| |
| bool withdrawn:1; |
| uid_t originator; |
| }; |
| |
| DnssdService *dnssd_service_free(DnssdService *service); |
| DnssdTxtData *dnssd_txtdata_free(DnssdTxtData *txt_data); |
| DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data); |
| |
| DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free); |
| DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free); |
| |
| int dnssd_render_instance_name(DnssdService *s, char **ret_name); |
| int dnssd_load(Manager *manager); |
| int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item); |
| int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item); |
| int dnssd_update_rrs(DnssdService *s); |
| void dnssd_signal_conflict(Manager *manager, const char *name); |