]>
Commit | Line | Data |
---|---|---|
1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ | |
2 | ||
3 | #pragma once | |
4 | ||
5 | #include "list.h" | |
6 | #include "resolved-conf.h" | |
7 | ||
8 | typedef struct DnssdService DnssdService; | |
9 | typedef struct DnssdTxtData DnssdTxtData; | |
10 | ||
11 | typedef struct Manager Manager; | |
12 | typedef struct DnsResourceRecord DnsResourceRecord; | |
13 | typedef struct DnsTxtItem DnsTxtItem; | |
14 | ||
15 | enum { | |
16 | DNS_TXT_ITEM_TEXT, | |
17 | DNS_TXT_ITEM_DATA, | |
18 | }; | |
19 | ||
20 | struct DnssdTxtData { | |
21 | DnsResourceRecord *rr; | |
22 | ||
23 | LIST_HEAD(DnsTxtItem, txts); | |
24 | ||
25 | LIST_FIELDS(DnssdTxtData, items); | |
26 | }; | |
27 | ||
28 | struct DnssdService { | |
29 | char *path; | |
30 | char *name; | |
31 | char *name_template; | |
32 | char *type; | |
33 | char *subtype; | |
34 | uint16_t port; | |
35 | uint16_t priority; | |
36 | uint16_t weight; | |
37 | ||
38 | DnsResourceRecord *ptr_rr; | |
39 | DnsResourceRecord *sub_ptr_rr; | |
40 | DnsResourceRecord *srv_rr; | |
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); | |
45 | ||
46 | Manager *manager; | |
47 | ||
48 | /* Services registered via D-Bus are not removed on reload */ | |
49 | ResolveConfigSource config_source; | |
50 | ||
51 | bool withdrawn:1; | |
52 | uid_t originator; | |
53 | }; | |
54 | ||
55 | DnssdService *dnssd_service_free(DnssdService *service); | |
56 | DnssdTxtData *dnssd_txtdata_free(DnssdTxtData *txt_data); | |
57 | DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data); | |
58 | void dnssd_service_clear_on_reload(Hashmap *services); | |
59 | ||
60 | DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free); | |
61 | DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free); | |
62 | ||
63 | int dnssd_render_instance_name(Manager *m, DnssdService *s, char **ret); | |
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); | |
67 | int dnssd_update_rrs(DnssdService *s); | |
68 | int dnssd_signal_conflict(Manager *manager, const char *name); |