]>
Commit | Line | Data |
---|---|---|
6501dd31 DR |
1 | #pragma once |
2 | ||
3 | /*** | |
4 | This file is part of systemd. | |
5 | ||
6 | Copyright 2017 Dmitry Rozhkov | |
6501dd31 DR |
7 | ***/ |
8 | ||
400f54fb DR |
9 | #include "list.h" |
10 | ||
6501dd31 | 11 | typedef struct DnssdService DnssdService; |
400f54fb | 12 | typedef struct DnssdTxtData DnssdTxtData; |
6501dd31 DR |
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 | ||
400f54fb DR |
23 | struct DnssdTxtData { |
24 | DnsResourceRecord *rr; | |
25 | ||
26 | LIST_HEAD(DnsTxtItem, txt); | |
27 | ||
28 | LIST_FIELDS(DnssdTxtData, items); | |
29 | }; | |
30 | ||
6501dd31 DR |
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; | |
6501dd31 DR |
39 | |
40 | DnsResourceRecord *ptr_rr; | |
41 | DnsResourceRecord *srv_rr; | |
400f54fb DR |
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); | |
6501dd31 DR |
46 | |
47 | Manager *manager; | |
c3036641 DR |
48 | |
49 | bool withdrawn:1; | |
84b0f133 | 50 | uid_t originator; |
6501dd31 DR |
51 | }; |
52 | ||
53 | DnssdService *dnssd_service_free(DnssdService *service); | |
400f54fb DR |
54 | DnssdTxtData *dnssd_txtdata_free(DnssdTxtData *txt_data); |
55 | DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data); | |
6501dd31 DR |
56 | |
57 | DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free); | |
400f54fb | 58 | DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free); |
6501dd31 DR |
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); | |
6db6a464 | 64 | int dnssd_update_rrs(DnssdService *s); |
c3036641 | 65 | void dnssd_signal_conflict(Manager *manager, const char *name); |