]> git.ipfire.org Git - thirdparty/systemd.git/blame_incremental - 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
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2#ifndef foosdresolvehfoo
3#define foosdresolvehfoo
4
5/***
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.
10
11 systemd is distributed in the hope that it will be useful, but
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
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <https://www.gnu.org/licenses/>.
18***/
19
20/* 'struct addrinfo' needs _GNU_SOURCE */
21#ifndef _GNU_SOURCE
22#define _GNU_SOURCE 1
23#endif
24
25#include <sys/socket.h>
26
27#include "_sd-common.h"
28
29_SD_BEGIN_DECLARATIONS;
30
31struct addrinfo;
32
33typedef struct sd_event sd_event;
34
35/* An opaque sd-resolve session structure */
36typedef struct sd_resolve sd_resolve;
37
38/* An opaque sd-resolve query structure */
39typedef struct sd_resolve_query sd_resolve_query;
40
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);
44typedef _sd_destroy_t sd_resolve_destroy_t;
45
46enum {
47 SD_RESOLVE_GET_HOST = 1 << 0,
48 SD_RESOLVE_GET_SERVICE = 1 << 1,
49 SD_RESOLVE_GET_BOTH = SD_RESOLVE_GET_HOST | SD_RESOLVE_GET_SERVICE
50};
51
52int sd_resolve_default(sd_resolve **ret);
53
54/* Allocate a new sd-resolve session. */
55int sd_resolve_new(sd_resolve **ret);
56
57/* Free a sd-resolve session. This destroys all attached
58 * sd_resolve_query objects automatically. */
59sd_resolve* sd_resolve_unref(sd_resolve *resolve);
60sd_resolve* sd_resolve_ref(sd_resolve *resolve);
61
62/* Return the UNIX file descriptor to poll() for events on. Use this
63 * function to integrate sd-resolve with your custom main loop. */
64int sd_resolve_get_fd(sd_resolve *resolve);
65
66/* Return the poll() events (a combination of flags like POLLIN,
67 * POLLOUT, ...) to check for. */
68int sd_resolve_get_events(sd_resolve *resolve);
69
70/* Return the poll() timeout to pass. Returns UINT64_MAX as
71 * timeout if no timeout is needed. */
72int sd_resolve_get_timeout(sd_resolve *resolve, uint64_t *timeout_usec);
73
74/* Process pending responses. After this function is called, you can
75 * get the next completed query object(s) using
76 * sd_resolve_get_next(). */
77int sd_resolve_process(sd_resolve *resolve);
78
79/* Wait for a resolve event to complete. */
80int sd_resolve_wait(sd_resolve *resolve, uint64_t timeout_usec);
81
82int sd_resolve_get_tid(sd_resolve *resolve, pid_t *tid);
83
84int sd_resolve_attach_event(sd_resolve *resolve, sd_event *e, int64_t priority);
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
89 * arguments are compatible with those of libc's
90 * getaddrinfo(3). The function returns a new query object. When the
91 * query is completed, you may retrieve the results using
92 * sd_resolve_getaddrinfo_done(). */
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
96 * arguments are compatible with those of libc's
97 * getnameinfo(3). The function returns a new query object. When the
98 * query is completed, you may retrieve the results using
99 * sd_resolve_getnameinfo_done(). Set gethost (resp. getserv) to non-zero
100 * if you want to query the hostname (resp. the service name). */
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);
102
103sd_resolve_query *sd_resolve_query_ref(sd_resolve_query *q);
104sd_resolve_query *sd_resolve_query_unref(sd_resolve_query *q);
105
106/* Returns non-zero when the query operation specified by q has been completed. */
107int sd_resolve_query_is_done(sd_resolve_query *q);
108
109void *sd_resolve_query_get_userdata(sd_resolve_query *q);
110void *sd_resolve_query_set_userdata(sd_resolve_query *q, void *userdata);
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);
113int sd_resolve_query_get_floating(sd_resolve_query *q);
114int sd_resolve_query_set_floating(sd_resolve_query *q, int b);
115
116sd_resolve *sd_resolve_query_get_resolve(sd_resolve_query *q);
117
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
121_SD_END_DECLARATIONS;
122
123#endif