]>
Commit | Line | Data |
---|---|---|
6501dd31 DR |
1 | #pragma once |
2 | ||
3 | /*** | |
6501dd31 | 4 | Copyright 2017 Dmitry Rozhkov |
6501dd31 DR |
5 | ***/ |
6 | ||
400f54fb DR |
7 | #include "list.h" |
8 | ||
6501dd31 | 9 | typedef struct DnssdService DnssdService; |
400f54fb | 10 | typedef struct DnssdTxtData DnssdTxtData; |
6501dd31 DR |
11 | |
12 | typedef struct Manager Manager; | |
13 | typedef struct DnsResourceRecord DnsResourceRecord; | |
14 | typedef struct DnsTxtItem DnsTxtItem; | |
15 | ||
16 | enum { | |
17 | DNS_TXT_ITEM_TEXT, | |
18 | DNS_TXT_ITEM_DATA | |
19 | }; | |
20 | ||
400f54fb DR |
21 | struct DnssdTxtData { |
22 | DnsResourceRecord *rr; | |
23 | ||
24 | LIST_HEAD(DnsTxtItem, txt); | |
25 | ||
26 | LIST_FIELDS(DnssdTxtData, items); | |
27 | }; | |
28 | ||
6501dd31 DR |
29 | struct DnssdService { |
30 | char *filename; | |
31 | char *name; | |
32 | char *name_template; | |
33 | char *type; | |
34 | uint16_t port; | |
35 | uint16_t priority; | |
36 | uint16_t weight; | |
6501dd31 DR |
37 | |
38 | DnsResourceRecord *ptr_rr; | |
39 | DnsResourceRecord *srv_rr; | |
400f54fb DR |
40 | |
41 | /* Section 6.8 of RFC 6763 allows having service | |
42 | * instances with multiple TXT resource records. */ | |
43 | LIST_HEAD(DnssdTxtData, txt_data_items); | |
6501dd31 DR |
44 | |
45 | Manager *manager; | |
c3036641 DR |
46 | |
47 | bool withdrawn:1; | |
84b0f133 | 48 | uid_t originator; |
6501dd31 DR |
49 | }; |
50 | ||
51 | DnssdService *dnssd_service_free(DnssdService *service); | |
400f54fb DR |
52 | DnssdTxtData *dnssd_txtdata_free(DnssdTxtData *txt_data); |
53 | DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data); | |
6501dd31 DR |
54 | |
55 | DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free); | |
400f54fb | 56 | DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free); |
6501dd31 DR |
57 | |
58 | int dnssd_render_instance_name(DnssdService *s, char **ret_name); | |
59 | int dnssd_load(Manager *manager); | |
60 | int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item); | |
61 | int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item); | |
6db6a464 | 62 | int dnssd_update_rrs(DnssdService *s); |
c3036641 | 63 | void dnssd_signal_conflict(Manager *manager, const char *name); |