1/* GIO - GLib Input, Output and Streaming Library
2 *
3 * Copyright (C) 2008 Red Hat, Inc.
4 * Copyright (C) 2018 Igalia S.L.
5 *
6 * SPDX-License-Identifier: LGPL-2.1-or-later
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General
19 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
20 */
21
22#ifndef __G_RESOLVER_H__
23#define __G_RESOLVER_H__
24
25#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
26#error "Only <gio/gio.h> can be included directly."
27#endif
28
29#include <gio/giotypes.h>
30
31G_BEGIN_DECLS
32
33#define G_TYPE_RESOLVER (g_resolver_get_type ())
34#define G_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_RESOLVER, GResolver))
35#define G_RESOLVER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_RESOLVER, GResolverClass))
36#define G_IS_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_RESOLVER))
37#define G_IS_RESOLVER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_RESOLVER))
38#define G_RESOLVER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_RESOLVER, GResolverClass))
39
40typedef struct _GResolverPrivate GResolverPrivate;
41typedef struct _GResolverClass GResolverClass;
42
43struct _GResolver {
44 GObject parent_instance;
45
46 GResolverPrivate *priv;
47};
48
49/**
50 * GResolverNameLookupFlags:
51 * @G_RESOLVER_NAME_LOOKUP_FLAGS_DEFAULT: default behavior (same as g_resolver_lookup_by_name())
52 * @G_RESOLVER_NAME_LOOKUP_FLAGS_IPV4_ONLY: only resolve ipv4 addresses
53 * @G_RESOLVER_NAME_LOOKUP_FLAGS_IPV6_ONLY: only resolve ipv6 addresses
54 *
55 * Flags to modify lookup behavior.
56 *
57 * Since: 2.60
58 */
59typedef enum {
60 G_RESOLVER_NAME_LOOKUP_FLAGS_DEFAULT = 0,
61 G_RESOLVER_NAME_LOOKUP_FLAGS_IPV4_ONLY = 1 << 0,
62 G_RESOLVER_NAME_LOOKUP_FLAGS_IPV6_ONLY = 1 << 1,
63} GResolverNameLookupFlags;
64
65struct _GResolverClass {
66 GObjectClass parent_class;
67
68 /* Signals */
69 void ( *reload) (GResolver *resolver);
70
71 /* Virtual methods */
72 GList * ( *lookup_by_name) (GResolver *resolver,
73 const gchar *hostname,
74 GCancellable *cancellable,
75 GError **error);
76 void ( *lookup_by_name_async) (GResolver *resolver,
77 const gchar *hostname,
78 GCancellable *cancellable,
79 GAsyncReadyCallback callback,
80 gpointer user_data);
81 GList * ( *lookup_by_name_finish) (GResolver *resolver,
82 GAsyncResult *result,
83 GError **error);
84
85 gchar * ( *lookup_by_address) (GResolver *resolver,
86 GInetAddress *address,
87 GCancellable *cancellable,
88 GError **error);
89 void ( *lookup_by_address_async) (GResolver *resolver,
90 GInetAddress *address,
91 GCancellable *cancellable,
92 GAsyncReadyCallback callback,
93 gpointer user_data);
94 gchar * ( *lookup_by_address_finish) (GResolver *resolver,
95 GAsyncResult *result,
96 GError **error);
97
98 GList * ( *lookup_service) (GResolver *resolver,
99 const gchar *rrname,
100 GCancellable *cancellable,
101 GError **error);
102 void ( *lookup_service_async) (GResolver *resolver,
103 const gchar *rrname,
104 GCancellable *cancellable,
105 GAsyncReadyCallback callback,
106 gpointer user_data);
107 GList * ( *lookup_service_finish) (GResolver *resolver,
108 GAsyncResult *result,
109 GError **error);
110
111 GList * ( *lookup_records) (GResolver *resolver,
112 const gchar *rrname,
113 GResolverRecordType record_type,
114 GCancellable *cancellable,
115 GError **error);
116
117 void ( *lookup_records_async) (GResolver *resolver,
118 const gchar *rrname,
119 GResolverRecordType record_type,
120 GCancellable *cancellable,
121 GAsyncReadyCallback callback,
122 gpointer user_data);
123
124 GList * ( *lookup_records_finish) (GResolver *resolver,
125 GAsyncResult *result,
126 GError **error);
127 /**
128 * GResolverClass::lookup_by_name_with_flags_async:
129 * @resolver: a #GResolver
130 * @hostname: the hostname to resolve
131 * @flags: extra #GResolverNameLookupFlags to modify the lookup
132 * @cancellable: (nullable): a #GCancellable
133 * @callback: (scope async): a #GAsyncReadyCallback to call when completed
134 * @user_data: data to pass to @callback
135 *
136 * Asynchronous version of GResolverClass::lookup_by_name_with_flags
137 *
138 * GResolverClass::lookup_by_name_with_flags_finish will be called to get
139 * the result.
140 *
141 * Since: 2.60
142 */
143 void ( *lookup_by_name_with_flags_async) (GResolver *resolver,
144 const gchar *hostname,
145 GResolverNameLookupFlags flags,
146 GCancellable *cancellable,
147 GAsyncReadyCallback callback,
148 gpointer user_data);
149 /**
150 * GResolverClass::lookup_by_name_with_flags_finish:
151 * @resolver: a #GResolver
152 * @result: a #GAsyncResult
153 * @error: (nullable): a pointer to a %NULL #GError
154 *
155 * Gets the result from GResolverClass::lookup_by_name_with_flags_async
156 *
157 * Returns: (element-type GInetAddress) (transfer full): List of #GInetAddress.
158 * Since: 2.60
159 */
160 GList * ( *lookup_by_name_with_flags_finish) (GResolver *resolver,
161 GAsyncResult *result,
162 GError **error);
163 /**
164 * GResolverClass::lookup_by_name_with_flags:
165 * @resolver: a #GResolver
166 * @hostname: the hostname to resolve
167 * @flags: extra #GResolverNameLookupFlags to modify the lookup
168 * @cancellable: (nullable): a #GCancellable
169 * @error: (nullable): a pointer to a %NULL #GError
170 *
171 * This is identical to GResolverClass::lookup_by_name except it takes
172 * @flags which modifies the behavior of the lookup. See #GResolverNameLookupFlags
173 * for more details.
174 *
175 * Returns: (element-type GInetAddress) (transfer full): List of #GInetAddress.
176 * Since: 2.60
177 */
178 GList * ( *lookup_by_name_with_flags) (GResolver *resolver,
179 const gchar *hostname,
180 GResolverNameLookupFlags flags,
181 GCancellable *cancellable,
182 GError **error);
183
184};
185
186GIO_AVAILABLE_IN_ALL
187GType g_resolver_get_type (void) G_GNUC_CONST;
188GIO_AVAILABLE_IN_ALL
189GResolver *g_resolver_get_default (void);
190GIO_AVAILABLE_IN_ALL
191void g_resolver_set_default (GResolver *resolver);
192GIO_AVAILABLE_IN_ALL
193GList *g_resolver_lookup_by_name (GResolver *resolver,
194 const gchar *hostname,
195 GCancellable *cancellable,
196 GError **error);
197GIO_AVAILABLE_IN_ALL
198void g_resolver_lookup_by_name_async (GResolver *resolver,
199 const gchar *hostname,
200 GCancellable *cancellable,
201 GAsyncReadyCallback callback,
202 gpointer user_data);
203GIO_AVAILABLE_IN_ALL
204GList *g_resolver_lookup_by_name_finish (GResolver *resolver,
205 GAsyncResult *result,
206 GError **error);
207GIO_AVAILABLE_IN_2_60
208void g_resolver_lookup_by_name_with_flags_async (GResolver *resolver,
209 const gchar *hostname,
210 GResolverNameLookupFlags flags,
211 GCancellable *cancellable,
212 GAsyncReadyCallback callback,
213 gpointer user_data);
214GIO_AVAILABLE_IN_2_60
215GList *g_resolver_lookup_by_name_with_flags_finish (GResolver *resolver,
216 GAsyncResult *result,
217 GError **error);
218GIO_AVAILABLE_IN_2_60
219GList *g_resolver_lookup_by_name_with_flags (GResolver *resolver,
220 const gchar *hostname,
221 GResolverNameLookupFlags flags,
222 GCancellable *cancellable,
223 GError **error);
224GIO_AVAILABLE_IN_ALL
225void g_resolver_free_addresses (GList *addresses);
226GIO_AVAILABLE_IN_ALL
227gchar *g_resolver_lookup_by_address (GResolver *resolver,
228 GInetAddress *address,
229 GCancellable *cancellable,
230 GError **error);
231GIO_AVAILABLE_IN_ALL
232void g_resolver_lookup_by_address_async (GResolver *resolver,
233 GInetAddress *address,
234 GCancellable *cancellable,
235 GAsyncReadyCallback callback,
236 gpointer user_data);
237GIO_AVAILABLE_IN_ALL
238gchar *g_resolver_lookup_by_address_finish (GResolver *resolver,
239 GAsyncResult *result,
240 GError **error);
241GIO_AVAILABLE_IN_ALL
242GList *g_resolver_lookup_service (GResolver *resolver,
243 const gchar *service,
244 const gchar *protocol,
245 const gchar *domain,
246 GCancellable *cancellable,
247 GError **error);
248GIO_AVAILABLE_IN_ALL
249void g_resolver_lookup_service_async (GResolver *resolver,
250 const gchar *service,
251 const gchar *protocol,
252 const gchar *domain,
253 GCancellable *cancellable,
254 GAsyncReadyCallback callback,
255 gpointer user_data);
256GIO_AVAILABLE_IN_ALL
257GList *g_resolver_lookup_service_finish (GResolver *resolver,
258 GAsyncResult *result,
259 GError **error);
260GIO_AVAILABLE_IN_2_34
261GList *g_resolver_lookup_records (GResolver *resolver,
262 const gchar *rrname,
263 GResolverRecordType record_type,
264 GCancellable *cancellable,
265 GError **error);
266GIO_AVAILABLE_IN_2_34
267void g_resolver_lookup_records_async (GResolver *resolver,
268 const gchar *rrname,
269 GResolverRecordType record_type,
270 GCancellable *cancellable,
271 GAsyncReadyCallback callback,
272 gpointer user_data);
273GIO_AVAILABLE_IN_2_34
274GList *g_resolver_lookup_records_finish (GResolver *resolver,
275 GAsyncResult *result,
276 GError **error);
277GIO_AVAILABLE_IN_ALL
278void g_resolver_free_targets (GList *targets);
279
280GIO_AVAILABLE_IN_2_78
281unsigned g_resolver_get_timeout (GResolver *resolver);
282GIO_AVAILABLE_IN_2_78
283void g_resolver_set_timeout (GResolver *resolver,
284 unsigned timeout_ms);
285
286/**
287 * G_RESOLVER_ERROR:
288 *
289 * Error domain for #GResolver. Errors in this domain will be from the
290 * #GResolverError enumeration. See #GError for more information on
291 * error domains.
292 */
293#define G_RESOLVER_ERROR (g_resolver_error_quark ())
294GIO_AVAILABLE_IN_ALL
295GQuark g_resolver_error_quark (void);
296
297G_END_DECLS
298
299#endif /* __G_RESOLVER_H__ */
300