]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-resolve.h
tree-wide: expose "p"-suffix unref calls in public APIs to make gcc cleanup easy
[thirdparty/systemd.git] / src / systemd / sd-resolve.h
CommitLineData
1783d897
TG
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3bedba4a
TG
3#ifndef foosdresolvehfoo
4#define foosdresolvehfoo
e963e3ad
DB
5
6/***
1783d897 7 This file is part of systemd.
e963e3ad 8
968d3d24 9 Copyright 2005-2014 Lennart Poettering
e963e3ad 10
1783d897
TG
11 systemd is free software; you can redistribute it and/or modify it
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
14 (at your option) any later version.
e963e3ad 15
1783d897 16 systemd is distributed in the hope that it will be useful, but
e963e3ad
DB
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 Lesser General Public License for more details.
20
1783d897
TG
21 You should have received a copy of the GNU Lesser General Public License
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
e963e3ad
DB
23***/
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 {
47 SD_RESOLVE_GET_HOST = 1ULL,
48 SD_RESOLVE_GET_SERVICE = 2ULL,
49 SD_RESOLVE_GET_BOTH = 3ULL
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
84int sd_resolve_attach_event(sd_resolve *resolve, sd_event *e, int 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
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