fa9d1319c4443525998f40cce256899faf88cb92
[profile/ivi/gsignond.git] / src / common / gsignond-plugin-interface.c
1 /* vi: set et sw=4 ts=4 cino=t0,(0: */
2 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 /*
4  * This file is part of gsignond
5  *
6  * Copyright (C) 2012 Intel Corporation.
7  *
8  * Contact: Alexander Kanavin <alex.kanavin@gmail.com>
9  *
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.
14  *
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.
19  *
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
23  * 02110-1301 USA
24  */
25
26
27 #include "gsignond/gsignond-plugin-interface.h"
28 #include "gsignond-plugin-enum-types.h"
29
30 G_DEFINE_INTERFACE (GSignondPlugin, gsignond_plugin, 0)
31
32 /* signals */
33 enum
34 {
35     RESPONSE,
36     RESPONSE_FINAL,
37     STORE,
38     ERROR,
39     USER_ACTION_REQUIRED,
40     REFRESHED,
41     STATUS_CHANGED,
42     LAST_SIGNAL
43 };
44
45 static guint signals[LAST_SIGNAL] = { 0 };
46
47 static void gsignond_plugin_default_init (GSignondPluginInterface *g_class)
48 {
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);
52
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);
56
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);
60
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,
63         1, G_TYPE_ERROR);
64     
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);
69
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);
73
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);
78
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));
82
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));
86     
87 }
88
89 void gsignond_plugin_cancel (GSignondPlugin *self)
90 {
91     g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
92     
93     GSIGNOND_PLUGIN_GET_INTERFACE (self)->cancel (self);
94 }
95
96 void gsignond_plugin_request_initial (GSignondPlugin *self, 
97                               GSignondSessionData *session_data, 
98                               const gchar *mechanism)
99 {
100     g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
101     
102     GSIGNOND_PLUGIN_GET_INTERFACE (self)->request_initial (self, session_data,
103             mechanism);
104 }
105
106 void gsignond_plugin_request (GSignondPlugin *self, 
107                               GSignondSessionData *session_data)
108 {
109     g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
110     
111     GSIGNOND_PLUGIN_GET_INTERFACE (self)->request (self, session_data);
112 }
113
114 void gsignond_plugin_user_action_finished (GSignondPlugin *self, 
115                                            GSignondSignonuiData *ui_data)
116 {
117     g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
118     
119     GSIGNOND_PLUGIN_GET_INTERFACE (self)->user_action_finished (self, 
120                                                                 ui_data);
121 }
122
123 void gsignond_plugin_refresh (GSignondPlugin *self, 
124                               GSignondSignonuiData *ui_data)
125 {
126     g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
127     
128     GSIGNOND_PLUGIN_GET_INTERFACE (self)->refresh (self, ui_data);
129 }
130
131 void gsignond_plugin_response (GSignondPlugin *self, 
132                              GSignondSessionData *session_data)
133 {
134     g_signal_emit (self, signals[RESPONSE], 0, session_data);
135 }
136
137 void gsignond_plugin_response_final (GSignondPlugin *self, 
138                              GSignondSessionData *session_data)
139 {
140     g_signal_emit (self, signals[RESPONSE_FINAL], 0, session_data);
141 }
142
143 void gsignond_plugin_store (GSignondPlugin *self, 
144                             GSignondDictionary *token_data)
145 {
146     g_signal_emit (self, signals[STORE], 0, token_data);
147 }
148
149 void gsignond_plugin_error (GSignondPlugin *self, GError *error)
150 {
151     g_signal_emit (self, signals[ERROR], 0, error);
152 }
153
154 void gsignond_plugin_user_action_required (GSignondPlugin *self, 
155                                            GSignondSignonuiData *ui_data)
156 {
157     g_signal_emit (self, signals[USER_ACTION_REQUIRED], 0, ui_data);
158 }
159
160 void gsignond_plugin_refreshed (GSignondPlugin *self, 
161                                 GSignondSignonuiData *ui_data)
162 {
163     g_signal_emit (self, signals[REFRESHED], 0, ui_data);
164 }
165
166 void gsignond_plugin_status_changed (GSignondPlugin *self,
167         GSignondPluginState state, const gchar *message)
168 {
169     g_signal_emit (self, signals[STATUS_CHANGED], 0, state, message);
170 }
171