aboutsummaryrefslogtreecommitdiffstats
path: root/camel
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@src.gnome.org>2004-03-29 02:42:55 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2004-03-29 02:42:55 +0800
commite0b31df531738bf7e00d9cc891d7aee4fa0cb855 (patch)
treecf83b23fc3b9ccfa41ba50549b96c93a7a8fd8bb /camel
parent3b30f8f04728c1127a0936691d44a4ecd5fe7610 (diff)
downloadgsoc2013-evolution-e0b31df531738bf7e00d9cc891d7aee4fa0cb855.tar.gz
gsoc2013-evolution-e0b31df531738bf7e00d9cc891d7aee4fa0cb855.tar.zst
gsoc2013-evolution-e0b31df531738bf7e00d9cc891d7aee4fa0cb855.zip
added camel-imap-provider.c
svn path=/trunk/; revision=25211
Diffstat (limited to 'camel')
-rw-r--r--camel/providers/imap4/Makefile.am1
-rw-r--r--camel/providers/imap4/camel-imap-provider.c139
-rw-r--r--camel/providers/imap4/camel-imap-store.h2
3 files changed, 141 insertions, 1 deletions
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 <config.h>
+#endif
+
+#include <string.h>
+
+#include <camel/camel-sasl.h>
+#include <camel/camel-provider.h>
+
+#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
}