/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* camel-session.h : Abstract class for an email session * * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * * This library is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . * * Authors: Bertrand Guiheneuf */ #if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION) #error "Only can be included directly." #endif #ifndef CAMEL_SESSION_H #define CAMEL_SESSION_H #include #include #include #include #include #include #include /* Standard GObject macros */ #define CAMEL_TYPE_SESSION \ (camel_session_get_type ()) #define CAMEL_SESSION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST \ ((obj), CAMEL_TYPE_SESSION, CamelSession)) #define CAMEL_SESSION_CLASS(cls) \ (G_TYPE_CHECK_CLASS_CAST \ ((cls), CAMEL_TYPE_SESSION, CamelSessionClass)) #define CAMEL_IS_SESSION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE \ ((obj), CAMEL_TYPE_SESSION)) #define CAMEL_IS_SESSION_CLASS(cls) \ (G_TYPE_CHECK_CLASS_TYPE \ ((cls), CAMEL_TYPE_SESSION)) #define CAMEL_SESSION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS \ ((obj), CAMEL_TYPE_SESSION, CamelSessionClass)) G_BEGIN_DECLS typedef struct _CamelSession CamelSession; typedef struct _CamelSessionClass CamelSessionClass; typedef struct _CamelSessionPrivate CamelSessionPrivate; enum { CAMEL_SESSION_PASSWORD_REPROMPT = 1 << 0, CAMEL_SESSION_PASSWORD_SECRET = 1 << 2, CAMEL_SESSION_PASSWORD_STATIC = 1 << 3, CAMEL_SESSION_PASSPHRASE = 1 << 4 }; struct _CamelSession { GObject parent; CamelSessionPrivate *priv; }; /** * CamelSessionCallback: * @session: a #CamelSession * @cancellable: a #CamelOperation cast as a #GCancellable * @user_data: data passed to camel_session_submit_job() * @error: return location for a #GError * * This is the callback signature for jobs submitted to the CamelSession * via camel_session_submit_job(). The @error pointer is always non-%NULL, * so it's safe to dereference to check if a #GError has been set. * * Since: 3.2 **/ typedef void (*CamelSessionCallback) (CamelSession *session, GCancellable *cancellable, gpointer user_data, GError **error); struct _CamelSessionClass { GObjectClass parent_class; CamelService * (*add_service) (CamelSession *session, const gchar *uid, const gchar *protocol, CamelProviderType type, GError **error); void (*remove_service) (CamelSession *session, CamelService *service); gchar * (*get_password) (CamelSession *session, CamelService *service, const gchar *prompt, const gchar *item, guint32 flags, GError **error); gboolean (*forget_password) (CamelSession *session, CamelService *service, const gchar *item, GError **error); CamelCertTrust (*trust_prompt) (CamelSession *session, CamelService *service, GTlsCertificate *certificate, GTlsCertificateFlags errors); CamelFilterDriver * (*get_filter_driver) (CamelSession *session, const gchar *type, GError **error); gboolean (*lookup_addressbook) (CamelSession *session, const gchar *name); /* Synchronous I/O Methods */ gboolean (*authenticate_sync) (CamelSession *session, CamelService *service, const gchar *mechanism, GCancellable *cancellable, GError **error); gboolean (*forward_to_sync) (CamelSession *session, CamelFolder *folder, CamelMimeMessage *message, const gchar *address, GCancellable *cancellable, GError **error); /* Reserved slots for methods. */ gpointer reserved_for_methods[4]; /* Signals */ void (*job_started) (CamelSession *session, GCancellable *cancellable); void (*job_finished) (CamelSession *session, GCancellable *cancellable, const GError *error); void (*user_alert) (CamelSession *session, CamelService *service, CamelSessionAlertType type, const gchar *message); }; GType camel_session_get_type (void); GMainContext * camel_session_ref_main_context (CamelSession *session); const gchar * camel_session_get_user_data_dir (CamelSession *session); const gchar * camel_session_get_user_cache_dir (CamelSession *session); CamelService * camel_session_add_service (CamelSession *session, const gchar *uid, const gchar *protocol, CamelProviderType type, GError **error); void camel_session_remove_service (CamelSession *session, CamelService *service); CamelService * camel_session_ref_service (CamelSession *session, const gchar *uid); CamelService * camel_session_ref_service_by_url (CamelSession *session, CamelURL *url, CamelProviderType type); GList * camel_session_list_services (CamelSession *session); void camel_session_remove_services (CamelSession *session); gchar * camel_session_get_password (CamelSession *session, CamelService *service, const gchar *prompt, const gchar *item, guint32 flags, GError **error); gboolean camel_session_forget_password (CamelSession *session, CamelService *service, const gchar *item, GError **error); CamelCertTrust camel_session_trust_prompt (CamelSession *session, CamelService *service, GTlsCertificate *certificate, GTlsCertificateFlags errors); void camel_session_user_alert (CamelSession *session, CamelService *service, CamelSessionAlertType type, const gchar *message); gboolean camel_session_get_online (CamelSession *session); void camel_session_set_online (CamelSession *session, gboolean online); CamelFilterDriver * camel_session_get_filter_driver (CamelSession *session, const gchar *type, GError **error); CamelJunkFilter * camel_session_get_junk_filter (CamelSession *session); void camel_session_set_junk_filter (CamelSession *session, CamelJunkFilter *junk_filter); guint camel_session_idle_add (CamelSession *session, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); void camel_session_submit_job (CamelSession *session, const gchar *description, CamelSessionCallback callback, gpointer user_data, GDestroyNotify notify); const GHashTable * camel_session_get_junk_headers (CamelSession *session); void camel_session_set_junk_headers (CamelSession *session, const gchar **headers, const gchar **values, gint len); gboolean camel_session_lookup_addressbook (CamelSession *session, const gchar *name); gboolean camel_session_authenticate_sync (CamelSession *session, CamelService *service, const gchar *mechanism, GCancellable *cancellable, GError **error); void camel_session_authenticate (CamelSession *session, CamelService *service, const gchar *mechanism, gint io_priority, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean camel_session_authenticate_finish (CamelSession *session, GAsyncResult *result, GError **error); gboolean camel_session_forward_to_sync (CamelSession *session, CamelFolder *folder, CamelMimeMessage *message, const gchar *address, GCancellable *cancellable, GError **error); void camel_session_forward_to (CamelSession *session, CamelFolder *folder, CamelMimeMessage *message, const gchar *address, gint io_priority, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean camel_session_forward_to_finish (CamelSession *session, GAsyncResult *result, GError **error); G_END_DECLS #endif /* CAMEL_SESSION_H */