1 /* vi: set et sw=4 ts=4 cino=t0,(0: */
2 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
4 * This file is part of gsignond
6 * Copyright (C) 2012 Intel Corporation.
8 * Contact: Alexander Kanavin <alex.kanavin@gmail.com>
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
27 #include "gsignond/gsignond-plugin-interface.h"
28 #include "gsignond-plugin-enum-types.h"
30 G_DEFINE_INTERFACE (GSignondPlugin, gsignond_plugin, 0)
45 static guint signals[LAST_SIGNAL] = { 0 };
47 static void gsignond_plugin_default_init (GSignondPluginInterface *g_class)
49 signals[RESPONSE] = g_signal_new ("response", G_TYPE_FROM_CLASS (g_class),
50 G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE,
51 1, GSIGNOND_TYPE_SESSION_DATA);
53 signals[RESPONSE_FINAL] = g_signal_new ("response-final", G_TYPE_FROM_CLASS (g_class),
54 G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE,
55 1, GSIGNOND_TYPE_SESSION_DATA);
57 signals[STORE] = g_signal_new ("store", G_TYPE_FROM_CLASS (g_class),
58 G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE,
59 1, GSIGNOND_TYPE_DICTIONARY);
61 signals[ERROR] = g_signal_new ("error", G_TYPE_FROM_CLASS (g_class),
62 G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE,
65 signals[USER_ACTION_REQUIRED] = g_signal_new ("user-action-required",
66 G_TYPE_FROM_CLASS (g_class),
67 G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE,
68 1, GSIGNOND_TYPE_SIGNONUI_DATA);
70 signals[REFRESHED] = g_signal_new ("refreshed", G_TYPE_FROM_CLASS (g_class),
71 G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE,
72 1, GSIGNOND_TYPE_SIGNONUI_DATA);
74 signals[STATUS_CHANGED] = g_signal_new ("status-changed",
75 G_TYPE_FROM_CLASS (g_class),
76 G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE,
77 2, GSIGNOND_TYPE_PLUGIN_STATE, G_TYPE_STRING);
79 g_object_interface_install_property (g_class, g_param_spec_string ("type",
80 "Type", "Plugin type", "none",
81 G_PARAM_READABLE|G_PARAM_STATIC_STRINGS));
83 g_object_interface_install_property (g_class, g_param_spec_boxed (
84 "mechanisms", "Mechanisms", "List of plugin mechanisms",
85 G_TYPE_STRV, G_PARAM_READABLE|G_PARAM_STATIC_STRINGS));
89 void gsignond_plugin_cancel (GSignondPlugin *self)
91 g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
93 GSIGNOND_PLUGIN_GET_INTERFACE (self)->cancel (self);
96 void gsignond_plugin_request_initial (GSignondPlugin *self,
97 GSignondSessionData *session_data,
98 const gchar *mechanism)
100 g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
102 GSIGNOND_PLUGIN_GET_INTERFACE (self)->request_initial (self, session_data,
106 void gsignond_plugin_request (GSignondPlugin *self,
107 GSignondSessionData *session_data)
109 g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
111 GSIGNOND_PLUGIN_GET_INTERFACE (self)->request (self, session_data);
114 void gsignond_plugin_user_action_finished (GSignondPlugin *self,
115 GSignondSignonuiData *ui_data)
117 g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
119 GSIGNOND_PLUGIN_GET_INTERFACE (self)->user_action_finished (self,
123 void gsignond_plugin_refresh (GSignondPlugin *self,
124 GSignondSignonuiData *ui_data)
126 g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
128 GSIGNOND_PLUGIN_GET_INTERFACE (self)->refresh (self, ui_data);
131 void gsignond_plugin_response (GSignondPlugin *self,
132 GSignondSessionData *session_data)
134 g_signal_emit (self, signals[RESPONSE], 0, session_data);
137 void gsignond_plugin_response_final (GSignondPlugin *self,
138 GSignondSessionData *session_data)
140 g_signal_emit (self, signals[RESPONSE_FINAL], 0, session_data);
143 void gsignond_plugin_store (GSignondPlugin *self,
144 GSignondDictionary *token_data)
146 g_signal_emit (self, signals[STORE], 0, token_data);
149 void gsignond_plugin_error (GSignondPlugin *self, GError *error)
151 g_signal_emit (self, signals[ERROR], 0, error);
154 void gsignond_plugin_user_action_required (GSignondPlugin *self,
155 GSignondSignonuiData *ui_data)
157 g_signal_emit (self, signals[USER_ACTION_REQUIRED], 0, ui_data);
160 void gsignond_plugin_refreshed (GSignondPlugin *self,
161 GSignondSignonuiData *ui_data)
163 g_signal_emit (self, signals[REFRESHED], 0, ui_data);
166 void gsignond_plugin_status_changed (GSignondPlugin *self,
167 GSignondPluginState state, const gchar *message)
169 g_signal_emit (self, signals[STATUS_CHANGED], 0, state, message);