]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-resolve.h
man/systemd-sysext: list ephemeral/ephemeral-import in the list of options
[thirdparty/systemd.git] / src / systemd / sd-resolve.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
3bedba4a
TG
2#ifndef foosdresolvehfoo
3#define foosdresolvehfoo
e963e3ad
DB
4
5/***
1783d897
TG
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
e963e3ad 10
1783d897 11 systemd is distributed in the hope that it will be useful, but
e963e3ad
DB
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
1783d897 16 You should have received a copy of the GNU Lesser General Public License
85fce6f4 17 along with systemd; If not, see <https://www.gnu.org/licenses/>.
e963e3ad
DB
18***/
19
35f2cb28
YW
20/* 'struct addrinfo' needs _GNU_SOURCE */
21#ifndef _GNU_SOURCE
22#define _GNU_SOURCE 1
23#endif
24
04c01369 25#include <sys/socket.h>
968d3d24 26
04c01369 27#include "_sd-common.h"
1783d897
TG
28
29_SD_BEGIN_DECLARATIONS;
30
5cdf13c7
DDM
31struct addrinfo;
32
33typedef struct sd_event sd_event;
34
93f1bcf4 35/* An opaque sd-resolve session structure */
4f809256 36typedef struct sd_resolve sd_resolve;
e963e3ad 37
93f1bcf4 38/* An opaque sd-resolve query structure */
4f809256 39typedef struct sd_resolve_query sd_resolve_query;
e963e3ad 40
93f1bcf4
LP
41/* A callback on completion */
42typedef int (*sd_resolve_getaddrinfo_handler_t)(sd_resolve_query *q, int ret, const struct addrinfo *ai, void *userdata);
43typedef int (*sd_resolve_getnameinfo_handler_t)(sd_resolve_query *q, int ret, const char *host, const char *serv, void *userdata);
deae09cc 44typedef _sd_destroy_t sd_resolve_destroy_t;
93f1bcf4
LP
45
46enum {
9b505bc2
ZJS
47 SD_RESOLVE_GET_HOST = 1 << 0,
48 SD_RESOLVE_GET_SERVICE = 1 << 1,
5476cb98 49 SD_RESOLVE_GET_BOTH = SD_RESOLVE_GET_HOST | SD_RESOLVE_GET_SERVICE
93f1bcf4
LP
50};
51
52int sd_resolve_default(sd_resolve **ret);
53
54/* Allocate a new sd-resolve session. */
968d3d24 55int sd_resolve_new(sd_resolve **ret);
e963e3ad 56
93f1bcf4 57/* Free a sd-resolve session. This destroys all attached
10b17992 58 * sd_resolve_query objects automatically. */
968d3d24 59sd_resolve* sd_resolve_unref(sd_resolve *resolve);
93f1bcf4 60sd_resolve* sd_resolve_ref(sd_resolve *resolve);
968d3d24 61
93f1bcf4 62/* Return the UNIX file descriptor to poll() for events on. Use this
968d3d24
LP
63 * function to integrate sd-resolve with your custom main loop. */
64int sd_resolve_get_fd(sd_resolve *resolve);
65
93f1bcf4 66/* Return the poll() events (a combination of flags like POLLIN,
968d3d24
LP
67 * POLLOUT, ...) to check for. */
68int sd_resolve_get_events(sd_resolve *resolve);
e963e3ad 69
f5fbe71d 70/* Return the poll() timeout to pass. Returns UINT64_MAX as
10b17992 71 * timeout if no timeout is needed. */
968d3d24 72int sd_resolve_get_timeout(sd_resolve *resolve, uint64_t *timeout_usec);
e963e3ad 73
93f1bcf4 74/* Process pending responses. After this function is called, you can
968d3d24
LP
75 * get the next completed query object(s) using
76 * sd_resolve_get_next(). */
77int sd_resolve_process(sd_resolve *resolve);
78
93f1bcf4 79/* Wait for a resolve event to complete. */
968d3d24 80int sd_resolve_wait(sd_resolve *resolve, uint64_t timeout_usec);
e963e3ad 81
93f1bcf4
LP
82int sd_resolve_get_tid(sd_resolve *resolve, pid_t *tid);
83
32d20645 84int sd_resolve_attach_event(sd_resolve *resolve, sd_event *e, int64_t priority);
93f1bcf4
LP
85int sd_resolve_detach_event(sd_resolve *resolve);
86sd_event *sd_resolve_get_event(sd_resolve *resolve);
87
88/* Issue a name-to-address query on the specified session. The
10b17992 89 * arguments are compatible with those of libc's
e963e3ad 90 * getaddrinfo(3). The function returns a new query object. When the
10b17992 91 * query is completed, you may retrieve the results using
968d3d24 92 * sd_resolve_getaddrinfo_done(). */
93f1bcf4
LP
93int sd_resolve_getaddrinfo(sd_resolve *resolve, sd_resolve_query **q, const char *node, const char *service, const struct addrinfo *hints, sd_resolve_getaddrinfo_handler_t callback, void *userdata);
94
95/* Issue an address-to-name query on the specified session. The
10b17992 96 * arguments are compatible with those of libc's
e963e3ad 97 * getnameinfo(3). The function returns a new query object. When the
10b17992 98 * query is completed, you may retrieve the results using
3bedba4a 99 * sd_resolve_getnameinfo_done(). Set gethost (resp. getserv) to non-zero
e963e3ad 100 * if you want to query the hostname (resp. the service name). */
93f1bcf4 101int sd_resolve_getnameinfo(sd_resolve *resolve, sd_resolve_query **q, const struct sockaddr *sa, socklen_t salen, int flags, uint64_t get, sd_resolve_getnameinfo_handler_t callback, void *userdata);
e963e3ad 102
f2a3de01
YW
103sd_resolve_query *sd_resolve_query_ref(sd_resolve_query *q);
104sd_resolve_query *sd_resolve_query_unref(sd_resolve_query *q);
93f1bcf4
LP
105
106/* Returns non-zero when the query operation specified by q has been completed. */
f2a3de01 107int sd_resolve_query_is_done(sd_resolve_query *q);
93f1bcf4
LP
108
109void *sd_resolve_query_get_userdata(sd_resolve_query *q);
110void *sd_resolve_query_set_userdata(sd_resolve_query *q, void *userdata);
a8319dea
YW
111int sd_resolve_query_get_destroy_callback(sd_resolve_query *q, sd_resolve_destroy_t *destroy_callback);
112int sd_resolve_query_set_destroy_callback(sd_resolve_query *q, sd_resolve_destroy_t destroy_callback);
b3ae7237
YW
113int sd_resolve_query_get_floating(sd_resolve_query *q);
114int sd_resolve_query_set_floating(sd_resolve_query *q, int b);
93f1bcf4
LP
115
116sd_resolve *sd_resolve_query_get_resolve(sd_resolve_query *q);
e963e3ad 117
4afd3348
LP
118_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_resolve, sd_resolve_unref);
119_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_resolve_query, sd_resolve_query_unref);
120
1783d897
TG
121_SD_END_DECLARATIONS;
122
e963e3ad 123#endif