|
Packit |
79f644 |
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
Packit |
79f644 |
/*
|
|
Packit |
79f644 |
* Copyright © 2011 – 2017 Red Hat, Inc.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* This library is free software; you can redistribute it and/or
|
|
Packit |
79f644 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
79f644 |
* License as published by the Free Software Foundation; either
|
|
Packit |
79f644 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
79f644 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
79f644 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
79f644 |
* Lesser General Public License for more details.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* You should have received a copy of the GNU Lesser General
|
|
Packit |
79f644 |
* Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
79f644 |
*/
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#include "config.h"
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#include <glib/gi18n-lib.h>
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#include "goamailauth.h"
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
struct _GoaMailAuthPrivate
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GDataInputStream *input;
|
|
Packit |
79f644 |
GDataOutputStream *output;
|
|
Packit |
79f644 |
};
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
enum
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
PROP_0,
|
|
Packit |
79f644 |
PROP_INPUT,
|
|
Packit |
79f644 |
PROP_OUTPUT
|
|
Packit |
79f644 |
};
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GoaMailAuth, goa_mail_auth, G_TYPE_OBJECT);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
mail_auth_run_in_thread_func (GTask *task,
|
|
Packit |
79f644 |
gpointer object,
|
|
Packit |
79f644 |
G_GNUC_UNUSED gpointer task_data,
|
|
Packit |
79f644 |
GCancellable *cancellable)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GError *error;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
error = NULL;
|
|
Packit |
79f644 |
if (!goa_mail_auth_run_sync (GOA_MAIL_AUTH (object), cancellable, &error))
|
|
Packit |
79f644 |
g_task_return_error (task, error);
|
|
Packit |
79f644 |
else
|
|
Packit |
79f644 |
g_task_return_boolean (task, TRUE);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
mail_auth_starttls_in_thread_func (GTask *task,
|
|
Packit |
79f644 |
gpointer object,
|
|
Packit |
79f644 |
G_GNUC_UNUSED gpointer task_data,
|
|
Packit |
79f644 |
GCancellable *cancellable)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GError *error;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
error = NULL;
|
|
Packit |
79f644 |
if (!goa_mail_auth_starttls_sync (GOA_MAIL_AUTH (object), cancellable, &error))
|
|
Packit |
79f644 |
g_task_return_error (task, error);
|
|
Packit |
79f644 |
else
|
|
Packit |
79f644 |
g_task_return_boolean (task, TRUE);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
goa_mail_auth_dispose (GObject *object)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GoaMailAuth *self = GOA_MAIL_AUTH (object);
|
|
Packit |
79f644 |
GoaMailAuthPrivate *priv;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
priv = goa_mail_auth_get_instance_private (self);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_clear_object (&priv->input);
|
|
Packit |
79f644 |
g_clear_object (&priv->output);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
G_OBJECT_CLASS (goa_mail_auth_parent_class)->dispose (object);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
goa_mail_auth_get_property (GObject *object,
|
|
Packit |
79f644 |
guint prop_id,
|
|
Packit |
79f644 |
GValue *value,
|
|
Packit |
79f644 |
GParamSpec *pspec)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GoaMailAuth *self = GOA_MAIL_AUTH (object);
|
|
Packit |
79f644 |
GoaMailAuthPrivate *priv;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
priv = goa_mail_auth_get_instance_private (self);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
switch (prop_id)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
case PROP_INPUT:
|
|
Packit |
79f644 |
g_value_set_object (value, priv->input);
|
|
Packit |
79f644 |
break;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
case PROP_OUTPUT:
|
|
Packit |
79f644 |
g_value_set_object (value, priv->output);
|
|
Packit |
79f644 |
break;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
default:
|
|
Packit |
79f644 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit |
79f644 |
break;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
goa_mail_auth_set_property (GObject *object,
|
|
Packit |
79f644 |
guint prop_id,
|
|
Packit |
79f644 |
const GValue *value,
|
|
Packit |
79f644 |
GParamSpec *pspec)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GoaMailAuth *self = GOA_MAIL_AUTH (object);
|
|
Packit |
79f644 |
GoaMailAuthPrivate *priv;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
priv = goa_mail_auth_get_instance_private (self);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
switch (prop_id)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
case PROP_INPUT:
|
|
Packit |
79f644 |
priv->input = g_value_dup_object (value);
|
|
Packit |
79f644 |
break;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
case PROP_OUTPUT:
|
|
Packit |
79f644 |
priv->output = g_value_dup_object (value);
|
|
Packit |
79f644 |
break;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
default:
|
|
Packit |
79f644 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit |
79f644 |
break;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
goa_mail_auth_init (GoaMailAuth *self)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
goa_mail_auth_class_init (GoaMailAuthClass *klass)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gobject_class->dispose = goa_mail_auth_dispose;
|
|
Packit |
79f644 |
gobject_class->get_property = goa_mail_auth_get_property;
|
|
Packit |
79f644 |
gobject_class->set_property = goa_mail_auth_set_property;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_class_install_property (gobject_class,
|
|
Packit |
79f644 |
PROP_INPUT,
|
|
Packit |
79f644 |
g_param_spec_object ("input",
|
|
Packit |
79f644 |
"input",
|
|
Packit |
79f644 |
"input",
|
|
Packit |
79f644 |
G_TYPE_DATA_INPUT_STREAM,
|
|
Packit |
79f644 |
G_PARAM_READWRITE |
|
|
Packit |
79f644 |
G_PARAM_STATIC_STRINGS));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_class_install_property (gobject_class,
|
|
Packit |
79f644 |
PROP_OUTPUT,
|
|
Packit |
79f644 |
g_param_spec_object ("output",
|
|
Packit |
79f644 |
"output",
|
|
Packit |
79f644 |
"output",
|
|
Packit |
79f644 |
G_TYPE_DATA_OUTPUT_STREAM,
|
|
Packit |
79f644 |
G_PARAM_READWRITE |
|
|
Packit |
79f644 |
G_PARAM_STATIC_STRINGS));
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gboolean
|
|
Packit |
79f644 |
goa_mail_auth_is_needed (GoaMailAuth *self)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
|
|
Packit |
79f644 |
return GOA_MAIL_AUTH_GET_CLASS (self)->is_needed (self);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gboolean
|
|
Packit |
79f644 |
goa_mail_auth_run_sync (GoaMailAuth *self,
|
|
Packit |
79f644 |
GCancellable *cancellable,
|
|
Packit |
79f644 |
GError **error)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
|
|
Packit |
79f644 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
|
|
Packit |
79f644 |
return GOA_MAIL_AUTH_GET_CLASS (self)->run_sync (self, cancellable, error);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
void
|
|
Packit |
79f644 |
goa_mail_auth_run (GoaMailAuth *self,
|
|
Packit |
79f644 |
GCancellable *cancellable,
|
|
Packit |
79f644 |
GAsyncReadyCallback callback,
|
|
Packit |
79f644 |
gpointer user_data)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GTask *task;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_if_fail (GOA_IS_MAIL_AUTH (self));
|
|
Packit |
79f644 |
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
task = g_task_new (self, cancellable, callback, user_data);
|
|
Packit |
79f644 |
g_task_set_source_tag (task, goa_mail_auth_run);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_task_run_in_thread (task, mail_auth_run_in_thread_func);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_unref (task);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gboolean
|
|
Packit |
79f644 |
goa_mail_auth_run_finish (GoaMailAuth *self,
|
|
Packit |
79f644 |
GAsyncResult *res,
|
|
Packit |
79f644 |
GError **error)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GTask *task;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
|
|
Packit |
79f644 |
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_val_if_fail (g_task_is_valid (res, self), FALSE);
|
|
Packit |
79f644 |
task = G_TASK (res);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_val_if_fail (g_task_get_source_tag (task) == goa_mail_auth_run, FALSE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return g_task_propagate_boolean (task, error);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gboolean
|
|
Packit |
79f644 |
goa_mail_auth_starttls_sync (GoaMailAuth *self,
|
|
Packit |
79f644 |
GCancellable *cancellable,
|
|
Packit |
79f644 |
GError **error)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
|
|
Packit |
79f644 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
|
|
Packit |
79f644 |
return GOA_MAIL_AUTH_GET_CLASS (self)->starttls_sync (self, cancellable, error);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
void
|
|
Packit |
79f644 |
goa_mail_auth_starttls (GoaMailAuth *self,
|
|
Packit |
79f644 |
GCancellable *cancellable,
|
|
Packit |
79f644 |
GAsyncReadyCallback callback,
|
|
Packit |
79f644 |
gpointer user_data)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GTask *task;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_if_fail (GOA_IS_MAIL_AUTH (self));
|
|
Packit |
79f644 |
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
task = g_task_new (self, cancellable, callback, user_data);
|
|
Packit |
79f644 |
g_task_set_source_tag (task, goa_mail_auth_starttls);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_task_run_in_thread (task, mail_auth_starttls_in_thread_func);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_unref (task);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gboolean
|
|
Packit |
79f644 |
goa_mail_auth_starttls_finish (GoaMailAuth *self,
|
|
Packit |
79f644 |
GAsyncResult *res,
|
|
Packit |
79f644 |
GError **error)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GTask *task;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
|
|
Packit |
79f644 |
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_val_if_fail (g_task_is_valid (res, self), FALSE);
|
|
Packit |
79f644 |
task = G_TASK (res);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_val_if_fail (g_task_get_source_tag (task) == goa_mail_auth_starttls, FALSE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return g_task_propagate_boolean (task, error);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
GDataInputStream *
|
|
Packit |
79f644 |
goa_mail_auth_get_input (GoaMailAuth *self)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GoaMailAuthPrivate *priv;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
priv = goa_mail_auth_get_instance_private (self);
|
|
Packit |
79f644 |
return priv->input;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
void
|
|
Packit |
79f644 |
goa_mail_auth_set_input (GoaMailAuth *self,
|
|
Packit |
79f644 |
GDataInputStream *input)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GoaMailAuthPrivate *priv;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
priv = goa_mail_auth_get_instance_private (self);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (priv->input == input)
|
|
Packit |
79f644 |
return;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_clear_object (&priv->input);
|
|
Packit |
79f644 |
priv->input = g_object_ref (input);
|
|
Packit |
79f644 |
g_object_notify (G_OBJECT (self), "input");
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
GDataOutputStream *
|
|
Packit |
79f644 |
goa_mail_auth_get_output (GoaMailAuth *self)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GoaMailAuthPrivate *priv;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
priv = goa_mail_auth_get_instance_private (self);
|
|
Packit |
79f644 |
return priv->output;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
void
|
|
Packit |
79f644 |
goa_mail_auth_set_output (GoaMailAuth *self,
|
|
Packit |
79f644 |
GDataOutputStream *output)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GoaMailAuthPrivate *priv;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
priv = goa_mail_auth_get_instance_private (self);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (priv->output == output)
|
|
Packit |
79f644 |
return;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_clear_object (&priv->output);
|
|
Packit |
79f644 |
priv->output = g_object_ref (output);
|
|
Packit |
79f644 |
g_object_notify (G_OBJECT (self), "output");
|
|
Packit |
79f644 |
}
|