1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /* camel-session.h : Abstract class for an email session
3  *
4  * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
5  *
6  * This library is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation.
9  *
10  * This library is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13  * for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this library. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * Authors: Bertrand Guiheneuf <bertrand@helixcode.com>
19  */
20 
21 #if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION)
22 #error "Only <camel/camel.h> can be included directly."
23 #endif
24 
25 #ifndef CAMEL_SESSION_H
26 #define CAMEL_SESSION_H
27 
28 #include <camel/camel-enums.h>
29 #include <camel/camel-filter-driver.h>
30 #include <camel/camel-junk-filter.h>
31 #include <camel/camel-msgport.h>
32 #include <camel/camel-provider.h>
33 #include <camel/camel-service.h>
34 #include <camel/camel-certdb.h>
35 
36 /* Standard GObject macros */
37 #define CAMEL_TYPE_SESSION \
38 	(camel_session_get_type ())
39 #define CAMEL_SESSION(obj) \
40 	(G_TYPE_CHECK_INSTANCE_CAST \
41 	((obj), CAMEL_TYPE_SESSION, CamelSession))
42 #define CAMEL_SESSION_CLASS(cls) \
43 	(G_TYPE_CHECK_CLASS_CAST \
44 	((cls), CAMEL_TYPE_SESSION, CamelSessionClass))
45 #define CAMEL_IS_SESSION(obj) \
46 	(G_TYPE_CHECK_INSTANCE_TYPE \
47 	((obj), CAMEL_TYPE_SESSION))
48 #define CAMEL_IS_SESSION_CLASS(cls) \
49 	(G_TYPE_CHECK_CLASS_TYPE \
50 	((cls), CAMEL_TYPE_SESSION))
51 #define CAMEL_SESSION_GET_CLASS(obj) \
52 	(G_TYPE_INSTANCE_GET_CLASS \
53 	((obj), CAMEL_TYPE_SESSION, CamelSessionClass))
54 
55 G_BEGIN_DECLS
56 
57 typedef struct _CamelSession CamelSession;
58 typedef struct _CamelSessionClass CamelSessionClass;
59 typedef struct _CamelSessionPrivate CamelSessionPrivate;
60 
61 enum {
62 	CAMEL_SESSION_PASSWORD_REPROMPT = 1 << 0,
63 	CAMEL_SESSION_PASSWORD_SECRET = 1 << 2,
64 	CAMEL_SESSION_PASSWORD_STATIC = 1 << 3,
65 	CAMEL_SESSION_PASSPHRASE = 1 << 4
66 };
67 
68 struct _CamelSession {
69 	GObject parent;
70 	CamelSessionPrivate *priv;
71 };
72 
73 /**
74  * CamelSessionCallback:
75  * @session: a #CamelSession
76  * @cancellable: a #CamelOperation cast as a #GCancellable
77  * @user_data: data passed to camel_session_submit_job()
78  * @error: return location for a #GError
79  *
80  * This is the callback signature for jobs submitted to the CamelSession
81  * via camel_session_submit_job().  The @error pointer is always non-%NULL,
82  * so it's safe to dereference to check if a #GError has been set.
83  *
84  * Since: 3.2
85  **/
86 typedef void	(*CamelSessionCallback)		(CamelSession *session,
87 						 GCancellable *cancellable,
88 						 gpointer user_data,
89 						 GError **error);
90 
91 struct _CamelSessionClass {
92 	GObjectClass parent_class;
93 
94 	CamelService *	(*add_service)		(CamelSession *session,
95 						 const gchar *uid,
96 						 const gchar *protocol,
97 						 CamelProviderType type,
98 						 GError **error);
99 	void		(*remove_service)	(CamelSession *session,
100 						 CamelService *service);
101 	gchar *		(*get_password)		(CamelSession *session,
102 						 CamelService *service,
103 						 const gchar *prompt,
104 						 const gchar *item,
105 						 guint32 flags,
106 						 GError **error);
107 	gboolean	(*forget_password)	(CamelSession *session,
108 						 CamelService *service,
109 						 const gchar *item,
110 						 GError **error);
111 	CamelCertTrust	(*trust_prompt)		(CamelSession *session,
112 						 CamelService *service,
113 						 GTlsCertificate *certificate,
114 						 GTlsCertificateFlags errors);
115 	CamelFilterDriver *
116 			(*get_filter_driver)	(CamelSession *session,
117 						 const gchar *type,
118 						 CamelFolder *for_folder,
119 						 GError **error);
120 	gboolean	(*lookup_addressbook)	(CamelSession *session,
121 						 const gchar *name);
122 
123 	/* Synchronous I/O Methods */
124 	gboolean	(*authenticate_sync)	(CamelSession *session,
125 						 CamelService *service,
126 						 const gchar *mechanism,
127 						 GCancellable *cancellable,
128 						 GError **error);
129 	gboolean	(*forward_to_sync)	(CamelSession *session,
130 						 CamelFolder *folder,
131 						 CamelMimeMessage *message,
132 						 const gchar *address,
133 						 GCancellable *cancellable,
134 						 GError **error);
135 	gboolean	(*get_oauth2_access_token_sync)
136 						(CamelSession *session,
137 						 CamelService *service,
138 						 gchar **out_access_token,
139 						 gint *out_expires_in,
140 						 GCancellable *cancellable,
141 						 GError **error);
142 	gboolean	(*get_recipient_certificates_sync)
143 						(CamelSession *session,
144 						 guint32 flags, /* bit-or of CamelRecipientCertificateFlags */
145 						 const GPtrArray *recipients, /* gchar * */
146 						 GSList **out_certificates, /* gchar * */
147 						 GCancellable *cancellable,
148 						 GError **error);
149 
150 	/* Padding for future expansion */
151 	gpointer reserved_methods[19];
152 
153 	/* Signals */
154 	void		(*job_started)		(CamelSession *session,
155 						 GCancellable *cancellable);
156 	void		(*job_finished)		(CamelSession *session,
157 						 GCancellable *cancellable,
158 						 const GError *error);
159 	void		(*user_alert)		(CamelSession *session,
160 						 CamelService *service,
161 						 CamelSessionAlertType type,
162 						 const gchar *message);
163 
164 	/* Padding for future expansion */
165 	gpointer reserved_signals[20];
166 };
167 
168 GType		camel_session_get_type		(void);
169 GMainContext *	camel_session_ref_main_context	(CamelSession *session);
170 const gchar *	camel_session_get_user_data_dir	(CamelSession *session);
171 const gchar *	camel_session_get_user_cache_dir
172 						(CamelSession *session);
173 void		camel_session_set_network_monitor
174 						(CamelSession *session,
175 						 GNetworkMonitor *network_monitor);
176 GNetworkMonitor *
177 		camel_session_ref_network_monitor
178 						(CamelSession *session);
179 CamelService *	camel_session_add_service	(CamelSession *session,
180 						 const gchar *uid,
181 						 const gchar *protocol,
182 						 CamelProviderType type,
183 						 GError **error);
184 void		camel_session_remove_service	(CamelSession *session,
185 						 CamelService *service);
186 CamelService *	camel_session_ref_service	(CamelSession *session,
187 						 const gchar *uid);
188 CamelService *	camel_session_ref_service_by_url
189 						(CamelSession *session,
190 						 CamelURL *url,
191 						 CamelProviderType type);
192 GList *		camel_session_list_services	(CamelSession *session);
193 void		camel_session_remove_services	(CamelSession *session);
194 gchar *		camel_session_get_password	(CamelSession *session,
195 						 CamelService *service,
196 						 const gchar *prompt,
197 						 const gchar *item,
198 						 guint32 flags,
199 						 GError **error);
200 gboolean	camel_session_forget_password	(CamelSession *session,
201 						 CamelService *service,
202 						 const gchar *item,
203 						 GError **error);
204 CamelCertTrust	camel_session_trust_prompt	(CamelSession *session,
205 						 CamelService *service,
206 						 GTlsCertificate *certificate,
207 						 GTlsCertificateFlags errors);
208 void		camel_session_user_alert	(CamelSession *session,
209 						 CamelService *service,
210 						 CamelSessionAlertType type,
211 						 const gchar *message);
212 gboolean	camel_session_get_online	(CamelSession *session);
213 void		camel_session_set_online	(CamelSession *session,
214 						 gboolean online);
215 CamelFilterDriver *
216 		camel_session_get_filter_driver	(CamelSession *session,
217 						 const gchar *type,
218 						 CamelFolder *for_folder,
219 						 GError **error);
220 CamelJunkFilter *
221 		camel_session_get_junk_filter	(CamelSession *session);
222 void		camel_session_set_junk_filter	(CamelSession *session,
223 						 CamelJunkFilter *junk_filter);
224 guint		camel_session_idle_add		(CamelSession *session,
225 						 gint priority,
226 						 GSourceFunc function,
227 						 gpointer data,
228 						 GDestroyNotify notify);
229 void		camel_session_submit_job	(CamelSession *session,
230 						 const gchar *description,
231 						 CamelSessionCallback callback,
232 						 gpointer user_data,
233 						 GDestroyNotify notify);
234 const GHashTable *
235 		camel_session_get_junk_headers	(CamelSession *session);
236 void		camel_session_set_junk_headers	(CamelSession *session,
237 						 const gchar **headers,
238 						 const gchar **values,
239 						 gint len);
240 gboolean	camel_session_lookup_addressbook (CamelSession *session,
241 						 const gchar *name);
242 
243 gboolean	camel_session_authenticate_sync	(CamelSession *session,
244 						 CamelService *service,
245 						 const gchar *mechanism,
246 						 GCancellable *cancellable,
247 						 GError **error);
248 void		camel_session_authenticate	(CamelSession *session,
249 						 CamelService *service,
250 						 const gchar *mechanism,
251 						 gint io_priority,
252 						 GCancellable *cancellable,
253 						 GAsyncReadyCallback callback,
254 						 gpointer user_data);
255 gboolean	camel_session_authenticate_finish
256 						(CamelSession *session,
257 						 GAsyncResult *result,
258 						 GError **error);
259 gboolean	camel_session_forward_to_sync	(CamelSession *session,
260 						 CamelFolder *folder,
261 						 CamelMimeMessage *message,
262 						 const gchar *address,
263 						 GCancellable *cancellable,
264 						 GError **error);
265 void		camel_session_forward_to	(CamelSession *session,
266 						 CamelFolder *folder,
267 						 CamelMimeMessage *message,
268 						 const gchar *address,
269 						 gint io_priority,
270 						 GCancellable *cancellable,
271 						 GAsyncReadyCallback callback,
272 						 gpointer user_data);
273 gboolean	camel_session_forward_to_finish	(CamelSession *session,
274 						 GAsyncResult *result,
275 						 GError **error);
276 gboolean	camel_session_get_oauth2_access_token_sync
277 						(CamelSession *session,
278 						 CamelService *service,
279 						 gchar **out_access_token,
280 						 gint *out_expires_in,
281 						 GCancellable *cancellable,
282 						 GError **error);
283 gboolean	camel_session_get_recipient_certificates_sync
284 						(CamelSession *session,
285 						 guint32 flags, /* bit-or of CamelRecipientCertificateFlags */
286 						 const GPtrArray *recipients, /* gchar * */
287 						 GSList **out_certificates, /* gchar * */
288 						 GCancellable *cancellable,
289 						 GError **error);
290 
291 G_END_DECLS
292 
293 #endif /* CAMEL_SESSION_H */
294