* 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, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include "gnetworkaddress.h"
#include "gnetworkingprivate.h"
#include "gresolver.h"
-#include "gsimpleasyncresult.h"
+#include "gtask.h"
#include "gsocketaddressenumerator.h"
#include "gsocketconnectable.h"
#include "gsrvtarget.h"
static GSocketAddressEnumerator *g_network_service_connectable_proxy_enumerate (GSocketConnectable *connectable);
G_DEFINE_TYPE_WITH_CODE (GNetworkService, g_network_service, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (GNetworkService)
G_IMPLEMENT_INTERFACE (G_TYPE_SOCKET_CONNECTABLE,
g_network_service_connectable_iface_init))
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (GNetworkServicePrivate));
-
gobject_class->set_property = g_network_service_set_property;
gobject_class->get_property = g_network_service_get_property;
gobject_class->finalize = g_network_service_finalize;
static void
g_network_service_init (GNetworkService *srv)
{
- srv->priv = G_TYPE_INSTANCE_GET_PRIVATE (srv, G_TYPE_NETWORK_SERVICE,
- GNetworkServicePrivate);
+ srv->priv = g_network_service_get_instance_private (srv);
}
static void
* @protocol, and @domain. This will initially be unresolved; use the
* #GSocketConnectable interface to resolve it.
*
- * Return value: (transfer full) (type GNetworkService): a new #GNetworkService
+ * Returns: (transfer full) (type GNetworkService): a new #GNetworkService
*
* Since: 2.22
*/
*
* Gets @srv's service name (eg, "ldap").
*
- * Return value: @srv's service name
+ * Returns: @srv's service name
*
* Since: 2.22
*/
*
* Gets @srv's protocol name (eg, "tcp").
*
- * Return value: @srv's protocol name
+ * Returns: @srv's protocol name
*
* Since: 2.22
*/
* Gets the domain that @srv serves. This might be either UTF-8 or
* ASCII-encoded, depending on what @srv was created with.
*
- * Return value: @srv's domain name
+ * Returns: @srv's domain name
*
* Since: 2.22
*/
* Get's the URI scheme used to resolve proxies. By default, the service name
* is used as scheme.
*
- * Return value: @srv's scheme name
+ * Returns: @srv's scheme name
*
* Since: 2.26
*/
{
g_return_if_fail (G_IS_NETWORK_SERVICE (srv));
- if (srv->priv->scheme)
- g_free (srv->priv->scheme);
+ g_free (srv->priv->scheme);
srv->priv->scheme = g_strdup (scheme);
g_object_notify (G_OBJECT (srv), "scheme");
GError *error;
- /* For async operation */
- GCancellable *cancellable;
- GSimpleAsyncResult *result;
} GNetworkServiceAddressEnumerator;
typedef struct {
return ret;
}
-static void next_async_resolved_targets (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data);
-static void next_async_have_targets (GNetworkServiceAddressEnumerator *srv_enum);
-static void next_async_have_address (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data);
+static void next_async_resolved_targets (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data);
+static void next_async_have_targets (GTask *srv_enum);
+static void next_async_have_address (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data);
static void
g_network_service_address_enumerator_next_async (GSocketAddressEnumerator *enumerator,
{
GNetworkServiceAddressEnumerator *srv_enum =
G_NETWORK_SERVICE_ADDRESS_ENUMERATOR (enumerator);
+ GTask *task;
- g_return_if_fail (srv_enum->result == NULL);
-
- srv_enum->result = g_simple_async_result_new (G_OBJECT (enumerator),
- callback, user_data,
- g_network_service_address_enumerator_next_async);
-
- if (cancellable)
- srv_enum->cancellable = g_object_ref (cancellable);
+ task = g_task_new (enumerator, cancellable, callback, user_data);
/* If we haven't yet resolved srv, do that */
if (!srv_enum->srv->priv->targets)
srv_enum->srv->priv->domain,
cancellable,
next_async_resolved_targets,
- srv_enum);
+ task);
}
else
- next_async_have_targets (srv_enum);
+ next_async_have_targets (task);
}
static void
GAsyncResult *result,
gpointer user_data)
{
- GNetworkServiceAddressEnumerator *srv_enum = user_data;
+ GTask *task = user_data;
+ GNetworkServiceAddressEnumerator *srv_enum = g_task_get_source_object (task);
GError *error = NULL;
GList *targets;
if (error)
{
- GSimpleAsyncResult *simple = srv_enum->result;
-
- srv_enum->result = NULL;
- g_simple_async_result_take_error (simple, error);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+ g_task_return_error (task, error);
+ g_object_unref (task);
}
else
{
srv_enum->t = srv_enum->srv->priv->targets = targets;
- next_async_have_targets (srv_enum);
+ next_async_have_targets (task);
}
}
static void
-next_async_have_targets (GNetworkServiceAddressEnumerator *srv_enum)
+next_async_have_targets (GTask *task)
{
+ GNetworkServiceAddressEnumerator *srv_enum = g_task_get_source_object (task);
+
/* Delegate to GNetworkAddress */
if (srv_enum->addr_enum == NULL && srv_enum->t)
{
if (srv_enum->addr_enum)
{
g_socket_address_enumerator_next_async (srv_enum->addr_enum,
- srv_enum->cancellable,
+ g_task_get_cancellable (task),
next_async_have_address,
- srv_enum);
+ task);
}
else
{
- GSimpleAsyncResult *simple = srv_enum->result;
- srv_enum->result = NULL;
-
if (srv_enum->error)
{
- g_simple_async_result_take_error (simple, srv_enum->error);
+ g_task_return_error (task, srv_enum->error);
srv_enum->error = NULL;
}
+ else
+ g_task_return_pointer (task, NULL, NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+ g_object_unref (task);
}
}
GAsyncResult *result,
gpointer user_data)
{
- GNetworkServiceAddressEnumerator *srv_enum = user_data;
+ GTask *task = user_data;
+ GNetworkServiceAddressEnumerator *srv_enum = g_task_get_source_object (task);
GSocketAddress *address;
GError *error = NULL;
g_object_unref (srv_enum->addr_enum);
srv_enum->addr_enum = NULL;
- next_async_have_targets (srv_enum);
+ next_async_have_targets (task);
}
else
{
- GSimpleAsyncResult *simple = srv_enum->result;
-
- srv_enum->result = NULL;
-
- if (address)
- g_simple_async_result_set_op_res_gpointer (simple,
- address, g_object_unref);
-
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+ g_task_return_pointer (task, address, g_object_unref);
+ g_object_unref (task);
}
}
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
- GSocketAddress *sockaddr;
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- sockaddr = g_simple_async_result_get_op_res_gpointer (simple);
- return sockaddr ? g_object_ref (sockaddr) : NULL;
+ return g_task_propagate_pointer (G_TASK (result), error);
}
static void
if (srv_enum->resolver)
g_object_unref (srv_enum->resolver);
- if (srv_enum->result)
- g_object_unref (srv_enum->result);
-
- if (srv_enum->cancellable)
- g_object_unref (srv_enum->cancellable);
-
if (srv_enum->error)
g_error_free (srv_enum->error);