From e0b31df531738bf7e00d9cc891d7aee4fa0cb855 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Sun, 28 Mar 2004 18:42:55 +0000 Subject: added camel-imap-provider.c svn path=/trunk/; revision=25211 --- camel/providers/imap4/Makefile.am | 1 + camel/providers/imap4/camel-imap-provider.c | 139 ++++++++++++++++++++++++++++ camel/providers/imap4/camel-imap-store.h | 2 +- 3 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 camel/providers/imap4/camel-imap-provider.c (limited to 'camel/providers') diff --git a/camel/providers/imap4/Makefile.am b/camel/providers/imap4/Makefile.am index 5d75e9abce..1548eb788f 100644 --- a/camel/providers/imap4/Makefile.am +++ b/camel/providers/imap4/Makefile.am @@ -21,6 +21,7 @@ libcamelimap4_la_SOURCES = \ camel-imap-command.h \ camel-imap-engine.c \ camel-imap-engine.h \ + camel-imap-provider.c \ camel-imap-specials.c \ camel-imap-specials.h \ camel-imap-stream.c \ diff --git a/camel/providers/imap4/camel-imap-provider.c b/camel/providers/imap4/camel-imap-provider.c new file mode 100644 index 0000000000..2cf7f6e1c7 --- /dev/null +++ b/camel/providers/imap4/camel-imap-provider.c @@ -0,0 +1,139 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* Camel + * Copyright (C) 1999-2004 Jeffrey Stedfast + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include +#include + +#include "camel-imap-store.h" + + +CamelProviderConfEntry imap4_conf_entries[] = { + { CAMEL_PROVIDER_CONF_SECTION_START, "mailcheck", NULL, + N_("Checking for new mail") }, + { CAMEL_PROVIDER_CONF_CHECKBOX, "check_all", NULL, + N_("Check for new messages in all folders"), "1" }, + { CAMEL_PROVIDER_CONF_SECTION_END }, + { CAMEL_PROVIDER_CONF_SECTION_START, "folders", NULL, + N_("Folders") }, + { CAMEL_PROVIDER_CONF_CHECKBOX, "use_lsub", NULL, + N_("Show only subscribed folders"), "1" }, + { CAMEL_PROVIDER_CONF_CHECKBOX, "override_namespace", NULL, + N_("Override server-supplied folder namespace"), "0" }, + { CAMEL_PROVIDER_CONF_ENTRY, "namespace", "override_namespace", + N_("Namespace") }, + { CAMEL_PROVIDER_CONF_SECTION_END }, + { CAMEL_PROVIDER_CONF_END } +}; + +static CamelProvider imap4_provider = { + "imap4", + N_("IMAPv4rev1"), + + N_("For reading and storing mail on IMAPv4rev1 servers."), + + "mail", + + CAMEL_PROVIDER_IS_REMOTE | CAMEL_PROVIDER_IS_SOURCE | + CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_SUPPORTS_SSL, + + CAMEL_URL_NEED_USER | CAMEL_URL_NEED_HOST | CAMEL_URL_ALLOW_AUTH, + + imap4_conf_entries, + + /* ... */ +}; + +CamelServiceAuthType camel_imap4_password_authtype = { + N_("Password"), + + N_("This option will connect to the IMAP server using a " + "plaintext password."), + + "", + TRUE +}; + + +static void +add_hash (guint *hash, char *s) +{ + if (s) + *hash ^= g_str_hash(s); +} + +static guint +imap_url_hash (gconstpointer key) +{ + const CamelURL *u = (CamelURL *)key; + guint hash = 0; + + add_hash (&hash, u->user); + add_hash (&hash, u->authmech); + add_hash (&hash, u->host); + hash ^= u->port; + + return hash; +} + +static gint +check_equal (char *s1, char *s2) +{ + if (s1 == NULL) { + if (s2 == NULL) + return TRUE; + else + return FALSE; + } + + if (s2 == NULL) + return FALSE; + + return strcmp (s1, s2) == 0; +} + +static gint +imap_url_equal (gconstpointer a, gconstpointer b) +{ + const CamelURL *u1 = a, *u2 = b; + + return check_equal (u1->user, u2->user) + && check_equal (u1->authmech, u2->authmech) + && check_equal (u1->host, u2->host) + && u1->port == u2->port; +} + + +void +camel_provider_module_init (void) +{ + imap4_provider.object_types[CAMEL_PROVIDER_STORE] = camel_imap_store_get_type (); + imap4_provider.url_hash = imap_url_hash; + imap4_provider.url_equal = imap_url_equal; + imap4_provider.authtypes = camel_sasl_authtype_list (FALSE); + imap4_provider.authtypes = g_list_prepend (imap4_provider.authtypes, &camel_imap4_password_authtype); + + camel_provider_register (&imap4_provider); +} diff --git a/camel/providers/imap4/camel-imap-store.h b/camel/providers/imap4/camel-imap-store.h index 036c9808a9..b4643451bf 100644 --- a/camel/providers/imap4/camel-imap-store.h +++ b/camel/providers/imap4/camel-imap-store.h @@ -52,7 +52,7 @@ struct _CamelIMAPStoreClass { }; -CamelType spruce_imap_store_get_type (void); +CamelType camel_imap_store_get_type (void); #ifdef __cplusplus } -- cgit v1.2.3