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