]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/resolve/resolved-dnssd.h
e7f2add397d976b2076b94374019a9ae3d3a7f53
[thirdparty/systemd.git] / src / resolve / resolved-dnssd.h
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 *filename;
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);