]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
4368277c | 2 | |
6501dd31 DR |
3 | #pragma once |
4 | ||
400f54fb | 5 | #include "list.h" |
14a52176 | 6 | #include "resolved-conf.h" |
400f54fb | 7 | |
6501dd31 | 8 | typedef struct DnssdService DnssdService; |
400f54fb | 9 | typedef struct DnssdTxtData DnssdTxtData; |
6501dd31 DR |
10 | |
11 | typedef struct Manager Manager; | |
12 | typedef struct DnsResourceRecord DnsResourceRecord; | |
13 | typedef struct DnsTxtItem DnsTxtItem; | |
14 | ||
15 | enum { | |
16 | DNS_TXT_ITEM_TEXT, | |
d70f15f5 | 17 | DNS_TXT_ITEM_DATA, |
6501dd31 DR |
18 | }; |
19 | ||
400f54fb DR |
20 | struct DnssdTxtData { |
21 | DnsResourceRecord *rr; | |
22 | ||
d70f15f5 | 23 | LIST_HEAD(DnsTxtItem, txts); |
400f54fb DR |
24 | |
25 | LIST_FIELDS(DnssdTxtData, items); | |
26 | }; | |
27 | ||
6501dd31 | 28 | struct DnssdService { |
40763016 | 29 | char *path; |
6501dd31 DR |
30 | char *name; |
31 | char *name_template; | |
32 | char *type; | |
88123aa2 | 33 | char *subtype; |
6501dd31 DR |
34 | uint16_t port; |
35 | uint16_t priority; | |
36 | uint16_t weight; | |
6501dd31 DR |
37 | |
38 | DnsResourceRecord *ptr_rr; | |
88123aa2 | 39 | DnsResourceRecord *sub_ptr_rr; |
6501dd31 | 40 | DnsResourceRecord *srv_rr; |
400f54fb DR |
41 | |
42 | /* Section 6.8 of RFC 6763 allows having service | |
43 | * instances with multiple TXT resource records. */ | |
44 | LIST_HEAD(DnssdTxtData, txt_data_items); | |
6501dd31 DR |
45 | |
46 | Manager *manager; | |
c3036641 | 47 | |
14a52176 LB |
48 | /* Services registered via D-Bus are not removed on reload */ |
49 | ResolveConfigSource config_source; | |
50 | ||
c3036641 | 51 | bool withdrawn:1; |
84b0f133 | 52 | uid_t originator; |
6501dd31 DR |
53 | }; |
54 | ||
55 | DnssdService *dnssd_service_free(DnssdService *service); | |
400f54fb DR |
56 | DnssdTxtData *dnssd_txtdata_free(DnssdTxtData *txt_data); |
57 | DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data); | |
14a52176 | 58 | void dnssd_service_clear_on_reload(Hashmap *services); |
6501dd31 DR |
59 | |
60 | DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free); | |
400f54fb | 61 | DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free); |
6501dd31 | 62 | |
a3f87e32 | 63 | int dnssd_render_instance_name(Manager *m, DnssdService *s, char **ret); |
6501dd31 DR |
64 | int dnssd_load(Manager *manager); |
65 | int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item); | |
66 | int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item); | |
6db6a464 | 67 | int dnssd_update_rrs(DnssdService *s); |
b8d6689a | 68 | int dnssd_signal_conflict(Manager *manager, const char *name); |