]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-resolve.h
test: also run compile tests for libudev.h
[thirdparty/systemd.git] / src / systemd / sd-resolve.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
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
TG
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://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 <inttypes.h>
e963e3ad 26#include <netdb.h>
04c01369
LP
27#include <sys/socket.h>
28#include <sys/types.h>
968d3d24 29
93f1bcf4 30#include "sd-event.h"
71d35b6b 31
04c01369 32#include "_sd-common.h"
1783d897
TG
33
34_SD_BEGIN_DECLARATIONS;
35
93f1bcf4 36/* An opaque sd-resolve session structure */
4f809256 37typedef struct sd_resolve sd_resolve;
e963e3ad 38
93f1bcf4 39/* An opaque sd-resolve query structure */
4f809256 40typedef struct sd_resolve_query sd_resolve_query;
e963e3ad 41
93f1bcf4
LP
42/* A callback on completion */
43typedef int (*sd_resolve_getaddrinfo_handler_t)(sd_resolve_query *q, int ret, const struct addrinfo *ai, void *userdata);
44typedef int (*sd_resolve_getnameinfo_handler_t)(sd_resolve_query *q, int ret, const char *host, const char *serv, void *userdata);
93f1bcf4
LP
45
46enum {
9b505bc2
ZJS
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,
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
93f1bcf4 70/* Return the poll() timeout to pass. Returns (uint64_t) -1 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
93f1bcf4
LP
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);
111
112sd_resolve *sd_resolve_query_get_resolve(sd_resolve_query *q);
e963e3ad 113
4afd3348
LP
114_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_resolve, sd_resolve_unref);
115_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_resolve_query, sd_resolve_query_unref);
116
1783d897
TG
117_SD_END_DECLARATIONS;
118
e963e3ad 119#endif