open62541 1.4.19
Open source implementation of OPC UA
Loading...
Searching...
No Matches
mdnsd.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2003 Jeremie Miller <jer@jabber.org>
3 * Copyright (c) 2016-2026 Joachim Wiberg <troglobit@gmail.com>
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of the copyright holders nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#ifndef LIB_MDNSD_H_
31#define LIB_MDNSD_H_
32
33#include "1035.h"
34#include "inet.h"
35#include <sys/time.h>
36#include <stdbool.h>
37#include <stdio.h>
38#include <syslog.h>
39
40#define QCLASS_IN (1)
41#define DISCO_NAME "_services._dns-sd._udp.local."
42
43#define DBG(fmt, args...) mdnsd_log(LOG_DEBUG, "%s(): " fmt, __func__, ##args)
44#define INFO(fmt, args...) mdnsd_log(LOG_INFO, "%s(): " fmt, __func__, ##args)
45#define NOTE(fmt, args...) mdnsd_log(LOG_NOTICE, fmt, ##args)
46#define WARN(fmt, args...) mdnsd_log(LOG_WARNING, fmt, ##args)
47#define ERR(fmt, args...) mdnsd_log(LOG_ERR, fmt, ##args)
48
49/** Main daemon data */
50typedef struct mdns_daemon mdns_daemon_t;
51/** Record entry */
52typedef struct mdns_record mdns_record_t;
53
54/** Callback for received record. Data is passed from the register call */
55typedef void (*mdnsd_record_received_callback)(const struct resource* r, void* data);
56
57/** Answer data */
58typedef struct mdns_answer {
59 char *name;
60 unsigned short int type;
61 unsigned long int ttl;
62 unsigned short int rdlen;
63 unsigned char *rdata;
64 struct in_addr ip; /* A, network byte order */
65 struct in6_addr ip6; /* AAAA, network byte order */
66 char *rdname; /* NS/CNAME/PTR/SRV */
67 struct {
68 unsigned short int priority, weight, port;
69 } srv; /* SRV */
71
72
73
74
75void mdnsd_log_open(const char *ident);
76
77
78int mdnsd_log_level(char *level);
79
80
81void mdnsd_log_time(struct timeval *tv, char *buf, size_t len);
82
83
84void mdnsd_log_hex(const char *msg, unsigned char *buffer, ssize_t len);
85
86
87void mdnsd_log(int severity, const char *fmt, ...);
88
89
90mdns_daemon_t *mdnsd_new(int class, int frame);
91
92
93void mdnsd_set_family(mdns_daemon_t *d, sa_family_t family);
94
95
96void mdnsd_set_local(mdns_daemon_t *d, int enable);
97
98
100
101
102void mdnsd_set_address(mdns_daemon_t *d, struct in_addr addr);
103
104
106
107
108void mdnsd_set_ipv6_address(mdns_daemon_t *d, struct in6_addr addr);
109
110
112
113
115
116
118
119
121
122
124
125
126
127
128int mdnsd_in(mdns_daemon_t *d, struct message *m, const inet_addr_t *from);
129
130
132
133
134struct timeval *mdnsd_sleep(mdns_daemon_t *d);
135
136
137
138
139void mdnsd_query(mdns_daemon_t *d, const char *host, int type, int (*answer)(mdns_answer_t *a, void *arg), void *arg);
140
141
142mdns_answer_t *mdnsd_list(mdns_daemon_t *d, const char *host, int type, mdns_answer_t *last);
143
144
146
147
149
150
151
152
153
154mdns_record_t *mdnsd_unique(mdns_daemon_t *d, const char *host, unsigned short type, unsigned long ttl, void (*conflict)(char *host, int type, void *arg), void *arg);
155
156
157
158mdns_record_t *mdnsd_shared(mdns_daemon_t *d, const char *host, unsigned short type, unsigned long ttl);
159
160
162
163
164int mdnsd_has_query(mdns_daemon_t *d, const char *host);
165
166
167mdns_record_t *mdnsd_find(mdns_daemon_t *d, const char *name, unsigned short type);
168
169
171
172
173void mdnsd_set_raw(mdns_daemon_t *d, mdns_record_t *r, const char *data, unsigned short len);
175void mdnsd_set_ip(mdns_daemon_t *d, mdns_record_t *r, struct in_addr ip);
176void mdnsd_set_ipv6(mdns_daemon_t *d, mdns_record_t *r, struct in6_addr ip6);
177void mdnsd_set_srv(mdns_daemon_t *d, mdns_record_t *r, unsigned short priority, unsigned short weight, unsigned short port, char *name);
178
179
180int mdnsd_step(mdns_daemon_t *d, int mdns_socket, bool processIn, bool processOut, struct timeval *tv);
181
183
184
186 const struct in_addr *addrs, size_t count);
187
188
190 const struct in6_addr *addrs, size_t count);
191
192
194#endif /* LIB_MDNSD_H_ */
struct sockaddr_storage inet_addr_t
Definition inet.h:15
mdns_answer_t * mdnsd_list(mdns_daemon_t *d, const char *host, int type, mdns_answer_t *last)
void mdnsd_register_receive_callback(mdns_daemon_t *d, mdnsd_record_received_callback cb, void *data)
mdns_record_t * mdnsd_get_published(mdns_daemon_t *d, const char *host)
int mdnsd_in(mdns_daemon_t *d, struct message *m, const inet_addr_t *from)
void mdnsd_done(mdns_daemon_t *d, mdns_record_t *r)
void mdnsd_log_open(const char *ident)
int mdnsd_set_ipv6_addresses_for_host(mdns_daemon_t *d, const char *host, const struct in6_addr *addrs, size_t count)
void mdnsd_set_srv(mdns_daemon_t *d, mdns_record_t *r, unsigned short priority, unsigned short weight, unsigned short port, char *name)
void mdnsd_log(int severity, const char *fmt,...)
void mdnsd_flush(mdns_daemon_t *d)
int mdnsd_has_query(mdns_daemon_t *d, const char *host)
mdns_record_t * mdnsd_find(mdns_daemon_t *d, const char *name, unsigned short type)
mdns_record_t * mdnsd_record_next(const mdns_record_t *r)
void mdnsd_set_address(mdns_daemon_t *d, struct in_addr addr)
struct in_addr mdnsd_get_address(mdns_daemon_t *d)
void mdnsd_set_ipv6(mdns_daemon_t *d, mdns_record_t *r, struct in6_addr ip6)
void mdnsd_set_family(mdns_daemon_t *d, sa_family_t family)
const mdns_answer_t * mdnsd_record_data(const mdns_record_t *r)
int mdnsd_get_local(mdns_daemon_t *d)
void mdnsd_set_local(mdns_daemon_t *d, int enable)
mdns_record_t * mdnsd_shared(mdns_daemon_t *d, const char *host, unsigned short type, unsigned long ttl)
void mdnsd_set_raw(mdns_daemon_t *d, mdns_record_t *r, const char *data, unsigned short len)
struct mdns_record mdns_record_t
Record entry.
Definition mdnsd.h:52
void mdnsd_set_host(mdns_daemon_t *d, mdns_record_t *r, const char *name)
struct mdns_daemon mdns_daemon_t
Main daemon data.
Definition mdnsd.h:50
void mdnsd_shutdown(mdns_daemon_t *d)
void mdnsd_set_ipv6_address(mdns_daemon_t *d, struct in6_addr addr)
int mdnsd_out(mdns_daemon_t *d, struct message *m, inet_addr_t *to)
int mdnsd_set_interface_addresses(mdns_daemon_t *d, const char *ifname)
void mdnsd_log_hex(const char *msg, unsigned char *buffer, ssize_t len)
void mdnsd_log_time(struct timeval *tv, char *buf, size_t len)
int mdnsd_set_addresses_for_host(mdns_daemon_t *d, const char *host, const struct in_addr *addrs, size_t count)
void records_clear(mdns_daemon_t *d)
mdns_daemon_t * mdnsd_new(int class, int frame)
int mdnsd_log_level(char *level)
void mdnsd_set_ip(mdns_daemon_t *d, mdns_record_t *r, struct in_addr ip)
struct timeval * mdnsd_sleep(mdns_daemon_t *d)
mdns_record_t * mdnsd_unique(mdns_daemon_t *d, const char *host, unsigned short type, unsigned long ttl, void(*conflict)(char *host, int type, void *arg), void *arg)
void(* mdnsd_record_received_callback)(const struct resource *r, void *data)
Callback for received record.
Definition mdnsd.h:55
struct in6_addr mdnsd_get_ipv6_address(mdns_daemon_t *d)
struct mdns_answer mdns_answer_t
Answer data.
void mdnsd_free(mdns_daemon_t *d)
int mdnsd_step(mdns_daemon_t *d, int mdns_socket, bool processIn, bool processOut, struct timeval *tv)
void mdnsd_query(mdns_daemon_t *d, const char *host, int type, int(*answer)(mdns_answer_t *a, void *arg), void *arg)
static UA_LogCategory const char * msg
Definition log.h:58
int mdns_socket(struct ifnfo *iface, unsigned char ttl)
Answer data.
Definition mdnsd.h:58
struct in_addr ip
Definition mdnsd.h:64
struct mdns_answer::@8 srv
unsigned short int type
Definition mdnsd.h:60
unsigned short int port
Definition mdnsd.h:68
struct in6_addr ip6
Definition mdnsd.h:65
unsigned char * rdata
Definition mdnsd.h:63
unsigned long int ttl
Definition mdnsd.h:61
char * rdname
Definition mdnsd.h:66
unsigned short int rdlen
Definition mdnsd.h:62
char * name
Definition mdnsd.h:59
qn name
Definition types.h:517
const UA_DataType * type
Definition types.h:626