]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/resolve/resolved-dnssd.h
Merge pull request #8417 from brauner/2018-03-09/add_bind_mount_fallback_to_private_d...
[thirdparty/systemd.git] / src / resolve / resolved-dnssd.h
1 #pragma once
2
3 /***
4 This file is part of systemd.
5
6 Copyright 2017 Dmitry Rozhkov
7 ***/
8
9 #include "list.h"
10
11 typedef struct DnssdService DnssdService;
12 typedef struct DnssdTxtData DnssdTxtData;
13
14 typedef struct Manager Manager;
15 typedef struct DnsResourceRecord DnsResourceRecord;
16 typedef struct DnsTxtItem DnsTxtItem;
17
18 enum {
19 DNS_TXT_ITEM_TEXT,
20 DNS_TXT_ITEM_DATA
21 };
22
23 struct DnssdTxtData {
24 DnsResourceRecord *rr;
25
26 LIST_HEAD(DnsTxtItem, txt);
27
28 LIST_FIELDS(DnssdTxtData, items);
29 };
30
31 struct DnssdService {
32 char *filename;
33 char *name;
34 char *name_template;
35 char *type;
36 uint16_t port;
37 uint16_t priority;
38 uint16_t weight;
39
40 DnsResourceRecord *ptr_rr;
41 DnsResourceRecord *srv_rr;
42
43 /* Section 6.8 of RFC 6763 allows having service
44 * instances with multiple TXT resource records. */
45 LIST_HEAD(DnssdTxtData, txt_data_items);
46
47 Manager *manager;
48
49 bool withdrawn:1;
50 uid_t originator;
51 };
52
53 DnssdService *dnssd_service_free(DnssdService *service);
54 DnssdTxtData *dnssd_txtdata_free(DnssdTxtData *txt_data);
55 DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data);
56
57 DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free);
58 DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free);
59
60 int dnssd_render_instance_name(DnssdService *s, char **ret_name);
61 int dnssd_load(Manager *manager);
62 int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item);
63 int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item);
64 int dnssd_update_rrs(DnssdService *s);
65 void dnssd_signal_conflict(Manager *manager, const char *name);