/* Copyright (C) 2009 jonathon jongsma
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see .
*/
#include
#include
#include
#include
#include
_DEFS(giomm,gio)
_PINCLUDE(glibmm/private/object_p.h)
// Forward declarations for classes in the Glib namespace.
namespace Glib
{
class GLIBMM_API VariantContainerBase;
}
namespace Gio
{
/** Asynchronous and cancellable DNS resolver
*
* Resolver provides cancellable synchronous and asynchronous DNS resolution,
* for hostnames (lookup_by_address(), lookup_by_name() and their async
* variants) and SRV (service) records (lookup_service()).
*
* NetworkAddress and NetworkService provide wrappers around Resolver
* functionality that also implement SocketConnectable, making it easy to
* connect to a remote host/service.
*
* @newin{2,24}
* @ingroup NetworkIO
*/
class GIOMM_API Resolver
: public Glib::Object
{
_CLASS_GOBJECT(Resolver, GResolver, G_RESOLVER, Glib::Object, GObject, , , GIOMM_API)
protected:
public:
_WRAP_ENUM(RecordType, GResolverRecordType, decl_prefix GIOMM_API)
_WRAP_ENUM(NameLookupFlags, GResolverNameLookupFlags, decl_prefix GIOMM_API, newin "2,74")
static Glib::RefPtr get_default();
_IGNORE(g_resolver_get_default)
static void set_default(const Glib::RefPtr& resolver);
_IGNORE(g_resolver_set_default)
// g_resolver_free_addresses is just a C convenience function
_IGNORE(g_resolver_free_addresses)
#m4 _CONVERSION(`GList*',`std::vector>',`Glib::ListHandler>::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
_WRAP_METHOD(std::vector> lookup_by_name(const Glib::ustring& hostname, const Glib::RefPtr& cancellable{?}), g_resolver_lookup_by_name, errthrow)
/** Begins asynchronously resolving hostname to determine its associated IP address(es), and eventually calls @a slot, which must call
* lookup_by_name_finish() to get the result. See lookup_by_name() for more details.
*
* @param hostname The hostname to look up.
* @param slot A callback slot to call after the resolution completes.
* @param cancellable A Cancellable object which can be used to cancel the operation.
*/
void lookup_by_name_async(const Glib::ustring& hostname, const SlotAsyncReady& slot, const Glib::RefPtr& cancellable);
/** Begins asynchronously resolving hostname to determine its associated IP address(es), and eventually calls @a slot, which must call
* lookup_by_name_finish() to get the result. See lookup_by_name() for more details.
*
* @param hostname The hostname to look up.
* @param slot A callback slot to call after the resolution completes.
*/
void lookup_by_name_async(const Glib::ustring& hostname, const SlotAsyncReady& slot);
_IGNORE(g_resolver_lookup_by_name_async)
_WRAP_METHOD(std::vector> lookup_by_name_finish(
const Glib::RefPtr& result), g_resolver_lookup_by_name_finish, errthrow)
_WRAP_METHOD(std::vector> lookup_by_name_with_flags(const Glib::ustring& hostname,
NameLookupFlags flags, const Glib::RefPtr& cancellable = {}), g_resolver_lookup_by_name_with_flags,
errthrow, newin "2,74")
_WRAP_METHOD(void lookup_by_name_with_flags_async(const Glib::ustring& hostname,
NameLookupFlags flags, const SlotAsyncReady& slot{callback},
const Glib::RefPtr& cancellable{.} = {}), g_resolver_lookup_by_name_with_flags_async,
slot_name slot, slot_callback SignalProxy_async_callback, newin "2,74")
_WRAP_METHOD(std::vector> lookup_by_name_with_flags_finish(
const Glib::RefPtr& result), g_resolver_lookup_by_name_with_flags_finish,
errthrow, newin "2,74")
_WRAP_METHOD(Glib::ustring lookup_by_address(const Glib::RefPtr& address, const Glib::RefPtr& cancellable{?}), g_resolver_lookup_by_address, errthrow)
/** Begins asynchronously reverse-resolving an address to determine its associated hostname, and eventually calls callback, which must call
* lookup_by_address_finish() to get the final result.
*
* @param address The address to reverse-resolve.
* @param slot A callback slot to call after the resolution completes.
* @param cancellable A Cancellable object which can be used to cancel the operation.
*/
void lookup_by_address_async(const Glib::RefPtr& address, const SlotAsyncReady& slot, const Glib::RefPtr& cancellable);
/** Begins asynchronously reverse-resolving an address to determine its associated hostname, and eventually calls callback, which must call
* lookup_by_address_finish() to get the final result.
*
* @param address The address to reverse-resolve.
* @param slot A callback slot to call after the resolution completes.
*/
void lookup_by_address_async(const Glib::RefPtr& address, const SlotAsyncReady& slot);
_IGNORE(g_resolver_lookup_by_address_async)
_WRAP_METHOD(Glib::ustring lookup_by_address_finish(const Glib::RefPtr& result), g_resolver_lookup_by_address_finish, errthrow)
#m4 _CONVERSION(`GList*',`std::vector',`Glib::ListHandler::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
_WRAP_METHOD(std::vector lookup_service(const Glib::ustring& service, const Glib::ustring& protocol, const Glib::ustring& domain, const Glib::RefPtr& cancellable{?}), g_resolver_lookup_service, errthrow)
/** Begins asynchronously performing a DNS SRV lookup for the given service and protocol in the given domain, and eventually calls callback,
* which must call lookup_service_finish() to get the final result. See glookup_service() for more details.
*
* @param service The service type to look up (eg, "ldap").
* @param protocol The networking protocol to use for service (eg, "tcp")
* @param domain The DNS domain to look up the service in.
* @param slot A callback slot to call after the resolution completes.
* @param cancellable A Cancellable object which can be used to cancel the operation.
*/
void lookup_service_async(const Glib::ustring& service, const Glib::ustring& protocol, const Glib::ustring& domain, const SlotAsyncReady& slot, const Glib::RefPtr& cancellable);
/** Begins asynchronously performing a DNS SRV lookup for the given service and protocol in the given domain, and eventually calls callback,
* which must call lookup_service_finish() to get the final result. See glookup_service() for more details.
*
* @param service The service type to look up (eg, "ldap").
* @param protocol The networking protocol to use for service (eg, "tcp")
* @param domain The DNS domain to look up the service in.
* @param slot A callback slot to call after the resolution completes.
*/
void lookup_service_async(const Glib::ustring& service, const Glib::ustring& protocol, const Glib::ustring& domain, const SlotAsyncReady& slot);
_IGNORE(g_resolver_lookup_service_async)
_WRAP_METHOD(std::vector lookup_service_finish(const Glib::RefPtr& result), g_resolver_lookup_service_finish, errthrow)
#m4 _CONVERSION(`GList*',`std::vector',`Glib::ListHandler::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
_WRAP_METHOD(std::vector lookup_records(const Glib::ustring& rrname, RecordType record_type, const Glib::RefPtr& cancellable{?}), g_resolver_lookup_records, errthrow)
/** Begins asynchronously performing a DNS lookup for the given @a rrname,
* and eventually calls @a slot, which must call lookup_records_finish() to
* get the final result. See lookup_records() for more details.
*
* @param rrname The DNS name to lookup the record for.
* @param record_type The type of DNS record to lookup.
* @param cancellable A Cancellable.
* @param slot The slot to call after the resolution completes.
* @newin{2,36}
*/
void lookup_records_async(const Glib::ustring& rrname,
RecordType record_type, const SlotAsyncReady& slot,
const Glib::RefPtr& cancellable);
_IGNORE(g_resolver_lookup_records_async)
/// A non-cancellable version of lookup_records_async().
void lookup_records_async(const Glib::ustring& rrname,
RecordType record_type, const SlotAsyncReady& slot);
_WRAP_METHOD(std::vector lookup_records_finish(const Glib::RefPtr& result), g_resolver_lookup_records_finish, errthrow)
_WRAP_SIGNAL(void reload(), reload)
};
GIOMM_API
std::string hostname_to_ascii (const Glib::ustring& hostname);
GIOMM_API
Glib::ustring hostname_to_unicode (const Glib::ustring& hostname);
GIOMM_API
bool hostname_is_non_ascii (const Glib::ustring& hostname);
GIOMM_API
bool hostname_is_ascii_encoded (const Glib::ustring& hostname);
GIOMM_API
bool hostname_is_ip_address (const Glib::ustring& hostname);
} // namespace Gio