aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/imap
diff options
context:
space:
mode:
authornobody <nobody@localhost>2000-05-29 23:42:50 +0800
committernobody <nobody@localhost>2000-05-29 23:42:50 +0800
commit177490e24811b6fe1b78372d8ff0809992e81d8f (patch)
tree47f7d2447d64eb8e27296917d78b128ddf21cde1 /camel/providers/imap
parentccb665a0262b51c92ca5a54a074dda0dec91a573 (diff)
downloadgsoc2013-evolution-GTKHTML_0_3.tar
gsoc2013-evolution-GTKHTML_0_3.tar.gz
gsoc2013-evolution-GTKHTML_0_3.tar.bz2
gsoc2013-evolution-GTKHTML_0_3.tar.lz
gsoc2013-evolution-GTKHTML_0_3.tar.xz
gsoc2013-evolution-GTKHTML_0_3.tar.zst
gsoc2013-evolution-GTKHTML_0_3.zip
This commit was manufactured by cvs2svn to create tag 'GTKHTML_0_3'.GTKHTML_0_3
svn path=/tags/GTKHTML_0_3/; revision=3263
Diffstat (limited to 'camel/providers/imap')
-rw-r--r--camel/providers/imap/.cvsignore7
-rw-r--r--camel/providers/imap/Makefile.am41
-rw-r--r--camel/providers/imap/camel-imap-folder.c689
-rw-r--r--camel/providers/imap/camel-imap-folder.h75
-rw-r--r--camel/providers/imap/camel-imap-provider.c51
-rw-r--r--camel/providers/imap/camel-imap-store.c531
-rw-r--r--camel/providers/imap/camel-imap-store.h84
-rw-r--r--camel/providers/imap/camel-imap-summary.h81
-rw-r--r--camel/providers/imap/imap.c835
-rw-r--r--camel/providers/imap/imap.h86
-rw-r--r--camel/providers/imap/libcamelimap.urls1
11 files changed, 0 insertions, 2481 deletions
diff --git a/camel/providers/imap/.cvsignore b/camel/providers/imap/.cvsignore
deleted file mode 100644
index fd6b811c68..0000000000
--- a/camel/providers/imap/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.deps
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
diff --git a/camel/providers/imap/Makefile.am b/camel/providers/imap/Makefile.am
deleted file mode 100644
index 00cad46ec2..0000000000
--- a/camel/providers/imap/Makefile.am
+++ /dev/null
@@ -1,41 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS =
-
-libcamelmboxincludedir = $(includedir)/camel
-
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelimap.la
-provider_DATA = libcamelimap.urls
-
-INCLUDES = -I.. \
- -I$(srcdir)/.. \
- -I$(top_srcdir)/camel \
- -I$(top_srcdir)/intl \
- -I$(top_srcdir)/libibex \
- -I$(top_srcdir)/e-util \
- -I$(top_srcdir) \
- -I$(includedir) \
- $(GTK_INCLUDEDIR) \
- -DG_LOG_DOMAIN=\"camel-imap-provider\"
-
-libcamelimap_la_SOURCES = \
- camel-imap-folder.c \
- camel-imap-provider.c \
- camel-imap-store.c \
- camel-imap-summary.c
-
-libcamelimapinclude_HEADERS = \
- camel-imap-folder.h \
- camel-imap-store.h \
- camel-imap-summary.h
-
-libcamelimap_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir)
-
-libcamelimap_la_LIBADD = $(top_builddir)/e-util/libeutil.la $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-#libcamelimap_la_LIBADD = $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-
-EXTRA_DIST = libcamelimap.urls
-
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c
deleted file mode 100644
index e4ad9699fb..0000000000
--- a/camel/providers/imap/camel-imap-folder.c
+++ /dev/null
@@ -1,689 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-imap-folder.c : Abstract class for an email folder */
-
-/*
- * Authors: Jeffrey Stedfast <fejj@helixcode.com>
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * 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 Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <fcntl.h>
-
-#include "camel-imap-folder.h"
-#include "camel-imap-store.h"
-#include "string-utils.h"
-#include "camel-stream-fs.h"
-#include "camel-data-wrapper.h"
-#include "camel-mime-message.h"
-#include "camel-stream-filter.h"
-#include "camel-mime-filter-from.h"
-#include "camel-exception.h"
-
-#define d(x)
-
-static CamelFolderClass *parent_class = NULL;
-
-static void imap_init (CamelFolder *folder, CamelStore *parent_store,
- CamelFolder *parent_folder, const gchar *name,
- gchar separator, CamelException *ex);
-
-static void imap_open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex);
-static void imap_close (CamelFolder *folder, gboolean expunge, CamelException *ex);
-static gboolean imap_exists (CamelFolder *folder, CamelException *ex);
-static gboolean imap_create(CamelFolder *folder, CamelException *ex);
-static gboolean imap_delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
-static gboolean imap_delete_messages (CamelFolder *folder, CamelException *ex);
-static gint imap_get_message_count (CamelFolder *folder, CamelException *ex);
-static void imap_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
-static GPtrArray *imap_get_uids (CamelFolder *folder, CamelException *ex);
-static GPtrArray *imap_get_subfolder_names (CamelFolder *folder, CamelException *ex);
-static GPtrArray *imap_get_summary (CamelFolder *folder, CamelException *ex);
-static void imap_free_summary (CamelFolder *folder, GPtrArray *array);
-static CamelMimeMessage *imap_get_message_by_uid (CamelFolder *folder, const gchar *uid,
- CamelException *ex);
-
-static void imap_expunge (CamelFolder *folder, CamelException *ex);
-
-#if 0
-static void _copy_message_to (CamelFolder *folder, CamelMimeMessage *message,
- CamelFolder *dest_folder, CamelException *ex);
-static const gchar *_get_message_uid (CamelFolder *folder, CamelMimeMessage *message,
- CamelException *ex);
-#endif
-
-static void imap_delete_message_by_uid(CamelFolder *folder, const gchar *uid, CamelException *ex);
-
-static const CamelMessageInfo *imap_summary_get_by_uid(CamelFolder *f, const char *uid);
-
-static GList *imap_search_by_expression(CamelFolder *folder, const char *expression, CamelException *ex);
-
-static void imap_finalize (GtkObject *object);
-
-static void
-camel_imap_folder_class_init (CamelImapFolderClass *camel_imap_folder_class)
-{
- CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_imap_folder_class);
- GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_folder_class);
-
- parent_class = gtk_type_class (camel_folder_get_type ());
-
- /* virtual method definition */
-
- /* virtual method overload */
- camel_folder_class->init = imap_init;
-
- camel_folder_class->open = imap_open;
- camel_folder_class->close = imap_close;
-
- camel_folder_class->exists = imap_exists;
- camel_folder_class->create = imap_create;
- camel_folder_class->delete = imap_delete;
-
- camel_folder_class->delete_messages = imap_delete_messages;
- camel_folder_class->get_message_count = imap_get_message_count;
- camel_folder_class->append_message = imap_append_message;
- camel_folder_class->get_uids = imap_get_uids;
- camel_folder_class->get_subfolder_names = imap_get_subfolder_names;
- camel_folder_class->get_summary = imap_get_summary;
- camel_folder_class->free_summary = imap_free_summary;
- camel_folder_class->expunge = imap_expunge;
-
- camel_folder_class->get_message_by_uid = imap_get_message_by_uid;
- camel_folder_class->delete_message_by_uid = imap_delete_message_by_uid;
-
- camel_folder_class->search_by_expression = imap_search_by_expression;
-
- camel_folder_class->summary_get_by_uid = imap_summary_get_by_uid;
-
- gtk_object_class->finalize = imap_finalize;
-
-}
-
-static void
-camel_imap_folder_init (gpointer object, gpointer klass)
-{
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (object);
- CamelFolder *folder = CAMEL_FOLDER (object);
-
- folder->can_hold_messages = TRUE;
- folder->can_hold_folders = TRUE;
- folder->has_summary_capability = FALSE;
- folder->has_search_capability = FALSE;
-
- imap_folder->count = -1;
-}
-
-GtkType
-camel_imap_folder_get_type (void)
-{
- static GtkType camel_imap_folder_type = 0;
-
- if (!camel_imap_folder_type) {
- GtkTypeInfo camel_imap_folder_info =
- {
- "CamelImapFolder",
- sizeof (CamelImapFolder),
- sizeof (CamelImapFolderClass),
- (GtkClassInitFunc) camel_imap_folder_class_init,
- (GtkObjectInitFunc) NULL,
- /* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
- };
-
- camel_imap_folder_type = gtk_type_unique (CAMEL_FOLDER_TYPE, &camel_imap_folder_info);
- }
-
- return camel_imap_folder_type;
-}
-
-CamelFolder *
-camel_imap_folder_new (CamelStore *parent, CamelException *ex)
-{
- /* TODO: code this */
- CamelFolder *folder = CAMEL_FOLDER (gtk_object_new (camel_imap_folder_get_type (), NULL));
-
- CF_CLASS (folder)->init (folder, parent, NULL, "inbox", '/', ex);
- return folder;
-}
-
-static void
-imap_finalize (GtkObject *object)
-{
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (object);
-
- g_free (imap_folder->folder_file_path);
- g_free (imap_folder->folder_dir_path);
-
- GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-imap_init (CamelFolder *folder, CamelStore *parent_store, CamelFolder *parent_folder,
- const gchar *name, gchar separator, CamelException *ex)
-{
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
- const gchar *root_dir_path;
-
- /* call parent method */
- parent_class->init (folder, parent_store, parent_folder, name, separator, ex);
- if (camel_exception_get_id (ex))
- return;
-
- /* we assume that the parent init
- method checks for the existance of @folder */
- folder->can_hold_messages = TRUE;
- folder->can_hold_folders = TRUE;
- folder->has_summary_capability = FALSE; /* TODO: double-check this */
- folder->has_search_capability = TRUE;
-
- folder->permanent_flags = CAMEL_MESSAGE_SEEN |
- CAMEL_MESSAGE_ANSWERED |
- CAMEL_MESSAGE_FLAGGED |
- CAMEL_MESSAGE_DELETED |
- CAMEL_MESSAGE_DRAFT |
- CAMEL_MESSAGE_USER; /* some IMAP daemons support user-flags */
-
- imap_folder->summary = NULL;
- imap_folder->search = NULL;
-
- /* now set the name info */
- g_free (imap_folder->folder_file_path);
- g_free (imap_folder->folder_dir_path);
- g_free (imap_folder->index_file_path);
-
- root_dir_path = camel_imap_store_get_toplevel_dir (CAMEL_IMAP_STORE(folder->parent_store));
-
- imap_folder->folder_file_path = g_strdup_printf ("%s/%s", root_dir_path, folder->full_name);
- imap_folder->folder_dir_path = g_strdup_printf ("%s/%s.sdb", root_dir_path, folder->full_name);
- imap_folder->index_file_path = g_strdup_printf ("%s/%s.ibex", root_dir_path, folder->full_name);
-}
-
-static void
-imap_open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex)
-{
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
- gchar *result;
- gint status;
-
- camel_imap_store_open (CAMEL_IMAP_STORE (folder->parent_store), ex);
- if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_NONE) {
- /* do we actually want to do this? probably not */
- parent_class->open (folder, mode, ex);
-
- /* SELECT the IMAP mail spool */
- status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), &result,
- "SELECT %s", imap_folder->folder_file_path);
-
- if (status != CAMEL_IMAP_OK) {
- CamelService *service = CAMEL_SERVICE (folder->parent_store);
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- "Could not SELECT %s on IMAP "
- "server %s: %s.", imap_folder->folder_file_path,
- service->url->host,
- status == CAMEL_IMAP_ERR ? result :
- "Unknown error");
- g_free (result);
- return -1;
- }
-
- g_free(result);
- }
-}
-
-static void
-imap_close (CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
- camel_imap_store_close (CAMEL_IMAP_STORE (folder->parent_store), expunge, ex);
- if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_NONE)
- parent_class->close (folder, expunge, ex);
-}
-
-static void
-imap_expunge (CamelFolder *folder, CamelException *ex)
-{
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
- gchar *result;
- gint status;
-
- status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), &result,
- "EXPUNGE");
-
- if (status != CAMEL_IMAP_OK) {
- CamelService *service = CAMEL_SERVICE (folder->parent_store);
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- "Could not EXPUNGE from IMAP "
- "server %s: %s.", service->url->host,
- status == CAMEL_IMAP_ERR ? result :
- "Unknown error");
- g_free (result);
- return -1;
- }
-
- g_free(result);
-}
-
-static gboolean
-imap_exists (CamelFolder *folder, CamelException *ex)
-{
- /* TODO: look at Mbox code and figure out exactly what needs to be done here */
- CamelImapFolder *imap_folder;
- struct stat stat_buf;
- gint stat_error;
- gboolean exists;
-
- g_assert(folder != NULL);
-
- imap_folder = CAMEL_IMAP_FOLDER (folder);
-
- /* check if the imap file path is determined */
- if (!imap_folder->folder_file_path) {
- camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
- "undetermined folder file path. Maybe use set_name ?");
- return FALSE;
- }
-
- /* check if the imap dir path is determined */
- if (!imap_folder->folder_dir_path) {
- camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
- "undetermined folder directory path. Maybe use set_name ?");
- return FALSE;
- }
-
- /* TODO: Finish coding this. */
-}
-
-static gboolean
-imap_create (CamelFolder *folder, CamelException *ex)
-{
- /* NOTE: this should probably be pretty easy to code... */
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
- const gchar *folder_file_path, *folder_dir_path;
- gboolean folder_already_exists;
-
- g_assert(folder != NULL);
-
- /* call default implementation */
- parent_class->create (folder, ex);
-
- /* get the paths of what we need to create */
- folder_file_path = imap_folder->folder_file_path;
- folder_dir_path = imap_folder->folder_dir_path;
-
- if (!(folder_file_path || folder_dir_path)) {
- camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
- "invalid folder path. Use set_name ?");
- return FALSE;
- }
-
-
- /* if the folder already exists, simply return */
- folder_already_exists = camel_folder_exists (folder, ex);
- if (camel_exception_get_id (ex))
- return FALSE;
-
- if (folder_already_exists)
- return TRUE;
-
-
- /* create the directory for the subfolder */
- /* TODO: actually code this */
-}
-
-
-static gboolean
-imap_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
-{
- /* NOTE: should be pretty simple as well, just needa break out the RFC ;-) */
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-
- return TRUE;
-}
-
-/* TODO: remove this */
-gboolean
-imap_delete_messages (CamelFolder *folder, CamelException *ex)
-{
- /* TODO: delete the messages (mark as deleted/whatever) */
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
- gchar *result;
- gint status;
-
- g_return_val_if_fail (folder != NULL, FALSE);
-
-
- return TRUE;
-}
-
-static gint
-imap_get_message_count (CamelFolder *folder, CamelException *ex)
-{
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
- gint status;
- gchar *result, *msg_count;
-
- g_return_val_if_fail (folder != NULL, -1);
-
- if (imap_folder->count != -1)
- imap_folder->count;
-
- status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), &result,
- "STATUS %s (MESSAGES)", imap_folder->folder_file_path);
-
- if (status != CAMEL_IMAP_OK) {
- CamelService *service = CAMEL_SERVICE (folder->parent_store);
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- "Could not get message count from IMAP "
- "server %s: %s.", service->url->host,
- status == CAMEL_IMAP_ERR ? result :
- "Unknown error");
- g_free (result);
- return -1;
- }
-
- /* parse out the message count - should come in the form: "* STATUS <folder> (MESSAGES <count>)\r\n" */
- if (result && *result == '*' ) {
- if (msg_count = strstr(result, "MESSAGES")) {
- msg_count += strlen("MESSAGES") + 1;
-
- /* we should now be pointing to the message count */
- imap_folder->count = atoi(msg_count);
- }
- }
- g_free(result);
-
- return imap_folder->count;
-}
-
-static void
-imap_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex)
-{
- g_warning("CamelImapFolder::imap_append_message(): This feature not supported by IMAP\n");
-
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- "This feature not supported by IMAP");
-}
-
-static GPtrArray *
-imap_get_uids (CamelFolder *folder, CamelException *ex)
-{
- /* TODO: Find out what this is actually supposed to do */
- GPtrArray *array;
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
- gint i, count;
-
- count = camel_folder_summary_count((CamelFolderSummary *)imap_folder->summary);
- array = g_ptr_array_new ();
- g_ptr_array_set_size (array, count);
- for (i = 0; i < count; i++) {
- CamelImapMessageInfo *info =
- (CamelImapMessageInfo *)camel_folder_summary_index((CamelFolderSummary *)imap_folder->summary, i);
- array->pdata[i] = g_strdup(info->info.uid);
- }
-
- return array;
-}
-
-static GPtrArray *
-imap_get_subfolder_names (CamelFolder *folder, CamelException *ex)
-{
- /* NOTE: use LSUB or LIST - preferably LSUB but I managed with LIST in Spruce */
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
- GPtrArray *listing;
- gint status;
- gchar *result;
-
- g_return_val_if_fail (folder != NULL, g_ptr_array_new());
-
- if (imap_folder->count != -1)
- imap_folder->count;
-
- status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), &result,
- "LSUB \"\" \"%s\"", imap_folder->folder_file_path);
-
- if (status != CAMEL_IMAP_OK) {
- CamelService *service = CAMEL_SERVICE (folder->parent_store);
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- "Could not get subfolder listing from IMAP "
- "server %s: %s.", service->url->host,
- status == CAMEL_IMAP_ERR ? result :
- "Unknown error");
- g_free (result);
- return g_ptr_array_new ();
- }
-
- /* parse out the subfolders */
- listing = g_ptr_array_new ();
- if (result) {
- ptr = result;
- while (*ptr == '*') {
- gchar *flags, *param, *end, *dir_sep;
-
- ptr = flags = strchr(ptr, '(') + 1; /* jump to the flags section */
- end = strchr(flags, ')'); /* locate end of flags */
- flags = strndup(flags, (gint)(end - flags));
-
- if (strstr(flags, "\\NoSelect")) {
- g_free(flags);
- continue;
- }
- g_free(flags);
-
- ptr = dir_sep = strchr(ptr, '"') + 1; /* jump to the first param */
- end = strchr(param, '"'); /* locate the end of the param */
- dir_sep = g_strndup(dir_sep, (gint)(end - param));
-
- /* skip to the actual directory parameter */
- for (ptr = end++; *ptr == ' '; ptr++);
- for (end = ptr; *end && *end != '\n'; end++);
- param = g_strndup(ptr, (gint)(end - ptr));
-
- g_ptr_array_add (listing, param);
-
- g_free(dir_sep); /* TODO: decide if we really need dir_sep */
-
- if (*end)
- ptr = end + 1;
- else
- ptr = end;
- }
- }
- g_free(result);
-
- return listing;
-}
-
-static void
-imap_delete_message_by_uid(CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
- /* NOTE: should be as easy as marking as deleted - which should be easy in IMAP */
- CamelImapFolder *mf = (CamelImapFolder *)folder;
-
- info = camel_folder_summary_uid((CamelFolderSummary *)mf->summary, uid);
- if (info) {
- info->flags |= CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_FOLDER_FLAGGED;
- camel_folder_summary_touch((CamelFolderSummary *)mf->summary);
- }
-}
-
-/* track flag changes in the summary */
-static void
-message_changed(CamelMimeMessage *m, int type, CamelImapFolder *mf)
-{
- /* TODO: find a way to do this in IMAP - will probably not be easy */
- CamelMessageInfo *info;
- CamelFlag *flag;
-
- printf("Message changed: %s: %d\n", m->message_uid, type);
- switch (type) {
- case MESSAGE_FLAGS_CHANGED:
- info = camel_folder_summary_uid((CamelFolderSummary *)mf->summary, m->message_uid);
- if (info) {
- info->flags = m->flags | CAMEL_MESSAGE_FOLDER_FLAGGED;
- camel_flag_list_free(&info->user_flags);
- flag = m->user_flags;
- while (flag) {
- camel_flag_set(&info->user_flags, flag->name, TRUE);
- flag = flag->next;
- }
- camel_folder_summary_touch((CamelFolderSummary *)mf->summary);
- } else
- g_warning("Message changed event on message not in summary: %s", m->message_uid);
- break;
- default:
- printf("Unhandled message change event: %d\n", type);
- break;
- }
-}
-
-static CamelMimeMessage *
-imap_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
- /* NOTE: extremely easy to do in IMAP - just needa code it ;-) */
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
- CamelStream *message_stream = NULL;
- CamelMimeMessage *message = NULL;
- CamelImapMessageInfo *info;
- CamelMimeParser *parser = NULL;
- char *buffer;
- int len;
-
- /* get the message summary info */
- info = (CamelImapMessageInfo *)camel_folder_summary_uid((CamelFolderSummary *)imap_folder->summary, uid);
-
- if (info == NULL) {
- errno = ENOENT;
- goto fail;
- }
-
- /* if this has no content, its an error in the library */
- g_assert(info->info.content);
- g_assert(info->frompos != -1);
-
- /* where we read from */
- message_stream = camel_stream_fs_new_with_name (imap_folder->folder_file_path, O_RDONLY, 0);
- if (message_stream == NULL)
- goto fail;
-
- /* we use a parser to verify the message is correct, and in the correct position */
- parser = camel_mime_parser_new();
- camel_mime_parser_init_with_stream(parser, message_stream);
- gtk_object_unref((GtkObject *)message_stream);
- camel_mime_parser_scan_from(parser, TRUE);
-
- camel_mime_parser_seek(parser, info->frompos, SEEK_SET);
- if (camel_mime_parser_step(parser, &buffer, &len) != HSCAN_FROM) {
- g_warning("File appears truncated");
- goto fail;
- }
-
- if (camel_mime_parser_tell_start_from(parser) != info->frompos) {
- g_warning("Summary doesn't match the folder contents! eek!");
- errno = EINVAL;
- goto fail;
- }
-
- message = camel_mime_message_new();
- if (camel_mime_part_construct_from_parser((CamelMimePart *)message, parser) == -1) {
- g_warning("Construction failed");
- goto fail;
- }
-
- /* we're constructed, finish setup and clean up */
- message->folder = folder;
- gtk_object_ref((GtkObject *)folder);
- message->message_uid = g_strdup(uid);
- message->flags = info->info.flags;
- gtk_signal_connect((GtkObject *)message, "message_changed", message_changed, folder);
-
- gtk_object_unref((GtkObject *)parser);
-
- return message;
-
-fail:
- camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
- "Cannot get message: %s",
- g_strerror(errno));
-
- if (parser)
- gtk_object_unref((GtkObject *)parser);
- if (message)
- gtk_object_unref((GtkObject *)message);
-
- return NULL;
-}
-
-GPtrArray *
-imap_get_summary (CamelFolder *folder, CamelException *ex)
-{
- /* TODO: what should we do here?? */
- CamelImapFolder *imap_folder = (CamelImapFolder *)folder;
-
- return ((CamelFolderSummary *)imap_folder->summary)->messages;
-}
-
-void
-imap_free_summary (CamelFolder *folder, GPtrArray *array)
-{
- /* This is IMAP dude, no need to free a summary */
- return;
-}
-
-/* get a single message info, by uid */
-static const CamelMessageInfo *
-imap_summary_get_by_uid(CamelFolder *f, const char *uid)
-{
- /* TODO: what do we do here? */
- CamelImapFolder *imap_folder = (CamelImapFolder *)f;
-
- return camel_folder_summary_uid((CamelFolderSummary *)imap_folder->summary, uid);
-}
-
-static GList *
-imap_search_by_expression(CamelFolder *folder, const char *expression, CamelException *ex)
-{
- /* TODO: find a good way of doing this */
- CamelImapFolder *imap_folder = (CamelImapFolder *)folder;
-
- if (imap_folder->search == NULL) {
- imap_folder->search = camel_folder_search_new();
- }
-
- camel_folder_search_set_folder(imap_folder->search, folder);
- if (imap_folder->summary)
- /* FIXME: dont access summary array directly? */
- camel_folder_search_set_summary(imap_folder->search, ((CamelFolderSummary *)imap_folder->summary)->messages);
- camel_folder_search_set_body_index(imap_folder->search, imap_folder->index);
-
- return camel_folder_search_execute_expression(imap_folder->search, expression, ex);
-}
-
-
-
-
-
diff --git a/camel/providers/imap/camel-imap-folder.h b/camel/providers/imap/camel-imap-folder.h
deleted file mode 100644
index 54605cfb35..0000000000
--- a/camel/providers/imap/camel-imap-folder.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-imap-folder.h : Abstract class for an imap folder */
-
-/*
- * Author:
- * Jeffrey Stedfast <fejj@helixcode.com>
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * 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 Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_IMAP_FOLDER_H
-#define CAMEL_IMAP_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include <gtk/gtk.h>
-#include "camel-folder.h"
-
-#define CAMEL_IMAP_FOLDER_TYPE (camel_imap_folder_get_type ())
-#define CAMEL_IMAP_FOLDER(obj) (GTK_CHECK_CAST((obj), CAMEL_IMAP_FOLDER_TYPE, CamelImapFolder))
-#define CAMEL_IMAP_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_IMAP_FOLDER_TYPE, CamelImapFolderClass))
-#define IS_CAMEL_IMAP_FOLDER(o) (GTK_CHECK_TYPE((o), CAMEL_IMAP_FOLDER_TYPE))
-
-typedef struct {
- CamelFolder parent_object;
-
- gchar *folder_file_path; /* contains the messages */
- gchar *folder_dir_path; /* contains the subfolders */
- gchar *index_file_path; /* index of body contents */
-
- ibex *index; /* index for this folder */
- CamelImapSummary *summary;
- CamelFolderSearch *search; /* used to run searches, we just use the real thing (tm) */
-} CamelImapFolder;
-
-
-typedef struct {
- CamelFolderClass parent_class;
-
- /* Virtual methods */
-
-} CamelImapFolderClass;
-
-
-/* public methods */
-CamelFolder *camel_imap_folder_new (CamelStore *parent, CamelException *ex);
-
-/* Standard Gtk function */
-GtkType camel_imap_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_IMAP_FOLDER_H */
diff --git a/camel/providers/imap/camel-imap-provider.c b/camel/providers/imap/camel-imap-provider.c
deleted file mode 100644
index 92013a9643..0000000000
--- a/camel/providers/imap/camel-imap-provider.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-imap-provider.c: imap provider registration code */
-
-/*
- * Authors :
- * Jeffrey Stedfast <fejj@helixcode.com>
- *
- * Copyright (C) 2000 HelixCode (www.helixcode.com).
- *
- * 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 Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-#include "camel-imap-store.h"
-#include "camel-provider.h"
-#include "camel-session.h"
-
-static CamelProvider imap_provider = {
- "imap",
- "IMAPv4",
-
- "For reading and storing mail on IMAP servers.",
-
- "mail",
-
- 0,
-
- { 0, 0 }
-};
-
-void
-camel_provider_module_init (CamelSession *session)
-{
- imap_provider.object_types[CAMEL_PROVIDER_STORE] =
- camel_imap_store_get_type();
-
- camel_session_register_provider (session, &imap_provider);
-}
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
deleted file mode 100644
index 0d35e971b2..0000000000
--- a/camel/providers/imap/camel-imap-store.c
+++ /dev/null
@@ -1,531 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-imap-store.c : class for an imap store */
-
-/*
- * Authors: Jeffrey Stedfast <fejj@helixcode.com>
- * Ross Golder <ross@golder.org>
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * 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 Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-
-
-#include "camel-imap-store.h"
-#include "camel-imap-folder.h"
-#include "camel-exception.h"
-#include "camel-session.h"
-#include "camel-stream.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-fs.h"
-#include "camel-url.h"
-
-/* Specified in RFC 2060 */
-#define IMAP_PORT 143
-
-static CamelServiceClass *service_class = NULL;
-
-static void finalize (GtkObject *object);
-
-static gboolean imap_connect (CamelService *service, CamelException *ex);
-static gboolean imap_disconnect (CamelService *service, CamelException *ex);
-static GList *query_auth_types (CamelService *service, CamelException *ex);
-static void free_auth_types (CamelService *service, GList *authtypes);
-
-static CamelFolder *get_folder (CamelStore *store, const char *folder_name,
- CamelException *ex);
-static char *get_folder_name (CamelStore *store, const char *folder_name,
- CamelException *ex);
-
-static void
-camel_imap_store_class_init (CamelImapStoreClass *camel_imap_store_class)
-{
- /* virtual method overload */
- GtkObjectClass *object_class =
- GTK_OBJECT_CLASS (camel_imap_store_class);
- CamelServiceClass *camel_service_class =
- CAMEL_SERVICE_CLASS (camel_imap_store_class);
- CamelStoreClass *camel_store_class =
- CAMEL_STORE_CLASS (camel_imap_store_class);
-
- service_class = gtk_type_class (camel_service_get_type ());
-
- /* virtual method overload */
- object_class->finalize = finalize;
-
- camel_service_class->connect = imap_connect;
- camel_service_class->disconnect = imap_disconnect;
- camel_service_class->query_auth_types = query_auth_types;
- camel_service_class->free_auth_types = free_auth_types;
-
- camel_store_class->get_folder = get_folder;
- camel_store_class->get_folder_name = get_folder_name;
-}
-
-
-static void
-camel_imap_store_init (gpointer object, gpointer klass)
-{
- CamelService *service = CAMEL_SERVICE (object);
- CamelStore *store = CAMEL_STORE (object);
-
- service->url_flags = ( CAMEL_SERVICE_URL_NEED_USER |
- CAMEL_SERVICE_URL_NEED_HOST );
-
- store->folders = g_hash_table_new (g_str_hash, g_str_equal);
-}
-
-
-GtkType
-camel_imap_store_get_type (void)
-{
- static GtkType camel_imap_store_type = 0;
-
- if (!camel_imap_store_type) {
- GtkTypeInfo camel_imap_store_info =
- {
- "CamelImapStore",
- sizeof (CamelImapStore),
- sizeof (CamelImapStoreClass),
- (GtkClassInitFunc) camel_imap_store_class_init,
- (GtkObjectInitFunc) camel_imap_store_init,
- /* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
- };
-
- camel_imap_store_type = gtk_type_unique (CAMEL_STORE_TYPE, &camel_imap_store_info);
- }
-
- return camel_imap_store_type;
-}
-
-static void
-finalize (GtkObject *object)
-{
- CamelException ex;
-
- camel_exception_init (&ex);
- imap_disconnect (CAMEL_SERVICE (object), &ex);
- camel_exception_clear (&ex);
-}
-
-static CamelServiceAuthType password_authtype = {
- "Password",
-
- "This option will connect to the IMAP server using a "
- "plaintext password.",
-
- "",
- TRUE
-};
-
-static gboolean
-try_connect (CamelService *service, CamelException *ex)
-{
- struct hostent *h;
- struct sockaddr_in sin;
- gint fd;
-
- h = camel_service_gethost (service, ex);
- if (!h)
- return FALSE;
-
- sin.sin_family = h->h_addrtype;
- sin.sin_port = htons (service->url->port ? service->url->port : IMAP_PORT);
- memcpy (&sin.sin_addr, h->h_addr, sizeof (sin.sin_addr));
-
- fd = socket (h->h_addrtype, SOCK_STREAM, 0);
- if (fd == -1 || connect (fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
-
- /* We don't want to set a CamelException here */
-
- if (fd > -1)
- close (fd);
-
- return FALSE;
- }
-
- close (fd);
- return TRUE;
-}
-
-static GList *
-query_auth_types (CamelService *service, CamelException *ex)
-{
- GList *ret = NULL;
- gboolean passwd = TRUE;
-
-
- if (service->url) {
- passwd = try_connect (service, ex);
- if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
- return NULL;
- }
-
- if (passwd)
- ret = g_list_append (ret, &password_authtype);
-
- if (!ret) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- "Could not connect to IMAP server on "
- "%s.", service->url->host);
- }
-
- return ret;
-}
-
-static void
-free_auth_types (CamelService *service, GList *authtypes)
-{
- g_list_free (authtypes);
-}
-
-static gboolean
-imap_connect (CamelService *service, CamelException *ex)
-{
- struct hostent *h;
- struct sockaddr_in sin;
- gint fd, status;
- gchar *buf, *msg;
- CamelImapStore *store = CAMEL_IMAP_STORE (service);
-
-
- h = camel_service_gethost (service, ex);
- if (!h)
- return FALSE;
-
- if (!service->url->authmech && !service->url->passwd) {
- gchar *prompt = g_strdup_printf ("Please enter the IMAP password for %s@%s",
- service->url->user, h->h_name);
- service->url->passwd =
- camel_session_query_authenticator (camel_service_get_session (service),
- prompt, TRUE,
- service, "password",
- ex);
- g_free (prompt);
- if (!service->url->passwd)
- return FALSE;
- }
-
- sin.sin_family = h->h_addrtype;
- if (service->url->port)
- sin.sin_port = htons(service->url->port);
- else
- sin.sin_port = htons(IMAP_PORT);
-
- memcpy (&sin.sin_addr, h->h_addr, sizeof (sin.sin_addr));
-
- fd = socket (h->h_addrtype, SOCK_STREAM, 0);
- if (fd == -1 || connect (fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- "Could not connect to %s (port %s): %s",
- service->url->host, service->url->port,
- strerror(errno));
- if (fd > -1)
- close (fd);
-
- return FALSE;
- }
-
-
- store->ostream = camel_stream_fs_new_with_fd (fd);
- store->istream = camel_stream_buffer_new (store->ostream,
- CAMEL_STREAM_BUFFER_READ);
- store->command = 0;
-
- /* Read the greeting, if any. */
- buf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
- if (!buf) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- "Could not read greeting from IMAP "
- "server: %s",
- camel_exception_get_description (ex));
- gtk_object_unref (GTK_OBJECT (store->ostream));
- gtk_object_unref (GTK_OBJECT (store->istream));
- return FALSE;
- }
- g_free (buf);
-
- status = camel_imap_command (store, &msg, "LOGIN \"%s\" \"%s\"",
- service->url->user,
- service->url->passwd);
-
- if (status != CAMEL_IMAP_OK) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
- "Unable to authenticate to IMAP "
- "server. Error sending password:"
- " %s", msg ? msg : "(Unknown)");
- g_free (msg);
- gtk_object_unref (GTK_OBJECT (store->ostream));
- gtk_object_unref (GTK_OBJECT (store->istream));
- return FALSE;
- }
-
- service_class->connect (service, ex);
- return TRUE;
-}
-
-static gboolean
-imap_disconnect (CamelService *service, CamelException *ex)
-{
- CamelImapStore *store = CAMEL_IMAP_STORE (service);
-
- if (!service->connected)
- return TRUE;
-
- if (!service_class->disconnect (service, ex))
- return FALSE;
-
- gtk_object_unref (GTK_OBJECT (store->ostream));
- gtk_object_unref (GTK_OBJECT (store->istream));
- store->ostream = NULL;
- store->istream = NULL;
-
- return TRUE;
-}
-
-const gchar *
-camel_imap_store_get_toplevel_dir (CamelImapStore *store)
-{
- CamelURL *url = CAMEL_SERVICE (store)->url;
-
- g_assert(url != NULL);
- return url->path;
-}
-
-
-static CamelFolder
-*get_folder (CamelStore *store, const char *folder_name, CamelException *ex)
-{
- CamelImapFolder *new_imap_folder;
- CamelFolder *new_folder;
-
- new_imap_folder = gtk_type_new (CAMEL_IMAP_FOLDER_TYPE);
- new_folder = CAMEL_FOLDER (new_imap_folder);
-
- /* XXX We shouldn't be passing NULL here, but it's equivalent to
- * what was there before, and there's no
- * CamelImapFolder::get_subfolder yet anyway...
- */
- CF_CLASS (new_folder)->init (new_folder, store, NULL,
- folder_name, '/', ex);
-
- return new_folder;
-}
-
-static gchar
-*get_folder_name (CamelStore *store, const char *folder_name,
- CamelException *ex)
-{
- return g_strdup (folder_name);
-}
-
-/**
- * camel_imap_command: Send a command to a IMAP server.
- * @store: the IMAP store
- * @ret: a pointer to return the full server response in
- * @fmt: a printf-style format string, followed by arguments
- *
- * This command sends the command specified by @fmt and the following
- * arguments to the connected IMAP store specified by @store. It then
- * reads the server's response and parses out the status code. If
- * the caller passed a non-NULL pointer for @ret, camel_imap_command
- * will set it to point to an buffer containing the rest of the
- * response from the IMAP server. (If @ret was passed but there was
- * no extended response, @ret will be set to NULL.) The caller must
- * free this buffer when it is done with it.
- *
- * Return value: one of CAMEL_IMAP_OK (command executed successfully),
- * CAMEL_IMAP_ERR (command encounted an error), or CAMEL_IMAP_FAIL
- * (a protocol-level error occurred, and Camel is uncertain of the
- * result of the command.)
- **/
-gint
-camel_imap_command (CamelImapStore *store, char **ret, char *fmt, ...)
-{
- gchar *cmdbuf, *respbuf;
- gchar *cmdid;
- va_list ap;
- gint status;
-
- /* create the command */
- cmdid = g_strdup_printf("A%.5d", store->command++);
- va_start (ap, fmt);
- cmdbuf = g_strdup_vprintf (fmt, ap);
- va_end (ap);
-
- fprintf(stderr, "sending : %s %s\r\n", cmdid, cmdbuf);
-
- if (camel_stream_printf (store->ostream, "%s %s\r\n", cmdid, cmdbuf) == -1) {
- g_free(cmdbuf);
- g_free(cmdid);
- if (*ret)
- *ret = g_strdup(strerror(errno));
- return CAMEL_IMAP_FAIL;
- }
- g_free(cmdbuf);
- g_free(cmdid);
-
- /* Read the response */
- respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
- if (respbuf == NULL) {
- if (*ret)
- *ret = g_strdup(strerror(errno));
- return CAMEL_IMAP_FAIL;
- }
-
- fprintf(stderr, "received: %s\n", respbuf);
-
- /* TODO: We should really check the command id, da? */
- if (!strncmp (respbuf + 11, "OK", 2))
- status = CAMEL_IMAP_OK;
- else if (!strncmp (respbuf + 11, "NO", 2))
- status = CAMEL_IMAP_ERR;
- else
- status = CAMEL_IMAP_FAIL;
-
- if (ret) {
- if (status != CAMEL_IMAP_FAIL) {
- *ret = strchr (respbuf, ' ');
- if (*ret)
- *ret = g_strdup (*ret + 1);
- } else
- *ret = NULL;
- }
- g_free (respbuf);
-
- return status;
-}
-
-/**
- * camel_imap_command_extended: Send a command to a IMAP server and get
- * a multi-line response.
- * @store: the IMAP store
- * @ret: a pointer to return the full server response in
- * @fmt: a printf-style format string, followed by arguments
- *
- * This command sends the command specified by @fmt and the following
- * arguments to the connected IMAP store specified by @store. It then
- * reads the server's response and parses out the status code.
- * Camel_imap_command_extended will set it to point to a buffer containing the
- * response from the IMAP server. (If @ret was passed but there was The caller
- * must free this buffer when it is done with it.
- *
- * This command gets the additional data returned by "multi-line" IMAP
- * commands, such as SELECT, LIST, LSUB, and various other commands.
- * The returned data is un-byte-stuffed, and has lines termined by
- * newlines rather than CR/LF pairs.
- *
- * Return value: one of CAMEL_IMAP_OK (command executed successfully),
- * CAMEL_IMAP_ERR (command encounted an error), or CAMEL_IMAP_FAIL
- * (a protocol-level error occurred, and Camel is uncertain of the
- * result of the command.)
- **/
-
-gint
-camel_imap_command_extended (CamelImapStore *store, char **ret, char *fmt, ...)
-{
- CamelStreamBuffer *stream = CAMEL_STREAM_BUFFER (store->istream);
- GPtrArray *data;
- gchar *cmdid, *cmdbuf, *respbuf, *code;
- va_list app;
- gint i, status = CAMEL_IMAP_OK;
-
- /* Create the command */
- cmdid = g_strdup_printf("A%.5d", store->command++);
- va_start (ap, fmt);
- cmdbuf = g_strdup_vprintf (fmt, ap);
- va_end (ap);
-
- fprintf(stderr, "sending : %s %s\r\n", cmdid, cmdbuf);
-
- if (camel_stream_printf (store->ostream, "%s %s\r\n", cmdid, cmdbuf) == -1) {
- g_free(cmdbuf);
- g_free(cmdid);
-
- *ret = g_strdup(strerror(errno));
-
- return CAMEL_IMAP_FAIL;
- }
- g_free(cmdbuf);
- g_free(cmdid);
-
- data = g_ptr_array_new ();
- while (1) {
- respbuf = camel_stream_buffer_read_line (stream);
- if (!respbuf || !strncmp(respbuf, cmdid, strlen(cmdid)) ) {
- /* IMAP's last response starts with our command id */
- break;
- }
-
- fprintf(stderr, "received: %s\n", respbuf);
-
- g_ptr_array_add (data, respbuf);
- }
-
- if (respbuf) {
- code = respbuf + strlen(cmdid) + 1;
- if (!strncmp(code, "OK", 2))
- status = CAMEL_IMAP_OK;
- else if (!strncmp(code, "NO", 2))
- status = CAMEL_IMAP_ERR;
- else
- status = CAMEL_IMAP_FAIL;
- } else {
- status = CAMEL_IMAP_FAIL;
- }
-
- if (status == CAMEL_IMAP_OK) {
- /* Append an empty string to the end of the array
- * so when we g_strjoinv it, we get a "\n" after
- * the last real line.
- */
- g_ptr_array_add (data, "");
- g_ptr_array_add (data, NULL);
- *ret = g_strjoinv ("\n", (gchar **)data->pdata);
- } else {
- if (status != CAMEL_IMAP_FAIL)
- *ret = g_strdup (strchr (respbuf, ' ' + 1);
- else
- *ret = NULL;
- }
-
- for (i = 0; i < data->len - 2; i++)
- g_free (data->pdata[i]);
- g_ptr_array_free (data, TRUE);
-
- return status;
-}
-
-
-
-
-
-
diff --git a/camel/providers/imap/camel-imap-store.h b/camel/providers/imap/camel-imap-store.h
deleted file mode 100644
index fc6ac9b61c..0000000000
--- a/camel/providers/imap/camel-imap-store.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-imap-store.h : class for an imap store */
-
-/*
- * Authors: Jeffrey Stedfast <fejj@helixcode.com>
- * Ross Golder <ross@golder.org>
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * 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 Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_IMAP_STORE_H
-#define CAMEL_IMAP_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include <gtk/gtk.h>
-#include "camel-store.h"
-
-#define CAMEL_IMAP_STORE_TYPE (camel_imap_store_get_type ())
-#define CAMEL_IMAP_STORE(obj) (GTK_CHECK_CAST((obj), CAMEL_IMAP_STORE_TYPE, CamelImapStore))
-#define CAMEL_IMAP_STORE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_IMAP_STORE_TYPE, CamelImapStoreClass))
-#define IS_CAMEL_IMAP_STORE(o) (GTK_CHECK_TYPE((o), CAMEL_IMAP_STORE_TYPE))
-
-
-typedef struct {
- CamelStore parent_object;
-
- CamelStream *istream, *ostream;
- guint32 command;
-
-} CamelImapStore;
-
-
-
-typedef struct {
- CamelStoreClass parent_class;
-
-} CamelImapStoreClass;
-
-
-/* public methods */
-void camel_imap_store_open (CamelImapStore *store, CamelException *ex);
-void camel_imap_store_close (CamelImapStore *store, gboolean expunge,
- CamelException *ex);
-
-/* support functions */
-
-enum { CAMEL_IMAP_OK, CAMEL_IMAP_ERR, CAMEL_IMAP_FAIL };
-
-gint camel_imap_command (CamelImapStore *store, char **ret, char *fmt, ...);
-gchar *camel_imap_command_extended (CamelImapStore *store, char **ret, char *fmt, ...);
-
-/* Standard Gtk function */
-GtkType camel_imap_store_get_type (void);
-
-const gchar *camel_imap_store_get_toplevel_dir (CamelImapStore *store);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_IMAP_STORE_H */
-
-
diff --git a/camel/providers/imap/camel-imap-summary.h b/camel/providers/imap/camel-imap-summary.h
deleted file mode 100644
index 437331ce30..0000000000
--- a/camel/providers/imap/camel-imap-summary.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2000 Helix Code Inc.
- *
- * Authors: Jeffrey Stedfast <fejj@helixcode.com>
- *
- * 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 Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifndef _CAMEL_IMAP_SUMMARY_H
-#define _CAMEL_IMAP_SUMMARY_H
-
-#include <gtk/gtk.h>
-#include <camel/camel-folder-summary.h>
-#include <libibex/ibex.h>
-
-#define CAMEL_IMAP_SUMMARY(obj) GTK_CHECK_CAST (obj, camel_imap_summary_get_type (), CamelImapSummary)
-#define CAMEL_IMAP_SUMMARY_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, camel_imap_summary_get_type (), CamelImapSummaryClass)
-#define IS_CAMEL_IMAP_SUMMARY(obj) GTK_CHECK_TYPE (obj, camel_imap_summary_get_type ())
-
-typedef struct _CamelImapSummary CamelImapSummary;
-typedef struct _CamelImapSummaryClass CamelImapSummaryClass;
-
-/* extra summary flags */
-enum {
- CAMEL_MESSAGE_FOLDER_NOXEV = 1<<16,
-/* CAMEL_MESSAGE_FOLDER_FLAGGED = 1<<17,*/
-};
-
-typedef struct _CamelImapMessageContentInfo {
- CamelMessageContentInfo info;
-} CamelImapMessageContentInfo;
-
-typedef struct _CamelImapMessageInfo {
- CamelMessageInfo info;
-
- off_t frompos;
-} CamelImapMessageInfo;
-
-struct _CamelImapSummary {
- CamelFolderSummary parent;
-
- struct _CamelImapSummaryPrivate *priv;
-
- char *folder_path; /* name of matching folder */
- size_t folder_size; /* size of the imap file, last sync */
-
- ibex *index;
- int index_force; /* do we force index during creation? */
-};
-
-struct _CamelImapSummaryClass {
- CamelFolderSummaryClass parent_class;
-};
-
-guint camel_imap_summary_get_type (void);
-
-CamelImapSummary *camel_imap_summary_new (const char *filename, const char *imap_name, ibex *index);
-
-/* load/check the summary */
-int camel_imap_summary_load(CamelImapSummary *mbs, int forceindex);
-
-/* incremental update */
-int camel_imap_summary_update(CamelImapSummary *mbs, off_t offset);
-
-/* perform a folder expunge */
-int camel_imap_summary_expunge(CamelImapSummary *mbs);
-
-#endif /* ! _CAMEL_IMAP_SUMMARY_H */
diff --git a/camel/providers/imap/imap.c b/camel/providers/imap/imap.c
deleted file mode 100644
index 3a4109ed47..0000000000
--- a/camel/providers/imap/imap.c
+++ /dev/null
@@ -1,835 +0,0 @@
-/* Spruce
- * Copyright (C) 1999-2000 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 Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "imap.h"
-
-#define IMAP_LOGGING
-
-/* this is used in the tag before each command */
-static guint32 imap_commands = 0;
-
-extern gint timeout;
-extern GList *mime_parts;
-
-
-gint imap_ok (gint tag, gchar *line)
-{
- /* returns 1 if <tag> OK was found */
- gchar find[64];
- gint ret;
-
- g_snprintf(find, sizeof(find)-1, "A%.5d OK", tag);
-
- ret = find_string (line, find);
-
- if (ret < 0)
- return 0;
-
- return 1;
-}
-
-gint imap_login_cram_md5 (gint socket, gchar *username, gchar *password)
-{
- /* Log in to server using CRAM-MD5 keyed hash. */
- gchar buffer[512];
- gchar *retstr;
- gint pos;
-
- if (username == NULL || password == NULL)
- return ERROR;
-
- memset(buffer, 0, sizeof(buffer));
- if (recvline(socket, buffer, sizeof(buffer)-1) < 0)
- return ERROR; /* Fetch the OK line from the server */
-
- if (find_string(buffer, "OK") == -1)
- return ERROR;
-
- g_snprintf(buffer, sizeof(buffer)-1, "A%.5d AUTHENTICATE CRAM-MD5\r\n", imap_commands);
-
- if (send(socket, buffer, strlen(buffer), 0) < 0)
- return ERROR;
-
- memset(buffer, 0, sizeof(buffer));
- if (recvline(socket, buffer, sizeof(buffer)-1) < 0)
- return ERROR;
-
- pos = find_string(buffer, "\r\n");
- if (pos != -1)
- buffer[pos] = '\0';
- retstr = cram_md5(username, password, buffer);
-
- if (retstr[strlen(retstr)-1] == '\n')
- retstr[strlen(retstr)-1] = '\0';
-
- g_snprintf(buffer, sizeof(buffer)-1, "%s\r\n", retstr);
- g_free(retstr);
-
- if (send (socket, buffer, strlen(buffer), 0) < 0)
- return ERROR;
-
- if (recvline(socket, buffer, sizeof(buffer)-1) < 0)
- return ERROR;
-
- if (!imap_ok(imap_commands, buffer))
- return ERROR;
-
- imap_commands++;
-
- return SUCCESS;
-}
-
-gint imap_login (gint socket, gchar *username, gchar *password)
-{
- /* this logs us in to the server */
- gchar buffer[512];
- gchar temp[64];
-
- if (username == NULL || password == NULL)
- return ERROR;
-
- g_snprintf(buffer, sizeof(buffer)-1, "A%.5d LOGIN \"%s\" \"%s\"\r\n", imap_commands, username, password);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", buffer);
-#endif
-
- if (send (socket, buffer, strlen(buffer), 0) < 0)
- {
- return ERROR;
- }
-
- g_snprintf(temp, sizeof(temp)-1, "A%.5d", imap_commands);
-
- memset(buffer, 0, sizeof(buffer));
- recvline_timeo(socket, buffer, sizeof(buffer)-1, timeout);
- while (!strstr(buffer, temp))
- {
- memset(buffer, 0, sizeof(buffer));
- recvline_timeo(socket, buffer, sizeof(buffer)-1, timeout);
- }
-
- if (!imap_ok(imap_commands, buffer))
- return ERROR;
-
- imap_commands++;
-
- return SUCCESS;
-}
-
-GList *imap_list (gint socket, gchar *namespace)
-{
- /* this gets the names of all the mailboxes */
- gchar buffer[512];
- gchar flags[256];
- gchar temp[64], *ptr = NULL, *flagptr = NULL;
- gchar slashdot = '\0';
- GList *list = NULL;
- gint ret, size = 0, flaglen = 0;
-
- if (namespace && *namespace)
- {
- if (*namespace && namespace[strlen(namespace)-1] != '/' && namespace[strlen(namespace)-1] != '.')
- slashdot = '/';
- g_snprintf(buffer, sizeof(buffer)-1, "A%.5d LIST \"\" %s%c*\r\n", imap_commands, namespace, slashdot);
- }
- else
- g_snprintf(buffer, sizeof(buffer)-1, "A%.5d LIST \"\" INBOX.*\r\n", imap_commands);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", buffer);
-#endif
-
- if (send(socket, buffer, strlen(buffer), 0) < 0)
- {
- return NULL;
- }
-
- do
- {
- memset(buffer, 0, sizeof(buffer));
- ret = recvline(socket, buffer, sizeof(buffer)-1);
- if (ret > 0)
- {
-#ifdef IMAP_LOGGING
- fprintf(stderr, "received: %s", buffer);
-#endif
- if (buffer[0] == '*')
- {
- strip(buffer, '\r');
- strip(buffer, '\n');
-
- /* skip ahead to the flag section */
- ptr = strstr(buffer, "(");
-
- /* find the end of the flags section */
- flagptr = ptr + 1;
- ptr = strstr(ptr, ")") + 1;
-
- /* eventually we will need to parse this */
- memset(flags, 0, sizeof(flags));
- flaglen = (gint)(ptr - flagptr) - 1;
- size = sizeof(flags);
- strncpy(flags, flagptr, flaglen > size ? size : flaglen);
- if (!strstrcase(flags, "\\NoSelect")) /* is this a selectable mailbox? */
- {
- /* skip the reference name */
- ptr += imap_get_string (ptr, temp, sizeof(temp)-1, "");
-
- /* the rest of the return string is fair play... */
- g_strstrip(ptr); /* trim off any extra white space */
- unquote(ptr); /* unquote the mailbox name if it is quoted */
- if (slashdot)
- strcut(ptr, 0, strlen(namespace)+1); /* cut out the namespace and the '/' */
- else
- strcut(ptr, 0, strlen(namespace)); /* cut out the namespace */
-
-
- list = g_list_append (list, g_strdup(ptr));
- }
- }
- else
- break;
- }
- } while (ret > 0);
-
- imap_commands++;
-
- return list;
-}
-
-gint imap_select_mailbox (gint socket, gchar *mailbox, gchar *namespace)
-{
- /* selects a mailbox, returns the number of messages in that mailbox
- * or -1 on error */
- gchar *cmdbuf, buffer[512], temp[64], *index, mesgs[16];
- gchar slashdot = '\0';
- gint ret, i;
-
- if (mailbox == NULL)
- return ERROR;
-
- if (namespace && strcmp(mailbox, "INBOX"))
- {
- if (*namespace && namespace[strlen(namespace)-1] != '/' && namespace[strlen(namespace)-1] != '.')
- slashdot = '/';
-
- cmdbuf = g_strdup_printf("A%.5d SELECT %s%c%s\r\n", imap_commands, namespace, slashdot, mailbox);
- }
- else
- cmdbuf = g_strdup_printf("A%.5d SELECT %s\r\n", imap_commands, mailbox);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", cmdbuf);
-#endif
-
- if (send(socket, cmdbuf, strlen(cmdbuf), 0) < 0)
- {
- g_free(cmdbuf);
- return -1;
- }
- g_free(cmdbuf);
-
- g_snprintf(temp, sizeof(temp)-1, "A%.5d", imap_commands);
-
- memset(buffer, 0, sizeof(buffer));
- ret = recvline(socket, buffer, sizeof(buffer)-1);
- while (ret > 0)
- {
-#ifdef IMAP_LOGGING
- fprintf(stderr, "received: %s", buffer);
-#endif
- if (strstr(buffer, temp))
- break;
- if (buffer[0] == '*')
- {
- if (strstr(buffer, "EXISTS"))
- {
- index = buffer;
- while (*index != ' ')
- index++;
- index++;
-
- i = 0;
- memset(mesgs, 0, sizeof(mesgs));
- while (*index != ' ' && i < sizeof(mesgs)-1)
- {
- mesgs[i] = *index;
- index++;
- i++;
- }
- }
- }
- memset(buffer, 0, sizeof(buffer));
- ret = recvline(socket, buffer, sizeof(buffer)-1);
- }
-
- if (!imap_ok(imap_commands, buffer))
- return -1;
-
- imap_commands++;
-
- return atoi(mesgs);
-}
-
-gint imap_logout (gint socket)
-{
- /* logs out */
- gchar buffer[256];
-
- g_snprintf(buffer, sizeof(buffer)-1, "A%.5d LOGOUT\r\n", imap_commands);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", buffer);
-#endif
-
- if (send(socket, buffer, strlen(buffer), 0) < 0)
- {
- return ERROR;
- }
-
- return SUCCESS;
-}
-
-gint imap_mailbox_create (gint socket, gchar *mailbox)
-{
- /* creates a new mailbox */
- gchar buffer[256];
-
- if (mailbox == NULL)
- return ERROR;
-
- g_snprintf(buffer, sizeof(buffer)-1, "A%.5d CREATE %s\r\n", imap_commands, mailbox);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", buffer);
-#endif
-
- if (send(socket, buffer, strlen(buffer), 0) < 0)
- {
- return ERROR;
- }
-
- memset(buffer, 0, sizeof(buffer));
- if (recvline(socket, buffer, sizeof(buffer)-1) < 0 || !imap_ok(imap_commands, buffer))
- {
- return ERROR;
- }
-
- imap_commands++;
-
- return SUCCESS;
-}
-
-gint imap_mailbox_delete (gint socket, gchar *mailbox)
-{
- /* deletes a mailbox */
- gchar buffer[256];
-
- if (mailbox == NULL)
- return ERROR;
-
- g_snprintf(buffer, sizeof(buffer)-1, "A%.5d DELETE %s\r\n", imap_commands, mailbox);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", buffer);
-#endif
-
- if (send(socket, buffer, strlen(buffer), 0) < 0)
- {
- return ERROR;
- }
-
- memset(buffer, 0, sizeof(buffer));
- if (recvline(socket, buffer, sizeof(buffer)-1) < 0 ||
- !imap_ok(imap_commands, buffer))
- {
- return ERROR;
- }
-
- imap_commands++;
-
- return SUCCESS;
-}
-
-/* fetches the specified part of a message, which can be alot of
- * if you use peek the \Seen flag is not set */
-gchar *imap_fetch (gint socket, gint mesgnum, gchar *part, gint *seen)
-{
- /* fetches the specified part of the mesg. */
- gchar *mesg = NULL;
- gchar buffer[512], *index;
- gchar flags[128], size[16], temp[64];
- gint i, n, msgsize = 1000;
-
- if (mesgnum < 0)
- return (gchar *)NULL;
-
- g_snprintf(buffer, sizeof(buffer)-1, "A%.5d FETCH %d (FLAGS %s)\r\n", imap_commands, mesgnum, part);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", buffer);
-#endif
-
- if (send(socket, buffer, strlen(buffer), 0) < 0)
- {
- return (gchar *)NULL;
- }
-
-
- memset(buffer, 0, sizeof(buffer));
- n = recvline(socket, buffer, sizeof(buffer)-1);
-
- if (buffer[0] != '*' && imap_ok(imap_commands, buffer))
- {
- memset(buffer, 0, sizeof(buffer));
- n = recvline(socket, buffer, sizeof(buffer)-1);
- }
-
- if (buffer[0] == '*')
- /*if (imap_ok(imap_commands, buffer))*/
- {
- index = strstrcase(buffer, "FLAGS");
- if (index == NULL) /* hmm */
- {
- fprintf(stderr, _("IMAP server replied using unknown tokens.\n"));
- return (gchar *)NULL;
- }
- else
- {
-#ifdef IMAP_LOGGING
- fprintf(stderr, "received: %s", buffer);
-#endif
- /* skip to the FLAGS token */
- for ( ; *index && *index != '('; index++);
- index++;
-
- i = 0;
- memset(flags, 0, sizeof(flags));
- while (*index != ')' && i < sizeof(flags)-1)
- {
- flags[i] = *index;
- index++;
- i++;
- }
- flags[i] = '\0';
-
- /* skip to the next significant token */
- for (index++; *index && *index != '{'; index++);
- index++;
-
- i = 0;
- memset(size, 0, sizeof(size));
- while (*index != '}' && i < sizeof(size)-1)
- {
- size[i] = *index;
- index++;
- i++;
- }
- size[i] = '\0';
- msgsize = atoi(size);
- }
- }
- else
- {
- g_snprintf(temp, sizeof(temp)-1, "A%.5d", imap_commands);
- if (strstr(buffer, temp)) /* this means there's no such message */
- {
- fprintf(stderr, _("IMAP responded with \"no such message\".\n"));
- return (gchar *)NULL;
- }
- }
-
-
- mesg = g_malloc0(msgsize + 50); /* just to be safe */
- n = recvline(socket, buffer, sizeof(buffer)-1);
-
- while (!(n <= 0) && !imap_ok(imap_commands, buffer))
- {
- strip(buffer, '\r'); /* strip all the \r's */
- strcat(mesg, buffer);
- memset(buffer, 0, sizeof(buffer));
- n = recvline(socket, buffer, sizeof(buffer)-1);
- }
-
- if (mesg)
- mesg[strlen(mesg)-3] = '\0'; /* strip the ending ) */
-
- if (seen != NULL)
- {
- if (strstrcase(flags, "\\Seen"))
- *seen = 1;
- else
- *seen = 0;
- }
-
- imap_commands++;
-
- return (gchar*)mesg;
-}
-
-gboolean imap_delete(const ImapAccount_t *imap, GList *sorted)
-{
- GList *p = sorted;
- gchar buffer[256];
- gchar temp[16];
- gint ret;
-
- do
- {
- gint id = GPOINTER_TO_INT(p->data);
- g_snprintf(buffer, sizeof(buffer)-1, "A%.5d STORE %d +FLAGS (\\Deleted)\r\n", imap_commands, id);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", buffer);
-#endif
- if (send(imap->socket, buffer, strlen(buffer), 0) < 0)
- {
- return FALSE;
- }
- g_snprintf(temp, sizeof(temp)-1, "A%.5d", imap_commands);
-
- memset(buffer, 0, sizeof(buffer));
- ret = recvline(imap->socket, buffer, sizeof(buffer)-1);
- while (ret > 0)
- {
- if (find_string(buffer, temp) >= 0)
- break;
-
- memset(buffer, 0, sizeof(buffer));
- ret = recvline(imap->socket, buffer, sizeof(buffer)-1);
- }
-
- if (!imap_ok(imap_commands, buffer))
- {
- return FALSE;
- }
- imap_commands++;
- } while ((p = g_list_next(p)));
-
- g_snprintf(buffer, 255, "A%.5d EXPUNGE\r\n", imap_commands);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", buffer);
-#endif
- if (send(imap->socket, buffer, strlen(buffer), 0) < 0)
- {
- return FALSE;
- }
-
- g_snprintf (temp, 15, "A%.5d", imap_commands);
-
- memset(buffer, 0, sizeof(buffer));
- ret = recvline(imap->socket, buffer, sizeof(buffer)-1);
- while (ret > 0)
- {
- if (find_string(buffer, temp) >= 0)
- break;
-
- memset(buffer, 0, sizeof(buffer));
- ret = recvline(imap->socket, buffer, sizeof(buffer)-1);
- }
-
- if (!imap_ok(imap_commands, buffer))
- {
- return FALSE;
- }
-
- imap_commands++;
-
- return TRUE;
-}
-
-gint imap_connect (Server *server)
-{
- /* connects to the server and returns the socket or -1 on error */
- gchar buffer[512];
- gint sock;
-
- if (!Resolve(server))
- return -1;
-
- sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (sock < 0)
- return -1;
-
- server->sin.sin_family = AF_INET;
- server->sin.sin_port = htons(server->port);
-
-#ifdef IMAP_LOGGING
- fprintf(stderr, _("Connecting to IMAP server (%s)..."), server->ip);
-#endif
- if (connect_timeo(sock, (struct sockaddr*)&server->sin, sizeof(server->sin), timeout) < 0)
- {
- fprintf(stderr, _("failed.\n"));
- close(sock);
- return -1;
- }
- fprintf(stderr, _("success.\n"));
-
- {
- /* read the connect responce */
- memset(buffer, 0, sizeof(buffer));
- recvline_timeo(sock, buffer, sizeof(buffer)-1, timeout);
- }
-
- return sock;
-}
-
-gint imap_add_part(gchar *c)
-{
- gchar name[64], value[64];
- gchar temp[64];
- gchar *start = c;
- struct mime_part *part;
-
- part = g_malloc0(sizeof(struct mime_part));
-
- c += imap_get_string (c, part->type, sizeof(part->type)-1, "text");
- c += imap_get_string (c, part->subtype, sizeof(part->subtype)-1, "plain");
-
- /* seek to the beginning of the parameter... */
- for ( ; *c && *c == ' '; c++);
-
- if (*c)
- {
- gchar *p = part->parameter;
- if (*c == '(')
- {
- c++;
- while (*c && *c != ')')
- {
- c += imap_get_string (c, name, sizeof(name)-1, "");
- c += imap_get_string (c, value, sizeof(value)-1, "");
- /* don't buffer overrun */
- g_snprintf(p, sizeof(part->parameter)-1, "%s=\"%s\"; ", name, value);
- p += strlen(p);
-
- while (*c && *c == ' ') /* skip any spaces */
- c++;
- }
- }
- else
- {
- c += imap_get_string (c, name, sizeof(name)-1, "");
- strcpy(value, name);
- *p++ = '\0';
- }
-
- c++; /* skip over the ')' belonging to the parameter values */
- if (*c)
- {
- /* ignore id and description */
- c += imap_get_string (c, temp, sizeof(temp)-1, "");
- c += imap_get_string (c, temp, sizeof(temp)-1, "");
-
- /* encoding */
- c += imap_get_string (c, part->encoding, sizeof(part->encoding)-1, "");
-
- /* size */
- c += imap_get_number (c, &part->len);
-
- /* skip the optional info */
- c += imap_skip_section(c);
-
- part->pos = 0; /* isn't useful in imap */
-#ifdef IMAP_LOGGING
- fprintf(stderr, "type = %s/%s\n", part->type, part->subtype);
- fprintf(stderr, "encoding = %s\n", part->encoding);
- fprintf(stderr, "param = %s\n", part->parameter);
-#endif
- mime_parts = g_list_append (mime_parts, part);
-
- return (c - start);
- }
- }
- return -1;
-}
-
-gint imap_parts (gint socket, gint mesg_num)
-{
- GList *tmp;
- gchar *buffer = NULL, *c;
- gint res = 1, cnt;
-
- tmp = mime_parts;
- while (tmp != NULL)
- {
- g_free(tmp->data);
- tmp = tmp->next;
- }
-
- if (mime_parts != NULL)
- {
- g_list_free(mime_parts);
- mime_parts = NULL;
- }
-
- buffer = g_malloc0(sizeof(gchar)*2048);
-
- g_snprintf(buffer, 2047, "A%.5d FETCH %d (BODYSTRUCTURE)\r\n", imap_commands, mesg_num);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "%s", buffer);
-#endif
-
- if (send(socket, buffer, strlen(buffer), 0) < 0)
- {
- g_free(buffer);
- return 0;
- }
-
- /* get the structure of the body */
- memset (buffer, 0, sizeof(gchar)*2048);
- recvline (socket, buffer, sizeof(gchar)*2048);
-#ifdef IMAP_LOGGING
- fprintf(stderr, "received: %s", buffer);
-#endif
-
- c = buffer;
- /* skip to the BODYSTRUCTURE */
- c = strstr(c, "BODYSTRUCTURE");
- if (c == NULL)
- return 0;
-
- c += strlen("BODYSTRUCTURE");
- if (*c)
- {
- /* looks good so far, skip to the parts */
- for ( ; *c && *c != '('; c++);
-
- if (*c && *(c+1) == '(')
- {
- c++;
-#ifdef IMAP_LOGGING
- fprintf(stderr, "message is multipart\n");
-#endif
- /* multipart */
- while (*c == '(')
- {
- cnt = imap_skip_section(c);
- if (cnt > 1)
- {
- c[cnt-1] = '\0';
- cnt = imap_add_part(c);
- if (cnt == -1)
- {
- res = 0;
- break;
- }
- c += cnt;
- }
- else
- {
- res = 0;
- break;
- }
- /* skip to the next mime part */
- for ( ; *c && *c == ' '; c++);
- }
- }
- else
- if (*c)
- {
- /* one part */
- cnt = imap_add_part(c);
- res = res != -1;
- }
- /* just forget the rest, who cares?? */
- }
-
- g_free(buffer);
-
- return res;
-}
-
-gint imap_get_string (gchar *index, gchar *dest, gint destlen, gchar *def)
-{
- /* gets a string ("data" or NIL) , if NIL it copies def instead */
- gint i;
- gchar *start = index;
-
- while (*index && *index == ' ') /* skip white space */
- index++;
-
- if (strncmp(index, "NIL", 3))
- {
- /* progress to the first quote (we should already be there but just in case) */
- while (*index && *index != '"')
- index++;
-
- index++;
-
- i = 0;
- while (*index && *index != '"')
- {
- if (i < destlen-1)
- {
- dest[i] = *index;
- i++;
- }
- index++;
- }
- dest[i] = '\0';
- }
- else
- {
- /* if there were no data we just copy def */
- index += 3;
- strncpy (dest, def, destlen);
- }
-
- return index - start + 1;
-}
-
-gint imap_get_number (gchar *index, gint *dest)
-{
- /* gets a number */
- gchar number[32];
- gchar *start = index;
- gint i;
-
- /* skip white space **/
- while (*index == ' ')
- index++;
-
- i = 0;
- while (*index != ' ' && i < sizeof(number)-1)
- {
- number[i] = *index;
- index++;
- i++;
- }
- number[i] = '\0';
-
- *dest = atoi(number);
-
- return index - start;
-}
-
-gint imap_skip_section(gchar *index)
-{
- gint depth = 1;
- gchar *start = index;
-
- while (depth != 0 && *index)
- {
- if (*index == '(')
- depth++;
- else if ( *index == ')' )
- depth--;
- index++;
- }
-
- return index - start;
-}
-
diff --git a/camel/providers/imap/imap.h b/camel/providers/imap/imap.h
deleted file mode 100644
index 3884651c42..0000000000
--- a/camel/providers/imap/imap.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Spruce
- * Copyright (C) 1999-2000 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 Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef __IMAP_H__
-#define __IMAP_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <gtk/gtk.h>
-#undef MIN
-#undef MAX
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include "parse.h"
-#include "server.h"
-#include "mime.h"
-#include "cram-md5.h"
-
-struct imap_account
-{
- Server server;
- gchar *username;
- gchar *password;
- gint socket;
-};
-
-gint imap_ok (gint tag, gchar *line);
-
-gint imap_login_cram_md5(gint socket, gchar *username, gchar *password);
-
-gint imap_login (gint socket, gchar *username, gchar *password);
-
-GList *imap_list (gint socket, gchar *namespace);
-
-gint imap_select_mailbox (gint socket, gchar *mailbox, gchar *namespace);
-
-gint imap_logout (gint socket);
-
-gint imap_mailbox_create (gint socket, gchar *mailbox);
-
-gint imap_mailbox_delete (gint socket, gchar *mailbox);
-
-gchar *imap_fetch (gint socket, gint mesgnum, gchar *part, gint *seen);
-
-gboolean imap_delete (const ImapAccount_t *imap, GList *sorted);
-
-gint imap_connect(Server *server);
-
-gint imap_add_part(gchar *c);
-
-gint imap_parts (gint socket, gint mesg_num);
-
-gint imap_get_string (gchar *index, gchar *dest, gint destlen, gchar *def);
-
-gint imap_get_number (gchar *index, gint *dest);
-
-gint imap_skip_section(gchar *index);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
-
diff --git a/camel/providers/imap/libcamelimap.urls b/camel/providers/imap/libcamelimap.urls
deleted file mode 100644
index c301c0ffac..0000000000
--- a/camel/providers/imap/libcamelimap.urls
+++ /dev/null
@@ -1 +0,0 @@
-imap