1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #ifndef foosdresolvehfoo
3 #define foosdresolvehfoo
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.
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.
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/>.
20 /* 'struct addrinfo' needs _GNU_SOURCE */
25 #include <sys/socket.h>
27 #include "_sd-common.h"
29 _SD_BEGIN_DECLARATIONS
;
33 typedef struct sd_event sd_event
;
35 /* An opaque sd-resolve session structure */
36 typedef struct sd_resolve sd_resolve
;
38 /* An opaque sd-resolve query structure */
39 typedef struct sd_resolve_query sd_resolve_query
;
41 /* A callback on completion */
42 typedef int (*sd_resolve_getaddrinfo_handler_t
)(sd_resolve_query
*q
, int ret
, const struct addrinfo
*ai
, void *userdata
);
43 typedef int (*sd_resolve_getnameinfo_handler_t
)(sd_resolve_query
*q
, int ret
, const char *host
, const char *serv
, void *userdata
);
44 typedef _sd_destroy_t sd_resolve_destroy_t
;
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
52 int sd_resolve_default(sd_resolve
**ret
);
54 /* Allocate a new sd-resolve session. */
55 int sd_resolve_new(sd_resolve
**ret
);
57 /* Free a sd-resolve session. This destroys all attached
58 * sd_resolve_query objects automatically. */
59 sd_resolve
* sd_resolve_unref(sd_resolve
*resolve
);
60 sd_resolve
* sd_resolve_ref(sd_resolve
*resolve
);
62 /* Return the UNIX file descriptor to poll() for events on. Use this
63 * function to integrate sd-resolve with your custom main loop. */
64 int sd_resolve_get_fd(sd_resolve
*resolve
);
66 /* Return the poll() events (a combination of flags like POLLIN,
67 * POLLOUT, ...) to check for. */
68 int sd_resolve_get_events(sd_resolve
*resolve
);
70 /* Return the poll() timeout to pass. Returns UINT64_MAX as
71 * timeout if no timeout is needed. */
72 int sd_resolve_get_timeout(sd_resolve
*resolve
, uint64_t *timeout_usec
);
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(). */
77 int sd_resolve_process(sd_resolve
*resolve
);
79 /* Wait for a resolve event to complete. */
80 int sd_resolve_wait(sd_resolve
*resolve
, uint64_t timeout_usec
);
82 int sd_resolve_get_tid(sd_resolve
*resolve
, pid_t
*tid
);
84 int sd_resolve_attach_event(sd_resolve
*resolve
, sd_event
*e
, int64_t priority
);
85 int sd_resolve_detach_event(sd_resolve
*resolve
);
86 sd_event
*sd_resolve_get_event(sd_resolve
*resolve
);
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(). */
93 int 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
);
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). */
101 int 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
);
103 sd_resolve_query
*sd_resolve_query_ref(sd_resolve_query
*q
);
104 sd_resolve_query
*sd_resolve_query_unref(sd_resolve_query
*q
);
106 /* Returns non-zero when the query operation specified by q has been completed. */
107 int sd_resolve_query_is_done(sd_resolve_query
*q
);
109 void *sd_resolve_query_get_userdata(sd_resolve_query
*q
);
110 void *sd_resolve_query_set_userdata(sd_resolve_query
*q
, void *userdata
);
111 int sd_resolve_query_get_destroy_callback(sd_resolve_query
*q
, sd_resolve_destroy_t
*destroy_callback
);
112 int sd_resolve_query_set_destroy_callback(sd_resolve_query
*q
, sd_resolve_destroy_t destroy_callback
);
113 int sd_resolve_query_get_floating(sd_resolve_query
*q
);
114 int sd_resolve_query_set_floating(sd_resolve_query
*q
, int b
);
116 sd_resolve
*sd_resolve_query_get_resolve(sd_resolve_query
*q
);
118 _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_resolve
, sd_resolve_unref
);
119 _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_resolve_query
, sd_resolve_query_unref
);
121 _SD_END_DECLARATIONS
;