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