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