gresolver.h 17 KB

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