From 6f31d60289f5d3def0cae26fd7ac0afe4d1f95ab Mon Sep 17 00:00:00 2001 From: nobody Date: Sun, 23 Apr 2000 19:19:31 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'GNOME_GAMES_1_1_0'. svn path=/tags/GNOME_GAMES_1_1_0/; revision=2566 --- camel/.cvsignore | 7 - camel/CODING.STYLE | 19 - camel/ChangeLog | 1614 --------------- camel/Makefile.am | 138 -- camel/README | 57 - camel/README.COPYRIGHT | 47 - camel/README.HACKING | 14 - camel/camel-arg-collector.c | 186 -- camel/camel-data-wrapper.c | 455 ----- camel/camel-data-wrapper.h | 128 -- camel/camel-exception-list.def | 35 - camel/camel-exception.c | 275 --- camel/camel-exception.h | 89 - camel/camel-folder-pt-proxy.c | 809 -------- camel/camel-folder-pt-proxy.h | 92 - camel/camel-folder-summary.c | 177 -- camel/camel-folder-utils.c | 99 - camel/camel-folder-utils.h | 44 - camel/camel-folder.c | 1445 ------------- camel/camel-folder.h | 375 ---- camel/camel-marshal-utils.c | 343 ---- camel/camel-marshal-utils.h | 102 - camel/camel-medium.c | 277 --- camel/camel-medium.h | 101 - camel/camel-mime-body-part.c | 124 -- camel/camel-mime-body-part.h | 84 - camel/camel-mime-filter-basic.c | 219 -- camel/camel-mime-filter-basic.h | 60 - camel/camel-mime-filter-charset.c | 243 --- camel/camel-mime-filter-charset.h | 54 - camel/camel-mime-filter-index.c | 166 -- camel/camel-mime-filter-index.h | 57 - camel/camel-mime-filter-save.c | 160 -- camel/camel-mime-filter-save.h | 53 - camel/camel-mime-filter.c | 227 --- camel/camel-mime-filter.h | 84 - camel/camel-mime-message.c | 638 ------ camel/camel-mime-message.h | 170 -- camel/camel-mime-parser.c | 1248 ------------ camel/camel-mime-parser.h | 115 -- camel/camel-mime-part-utils.c | 165 -- camel/camel-mime-part-utils.h | 54 - camel/camel-mime-part.c | 881 -------- camel/camel-mime-part.h | 132 -- camel/camel-mime-utils.c | 2117 -------------------- camel/camel-mime-utils.h | 116 -- camel/camel-movemail.c | 252 --- camel/camel-movemail.h | 45 - camel/camel-multipart.c | 678 ------- camel/camel-multipart.h | 110 - camel/camel-op-queue.c | 166 -- camel/camel-op-queue.h | 64 - camel/camel-provider.c | 201 -- camel/camel-provider.h | 81 - camel/camel-recipient.c | 303 --- camel/camel-recipient.h | 88 - camel/camel-seekable-stream.c | 148 -- camel/camel-seekable-stream.h | 92 - camel/camel-seekable-substream.c | 394 ---- camel/camel-seekable-substream.h | 92 - camel/camel-service.c | 464 ----- camel/camel-service.h | 131 -- camel/camel-session.c | 330 --- camel/camel-session.h | 98 - camel/camel-simple-data-wrapper-stream.c | 299 --- camel/camel-simple-data-wrapper-stream.h | 69 - camel/camel-simple-data-wrapper.c | 358 ---- camel/camel-simple-data-wrapper.h | 78 - camel/camel-store.c | 274 --- camel/camel-store.h | 99 - camel/camel-stream-buffer.c | 487 ----- camel/camel-stream-buffer.h | 104 - camel/camel-stream-data-wrapper.c | 199 -- camel/camel-stream-data-wrapper.h | 71 - camel/camel-stream-filter.c | 317 --- camel/camel-stream-filter.h | 55 - camel/camel-stream-fs.c | 513 ----- camel/camel-stream-fs.h | 113 -- camel/camel-stream-mem.c | 295 --- camel/camel-stream-mem.h | 92 - camel/camel-stream.c | 286 --- camel/camel-stream.h | 111 - camel/camel-thread-proxy.c | 514 ----- camel/camel-thread-proxy.h | 90 - camel/camel-transport.c | 110 - camel/camel-transport.h | 87 - camel/camel-types.h | 57 - camel/camel-url.c | 281 --- camel/camel-url.h | 59 - camel/camel.c | 45 - camel/camel.h | 73 - camel/data-wrapper-repository.c | 133 -- camel/data-wrapper-repository.h | 55 - camel/gmime-content-field.c | 237 --- camel/gmime-content-field.h | 71 - camel/gmime-utils.c | 287 --- camel/gmime-utils.h | 70 - camel/gstring-util.c | 329 --- camel/gstring-util.h | 77 - camel/hash-table-utils.c | 80 - camel/hash-table-utils.h | 46 - camel/md5-utils.c | 391 ---- camel/md5-utils.h | 54 - camel/providers/.cvsignore | 2 - camel/providers/MH/.cvsignore | 6 - camel/providers/MH/Makefile.am | 33 - camel/providers/MH/camel-mh-folder.c | 1022 ---------- camel/providers/MH/camel-mh-folder.h | 72 - camel/providers/MH/camel-mh-provider.c | 46 - camel/providers/MH/camel-mh-store.c | 153 -- camel/providers/MH/camel-mh-store.h | 72 - camel/providers/MH/mh-summary.c | 290 --- camel/providers/MH/mh-summary.h | 33 - camel/providers/MH/mh-uid.c | 220 -- camel/providers/MH/mh-uid.h | 40 - camel/providers/MH/mh-utils.c | 50 - camel/providers/MH/mh-utils.h | 30 - camel/providers/Makefile.am | 6 - camel/providers/maildir/.cvsignore | 6 - camel/providers/maildir/Makefile.am | 23 - camel/providers/maildir/camel-maildir-folder.c | 802 -------- camel/providers/maildir/camel-maildir-folder.h | 66 - camel/providers/maildir/camel-maildir-provider.c | 46 - camel/providers/maildir/camel-maildir-store.c | 124 -- camel/providers/maildir/camel-maildir-store.h | 69 - camel/providers/mbox/.cvsignore | 7 - camel/providers/mbox/Makefile.am | 41 - camel/providers/mbox/camel-mbox-folder.c | 893 --------- camel/providers/mbox/camel-mbox-folder.h | 82 - camel/providers/mbox/camel-mbox-provider.c | 57 - camel/providers/mbox/camel-mbox-search.c | 410 ---- camel/providers/mbox/camel-mbox-search.h | 14 - camel/providers/mbox/camel-mbox-store.c | 129 -- camel/providers/mbox/camel-mbox-store.h | 69 - camel/providers/mbox/camel-mbox-summary.c | 1260 ------------ camel/providers/mbox/camel-mbox-summary.h | 78 - camel/providers/nntp/.cvsignore | 7 - camel/providers/nntp/Makefile.am | 31 - camel/providers/nntp/camel-nntp-folder.c | 686 ------- camel/providers/nntp/camel-nntp-folder.h | 73 - camel/providers/nntp/camel-nntp-provider.c | 53 - camel/providers/nntp/camel-nntp-store.c | 476 ----- camel/providers/nntp/camel-nntp-store.h | 85 - camel/providers/nntp/camel-nntp-summary.c | 396 ---- camel/providers/nntp/camel-nntp-summary.h | 81 - camel/providers/nntp/camel-nntp-utils.c | 209 -- camel/providers/nntp/camel-nntp-utils.h | 42 - camel/providers/pop3/.cvsignore | 6 - camel/providers/pop3/Makefile.am | 28 - camel/providers/pop3/camel-pop3-folder.c | 256 --- camel/providers/pop3/camel-pop3-folder.h | 70 - camel/providers/pop3/camel-pop3-provider.c | 58 - camel/providers/pop3/camel-pop3-store.c | 483 ----- camel/providers/pop3/camel-pop3-store.h | 80 - camel/providers/sendmail/.cvsignore | 7 - camel/providers/sendmail/Makefile.am | 25 - camel/providers/sendmail/camel-sendmail-provider.c | 56 - .../providers/sendmail/camel-sendmail-transport.c | 204 -- .../providers/sendmail/camel-sendmail-transport.h | 64 - camel/providers/smtp/.cvsignore | 6 - camel/providers/smtp/Makefile.am | 25 - camel/providers/smtp/camel-smtp-provider.c | 56 - camel/providers/smtp/camel-smtp-transport.c | 662 ------ camel/providers/smtp/camel-smtp-transport.h | 68 - camel/string-utils.c | 292 --- camel/string-utils.h | 78 - 166 files changed, 35712 deletions(-) delete mode 100644 camel/.cvsignore delete mode 100644 camel/CODING.STYLE delete mode 100644 camel/ChangeLog delete mode 100644 camel/Makefile.am delete mode 100644 camel/README delete mode 100644 camel/README.COPYRIGHT delete mode 100644 camel/README.HACKING delete mode 100644 camel/camel-arg-collector.c delete mode 100644 camel/camel-data-wrapper.c delete mode 100644 camel/camel-data-wrapper.h delete mode 100644 camel/camel-exception-list.def delete mode 100644 camel/camel-exception.c delete mode 100644 camel/camel-exception.h delete mode 100644 camel/camel-folder-pt-proxy.c delete mode 100644 camel/camel-folder-pt-proxy.h delete mode 100644 camel/camel-folder-summary.c delete mode 100644 camel/camel-folder-utils.c delete mode 100644 camel/camel-folder-utils.h delete mode 100644 camel/camel-folder.c delete mode 100644 camel/camel-folder.h delete mode 100644 camel/camel-marshal-utils.c delete mode 100644 camel/camel-marshal-utils.h delete mode 100644 camel/camel-medium.c delete mode 100644 camel/camel-medium.h delete mode 100644 camel/camel-mime-body-part.c delete mode 100644 camel/camel-mime-body-part.h delete mode 100644 camel/camel-mime-filter-basic.c delete mode 100644 camel/camel-mime-filter-basic.h delete mode 100644 camel/camel-mime-filter-charset.c delete mode 100644 camel/camel-mime-filter-charset.h delete mode 100644 camel/camel-mime-filter-index.c delete mode 100644 camel/camel-mime-filter-index.h delete mode 100644 camel/camel-mime-filter-save.c delete mode 100644 camel/camel-mime-filter-save.h delete mode 100644 camel/camel-mime-filter.c delete mode 100644 camel/camel-mime-filter.h delete mode 100644 camel/camel-mime-message.c delete mode 100644 camel/camel-mime-message.h delete mode 100644 camel/camel-mime-parser.c delete mode 100644 camel/camel-mime-parser.h delete mode 100644 camel/camel-mime-part-utils.c delete mode 100644 camel/camel-mime-part-utils.h delete mode 100644 camel/camel-mime-part.c delete mode 100644 camel/camel-mime-part.h delete mode 100644 camel/camel-mime-utils.c delete mode 100644 camel/camel-mime-utils.h delete mode 100644 camel/camel-movemail.c delete mode 100644 camel/camel-movemail.h delete mode 100644 camel/camel-multipart.c delete mode 100644 camel/camel-multipart.h delete mode 100644 camel/camel-op-queue.c delete mode 100644 camel/camel-op-queue.h delete mode 100644 camel/camel-provider.c delete mode 100644 camel/camel-provider.h delete mode 100644 camel/camel-recipient.c delete mode 100644 camel/camel-recipient.h delete mode 100644 camel/camel-seekable-stream.c delete mode 100644 camel/camel-seekable-stream.h delete mode 100644 camel/camel-seekable-substream.c delete mode 100644 camel/camel-seekable-substream.h delete mode 100644 camel/camel-service.c delete mode 100644 camel/camel-service.h delete mode 100644 camel/camel-session.c delete mode 100644 camel/camel-session.h delete mode 100644 camel/camel-simple-data-wrapper-stream.c delete mode 100644 camel/camel-simple-data-wrapper-stream.h delete mode 100644 camel/camel-simple-data-wrapper.c delete mode 100644 camel/camel-simple-data-wrapper.h delete mode 100644 camel/camel-store.c delete mode 100644 camel/camel-store.h delete mode 100644 camel/camel-stream-buffer.c delete mode 100644 camel/camel-stream-buffer.h delete mode 100644 camel/camel-stream-data-wrapper.c delete mode 100644 camel/camel-stream-data-wrapper.h delete mode 100644 camel/camel-stream-filter.c delete mode 100644 camel/camel-stream-filter.h delete mode 100644 camel/camel-stream-fs.c delete mode 100644 camel/camel-stream-fs.h delete mode 100644 camel/camel-stream-mem.c delete mode 100644 camel/camel-stream-mem.h delete mode 100644 camel/camel-stream.c delete mode 100644 camel/camel-stream.h delete mode 100644 camel/camel-thread-proxy.c delete mode 100644 camel/camel-thread-proxy.h delete mode 100644 camel/camel-transport.c delete mode 100644 camel/camel-transport.h delete mode 100644 camel/camel-types.h delete mode 100644 camel/camel-url.c delete mode 100644 camel/camel-url.h delete mode 100644 camel/camel.c delete mode 100644 camel/camel.h delete mode 100644 camel/data-wrapper-repository.c delete mode 100644 camel/data-wrapper-repository.h delete mode 100644 camel/gmime-content-field.c delete mode 100644 camel/gmime-content-field.h delete mode 100644 camel/gmime-utils.c delete mode 100644 camel/gmime-utils.h delete mode 100644 camel/gstring-util.c delete mode 100644 camel/gstring-util.h delete mode 100644 camel/hash-table-utils.c delete mode 100644 camel/hash-table-utils.h delete mode 100644 camel/md5-utils.c delete mode 100644 camel/md5-utils.h delete mode 100644 camel/providers/.cvsignore delete mode 100644 camel/providers/MH/.cvsignore delete mode 100644 camel/providers/MH/Makefile.am delete mode 100644 camel/providers/MH/camel-mh-folder.c delete mode 100644 camel/providers/MH/camel-mh-folder.h delete mode 100644 camel/providers/MH/camel-mh-provider.c delete mode 100644 camel/providers/MH/camel-mh-store.c delete mode 100644 camel/providers/MH/camel-mh-store.h delete mode 100644 camel/providers/MH/mh-summary.c delete mode 100644 camel/providers/MH/mh-summary.h delete mode 100644 camel/providers/MH/mh-uid.c delete mode 100644 camel/providers/MH/mh-uid.h delete mode 100644 camel/providers/MH/mh-utils.c delete mode 100644 camel/providers/MH/mh-utils.h delete mode 100644 camel/providers/Makefile.am delete mode 100644 camel/providers/maildir/.cvsignore delete mode 100644 camel/providers/maildir/Makefile.am delete mode 100644 camel/providers/maildir/camel-maildir-folder.c delete mode 100644 camel/providers/maildir/camel-maildir-folder.h delete mode 100644 camel/providers/maildir/camel-maildir-provider.c delete mode 100644 camel/providers/maildir/camel-maildir-store.c delete mode 100644 camel/providers/maildir/camel-maildir-store.h delete mode 100644 camel/providers/mbox/.cvsignore delete mode 100644 camel/providers/mbox/Makefile.am delete mode 100644 camel/providers/mbox/camel-mbox-folder.c delete mode 100644 camel/providers/mbox/camel-mbox-folder.h delete mode 100644 camel/providers/mbox/camel-mbox-provider.c delete mode 100644 camel/providers/mbox/camel-mbox-search.c delete mode 100644 camel/providers/mbox/camel-mbox-search.h delete mode 100644 camel/providers/mbox/camel-mbox-store.c delete mode 100644 camel/providers/mbox/camel-mbox-store.h delete mode 100644 camel/providers/mbox/camel-mbox-summary.c delete mode 100644 camel/providers/mbox/camel-mbox-summary.h delete mode 100644 camel/providers/nntp/.cvsignore delete mode 100644 camel/providers/nntp/Makefile.am delete mode 100644 camel/providers/nntp/camel-nntp-folder.c delete mode 100644 camel/providers/nntp/camel-nntp-folder.h delete mode 100644 camel/providers/nntp/camel-nntp-provider.c delete mode 100644 camel/providers/nntp/camel-nntp-store.c delete mode 100644 camel/providers/nntp/camel-nntp-store.h delete mode 100644 camel/providers/nntp/camel-nntp-summary.c delete mode 100644 camel/providers/nntp/camel-nntp-summary.h delete mode 100644 camel/providers/nntp/camel-nntp-utils.c delete mode 100644 camel/providers/nntp/camel-nntp-utils.h delete mode 100644 camel/providers/pop3/.cvsignore delete mode 100644 camel/providers/pop3/Makefile.am delete mode 100644 camel/providers/pop3/camel-pop3-folder.c delete mode 100644 camel/providers/pop3/camel-pop3-folder.h delete mode 100644 camel/providers/pop3/camel-pop3-provider.c delete mode 100644 camel/providers/pop3/camel-pop3-store.c delete mode 100644 camel/providers/pop3/camel-pop3-store.h delete mode 100644 camel/providers/sendmail/.cvsignore delete mode 100644 camel/providers/sendmail/Makefile.am delete mode 100644 camel/providers/sendmail/camel-sendmail-provider.c delete mode 100644 camel/providers/sendmail/camel-sendmail-transport.c delete mode 100644 camel/providers/sendmail/camel-sendmail-transport.h delete mode 100644 camel/providers/smtp/.cvsignore delete mode 100644 camel/providers/smtp/Makefile.am delete mode 100644 camel/providers/smtp/camel-smtp-provider.c delete mode 100644 camel/providers/smtp/camel-smtp-transport.c delete mode 100644 camel/providers/smtp/camel-smtp-transport.h delete mode 100644 camel/string-utils.c delete mode 100644 camel/string-utils.h (limited to 'camel') diff --git a/camel/.cvsignore b/camel/.cvsignore deleted file mode 100644 index fd6b811c68..0000000000 --- a/camel/.cvsignore +++ /dev/null @@ -1,7 +0,0 @@ -.deps -Makefile -Makefile.in -.libs -.deps -*.lo -*.la diff --git a/camel/CODING.STYLE b/camel/CODING.STYLE deleted file mode 100644 index a236f0060f..0000000000 --- a/camel/CODING.STYLE +++ /dev/null @@ -1,19 +0,0 @@ -Note to hackers ---------------- - -When hacking on camel (and on the gnome mailer in general), -be sure to follow the same coding style as the intial authors. -Please read the file HACKING in gnumeric and follow the -general guidelines explained in it. - -Please take a look at camel source files and try to exactly -imitate the coding style. We are perfectly aware that this -is not the best and unique style, but it is absolutely -mandatory that Camel is homogeneous. If you find the current -coding style to have some weaknesses, please contact the -authors to discuss this matter. - -Thanks. - - Bertrand. - diff --git a/camel/ChangeLog b/camel/ChangeLog deleted file mode 100644 index e49dbb06e1..0000000000 --- a/camel/ChangeLog +++ /dev/null @@ -1,1614 +0,0 @@ -2000-04-23 Dan Winship - - * camel-mime-utils.c (header_to_decode, header_mime_decode): fix - some obvious minor bugs noted by -Wall. - -2000-04-23 NotZed - - * camel-data-wrapper.c (set_mime_type_field): Ref the - content_field when we get it? - - * camel-mime-parser.c (camel_mime_parser_unstep): New function. - Cause a subsequent call to mime_parser_step() to return the same - state over again. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): - Initial test code using the mime parser to construct the message. - - * camel-mime-part.c (construct_from_parser): part constructor. - (camel_mime_part_construct_content): Basically a simpler - replacement for the datawrapper repository. - (camel_mime_part_init): Set the default type to text/plain. - - * camel-simple-data-wrapper.c (construct_from_parser): Initial - implementation of a content constructor. - - * camel-multipart.c (construct_from_parser): Multipart - construction routine. - (camel_multipart_init): Set the default multipart type to - multipart/mixed. Duh, no subtype is not allowed anyway. - -2000-04-22 Dan Winship - - * camel-multipart.[ch]: clean, document, etc. - (camel_multipart_init): pick a prettier default boundary. Still - need to deal with the larger problem - -2000-04-22 NotZed - - * camel-mime-message.h (struct _CamelMimeMessage): Removed - send_date, and received_date, and replaced it with a time_t - 'date' (this is what the header is called), and date_offset to - store the GMT offset of the date. - - * camel-mime-message.c (camel_mime_message_set_from): Update raw - header as we go. - (_set_from): Removed. - (_get_from): Removed. - (camel_mime_message_get_from): Moved implementation here. - (camel_mime_message_get_subject): Move implementation here. - (_get_subject): Nuked. - (camel_mime_message_set_subject): Handle utf-8 input, and also - update raw header when changed. - (_set_subject): Removed. - (_set_received_date): Removed. - (camel_mime_message_set_received_date): Removed. - (_get_received_date): Removed. - (camel_mime_message_get_received_date): Removed. - (_get_sent_date): Removed. - (camel_mime_message_get_sent_date): Removed. - (camel_mime_message_get_date): New function to get the date as a - time_t/offset. - (camel_mime_message_set_date): Set the date as a time_t/offset. - (camel_mime_message_get_date_string): Get the date as a string. - (camel_mime_message_init): Initialise the current date as - 'CMAEL_MESSAGE_DATE_CURRENT'. - (_set_reply_to): Removed. - (camel_mime_message_set_reply_to): Moved implementation here. - This is still broken, reply-to can have multiple addresses. - (_get_reply_to): Removed. - (_set_field): Removed, no longer used anywhere. - (_get_field): Also removed. - (_init_header_name_table): Add the Date header. - (process_header): Also handle snooping of Date header here. - - * camel-stream-filter.c (finalise): Unref the source stream on - finalise, and also call the parent class (oops). - - * camel-mime-parser.c (camel_mime_parser_state): New function to - get the current parser state. - (camel_mime_parser_stream): Allow you to get the stream back from - the mime_parser. - (camel_mime_parser_fd): Alternative to allow you to get the fd - back from the mime_parser. - (folder_scan_init_with_stream): Properly ref/unref the stream. - (folder_scan_close): Properly unref the stream/close the fd on - exit. - (folder_scan_init_with_fd): Close the old fd if there is one. - - * camel-data-wrapper.c (camel_data_wrapper_construct_from_parser): - New method, construct a data wrapper from an initialised parser. - (construct_from_parser): Empty implementation. - - * providers/mbox/camel-mbox-summary.c (message_struct_new): - Convert subject line to unicode, before storing in the summary. - (strdup_trim): Removed, no longer needed. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Ref - the folder after setting it in the new message. - - * camel-mime-part.c (my_set_content_object): Have the headers - follow the content-type change here too. - (my_write_to_stream): Dont write content-type here, automatically - stored in the headers ... - (my_write_to_stream): Use header_disposition_format() to format - the content-disposition header. - (my_write_to_stream): Removed old code, all headers are now stored - in the camel-medium level, always. Need to do the same with - camel-mime-message i suppose ... - (my_write_to_stream): Write the content using the parent class, - not some weird function. - (camel_mime_part_class_init): Dont override get_output_stream. - (camel_mime_part_encoding_from_string): Bleh, make it - case-insensitive. - - * camel-mime-utils.c (header_content_type_is): Handle empty types. - (header_encode_string): Start of an implementation of the rfc2047 - encoder. It does iso-8859-1, and us-ascii, and utf-8 (others get - tricky *sigh*) - (rfc2047_encode_word): Convert a single word/string into rfc2047 - encoding. - (quoted_encode): Different quoted-printable encoding for rfc2047 - encoding of headers. - - * gmime-content-field.c (gmime_content_field_write_to_stream): Use - header_content_type_format() to format it. - -2000-04-21 NotZed - - * camel-mime-utils.h: Add prototype for header_param_list_free. - - * camel-recipient.c: New function to remove all the types of a - recipient list. I think this whole object needs a major review. - - * camel-mime-message.c (camel_mime_message_class_init): Removed - parse_header_pair override, override add_header instead. - (_parse_header_pair): Renamed to add_header. - (remove_header): Add this method, to make sure we keep upto date - with removed headers too. - (_set_field): If given a NULL value, clear it out. - (_set_recipient_list_from_string): Constify. - (set_header): Override set_header from camel_medium. - (process_header): Local function to handle set/add/remove of each - header we know about. - - * camel-mime-part.c (camel_mime_part_class_init): Removed - parse_header_pair setup. - (my_parse_header_pair): Moved into add_header(), removed. - (my_set_disposition): Allow a NULL disposition to clear it. - (my_set_content_id): Allow NULL content id to clear it. - (remove_header): Track removed headers. - (my_set_description): Allow NULL description to clear it. - (my_set_content_MD5): Make sure we copy the md5 value, and allow a - NULL value to reset it. - (my_set_filename): Copy the filename. - (my_set_header_lines): Removed. Nothing uses it, it doesn't - actually serve any purpose. - (camel_mime_part_set_header_lines): Ditto. - (my_get_header_lines): Ditto. - (camel_mime_part_get_header_lines): Ditto. - (camel_mime_part_class_init): Remove *_header_lines setup. - (camel_mime_part_init): Remove header_lines init. - (my_finalize): Remove header_lines finalise. - (my_write_to_stream): Write the headers here. This is just WRONG, - camel_medium should be doing this. - (my_get_output_stream): Kill a warning. - (camel_mime_part_encoding_to_string): Ditto. - (camel_mime_part_set_description): Unvirtualiase, use add_header() - to do the processing. - (my_set_description): Removed. - (set_disposition): Renamed from my_set_disposition. - (camel_mime_part_get_description): Get the descriptionf rom the - get_header method. - (my_get_description): Removed. - (my_set_filename): Removed. - (camel_mime_part_get_filename): Get the parameter from the - disposition. - (camel_mime_part_encoding_from_string): Handle NULL string. - (camel_mime_part_init): Remove reference to filename. - (my_finalize): Dont free filename. - - * camel-mime-part.h (CamelMimePartClass): Removed - parse_header_pair() method, it doesn't add anything that - add_header() can't be used for. - (CamelMimePartClass): Remove *_header_lines methods. - (struct _CamelMimePart): Remove header_lines list. - (struct _CamelMimePart): Removed filename attribute. - - * camel-medium.c (camel_medium_init): Init headers to null, not a - hashtable. - (add_header): Append the headers as a list. - (remove_header): Remove headers as a list. - (get_header): Likewise for lookup. - (free_header): Removed, no longer needed. - (finalize): Free headers using header_raw_clear(). - (camel_medium_set_header): New function, to reset and override all - values of a header with a new value. - - * camel-medium.h (struct _CamelMedium): Changed to use a - header_raw struct rather than a hash table, to store headers - (many headers can occur multiple times). - - * camel-mime-utils.c (header_raw_find_next): New function, allows - you to find multi-valued header fields. - (header_disposition_format): New function to format/create - content-disposition header string. - (header_param_list_format_append): Function to format parameter - lists into a GString. - (header_content_type_format): Function to format content-type into - a usable format. - (header_set_param): allow NULL value to remove the parameter. - (decode_token): Renamed from header_decode_token. - (header_decode_token): New interface for external use. - (quoted_decode): Made static to kill annoying warnings. - (g_strdup_len): Killed, replaced with calls to g_strndup(). - (rfc2047_decode_word): Made static to kill warnings. - (decode_coded_string): Terminated. - (g_string_append_len): Made static to kill warnings. - (header_decode_text): Made static to kill warnings. - (header_decode_text): Constify. - (rfc2047_decode_word): Constify. - (header_param): Constify. - (header_content_type_new): Copy the type/subtype strings. - (header_param_list_decode): Made static. - (header_param_list_format_append): Made static. - (quoted_decode): Constify. - (g_string_append_len): Constify. - (header_token_decode): New function to decode a single token. - - * providers/mbox/camel-mbox-summary.c (header_write): Append a - trailing \n when writing headers. - (strdup_trim): Killed a warning. - (camel_mbox_summary_set_uid): Make sure the next uid is at least 1 - higher than any existing one. - (header_evolution_decode): Use header_token_decode to get the - token. - - * camel-mime-parser.c (folder_scan_header): Strip the trailing \n - of the end of all header lines. - -2000-04-20 NotZed - - * providers/mbox/camel-mbox-utils.[ch]: Removed. - - * providers/mbox/camel-mbox-parser.[ch]: Removed. Removed - references to it. - -2000-04-20 Dan Winship - - * camel-mime-utils.c (rfc2047_decode_word): use libunicode iconv - functions rather than libc ones (since libc might not have them). - (header_decode_date): add autoconfiscation on timezone code - - * camel.c (camel_init): call unicode_init () - -2000-04-20 NotZed - - * providers/mbox/camel-mbox-summary.c (message_struct_new): Trim - leading/trailing spaces off the raw headers. - - * MERGE NEW_PARSER branch into HEAD, fixed conflicts. - - * gmime-content-field.c (_print_parameter): Duh, removed again - (@@#$@ cvs merge). - - * camel-mime-utils.c (header_content_type_is): Constify. - (header_content_type_unref): Killed a couple warnings. - - * camel-folder.c (_init): Removed more log crap. - - * providers/Makefile.am (SUBDIRS): Removed nntp, pending fixes for - summary changes. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_number): - Fixed for new summary interface. Added a warning for using this - broken api. - (_get_message_by_uid): Fixed for message new with session - vanishing. - -2000-04-19 Dan Winship - - * camel-simple-data-wrapper-stream.c - (camel_simple_data_wrapper_stream_get_type): This is a subtype of - CamelSeekableStream, not CamelStream. - - * camel-seekable-substream.c: clean up a lot. - (eos): When testing for end-of-stream, reset the parent position - before testing if it is at end-of-stream, since either (a) it may - have been seek'ed to eos by someone else, or (b) we may have been - seek'ed away from eos and it hasn't been synced yet. - - * camel-medium.[ch] (camel_medium_add_header): const poison. - (Belatedly goes with my change of 2000-02-23.) - (camel_medium_init): Use g_strcase_{hash,equal} on the header - array. - -2000-04-18 Dan Winship - - * camel-mime-part.c (my_set_input_stream): - * camel-data-wrapper.c (set_input_stream, set_output_stream): do - better reference counting of streams so they actually go away - when they should. - - * camel-log.[ch], *: Nuke camel log stuff. Replace calls to - CAMEL_LOG_WARNING with calls to g_warning. - - * camel-data-wrapper.[ch]: - * camel-simple-data-wrapper.[ch]: - * camel-medium.[ch]: Clean, polish, document. Most of the gtk-doc - comments added to camel-data-wrapper.c note serious problems that - need to be fixed. - -2000-04-17 Dan Winship - - * camel-mime-message.[ch]: Remove the "session" field from - CamelMimeMessage. Nothing uses it, about half of the existing - calls to camel_mime_message_new_with_session pass NULL, and - there's no obvious reason for it to be there. - - * providers/MH/camel-mh-folder.c: - * providers/maildir/camel-maildir-folder.c: - * providers/mbox/camel-mbox-folder.c: - * providers/mbox/camel-mbox-utils.c: - * providers/nntp/camel-nntp-folder.c: - * providers/pop3/camel-pop3-folder.c: Use camel_mime_message_new - instead of camel_mime_message_new_with_session. - - * camel-session.c (get_store_for_protocol_with_url): Set the - exception if no provider is found. - - * camel-url.c: Add code to encode and decode %-escapes in URLs, - and do some additional correctness-checking on URL syntax. From - Tiago Antào with modifications by me. - -2000-04-14 Chris Toshok - - * providers/Makefile.am (SUBDIRS): add nntp - -2000-04-14 Christopher James Lahey - - * providers/mbox/camel-mbox-folder.c: Fix switch statement. - -2000-04-14 Chris Toshok - - * providers/nntp/camel-nntp-folder.c (_exists): always return TRUE - for now. we need to check the server response to make sure the - group exists. - (_get_message_by_uid): make sure to account for the \n we add to - the string after every line. - - * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): function - to get the headers using the XOVER command. - (get_HEAD_headers): function to get the headers using the HEAD - command on each message. slooooooow. - (camel_nntp_get_headers): make this function use either XOVER or HEAD - versions depending on whether or not the server extension is present. - -2000-04-14 Dan Winship - - * camel-formatter.[ch]: This didn't belong in Camel. Move to mail/ - - * Makefile.am, camel-types.h: remove references to - camel-formatter. - -2000-04-12 Matt Loper - - * camel-folder-pt-proxy.c (_folder_open_cb): Print warning message - for broken function. - (_folder_close_cb): Same. - -2000-04-12 Miguel de Icaza - - * Makefile.am (pthread_SRC): Use correct names for the pthread - source variables. - -2000-04-10 Dan Winship - - * providers/pop3/camel-pop3-store.c (pop3_connect): fix various - bugs in APOP code (still untested) and some of the error cases. - - * camel-provider.h: Clarify what provider.protocol, provider.name, - and provider.description should be. - - * providers/mbox/camel-mbox-provider.c: - * providers/pop3/camel-pop3-provider.c: - * providers/sendmail/camel-sendmail-provider.c: - * providers/smtp/camel-smtp-provider.c: update protocols, names, - and descriptions - - * providers/mbox/camel-mbox-folder.c (_get_message_by_number): - implement get_message_by_number for the mail fetch code. - -2000-04-09 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: reformatted to fit - the standard indent format used by helix code - -2000-04-09 Dan Winship - - * camel-movemail.c: New file with new function to dot-lock an mbox - file and copy it to a safe private directory. - -2000-04-08 Christopher James Lahey - - * providers/smtp/.cvsignore: Added a .cvsignore file. - -2000-04-08 Dan Winship - - * providers/sendmail/camel-sendmail-transport.c (_send_internal): - actually record the pid returned by fork(). Noticed by clahey. - - * providers/smtp/camel-smtp-transport.c: #include - for MAXHOSTNAMELEN. (This is a stopgap: some of the uses of - MAXHOSTNAMELEN are wrong anyway...) - -2000-04-07 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: fixes to numerous bugs; - should now build fine. - * providers/Makefile.am: Readded smtp now that smtp builds without - error. - -2000-04-20 NotZed - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_next_uid): Public function to get the next - uid, makes sure its saved to disk too. - - * camel-mime-part.c (my_finalize): Fix disposition crap with a - real disposition. - (my_set_disposition): Likewise. - (my_get_disposition): And here. - (my_write_to_stream): And here, needs more cleanup. - - * providers/mbox/camel-mbox-folder.c (_append_message): Assign a - new uid at this point. - - * gmime-content-field.c (gmime_content_field_write_to_stream): - Make something up if we have an invalid/missing content type - (i.e. text/plain). - -2000-04-19 NotZed - - * providers/mbox/camel-mbox-folder.c (_delete): Fixed completely - broken switch() syntax, only compiled because errno is a macro on - some systems. - (_list_subfolders): Likewise. - -2000-04-18 NotZed - - * camel-mime-parser.c (folder_scan_init): init stream to null. - - * providers/mbox/camel-mbox-summary.c - (CAMEL_MBOX_SUMMARY_VERSION): Moved to .c file, incremented. - (index_folder): Changed to have index passed via the summary. - (decode_string): Do a sanity check on the string size, so we dont - visit g_malloc()'s friendly abort(). - - * camel-folder-pt-proxy.c (camel_folder_pt_proxy_class_init): - Removed reference to set_name. - (_set_name): Removed. - - * providers/mbox/camel-mbox-utils.c - (parsed_information_to_mbox_summary): Removed. Most of this file - is about to be binned. - - * providers/mbox/camel-mbox-search.c (func_header_contains): Fixes - for changes to summary interface. - (struct _searchcontext): Remove pointer to message info, get it - straight from the mboxsummary. - (camel_mbox_folder_search_by_expression): New summary interface. - (camel_mbox_folder_search_by_expression): Uh, the summary is not - an object anymore (well not yet). - - * providers/mbox/camel-mbox-folder.c - (camel_mbox_folder_class_init): Removed set_name init. - (_set_name): Removed. - (_open): Call new summary interface. - (_close): Use new summary interface. - (_create): Removed a summary object leak. - (_get_message_count): New summary interface. - (_get_uid_list): Use new summary interface. FIXME: this is leaky. - (_get_message_by_uid): Use the new summary interface, some - cleanup. - (_append_message): Totally changed, basically just appends the - message directly, ignores the summary (for now), the summary will - fix itself up if it needs to. - (_check_get_or_maybe_generate_summary_file): Bye bye old code. - (summary_get_message_info): Implement get_message_info again, for - folder. - - * camel-folder.c (camel_folder_class_init): Removed set_name - setup. - (_set_name): Moved contents into _init. - (_init): Perform the old functions of set_name here. - - * camel-folder.h: Removed the set_name internal interface. - -2000-04-14 NotZed - - * providers/mbox/camel-mbox-summary.[ch]: Completely replaced with - new code. - - * Makefile.am (libcamel_la_SOURCES): Removed - camel-folder-summary.[ch]. - - * camel-folder.h (struct _CamelFolder): Removed summary. - (struct _CamelFolder): Changed flags to be 1 bit bitfields. - - * camel-folder-summary.[ch]: Class removed entirely. - - * camel-folder.c (camel_folder_get_summary): Removed. - (camel_folder_summary_get_message_info): Moved from - camel-folder-summary.c - (camel_folder_summary_get_subfolder_info): Moved from - camel-folder-summary.c - - * camel-mime-parser.c (folder_scan_step): Store the start of - headers and start of from in the scan state. - (camel_mime_parser_tell_start_headers): Query the start of the - headers. - (camel_mime_parser_tell_start_from): Query the cached start of - from marker. - -2000-04-13 NotZed - - * gmime-content-field.c (gmime_content_field_free): Removed this - function. If its too dangerous to use, it shouldn't be here. - (gmime_content_field_ref): Also ref the embedded content-type. - (gmime_content_field_unref): Ditto to unref it. - - * camel-mime-utils.h: Add a refcount for content-type header. - - * camel-mime-utils.c (header_content_type_unref): Implement unref - for content-type. - (header_content_type_ref): Implement ref for header content type. - -2000-04-12 NotZed - - * gmime-content-field.h: Changed to use a _header_content_type. - Added type/subtype back for compatability with clients. - - * gmime-content-field.c: Basically a total rewrite, and now just a - thin wrapper ontop of header_content_type. - (_free_parameter): Got rid of it. - (gmime_content_field_new): Use header_content_type_* functions. - (gmime_content_field_set_parameter): Likewise. - (_print_parameter): Blow away. - (gmime_content_field_write_to_stream): Get details from the - content_type field. Should check if it needs to escape chars in - the paramter value. - (gmime_content_field_get_mime_type): Likewise. - (___debug_print_parameter): Get rid of this rather annoyingly - named function. - (gmime_content_field_get_parameter): Simplified function. - (gmime_content_field_construct_from_string): Fixed this to use a - real parser. - (gmime_content_field_is_type): New function to test if a type matches. - (gmime_content_field_construct_from_string): Track type/subtype - from subordinate content_type header struct. - - * gmime-rfc2047.[ch]: Removed. Unused. - - * camel-stream-b64.[ch]: Blown away more duplicated code. - - * Makefile.am: Removed camel-stream-b64.[ch], and - gmime-base64.[ch]. - - * camel-mime-part.c (my_get_content_object): Replaced - camel-stream-b64 with camel-stream-filter/camel-mime-filter-basic. - (my_write_content_to_stream): Replaced camel-stream-b64 with the - camel-stream-filter with an encoder. - (my_get_content_object): Also implement quoted-printable decoding. - (my_write_content_to_stream): Also implement quoted-printable - encoding. - (my_get_output_stream): Took out stream-b64 code (nothing's being - executed yet anyway). - - * gmime-base64.[ch]: Blown away. Not used, dont need it. - - * camel-mime-utils.h: Added offset for this header. Records where - it is in the source. - - * camel-mime-utils.c (header_raw_append_parse): Add offset - parameter, to store where the header is stored in the stream. - (header_raw_append): Added offset param. - (header_raw_find): Return offset, if a pointer supplied for it. - (header_raw_replace): Add offset param. - (header_content_type_new): New function, to create an empty - content type. - (header_content_type_set_param): Set a parameter in the - content-type. - (header_set_param): Generic header parameter setting function. - (header_decode_string): Handle NULL input. - - * camel-mime-parser.c (camel_mime_parser_headers_raw): New - function to get access to all the raw headers. - (folder_scan_header): Keep track of the header start position, and - store it when saving the header. - -2000-04-11 NotZed - - * camel-mime-utils.c: Moved a bunch of printf's to debug. - - * camel-mime-parser.c: Moved a bunch of printf's to debug. - (folder_scan_header): Detect end of each header line using the - last scanned char, and not the last scanned position. - - * camel-mime-filter-index.[ch]: Indexing filter. Indexes unicode - sequences into ibex files. - -2000-04-09 NotZed - - * camel-mime-part.c: Dont include gmime-base64.h - - * camel-mime-filter-charset.c (complete): Implement the completion - function. - - * camel-mime-parser.c (folder_scan_step): If we get to the end of - the body data, check any filters for outstanding completion data. - (camel_mime_parser_scan_from): Set whether we scan for "From " - headers or not. - - * camel-stream-filter.c (do_read): If we get to end of stream on - the source, then call the filtering completion function to see if - we have any more data to return. - - * camel-mime-filter-basic.c (filter): Implement quoted printable - encoding and decoding filters. - (complete): And the complete function as well. - - * camel-mime-utils.c (base64_encode_close): Also take an input - buffer, allow closing of filters. - (quoted_encode_step): First cut, simple quoted-printable encoder. - Doesn't handle trailing spaces/tabs on end of line properly yet. - (quoted_encode_close): Complete a quoted-encoding. - (is_qpsafe): New type check, for quoted-printable safe characters - (that do not need encoding). Thats all bits used in the type - table! Rebuilt the types table. - (header_content_type_is): Checks a content type against at - type/subtype match. - (header_content_type_param): Handle NULL content type pointer. - -2000-04-08 NotZed - - * camel-mime-filter-basic.c (filter): Implement the base64 - encoder. Problem is, there is no way to know when to close it. - Close/Reset will have to provide the same args as filter, so it can - flush remaining data *sigh* - - * camel-mime-utils.c (base64_encode_step): A rather complex base64 - encoder, fast? - (base64_step_close): Companion function to finish off the base64 - sequence. - - * camel-mime-part.c (my_write_content_to_stream): Changed to use - camel_stream_write_to_stream(). - - * camel-stream.[ch] (camel_stream_write_to_stream): From - camel_stream_b64_write_to_stream(). Fixed some infinite loop - bugs with error conditions. - - * camel-stream-b64.[ch] (camel_stream_b64_write_to_stream): Removed. - This has nothing to do with stream-b64, so i've moved it to - CamelStream. - - * camel-mime-utils.h: Add a comment about refcounting - header_content_type struct. - - * Makefile.am: Added camel-stream-filter*.[ch]. - - * camel-stream-filter.[ch]: Class to implement a generic - (multipass) filter ontop of a stream. Only implements a read-only - stream. - - * camel-mime-parser.c (camel_mime_parser_filter_add): Ref the - filter we just added. - - * Makefile.am: Added camel-mime-filter*.[ch]. - - * camel-mime-filter-charset.[ch]: A filter to preform character set - conversion (uses unicode_iconv). - - * camel-mime-filter-save.[ch]: A simple filter which will save all - data directly to a file or file descriptor. - - * camel-mime-filter-basic.[ch]: Implements the basic mime filters, - base64 and quoted-printable decoding (encoding not implemented yet). - - * camel-mime-filter.[ch]: A filtering class, which can filter streams - of data without having to copy them. Simpler than stream classes, - and can be plugged into a single stream class (when i write it). - -2000-04-07 Dan Winship - - * providers/pop3/camel-pop3-store.c (pop3_connect): Clarify error - messages. - (finalize): fix a bug in camel_exception usage - (pop3_connect): Remember the password after asking for it the - first time. - -2000-04-07 NotZed - - * Makefile.am: Added camel-mime-parser/camel-mime-utils. - - * camel-mime-parser.c: Fast mime parser. - - * camel-mime-utils.c: Mime utility functions, and email header - parsers. - -2000-04-07 NotZed - - * providers/Makefile.am: Removed smtp for now, its a long way from - building. - * providers/smtp/Makefile.in: Removed file that shouldn't have been - checked in. - -2000-04-06 Matt Loper - - * camel-folder-pt-proxy.c (_get_full_name): Remove exception param - from get_full_name() called, since get_full_name() was changed to - not have an exception in the last param (see dan's notes below). - (_get_name): same. - -2000-04-06 Dan Winship - - * camel-store.[ch]: Reorganize the folder-fetching methods and - implement a folder cache so that multiple requests for the same - folder will yield the same CamelFolder object (as long as it - remains active). Includes some code to remove no-longer-active - folders from the cache, but it doesn't get used since nothing is - ever unref'ed in Camel right now... - - * providers/mbox/camel-mbox-store.c: - * providers/pop3/camel-pop3-store.c: update for CamelStore - changes. - - * camel-folder.[ch]: Remove the (unused) CamelException argument - from camel_folder_get_name and camel_folder_get_full_name. - (camel_folder_set_name): make this go away since changing a - folder's name after it has been created could result in it - conflicting with a separately-issued folder. - -2000-04-05 Dan Winship - - * g_url_new really wanted to take a CamelException. So, rename - Gurl to CamelURL, g_url_* to camel_url_* (with camel_url_new - taking an exception), and url-util.[ch] to camel-url.[ch]. Also - force url->port to be numeric and remove camel_service_getport. (I - was confused before: the URL RFC says the port must be numeric, so - we don't want to do getportbyname.) - -2000-04-01 Dan Winship - - * providers/mbox/camel-mbox-folder.c - (_check_get_or_maybe_generate_summary_file): Compare - mbox_file_size and mbox_modtime to the results of stat()ing the - mbox file, not the summary file. Duh. - (_close): Update the summary's mbox_file_size and mbox_modtime - before writing it to disk. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_save, - camel_mbox_summary_load): Wow. I must have been tired when I wrote - this code. First, the comparison bug above. Second, it was using - ntohs and htons instead of ntohl and htonl. Third, I was reading - the status flag byte in two different places and thus getting out - of sync. Fourth, it was writing out field_length bytes of each - header field after having converted field_length to network byte - order, resulting in lots of random crap being appended, and the - summary files being huge. (Fortunately, since the size/modtime - comparison was biffed, the garbage summary read from disk was - always immediately discarded.) - - * providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): fix - an off-by-one error that caused the last-used UID to be reused if - the summary file was regenerated. (That one wasn't my fault. :-) - -2000-03-31 Dan Winship - - * camel-stream-mem.c: implement unimplemented methods - - * gmime-content-field.c - (gmime_content_field_construct_from_string): - * data-wrapper-repository.c - (data_wrapper_repository_get_data_wrapper_type): - * camel-simple-data-wrapper.c (my_write_to_stream): - * camel-mime-part.c (my_set_input_stream): - remove debugging printf()s that no longer seem useful. - -2000-03-31 Matt Loper - - * camel-formatter.c (text_to_html): Added "convert_newlines_to_br" - boolean param, to give the option of not converting '\n's to
- tags. This way, when we stick stuff in a
 tag, newlines stay
-	newlines.
-
-2000-03-30  Matt Loper  
-
-	* camel-formatter.c (handle_text_plain): Use 
 tag to force
-	the use of monospaced fonts.
-
-2000-03-30  Dan Winship  
-
-	* camel-service.c (camel_service_getport): Add a htons in the
-	default_number case, and document the fact that the function
-	returns the port in network byte order.
-
-	* providers/pop3/camel-pop3-store.c (pop3_connect): Revert
-	Miguel's change. The port number bug was actually somewhere
-	else, and the IP address copying code was fine already.
-	
-2000-03-29  Miguel de Icaza  
-
-	* providers/pop3/camel-pop3-store.c (pop3_connect): Add htons
-	(port), and only copy 4 bytes for the IP address to prevent a DNS
-	attack. 
-
-2000-03-28  Dan Winship  
-
-	* camel-seekable-substream.c
-	(camel_seekable_substream_new_with_seekable_stream_and_bounds):
-	make this return a CamelStream rather than a
-	CamelSeekableSubstream, because that's the way Gtk objects tend to
-	work.
-
-	* camel-service.c (camel_service_gethost,
-	camel_service_getport): convenience functions to canonicalize
-	the host and port values of a service's URL.
-	* providers/pop3/camel-pop3-store.c: use them
-
-	* providers/mbox/camel-mbox-folder.c
-	(_check_get_or_maybe_generate_summary_file): Make this work when
-	the inbox file doesn't yet exist.
-
-2000-03-27  Dan Winship  
-
-	* providers/mbox/camel-mbox-folder.c (_append_message): uncomment
-	the call to unlink the temp file: there's no way to tell
-	camel_stream_fs to truncate a file, so reusing the same file was
-	resulting in junk at the ends of messages.
-
-	* camel-folder.[ch]: add delete_message_by_{number,uid}.
-
-	* providers/pop3/camel-pop3-folder.[ch]: implement
-	delete_message_by_uid. Add a close method to do expunging
-	of deleted messages if requested.
-
-	* providers/pop3/camel-pop3-store.[ch]: support for
-	CamelPop3Folder::close. (You have to close the connection
-	in order to expunge the folder, thus the store may be
-	connected in the CamelService::is_connected sense when it
-	is not actually connected to the server.) Also some bugfixes.
-
-2000-03-27  NotZed  
-
-	* providers/mbox/camel-mbox-folder.c (_append_message): Unref the
-	output_stream when done, close doesn't do it.
-	(_append_message): Clear all uid's from the appending messages, so
-	they are reassigned proper unique id's.
-
-	* gmime-utils.c (get_header_array_from_stream): Actually free the
-	header, it is copied elsewhere.
-
-2000-03-26  NotZed  
-
-	* providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Added
-	folder parameter to function.  Fixed callers.
-	(index_message): Index a message as it is assigned a unique id.
-
-	* camel-mime-part.c (my_set_content_id): Make sure we malloc and
-	copy the content_id, otherwise *poof*
-
-2000-03-25  NotZed  
-
-	* camel-medium.c (_finalize): Another leak, unref the content if
-	finished with it.
-
-	* camel-recipient.c (camel_recipient_table_free): Plug another
-	memory leak - actually free the recipient table.
-
-	* camel-mime-message.c (_finalize): Plugged a memory leak with the
-	flags table.
-
-	* gmime-utils.c (_store_header_pair_from_string): A simpler, more
-	debuggable and functionally identical header extraction function.
-
-2000-03-24  NotZed  
-
-	* gmime-content-field.c (gmime_content_field_set_parameter):
-	Remove the hash table entry before freeing its key and data.
-
-2000-03-27  Dan Winship  
-
-	* providers/Makefile.am (SUBDIRS): Add pop3.
-
-	* providers/pop3/camel-pop3-store.c: keep separate input and
-	output streams so the output doesn't end up being buffered.
-
-	* providers/pop3/camel-pop3-folder.c (get_message_by_number):
-	finish implementing this.
-
-2000-03-27  Michael Meeks  
-
-	* camel-mime-part.c (my_set_disposition): fix so less broken.
-	(my_finalize): remove dodgy disposition free.
-
-	* camel-data-wrapper.c (my_set_mime_type_field): unref instead of
-	free on mime_type.
-
-2000-03-27  Dan Winship  
-
-	* camel-service.c (camel_service_free_auth_types): new routine to
-	free the data allocated by camel_service_query_auth_types.
-
-	* providers/pop3/camel-pop3-store.c (free_auth_types): implement
-
-	* camel-stream-mem.c (camel_stream_mem_new_with_buffer): rename
-	camel_stream_mem_new_with_buffer to ..._with_byte_array and add a
-	new ..._with_buffer that takes a char * rather than a GByteArray.
-
-	* Remove CamelStreamBufferedFs, since CamelStreamBuffer makes it
-	redundant.
-
-2000-03-25  Dan Winship  
-
-	* camel-folder-summary.[ch]: change the CamelFolderSummary
-	interfaces to allow partial summary queries (for dealing
-	with very large folders). Remove the "extended_fields" from
-	CamelFolderInfo and CamelMessageInfo: this is better dealt
-	with by subtyping.
-
-	* providers/mbox/camel-mbox-summary.[ch]: Make CamelMboxSummary a
-	subclass of CamelFolderSummary. Update interfaces for that. Remove
-	the internal/external summary distinction. Remove the (unused) md5
-	checksum in the folder summary. Change the summary file format
-	(primarily to make it no longer byte-order dependent) and add a
-	version number to it so it will be easier to change in the future.
-	
-	* providers/mbox/camel-mbox-folder.[ch]
-	* providers/mbox/camel-mbox-search.c
-	* providers/mbox/camel-mbox-utils.c: update for summary changes
-
-	* camel-exception-list.def: add
-	CAMEL_EXCEPTION_FOLDER_SUMMARY_INVALID
-	
-2000-03-23  NotZed  
-
-	* providers/mbox/camel-mbox-provider.c: Added flag to provider
-	initialisation, to match changed structure.
-
-2000-03-22  NotZed  
-
-	* camel-folder.[ch]: Added async search api.
-
-	* providers/mbox/camel-mbox-search.c
-	(camel_mbox_folder_search_by_expression): Changed to use an
-	asynchronous interface.
-	(camel_mbox_folder_search_cancel): Cancel function for async
-	interface.
-
-2000-03-23  Dan Winship  
-
-	* camel-stream-buffer.c (camel_stream_buffer_read_line): Function
-	to read one line of any size from a stream and return it in
-	allocated memory.
-
-2000-03-22  Dan Winship  
-
-	* camel-service.c (camel_service_query_auth_types): New function
-	to query a service for the authentication protocols it supports.
-	* providers/pop3/camel-pop3-store.c (query_auth_types): implement
-
-	* camel-provider.c (camel_provider_scan): New function to
-	scan the provider dir and return a list of all providers.
-
-	* providers/pop3/camel-pop3-folder.c: fill this in partially
-	* providers/pop3/camel-pop3-store.c: make camel_pop3_command
-	return the text after "+OK"/"-ERR" and add a separate
-	camel_pop3_get_additional_data to get the message body or
-	whatever. Also make them take a CamelPop3Store rather than
-	a CamelStreamBuffer.
-
-2000-03-22  Matt Loper  
-
-	* camel-formatter.c (debug): Disabled some useless debug
-	messaging.
-
-2000-03-21  Dan Winship  
-
-	* providers/pop3: some initial bits of the POP3 provider, to
-	make Matt happy. Incomplete, untested, etc.
-
-2000-03-21  bertrand  
-
-	* providers/mbox/camel-mbox-summary.c 
-	(camel_mbox_summary_append_internal_to_external): copy the size field
-
-	* providers/mbox/camel-mbox-folder.c (_get_message_by_uid): initialize 
-	message_info to NULL
-
-	* camel-folder-summary.h: added the size field.
-
-	* providers/mbox/camel-mbox-summary.h: 
-	added the received_date field.
-
-	* providers/mbox/camel-mbox-summary.c:
-	documented all functions.
-
-	* camel-folder-summary.h: name change and 
-	new fields.
-
-	* providers/mbox/camel-mbox-search.c: update to 
-	conform to name change in the summary fields.
-
-2000-03-10  bertrand  
-
-	* camel-service.h: cosmetic changes.
-
-2000-03-09  Dan Winship  
-
-	* s/HelixCode/Helix Code, Inc./ in the copyrights
-
-2000-03-07  bertrand  
-
-	* camel-formatter.c (handle_mime_part): 
-	plug mem leaks due to bad documentation
-	of camel_content_field_get_mime_type
-	(print_camel_body_part): idem
-	(handle_multipart_alternative): idem
-
-	* gmime-content-field.c (gmime_content_field_get_mime_type): 
-	documentation fix.
-
-
-	* camel-mime-part.c (my_finalize): unref the 
-	content_input_stream if any. 
-
-2000-03-06  bertrand  
-
-	* camel-stream-fs.c (_seek): fix a bogus calculation
-	in the return position.
-
-2000-03-05  bertrand  
-
-	* camel-session.h: cosmetic fixes.
-
-	* camel-stream-fs.c (_read): 
-	(_seek): fixed the current position so that it refers
-	to the current position in the stream, not in its parent.
-
-2000-03-04  NotZed  
-
-	* providers/mbox/camel-mbox-search.c
-	(camel_mbox_folder_search_by_expression): Ref the summary
-	after we have got it.
-
-2000-03-04  bertrand  
-
-	* camel-mime-part.c (my_write_content_to_stream): 
-	stream the raw content instead of nothing if the encoding
-	is not supported.
-
-	* camel-stream-fs.c (_seek): handle eos more
-	properly.
-
-	* camel-formatter.c (get_bonobo_tag_for_object): 
-	bonobo-goad-id is the good key to look for. 
-	(get_bonobo_tag_for_object): close the  tag.
-	(get_bonobo_tag_for_object): the correct syntax for the
-	to set a parameter inside an  tag is :
-	  
-	
-
-2000-03-03  bertrand  
-
-	* providers/mbox/camel-mbox-folder.c (_get_message_by_uid): 
-	use set_input_stream instead of construct_from_stream
-	to feed the message object. 
-
-	* camel-data-wrapper.c (my_write_to_stream): reset output stream.
-	(my_set_input_stream): unref the previous input stream.
-	use the set_output_stream for default behaviour.
-	(my_set_output_stream): unref previous output stream.
-
-	* camel-mime-part.c (my_write_content_to_stream): reset content
-	object output stream.
-
-2000-03-03  NotZed  
-
-	* providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Make
-	sure we open with create with a creation mask.
-
-2000-03-01  NotZed  
-
-	* camel-mime-part-utils.c
-	(camel_mime_part_construct_content_from_stream): DO NOT assert on
-	content type, we have fallback code 4 lines below it ... *sigh*
-
-2000-02-29  NotZed  
-
-	* Makefile.am (libcamelinclude_HEADERS): Added camel-stream-buffer
-	to build.
-
-	* camel-stream-buffer.[ch]: Generic buffer which can be applied to
-	any stream.
-
-2000-03-03  bertrand  
-
-	* camel-formatter.c (handle_image): in the case
-	of images, put the content object output stream
-	in the url. This allows the message browser
-	to show inline images.
-
-	* camel-stream-b64.c (my_read_encode): fixed state
-	0 keep value. 
-
-2000-03-02  bertrand  
-
-	* camel-stream-b64.c (my_read_encode): don't forget to 
-	set the state to 0 after 3.
-	(my_read_encode): don't forget to encode, even in state 3.
-
-	* camel-simple-data-wrapper.c: static functions are prefixed 
-	with my_ instead of _
-	* camel-multipart.c: static functions are prefixed 
-	with my_ instead of _
-	(my_write_to_stream): commented.
-	(my_write_to_stream): warning in case the boudary is set
-	but is a zero length string.
-
-	* camel-mime-part.c (camel_mime_part_encoding_from_string): 
-	remove debug trace. 
-	
-	* camel-mime-part.c: Replaced all static functions
-	with name begining with _ by the same name begining
-	with "my_" to prevent the possible conflicts 
-	with system symbols Dan warned us about. 
-	
-	* camel-stream-b64.c (camel_stream_b64_write_to_stream): 
-	use CamelStreamB64 type for the input stream.
-
-	* camel-mime-part.c (_get_content_object): remove 
-	debugging trace
-	(_write_content_to_stream): implement the b64 
-	encoding the new way (that is using camel_stream_b64)
-
-	* camel-data-wrapper.c (my_write_to_stream): 
-	fix implementation so that it writes properly
-	to the output stream even.
-
-	* camel-stream-b64.c (camel_stream_b64_write_to_stream): 
-	fix implementation. 
-
-2000-02-29  bertrand  
-
-	* camel-stream-b64.c (camel_stream_b64_write_to_stream): new
-	utility function. 
-
-	* camel-data-wrapper.c (_write_to_stream): default
-	implementation. 
-
-	* gmime-utils.c (_store_header_pair_from_string): 
-	revert strange changes. 
-
-	* camel-stream-b64.c (my_read_decode): set eos to true when we
-	have read the whole input stream. 
-	(my_reset): set eos to FALSE.
-
-2000-02-28  NotZed  
-
-	* camel-mime-part.c (_parse_header_pair): Dont free this either.
-
-	* camel-medium.c (_remove_header): Ugh, dont free the header
-	before we actually remove it.
-	(_add_header): Ugh, dont free hashtable entries which may be
-	duplicated (hash_insert _will_ reference that memory).
-
-	* string-utils.c (string_trim): Trimming a 0-length string is not
-	an error.
-
-	* camel-mime-message.c (_parse_header_pair): Fixed very broken
-	memory handling of header_name/value.
-
-	* providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev):
-	Initialise end_of_last_message always.
-	(camel_mbox_copy_file_chunk): Stop trying to read if we run out of
-	data, rather than looping forever.
-	(camel_mbox_write_xev): Use an open flag when opening with create.
-
-	* camel-folder.c (camel_folder_search_by_expression): No, its not
-	a fatal error to search on a non-searchable folder, you just dont
-	get any matches.
-	(_open): Dont open an opened folder (i dont see why this is really
-	a bug, but what the hell ...)
-
-	* providers/mbox/camel-mbox-folder.c (_init): Set search cap on.
-	(_open): Call parent class to perform open.  Remove folder-open
-	check to parent instead.
-	(_create): open takes a creation mask, dont use umask to try and
-	set the open mode.
-	(_delete): Dont bother checking folder==NULL, its already been
-	checked on the external interface (changed to an assertion, this
-	would have to be a camel bug).
-	(_delete_messages): Likewise.
-	(_create): Ditto.
-	(_init): Dont go and clear all the paths and shit that the parent
-	open just setup for us.
-	(_delete_messages): Get rid of more umask stuff.
-	(_append_message): Make sure we pass file mode to open with create.
-	(_append_message): Cleaned up some indenting to make it readable.
-
-	* camel-stream-b64.c (my_read_encode): Fixed a typo.
-
-	* providers/mbox/camel-mbox-search.c: Changed to use e-sexp,
-	rather than filter-sexp.
-
-2000-02-28  bertrand  
-
-	* camel-stream-b64.c (my_read_encode): encoding
-	filter.
-
-2000-02-23  bertrand  
-
-	* camel-stream-b64.c: changed the __static 
-	suffix into a my_ prefix. 
-	(camel_stream_b64_set_mode): reset the persistent
-	status. 
-	(my_read_decode): remove superfluous %
-	
-	* providers/mbox/camel-mbox-utils.c (camel_mbox_copy_file_chunk): 
-	fix exception description message.
-
-2000-02-24  Dan Winship  
-
-	* camel-session.c: Add camel_session_get_transport_for_protocol.
-
-	* camel-transport.h:
-	* camel-transport.c: Add an abstract CamelTransport class.
-
-	* providers/sendmail/*: A CamelTransport that uses sendmail
-	to deliver mail.
-
-2000-02-24  Dan Winship  
-
-	* camel-folder.c: use CamelExceptions for run-time errors, not
-	incorrect code. Don't bother validating that an object exists from
-	inside one of its methods, since you couldn't have gotten there if
-	it didn't. Fix some code style bugs.
-
-	(_init): Rename init_with_store to init and add parent_folder,
-	separator, and name arguments.
-	(_set_name): Get separator from self, not parent_store now.
-
-	* camel-store.h:
-	* camel-store.c: Remove get/set_separator.
-
-	* providers/mbox/: Update for above.
-
-2000-02-23  Dan Winship  
-
-	* camel-medium.c (_finalize): Free the data in the headers hash
-	table.
-	(_add_header): g_strdup the header name and value when adding it.
-
-	* camel-mime-part-utils.c
-	(camel_mime_part_construct_headers_from_stream): Free the header
-	data after calling camel_medium_add_header, since it will have
-	g_strdup()ed it itself.
-
-2000-02-22  NotZed  
-
-	* providers/mbox/camel-mbox-search.c: Dont compile by default.
-
-	* providers/mbox/Makefile.am: Fuck off the filter code.
-
-2000-02-22  bertrand  
-
-	* camel-stream-b64.c (read_decode__static): 
-	don't read the char if we reached the length
-	of the output buffer. Hours lost on this
-	%$!@# bug : 3.5
-
-	* camel-folder.c (camel_folder_get_subfolder): 
-	(camel_folder_create): 
-	(camel_folder_delete): 
-	(camel_folder_delete_messages): 
-	(camel_folder_list_subfolders): 
-	(camel_folder_expunge): 
-	(camel_folder_get_message_by_number): 
-	(camel_folder_get_message_count): 
-	(camel_folder_append_message): 
-	(camel_folder_copy_message_to): 
-	(camel_folder_get_summary): 
-	(camel_folder_get_message_uid): 
-	(camel_folder_get_message_by_uid): 
-	(camel_folder_get_uid_list): 
-	Check folder state (open/close) and raise an
-	exception if it is not ok. 
-	
-	* providers/mbox/camel-mbox-folder.c (_create): 
-	create the file and the path with two different
-	names.
-
-	* camel-folder.c (_create): handle the case 
-	when the folder name starts with '/'
-
-	* camel-exception.c (camel_exception_new): use 
-	(void) instead of () in decl.
-
-	* camel-exception.h: cosmetic fixes.
-
-	* camel-exception.c (camel_exception_init): new routine.
-	Fix a bug in mail/message-list.c
-	
-
-	* camel-folder.h: cosmetic changes.
-
-	* camel-stream-b64.c (reset__static): added a
-	reset method. Thanks message-browser to find
-	so much bugs :)
-
-	* providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): readd
-	Unicode libs.
-
-2000-02-21  bertrand  
-
-	* camel-formatter.c (lookup_unique_id): 
-	awful hack to test get_output_stream.
-	* camel-stream-b64.[ch] :
-	b64 encoding/decoding is now implemented as
-	a stream. 
-	
-
-2000-02-21  bertrand  
-
-	* camel-seekable-substream.c (_reemit_parent_signal): 
-	emit "data_available" when parent stream emits it. 
-
-
-2000-02-21  NotZed  
-
-	* providers/mbox/Makefile.am: Uh, fixed LIBADD again.  What was
-	there was never ever going to work, wasn't it tested?
-
-
-2000-02-21  Dan Winship  
-
-	* camel-session.h: (struct _CamelSession): Add authenticator.
-
-	* camel-session.c (camel_session_new): Add authenticator.
-	(camel_session_query_authenticator): New function to query the
-	session authenticator for password, etc, information.
-
-2000-02-21  Dan Winship  
-
-	* camel-session.c: add CamelExceptions to several functions. Use
-	camel_session_new to initialize the session and URL fields of
-	created CamelStores as appropriate.
-
-	* camel-store.h:
-	* camel-store.c
-	* camel-service.h:
-	* camel-service.c: Move the session and url (and associated
-	functions) from CamelStore to CamelService. Add url_flags to
-	CamelService so subclasses can specify which URL components
-	are mandatory for them.	Add camel_session_new for
-	camel_session_get_store* to use.
-
-	* providers/mbox/camel-mbox-folder.c:
-	* providers/mbox/camel-mbox-store.c:
-	* providers/mbox/camel-mbox-store.h: Update for above changes.
-
-	* camel-exception-list.def: Once camel is being used for real,
-	exceptions won't be renumberable. So renumber them now to make
-	more room to add exceptions to the various categories later, and
-	add a big warning message.
-
-2000-02-20  Dan Winship  
-
-	* providers/mbox/Makefile.am: add libibex back to
-	libcamelmbox_la_LIBADD
-
-2000-02-18  NotZed  
-
-	* providers/mbox/camel-mbox-search.h
-	(camel_mbox_folder_search_by_expression): Added exception to call,
-	and fixed caller.
-
-	* providers/mbox/camel-mbox-search.c
-	(camel_mbox_folder_search_by_expression): Major changes, to use
-	the sexp evaluator from filter/filter-sexp.c to implement the
-	searching.
-	(func_body_contains): Changed to support multiple strings in 1
-	command (results or'd together)
-
-	* url-util.c (g_url_new): Fixed a typo (colon == 0 isn't right),
-	and made it so full url's are absolute pathed (Dan, this is how it
-	has to work!).  Also, always include a path part, even if it is an
-	empty string.
-
-2000-02-18  Dan Winship  
-
-	* camel/camel-types.h: New header with the typedefs for all camel
-	classes. Now the class headers can just include this and the
-	header for the parent type. This makes it possible for
-	CamelService to include a CamelSession without creating an
-	#include loop.
-
-	* camel/*:	
-	* composer/e-msg-composer-attachment-bar.h:
-	* mail/folder-browser.c:
-	* mail/message-list.c: frob #includes to match the new reality
-
-2000-02-17  Dan Winship  
-
-	* camel/camel-service.h:
-	* camel/camel-service.c: Make camel-service us a Gurl internally.
-	Remove the login/password interfaces and instead provide
-	camel_service_connect_with_url. Add CamelExceptions
-
-2000-02-17  bertrand  
-
-	* camel/camel-formatter.c (handle_text_plain): 
-	(handle_text_html): use camel_stream_reset instead
-	of seek. The formatter should be able to work 
-	with all streams, not only seekable streams. 
-	In the case where some provider implementation
-	would not be able to provide a reset method 
-	to their stream, implementors would have
-	to find a workaround.
-
-	* camel/camel-session.c (camel_session_new): use
-	(void) instean of () in function decl.
-
-	* camel/camel-folder.c: ifdef async operation 
-	related code. 
-
-	* camel/camel-seekable-stream.c (_seek): added a warning.
-	(_reset): default implementation of reset for seekable
-	stream.
-
-	* camel/camel-mime-message.h: set_received_date declaration fix.
-	cosmetic changes.
-
-	* camel/providers/mbox/camel-mbox-provider.c (camel_provider_module_init): 
-	use (void) instead of ().
-
-	* camel/camel-stream.c (camel_stream_reset): 
-	new method for CamelStream.
-
-2000-02-17  Dan Winship  
-
-	* camel/url-util.c (g_url_to_string): New function to convert
-	a Gurl back into a char *.
-
-2000-02-17  bertrand  
-
-	* camel/camel-formatter.c (handle_text_plain): 
-	revamped so that it uses the output stream
-	of the data wrapper
-	(handle_text_html): ditto.
-	
-	
-	* camel/camel-simple-data-wrapper.h: 
-	* camel/camel-simple-data-wrapper.c (camel_simple_data_wrapper_new): 
-	use (void) instead of ().
-	(_get_output_stream): simple implementation. 
-
-2000-02-16  bertrand  
-
-	* camel/camel-data-wrapper.c (_set_input_stream): ref input stream
-	(_set_output_stream): ref output stream
-	(_finalize): unref input and output streams
-
-	* camel/camel-seekable-substream.c (_set_bounds): don't
-	seek the begining of the substream.
-	(_eos): fix eos condition testing. 
-	(_finalize): unref parent stream
-	(_init_with_seekable_stream_and_bounds): ref parent stream
-
-	* camel/gstring-util.c (g_string_equal_for_hash): 
-	(g_string_equal_for_glist): return type is int.
-
-	* camel/camel.h: 
-	* camel/camel.c (camel_init): use (void) 
-	instead of ().
-	
-2000-02-16  NotZed  
-
-	* providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Added
-	libfilter to link line (temporarily?).  Required for
-	filter-sexp.
-
-2000-02-15  bertrand  
-
-	* camel/camel-multipart.c (_localize_part): 
-	this routine replaces the _read_part routine
-	and does not store the part in a buffer. 
-	(_set_input_stream): use the set_input_stream
-	instead of the construct_from_stream.
-	each bodypart is given an input stream. 
-
-	* camel/camel-mime-part-utils.c: 
-	include the data-wrapper-repository header. 
-	(camel_mime_part_construct_content_from_stream): 
-	use the set_input_stream instead of the 
-	construct_from_stream method. 
-
-	* camel/camel-seekable-substream.c (_set_bounds): 
-	cur position is set to 0 not to inf_bound.
-
-2000-02-15  bertrand  
-
-	* camel/camel-mime-part.c: include gmime-base64.h
-	various compilation and runtime fixes.
-	(_set_input_stream): store the input substream 
-	for the content object.
-
-	* camel/camel-data-wrapper.h: declare the 
-	set/get function on input/output stream.
-
-	* camel/camel-mime-part.c (_get_content_object): 
-	don't use a temporary mem stream. 	
-
-	* camel/camel-seekable-substream.c (_seek): 
-	(_eos): 
-	(_read): the substream can be unlimited in length
-
-	* camel/camel-data-wrapper.c (camel_data_wrapper_class_init): 
-	set the get/set_input/output_stream methods. 	
-
-	* camel/camel-multipart.c (_construct_from_stream): 
-	camel_stream_seek -> camel_seekable_stream_seek
-
-2000-02-14  Miguel de Icaza  
-
-	* camel/providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Add
-	the unicode libraries as well.
-
-	* camel/camel-provider.c (camel_provider_register_as_module): Add
-	error reporting here.  Desire to use Solaris increases.  Hair loss
-	in the last two hours: 5,400.
-
-	* camel/providers/mbox/camel-mbox-provider.c
-	(camel_mbox_get_provider): Renamed function.
-
-	* camel/camel.h: All include files use camel/ now here.
-
-	* camel/providers/mbox/Makefile.am: Drop all the dynamism from
-	Camel, and make this a standard library.
-
-2000-02-14  bertrand  
-
-	* camel/gmime-utils.c (get_header_array_from_stream): use the 
-	eos stream method. 
-	(gmime_read_line_from_stream): ditto.
-
-	* camel/camel-stream-fs.h (struct ): add the eof field
-	cosmetics changes. 
-
-	* camel/camel-stream-fs.c (camel_stream_fs_init): set eof.
-	(_read): set eof on end of file.
-	(_eos): implemented.
-
-	* camel/gmime-utils.c (get_header_array_from_stream): 
-	make a blocking version of the header parser. 
-	When the fs stream uses gnome-vfs, this should
-	be changed. 
-	(gmime_read_line_from_stream): ditto. 
-
-2000-02-11  bertrand  
-
-	* camel/camel-stream-fs.c: 
-	everywhere, when using the cur_pos field, do it
-	on the CamelSeekableStream object.
-	(_seek): small fix. 
-
-	* camel/camel-seekable-stream.c (camel_seekable_stream_seek): 
-	s/camel_stream_seek/camel_seekable_stream_seek/g
-
-	* camel/camel-seekable-stream.h: 
-	(struct ): added a field to store the
-	current position.
-
-	* camel/camel-seekable-stream.c (camel_seekable_stream_get_current_position): 
-	New function. Allows to get the current position 
-	of a seekable stream.
-	
-
-2000-02-13  NotZed  
-
-	* providers/mbox/camel-mbox-search.c: New file, implements the
-	search api for mbox folders.
-
-	* providers/mbox/Makefile.am: Link with ibex.
-
-	* camel-folder.c (camel_folder_has_search_capability): Api
-	additions.
-	(camel_folder_search_by_expression): Ditto.
-
-2000-02-12  NotZed  
-
-	* providers/mbox/camel-mbox-folder.c (_set_name): Setup index
-	filename as well.
-	(_init_with_store): Init index filename.  Hmm, none of these
-	names ever seem to get free'd (FIXME?)
-
-	* providers/mbox/camel-mbox-folder.h: Add index file name.
-
-2000-02-12  NotZed  
-
-	* camel-folder.h: Add folder search functions.
-
-	** Created ChangeLog just for camel **
-	 - refer to ../ChangeLog for changes prior to this date.
diff --git a/camel/Makefile.am b/camel/Makefile.am
deleted file mode 100644
index 5e8ea1e2d4..0000000000
--- a/camel/Makefile.am
+++ /dev/null
@@ -1,138 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = providers
-
-libcamelincludedir = $(includedir)/camel
-providerdir = $(libdir)/evolution/camel-providers/$(VERSION)
-
-lib_LTLIBRARIES = libcamel.la
-
-INCLUDES = -I.. -I$(srcdir)/.. -I$(includedir)	\
-	-I$(top_srcdir)/intl			\
-	$(GTK_INCLUDEDIR)			\
-	-DCAMEL_PROVIDERDIR=\""$(providerdir)"\"
-
-
-if ENABLE_THREADS
-
-pthread_SRC =	\
-	camel-folder-pt-proxy.c		\
-	camel-thread-proxy.c
-
-pthread_HDR =	\
-	camel-folder-pt-proxy.h			\
-	camel-thread-proxy.h	
-
-else
-
-pthread_SRC =
-pthread_HDR=
-
-endif
-
-
-libcamel_la_SOURCES = 				\
-	camel.c					\
-	camel-data-wrapper.c			\
-	camel-exception.c			\
-	camel-simple-data-wrapper.c		\
-	camel-simple-data-wrapper-stream.c	\
-	camel-stream-data-wrapper.c		\
-	camel-folder.c				\
-	camel-folder-utils.c			\
-	camel-medium.c				\
-	camel-marshal-utils.c			\
-	camel-mime-body-part.c			\
-	camel-mime-message.c			\
-	camel-mime-part.c			\
-	camel-mime-part-utils.c			\
-	camel-movemail.c			\
-	camel-multipart.c			\
-	camel-op-queue.c			\
-	camel-provider.c			\
-	camel-recipient.c			\
-	camel-seekable-stream.c			\
-	camel-seekable-substream.c		\
-	camel-service.c				\
-	camel-session.c				\
-	camel-store.c				\
-	camel-stream.c				\
-	camel-stream-buffer.c			\
-	camel-stream-fs.c			\
-	camel-stream-mem.c			\
-	camel-transport.c			\
-	camel-url.c				\
-	data-wrapper-repository.c		\
-	gmime-content-field.c			\
-	gmime-utils.c				\
-	gstring-util.c				\
-	hash-table-utils.c			\
-	md5-utils.c				\
-	string-utils.c				\
-	camel-mime-parser.c			\
-	camel-mime-utils.c			\
-	camel-mime-filter.c			\
-	camel-mime-filter-basic.c		\
-	camel-mime-filter-save.c		\
-	camel-mime-filter-charset.c		\
-	camel-mime-filter-index.c		\
-	camel-stream-filter.c			\
-	$(pthread_SRC)
-
-libcamelinclude_HEADERS =			\
-	camel.h					\
-	camel-data-wrapper.h			\
-	camel-exception.h			\
-	camel-simple-data-wrapper.h		\
-	camel-simple-data-wrapper-stream.h	\
-	camel-stream-data-wrapper.h		\
-	camel-folder.h				\
-	camel-folder-utils.h			\
-	camel-mime-body-part.h			\
-	camel-marshal-utils.h			\
-	camel-medium.h				\
-	camel-mime-message.h			\
-	camel-mime-part.h			\
-	camel-mime-part-utils.h			\
-	camel-movemail.h			\
-	camel-multipart.h			\
-	camel-op-queue.h			\
-	camel-provider.h			\
-	camel-recipient.h			\
-	camel-seekable-stream.h			\
-	camel-seekable-substream.h		\
-	camel-service.h				\
-	camel-session.h				\
-	camel-store.h				\
-	camel-stream.h				\
-	camel-stream-buffer.h			\
-	camel-stream-fs.h			\
-	camel-stream-mem.h			\
-	camel-transport.h			\
-	camel-url.h				\
-	data-wrapper-repository.h		\
-	gmime-content-field.h			\
-	gmime-utils.h				\
-	gstring-util.h				\
-	hash-table-utils.h			\
-	md5-utils.h				\
-	string-utils.h				\
-	camel-exception-list.def		\
-	camel-mime-parser.h			\
-	camel-mime-utils.h			\
-	camel-mime-filter.h			\
-	camel-mime-filter-basic.h		\
-	camel-mime-filter-save.h		\
-	camel-mime-filter-charset.h		\
-	camel-mime-filter-index.h		\
-	camel-stream-filter.h			\
-	$(pthread_HDR)
-
-libcamel_extra_sources =			\
-	camel-arg-collector.c
-
-libcamel_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir)
-
-EXTRA_DIST =					\
-	$(libcamel_extra_sources)		\
-	README 
diff --git a/camel/README b/camel/README
deleted file mode 100644
index f020174d5e..0000000000
--- a/camel/README
+++ /dev/null
@@ -1,57 +0,0 @@
-
-                                   CAMEL
-     
-
-			A generic Messaging Library
-
-
-                                   ----
-				
-
-Introduction:
--------------
-
-Camel will be a generic messaging library. It will evntually support 
-the standard messaging system for receiving and sending messages.
-It aims at being the backend for the future gnome-mailer system.
-
-The name "camel" stands for ... nothing. Open area of development there.
-You know, that "bazaar" thing. Maybe could we organize a big contest on
-gnome-list to find the best explanation :)
-
-Camel draws heavily from JavaMail and the IMAP4rev1 RFC. People
-wanting to hack on a provider should read the JavaMail API
-specification, but CMC and MAPI are of interest too.
-
-Please, before starting anything, wait for me to finish the abstract
-classes. Some parts are not definitive yet.
-
- 
-Organization:
--------------
-
-The library is roughly a set of abstract classes, some kind of generic
-"interfaces" (idl interfaces, not java interfaces ).
-
-Particular implementations are called providers.
-
-Here are the basic objects:
-
-* CamelService : an abstract class representing an access to a server.
-Handles the connection and authentication to any server.
-
-* CamelStore (CamelService): A hierarchy of folders on a server.
-
-* CamelFolder : An object containing messages. A folder is always
-associated with a store.
-
-* CamelMessage : An object contained in folders. Is defined by a set
-of attributes and a content. (Attributes include: the date it was
-received, the sender address, .....)
-
-* CamelTransport (CamelService): A way to send messages.
-
-....
-...
-
-
diff --git a/camel/README.COPYRIGHT b/camel/README.COPYRIGHT
deleted file mode 100644
index 91774e7339..0000000000
--- a/camel/README.COPYRIGHT
+++ /dev/null
@@ -1,47 +0,0 @@
-Important note for Camel hackers:
----------------------------------
-
-Camel has been a lot of work, and has been conceived to be general
-enough to be used outside the gnome-mailer. It is possible in the
-future that it is used in softwares with licenses incompatible with the
-LGPL. For this reason, the copyright has to be owned by a unique
-person.  Be sure, however, that Camel will always be available under
-the LGPL.  Significant authors will always be consulted before any
-special use of Camel. Moreover, in special situations, they may be
-given the authorization to use Camel with a license different than the
-LGPL.
-
-Thus, when adding code in Camel, always add the following lines at the
-begining of the file:
-
-/* 
- *
- * Copyright 199x, 200x Helix Code, Inc. (http://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
- */
-
-You may also want to add your name to the author name list after this
-header.
-
-Please contact me (Bertrand.Guiheneuf@aful.org) if you want to discuss
-this copyright issue.
-
-Happy hacking,
-
-Bertrand.
-
-
diff --git a/camel/README.HACKING b/camel/README.HACKING
deleted file mode 100644
index a4742ee7b8..0000000000
--- a/camel/README.HACKING
+++ /dev/null
@@ -1,14 +0,0 @@
-You want to hack on Camel ?
-
-Thanks. Camel aims at being the best messaging
-library for Linux and your help is welcome. 
-Please be sure to read the following files before
-commiting any change or sending any patch:
-
-CODING.STYLE
-README.COPYRIGHT
-
-
-Thanks.
-
-	Bertrand 
\ No newline at end of file
diff --git a/camel/camel-arg-collector.c b/camel/camel-arg-collector.c
deleted file mode 100644
index 44b9e2d99b..0000000000
--- a/camel/camel-arg-collector.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-/*
- * included in camel because it is not exported 
- * by gtk
- *
- * Bertrand Guiheneuf 
- */
-
-/* collect a single argument value from a va_list.
- * this is implemented as a huge macro , because we can't
- * pass va_list variables by reference on some systems.
- * the corresponding prototype would be:
- * static inline gchar*
- * gtk_arg_collect_value (GtkArg  *arg,
- *		          va_list  var_args);
- */
-#define	CAMEL_ARG_COLLECT_VALUE(arg, var_args, _error)	\
-G_STMT_START { \
-  gchar *error_msg; \
-  GtkType fundamental_type; \
-  \
-  fundamental_type = GTK_FUNDAMENTAL_TYPE (arg->type); \
-  if (fundamental_type > GTK_TYPE_FUNDAMENTAL_LAST) \
-    { \
-      fundamental_type = gtk_type_get_varargs_type (fundamental_type); \
-      if (!fundamental_type) \
-        fundamental_type = GTK_FUNDAMENTAL_TYPE (arg->type); \
-    } \
- \
-  error_msg = NULL; \
-  switch (fundamental_type) \
-    { \
-    case GTK_TYPE_INVALID: \
-      error_msg = g_strdup ("invalid untyped argument"); \
-      break; \
- \
-    case GTK_TYPE_NONE: \
-      /* we just ignore this type, since it arithmetically just requires \
-       * us to not move the var_args pointer any further. callers need to \
-       * check for the validity of GTK_TYPE_NONE themselves. \
-       * \
-       * error_msg = g_strdup ("invalid argument type `void'"); \
-       */ \
-      break; \
- \
-      /* everything smaller than an int is guarranteed to be \
-       * passed as an int \
-       */ \
-    case GTK_TYPE_CHAR: \
-      GTK_VALUE_CHAR (*arg) = va_arg (var_args, gint); \
-      break; \
-    case GTK_TYPE_UCHAR: \
-      GTK_VALUE_UCHAR (*arg) = va_arg (var_args, guint); \
-      break; \
-    case GTK_TYPE_BOOL: \
-      GTK_VALUE_BOOL (*arg) = va_arg (var_args, gint); \
-      break; \
-    case GTK_TYPE_INT: \
-      GTK_VALUE_INT (*arg) = va_arg (var_args, gint); \
-      break; \
-    case GTK_TYPE_UINT: \
-      GTK_VALUE_UINT (*arg) = va_arg (var_args, guint); \
-      break; \
-    case GTK_TYPE_ENUM: \
-      GTK_VALUE_ENUM (*arg) = va_arg (var_args, gint); \
-      break; \
-    case GTK_TYPE_FLAGS: \
-      GTK_VALUE_FLAGS (*arg) = va_arg (var_args, guint); \
-      break; \
- \
-      /* we collect longs as glongs since they differ in size with \
-       * integers on some platforms \
-       */ \
-    case GTK_TYPE_LONG: \
-      GTK_VALUE_LONG (*arg) = va_arg (var_args, glong); \
-      break; \
-    case GTK_TYPE_ULONG: \
-      GTK_VALUE_ULONG (*arg) = va_arg (var_args, gulong); \
-      break; \
- \
-      /* floats are always passed as doubles \
-       */ \
-    case GTK_TYPE_FLOAT: \
-      /* GTK_VALUE_FLOAT (*arg) = va_arg (var_args, gfloat); */ \
-      GTK_VALUE_FLOAT (*arg) = va_arg (var_args, gdouble); \
-      break; \
-    case GTK_TYPE_DOUBLE: \
-      GTK_VALUE_DOUBLE (*arg) = va_arg (var_args, gdouble); \
-      break; \
- \
-      /* collect pointer values \
-       */ \
-    case GTK_TYPE_STRING: \
-      GTK_VALUE_STRING (*arg) = va_arg (var_args, gchar*); \
-      break; \
-    case GTK_TYPE_POINTER: \
-      GTK_VALUE_POINTER (*arg) = va_arg (var_args, gpointer); \
-      break; \
-    case GTK_TYPE_BOXED: \
-      GTK_VALUE_BOXED (*arg) = va_arg (var_args, gpointer); \
-      break; \
- \
-      /* structured types \
-       */ \
-    case GTK_TYPE_SIGNAL: \
-      GTK_VALUE_SIGNAL (*arg).f = va_arg (var_args, GtkSignalFunc); \
-      GTK_VALUE_SIGNAL (*arg).d = va_arg (var_args, gpointer); \
-      break; \
-    case GTK_TYPE_ARGS: \
-      GTK_VALUE_ARGS (*arg).n_args = va_arg (var_args, gint); \
-      GTK_VALUE_ARGS (*arg).args = va_arg (var_args, GtkArg*); \
-      break; \
-    case GTK_TYPE_FOREIGN: \
-      GTK_VALUE_FOREIGN (*arg).data = va_arg (var_args, gpointer); \
-      GTK_VALUE_FOREIGN (*arg).notify = va_arg (var_args, GtkDestroyNotify); \
-      break; \
-    case GTK_TYPE_CALLBACK: \
-      GTK_VALUE_CALLBACK (*arg).marshal = va_arg (var_args, GtkCallbackMarshal); \
-      GTK_VALUE_CALLBACK (*arg).data = va_arg (var_args, gpointer); \
-      GTK_VALUE_CALLBACK (*arg).notify = va_arg (var_args, GtkDestroyNotify); \
-      break; \
-    case GTK_TYPE_C_CALLBACK: \
-      GTK_VALUE_C_CALLBACK (*arg).func = va_arg (var_args, GtkFunction); \
-      GTK_VALUE_C_CALLBACK (*arg).func_data = va_arg (var_args, gpointer); \
-      break; \
- \
-      /* we do some extra sanity checking when collecting objects, \
-       * i.e. if the object pointer is not NULL, we check whether we \
-       * actually got an object pointer within the desired class branch. \
-       */ \
-    case GTK_TYPE_OBJECT: \
-      GTK_VALUE_OBJECT (*arg) = va_arg (var_args, GtkObject*); \
-      if (GTK_VALUE_OBJECT (*arg) != NULL) \
-	{ \
-	  register GtkObject *object = GTK_VALUE_OBJECT (*arg); \
-	   \
-	  if (object->klass == NULL) \
-	    error_msg = g_strconcat ("invalid unclassed object pointer for argument type `", \
-				     gtk_type_name (arg->type), \
-				     "'", \
-				     NULL); \
-	  else if (!gtk_type_is_a (GTK_OBJECT_TYPE (object), arg->type)) \
-	    error_msg = g_strconcat ("invalid object `", \
-				     gtk_type_name (GTK_OBJECT_TYPE (object)), \
-				     "' for argument type `", \
-				     gtk_type_name (arg->type), \
-				     "'", \
-				     NULL); \
-	} \
-      break; \
- \
-    default: \
-      error_msg = g_strconcat ("unsupported argument type `", \
-			       gtk_type_name (arg->type), \
-			       "'", \
-			       NULL); \
-      break; \
-    } \
-   \
-  _error = error_msg; /* return error_msg; */ \
-} G_STMT_END
diff --git a/camel/camel-data-wrapper.c b/camel/camel-data-wrapper.c
deleted file mode 100644
index 1cff54a7c1..0000000000
--- a/camel/camel-data-wrapper.c
+++ /dev/null
@@ -1,455 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-data-wrapper.c : Abstract class for a data_wrapper */
-
-/** THIS IS MOSTLY AN ABSTRACT CLASS THAT SHOULD HAVE BEEN AN
-    INTERFACE. **/
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-data-wrapper.h"
-
-#define d(x)
-
-static GtkObjectClass *parent_class = NULL;
-
-/* Returns the class for a CamelDataWrapper */
-#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (GTK_OBJECT (so)->klass)
-
-
-static void set_input_stream (CamelDataWrapper *data_wrapper,
-			      CamelStream *stream);
-static CamelStream *get_input_stream (CamelDataWrapper *data_wrapper);
-static void set_output_stream (CamelDataWrapper *data_wrapper,
-			       CamelStream *stream);
-static CamelStream *get_output_stream (CamelDataWrapper *data_wrapper);
-
-static void construct_from_stream (CamelDataWrapper *data_wrapper,
-				   CamelStream *stream);
-static void construct_from_parser(CamelDataWrapper *, CamelMimeParser *);
-static void write_to_stream (CamelDataWrapper *data_wrapper,
-			     CamelStream *stream);
-static void set_mime_type (CamelDataWrapper *data_wrapper,
-			   const gchar *mime_type);
-static gchar *get_mime_type (CamelDataWrapper *data_wrapper);
-static GMimeContentField *get_mime_type_field (CamelDataWrapper *data_wrapper);
-static void set_mime_type_field (CamelDataWrapper *data_wrapper,
-				 GMimeContentField *mime_type);
-static void finalize (GtkObject *object);
-
-static void
-camel_data_wrapper_class_init (CamelDataWrapperClass *camel_data_wrapper_class)
-{
-	GtkObjectClass *gtk_object_class =
-		GTK_OBJECT_CLASS (camel_data_wrapper_class);
-
-	parent_class = gtk_type_class (gtk_object_get_type ());
-
-	/* virtual method definition */
-	camel_data_wrapper_class->write_to_stream = write_to_stream;
-	camel_data_wrapper_class->construct_from_stream = construct_from_stream;
-	camel_data_wrapper_class->construct_from_parser = construct_from_parser;
-	camel_data_wrapper_class->set_mime_type = set_mime_type;
-	camel_data_wrapper_class->get_mime_type = get_mime_type;
-	camel_data_wrapper_class->get_mime_type_field = get_mime_type_field;
-	camel_data_wrapper_class->set_mime_type_field = set_mime_type_field;
-
-	camel_data_wrapper_class->set_input_stream = set_input_stream;
-	camel_data_wrapper_class->get_input_stream = get_input_stream;
-	camel_data_wrapper_class->set_output_stream = set_output_stream;
-	camel_data_wrapper_class->get_output_stream = get_output_stream;
-
-	/* virtual method overload */
-	gtk_object_class->finalize = finalize;
-}
-
-static void
-camel_data_wrapper_init (gpointer object, gpointer klass)
-{
-	CamelDataWrapper *camel_data_wrapper = CAMEL_DATA_WRAPPER (object);
-
-	camel_data_wrapper->mime_type = gmime_content_field_new (NULL, NULL);
-}
-
-
-
-GtkType
-camel_data_wrapper_get_type (void)
-{
-	static GtkType camel_data_wrapper_type = 0;
-
-	if (!camel_data_wrapper_type) {
-		GtkTypeInfo camel_data_wrapper_info =
-		{
-			"CamelDataWrapper",
-			sizeof (CamelDataWrapper),
-			sizeof (CamelDataWrapperClass),
-			(GtkClassInitFunc) camel_data_wrapper_class_init,
-			(GtkObjectInitFunc) camel_data_wrapper_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_data_wrapper_type = gtk_type_unique (gtk_object_get_type (), &camel_data_wrapper_info);
-	}
-
-	return camel_data_wrapper_type;
-}
-
-
-static void
-finalize (GtkObject *object)
-{
-	CamelDataWrapper *camel_data_wrapper = CAMEL_DATA_WRAPPER (object);
-
-	if (camel_data_wrapper->mime_type)
-		gmime_content_field_unref (camel_data_wrapper->mime_type);
-
-	if (camel_data_wrapper->input_stream)
-		gtk_object_unref (GTK_OBJECT (camel_data_wrapper->input_stream));
-
-	if (camel_data_wrapper->output_stream)
-		gtk_object_unref (GTK_OBJECT (camel_data_wrapper->output_stream));
-
-	parent_class->finalize (object);
-}
-
-
-static void
-set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	if (data_wrapper->input_stream)
-		gtk_object_unref (GTK_OBJECT (data_wrapper->input_stream));
-
-	data_wrapper->input_stream = stream;
-
-	if (!data_wrapper->output_stream && stream)
-		set_output_stream (data_wrapper, stream);
-
-	if (stream) {
-		gtk_object_ref (GTK_OBJECT (stream));
-		gtk_object_sink (GTK_OBJECT (stream));
-	}
-}
-
-/**
- * camel_data_wrapper_set_input_stream:
- * @data_wrapper: a data wrapper
- * @stream: a stream that can be read from, or %NULL
- *
- * This sets the data wrapper's input stream from @stream, most likely
- * causing @data_wrapper to initialize itself from that stream.
- * @data_wrapper may or may not notice future changes to @stream, and
- * if @stream is closed before @data_wrapper is destroyed, it could
- * be arbitrarily bad. This function may fail, but there is no way
- * for the caller to know this.
- *
- * If @data_wrapper has no output stream, its output stream will also
- * be set to @stream.
- **/
-void
-camel_data_wrapper_set_input_stream (CamelDataWrapper *data_wrapper,
-				     CamelStream *stream)
-{
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-	g_return_if_fail (stream == NULL || CAMEL_IS_STREAM (stream));
-
-	CDW_CLASS (data_wrapper)->set_input_stream (data_wrapper, stream);
-}
-
-
-static CamelStream *
-get_input_stream (CamelDataWrapper *data_wrapper)
-{
-	return data_wrapper->input_stream;
-}
-
-/**
- * camel_data_wrapper_get_input_stream:
- * @data_wrapper: a data wrapper
- *
- * Return value: @data_wrapper's input stream
- **/
-CamelStream *
-camel_data_wrapper_get_input_stream (CamelDataWrapper *data_wrapper)
-{
-	g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), NULL);
-
-	return CDW_CLASS (data_wrapper)->get_input_stream (data_wrapper);
-}
-
-
-static void
-set_output_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	if (data_wrapper->output_stream)
-		gtk_object_unref (GTK_OBJECT (data_wrapper->output_stream));
-
-	data_wrapper->output_stream = stream;
-	if (stream) {
-		gtk_object_ref (GTK_OBJECT (stream));
-		gtk_object_sink (GTK_OBJECT (stream));
-	}
-	d(printf("data_wrapper:: set_output_stream(%p)\n", stream));
-}
-
-/**
- * camel_data_wrapper_set_output_stream:
- * @data_wrapper: a data wrapper
- * @stream: a stream that can be read from
- *
- * This sets the data wrapper's output stream to @stream. Unlike
- * camel_data_wrapper_set_input_stream(), this function has no side
- * effects.
- *
- * The output stream should theoretically be a stream that, if read
- * from, produces the data wrapper's contents. However, while certain
- * pieces of code assume this, nothing enforces it.
- **/
-void
-camel_data_wrapper_set_output_stream (CamelDataWrapper *data_wrapper,
-				      CamelStream *stream)
-{
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-	g_return_if_fail (CAMEL_IS_STREAM (stream));
-
-	CDW_CLASS (data_wrapper)->set_output_stream (data_wrapper, stream);
-}
-
-
-static CamelStream *
-get_output_stream (CamelDataWrapper *data_wrapper)
-{
-	d(printf("data_wrapper:: get_output_stream(%p) = %p\n", data_wrapper, data_wrapper->output_stream));
-	return data_wrapper->output_stream;
-}
-
-/**
- * camel_data_wrapper_get_output_stream:
- * @data_wrapper: a data wrapper
- *
- * Return value: @data_wrapper's output stream
- **/
-CamelStream *
-camel_data_wrapper_get_output_stream (CamelDataWrapper *data_wrapper)
-{
-	g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), NULL);
-
-	return CDW_CLASS (data_wrapper)->get_output_stream (data_wrapper);
-}
-
-
-static void
-write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	gchar tmp_buf[4096];
-	gint nb_read;
-	gint nb_written;
-	CamelStream *output_stream;
-
-	d(printf("data_wrapper::write_to_stream\n"));
-
-	output_stream = camel_data_wrapper_get_output_stream (data_wrapper);
-	if (!output_stream) {
-		g_warning("write to stream with no stream");
-		return;
-	}
-
-	camel_stream_reset (output_stream);
-
-	while (!camel_stream_eos (output_stream)) {
-		nb_read = camel_stream_read (output_stream, tmp_buf, 4096);
-		d(printf("copying %d bytes\n", nb_read));
-		nb_written = 0;
-		while (nb_written < nb_read)
-			nb_written += camel_stream_write (stream, tmp_buf + nb_written, nb_read - nb_written);
-	}
-}
-
-
-/**
- * camel_data_wrapper_write_to_stream:
- * @data_wrapper: a data wrapper
- * @stream: stream for data to be written to
- *
- * Writes the data content to @stream in a machine-independent format
- * appropriate for the data. It should be possible to construct an
- * equivalent data wrapper object later by passing this stream to
- * camel_data_construct_from_stream().
- *
- * Of course, this operation might fail, and of course, there's no
- * way for you to find out about it.
- **/
-void
-camel_data_wrapper_write_to_stream (CamelDataWrapper *data_wrapper,
-				    CamelStream *stream)
-{
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-	g_return_if_fail (CAMEL_IS_STREAM (stream));
-
-	CDW_CLASS (data_wrapper)->write_to_stream (data_wrapper, stream);
-}
-
-
-static void
-construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	/* nothing */
-}
-
-/**
- * camel_data_wrapper_construct_from_stream:
- * @data_wrapper: a data wrapper
- * @stream: a stream that can be read from
- *
- * This constructs a data wrapper object from a stream. It is not clear
- * how this differs from camel_data_wrapper_set_input_stream(), nor is
- * it clear how it affects the data wrapper's input and output streams.
- *
- * This could fail, but you can't know if it did.
- **/
-void
-camel_data_wrapper_construct_from_stream (CamelDataWrapper *data_wrapper,
-					  CamelStream *stream)
-{
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-	g_return_if_fail (CAMEL_IS_STREAM (stream));
-
-	CDW_CLASS (data_wrapper)->construct_from_stream (data_wrapper, stream);
-}
-
-
-static void
-set_mime_type (CamelDataWrapper *data_wrapper, const gchar *mime_type)
-{
-	gmime_content_field_construct_from_string (data_wrapper->mime_type,
-						   mime_type);
-}
-
-/**
- * camel_data_wrapper_set_mime_type:
- * @data_wrapper: a data wrapper
- * @mime_type: the text representation of a MIME type
- *
- * This sets the data wrapper's MIME type.
- * It might fail, but you won't know. It will allow you to set
- * Content-Type parameters on the data wrapper, which are meaningless.
- * You should not be allowed to change the MIME type of a data wrapper
- * that contains data, or at least, if you do, it should invalidate the
- * data.
- **/
-void
-camel_data_wrapper_set_mime_type (CamelDataWrapper *data_wrapper,
-				  const gchar *mime_type)
-{
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-	g_return_if_fail (mime_type != NULL);
-
-	CDW_CLASS (data_wrapper)->set_mime_type (data_wrapper, mime_type);
-}
-
-static gchar *
-get_mime_type (CamelDataWrapper *data_wrapper)
-{
-	return gmime_content_field_get_mime_type (data_wrapper->mime_type);
-}
-
-/**
- * camel_data_wrapper_get_mime_type:
- * @data_wrapper: a data wrapper
- *
- * Return value: the text form of the data wrapper's MIME type
- **/
-gchar *
-camel_data_wrapper_get_mime_type (CamelDataWrapper *data_wrapper)
-{
-	g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), NULL);
-
-	return CDW_CLASS (data_wrapper)->get_mime_type (data_wrapper);
-}
-
-
-static GMimeContentField *
-get_mime_type_field (CamelDataWrapper *data_wrapper)
-{
-	return data_wrapper->mime_type;
-}
-
-/**
- * camel_data_wrapper_get_mime_type_field:
- * @data_wrapper: a data wrapper
- *
- * Return value: the parsed form of the data wrapper's MIME type
- **/
-GMimeContentField *
-camel_data_wrapper_get_mime_type_field (CamelDataWrapper *data_wrapper)
-{
-	g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), NULL);
-
-	return CDW_CLASS (data_wrapper)->get_mime_type_field (data_wrapper);
-}
-
-
-/**
- * camel_data_wrapper_set_mime_type_field:
- * @data_wrapper: a data wrapper
- * @mime_type: the parsed representation of a MIME type
- *
- * This sets the data wrapper's MIME type. It suffers from the same
- * flaws as camel_data_wrapper_set_mime_type.
- **/
-static void
-set_mime_type_field (CamelDataWrapper *data_wrapper,
-		     GMimeContentField *mime_type)
-{
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-	g_return_if_fail (mime_type != NULL);
-
-	if (data_wrapper->mime_type)
-		gmime_content_field_unref (data_wrapper->mime_type);
-	data_wrapper->mime_type = mime_type;
-	if (mime_type)
-		gmime_content_field_ref (data_wrapper->mime_type);
-}
-
-void
-camel_data_wrapper_set_mime_type_field (CamelDataWrapper *data_wrapper,
-					GMimeContentField *mime_type)
-{
-	CDW_CLASS (data_wrapper)->set_mime_type_field (data_wrapper,
-						       mime_type);
-}
-
-static void construct_from_parser(CamelDataWrapper *d, CamelMimeParser *mp)
-{
-	/* do nothing? */
-	g_warning("Construct from parser not implemented for: %s", gtk_type_name(((GtkObject *)d)->klass->type));
-}
-
-void
-camel_data_wrapper_construct_from_parser(CamelDataWrapper *data_wrapper, CamelMimeParser *mp)
-{
-	CDW_CLASS (data_wrapper)->construct_from_parser (data_wrapper, mp);
-}
-
diff --git a/camel/camel-data-wrapper.h b/camel/camel-data-wrapper.h
deleted file mode 100644
index 0af3e73362..0000000000
--- a/camel/camel-data-wrapper.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelDataWrapper.h : Abstract class for a data wrapper */
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_DATA_WRAPPER_H
-#define CAMEL_DATA_WRAPPER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "gmime-content-field.h"
-#include 
-
-#define CAMEL_DATA_WRAPPER_TYPE     (camel_data_wrapper_get_type ())
-#define CAMEL_DATA_WRAPPER(obj)     (GTK_CHECK_CAST((obj), CAMEL_DATA_WRAPPER_TYPE, CamelDataWrapper))
-#define CAMEL_DATA_WRAPPER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_DATA_WRAPPER_TYPE, CamelDataWrapperClass))
-#define CAMEL_IS_DATA_WRAPPER(o)    (GTK_CHECK_TYPE((o), CAMEL_DATA_WRAPPER_TYPE))
-
-
-struct _CamelDataWrapper
-{
-	GtkObject parent_object;
-
-	CamelStream *input_stream;
-	CamelStream *output_stream;
-
-	GMimeContentField *mime_type;
-};
-
-
-
-typedef struct {
-
-	GtkObjectClass parent_class;
-
-	/* Virtual methods */
-	void                (*set_input_stream)       (CamelDataWrapper *data_wrapper,
-						       CamelStream *stream);
-	CamelStream *       (*get_input_stream)       (CamelDataWrapper *data_wrapper);
-	void                (*set_output_stream)      (CamelDataWrapper *data_wrapper,
-						       CamelStream *stream);
-	CamelStream *       (*get_output_stream)      (CamelDataWrapper *data_wrapper);
-
-	void                (*set_mime_type)          (CamelDataWrapper *data_wrapper,
-						       const gchar * mime_type);
-	gchar *             (*get_mime_type)          (CamelDataWrapper *data_wrapper);
-	GMimeContentField * (*get_mime_type_field)    (CamelDataWrapper *data_wrapper);
-	void                (*set_mime_type_field)    (CamelDataWrapper *data_wrapper,
-						       GMimeContentField *mime_type_field);
-
-
-	/* deprecated method */
-	void                (*write_to_stream)        (CamelDataWrapper *data_wrapper,
-						       CamelStream *stream);
-	void                (*construct_from_stream)  (CamelDataWrapper *data_wrapper,
-						       CamelStream *stream);
-
-	void                (*construct_from_parser)  (CamelDataWrapper *data_wrapper,
-						       CamelMimeParser *);
-
-} CamelDataWrapperClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_data_wrapper_get_type (void);
-
-
-/* public methods */
-
-void                camel_data_wrapper_write_to_stream          (CamelDataWrapper *data_wrapper,
-								 CamelStream *stream);
-void                camel_data_wrapper_set_mime_type            (CamelDataWrapper *data_wrapper,
-								 const gchar *mime_type);
-gchar *             camel_data_wrapper_get_mime_type            (CamelDataWrapper *data_wrapper);
-GMimeContentField * camel_data_wrapper_get_mime_type_field      (CamelDataWrapper *data_wrapper);
-void                camel_data_wrapper_set_mime_type_field      (CamelDataWrapper *data_wrapper,
-								 GMimeContentField *mime_type);
-
-void                camel_data_wrapper_set_input_stream         (CamelDataWrapper *data_wrapper,
-								 CamelStream *stream);
-CamelStream *       camel_data_wrapper_get_input_stream         (CamelDataWrapper *data_wrapper);
-void                camel_data_wrapper_set_output_stream        (CamelDataWrapper *data_wrapper,
-								 CamelStream *stream);
-CamelStream *       camel_data_wrapper_get_output_stream        (CamelDataWrapper *data_wrapper);
-
-
-void                camel_data_wrapper_construct_from_parser    (CamelDataWrapper *data_wrapper,
-								 CamelMimeParser *);
-
-
-/* deprecated methods. Left until the new parser scheme is ok */
-void                camel_data_wrapper_construct_from_stream    (CamelDataWrapper *data_wrapper,
-								 CamelStream *stream);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_DATA_WRAPPER_H */
diff --git a/camel/camel-exception-list.def b/camel/camel-exception-list.def
deleted file mode 100644
index fcb99e5a52..0000000000
--- a/camel/camel-exception-list.def
+++ /dev/null
@@ -1,35 +0,0 @@
-/* WARNING: Exceptions MUST NOT be renumbered: they need to be
- * consistent across libraries compiled at different times.
- * Categories should be widely separated, old unused exceptions can
- * never be deleted, and new exceptions can be added only to the
- * ends of categories.
- */
-
-CAMEL_EXCEPTION_NONE = 0,
-
-/* Generic exceptions */
-CAMEL_EXCEPTION_INVALID_PARAM,
-CAMEL_EXCEPTION_SYSTEM,
-CAMEL_EXCEPTION_USER_CANCEL,
-
-/* CamelFolderException */
-CAMEL_EXCEPTION_FOLDER_NULL = 100,
-CAMEL_EXCEPTION_FOLDER_INVALID,
-CAMEL_EXCEPTION_FOLDER_INVALID_STATE,
-CAMEL_EXCEPTION_FOLDER_NON_EMPTY,
-CAMEL_EXCEPTION_FOLDER_NON_UID,
-CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
-CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-CAMEL_EXCEPTION_FOLDER_SUMMARY_INVALID,
-
-/* CamelStoreException */
-CAMEL_EXCEPTION_STORE_NULL = 200,
-CAMEL_EXCEPTION_STORE_INVALID,
-
-/* CamelServiceException */
-CAMEL_EXCEPTION_SERVICE_NULL = 300,
-CAMEL_EXCEPTION_SERVICE_INVALID,
-CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE
diff --git a/camel/camel-exception.c b/camel/camel-exception.c
deleted file mode 100644
index 9a20dd2838..0000000000
--- a/camel/camel-exception.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-execpetion.c : exception utils */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-exception.h"
-
-
-
-/**
- * camel_exception_new: allocate a new exception object. 
- * 
- * Create and returns a new exception object.
- * 
- * 
- * Return value: The newly allocated exception object.
- **/
-CamelException *
-camel_exception_new (void)
-{
-	CamelException *ex;
-
-	ex = g_new (CamelException, 1);
-	ex->desc = NULL;
-
-	/* set the Exception Id to NULL */
-	ex->id = CAMEL_EXCEPTION_NONE;
-
-	return ex;
-}
-
-/**
- * camel_exception_init: init a (statically allocated) exception. 
- * 
- * Init an exception. This routine is mainly
- * useful when using a statically allocated
- * exception. 
- * 
- * 
- **/
-void
-camel_exception_init (CamelException *ex)
-{
-	ex->desc = NULL;
-
-	/* set the Exception Id to NULL */
-	ex->id = CAMEL_EXCEPTION_NONE;
-}
-
-
-/**
- * camel_exception_clear: Clear an exception
- * @exception: the exception object
- * 
- * Clear an exception, that is, set the 
- * exception ID to CAMEL_EXCEPTION_NONE and
- * free the description text.
- * If the exception is NULL, this funtion just
- * returns.
- **/
-void 
-camel_exception_clear (CamelException *exception)
-{
-	if (!exception) return;
-	
-	/* free the description text */
-	if (exception->desc)
-		g_free (exception->desc);
-	exception->desc = NULL;
-
-	/* set the Exception Id to NULL */
-	exception->id = CAMEL_EXCEPTION_NONE;
-}
-
-
-
-
-/**
- * camel_exception_free: Free an exception 
- * @exception: The exception object to free
- * 
- * Free an exception object. If the exception
- * is NULL, nothing is done, the routine simply
- * returns.
- **/
-void 
-camel_exception_free (CamelException *exception)
-{
-	if (!exception) return;
-	
-	/* free the description text */
-	if (exception->desc)
-		g_free (exception->desc);
-       	/* free the exeption itself */
-	g_free (exception);
-}
-
-/**
- * camel_exception_set: set an exception 
- * @ex: exception object 
- * @id: exception id 
- * @desc: textual description of the exception
- * 
- * Set the value of an exception. The exception id is 
- * a unique number representing the exception. The 
- * textual description is a small text explaining 
- * what happened and provoked the exception.
- *
- * When @ex is NULL, nothing is done, this routine
- * simply returns.
- *
- **/
-void
-camel_exception_set (CamelException *ex,
-		     ExceptionId id,
-		     const char *desc)
-{
-	/* if no exception is given, do nothing */
-	if (!ex) return;
-
-	ex->id = id;
-
-	/* remove the previous exception description */
-	if (ex->desc)
-		g_free (ex->desc);
-	ex->desc = g_strdup (desc);
-}
-
-
-/**
- * camel_exception_setv: set an exception 
- * @ex: exception object 
- * @id: exception id 
- * @format: format of the description string. The format string is used as in printf().
- * 
- * Set the value of an exception. The exception id is 
- * a unique number representing the exception. The 
- * textual description is a small text explaining 
- * what happened and provoked the exception. 
- * In this version, the string is created from the format 
- * string and the variable argument list.
- *
- * When @ex is NULL, nothing is done, this routine
- * simply returns.
- *
- **/
-void
-camel_exception_setv (CamelException *ex,
-		      ExceptionId id,
-		      const char *format, 
-		      ...)
-{
-	va_list args;
-	gchar *tmp_desc_string;
-	
-	
-	/* if no exception is given, do nothing */
-	if (!ex) return;
-	
-	
-	/* create the temporary exception string */
-	va_start(args, format);
-	tmp_desc_string = g_strdup_vprintf (format, args);
-	va_end (args);
-	
-	
-	/* now set the exception. We don't call
-	   camel_exception_set because we want to 
-	   avoid a useless strdup () */
-	ex->id = id;
-	
-	/* remove the previous exception description */
-	if (ex->desc)
-		g_free (ex->desc);
-	ex->desc = g_strdup (tmp_desc_string);
-	
-}
-
-
-
-
-
-
-
-/**
- * camel_exception_xfer: transfer an exception
- * @ex_dst: Destination exception object 
- * @ex_src: Source exception object
- * 
- * Transfer the content of an exception from
- * an exception object to another. 
- * The destination exception receives the id and
- * the description text of the source exception. 
- **/
-void 
-camel_exception_xfer (CamelException *ex_dst,
-		      CamelException *ex_src)
-{
-	if (ex_dst->desc)
-		g_free (ex_dst->desc);
-
-	ex_dst->id = ex_src->id;
-	ex_dst->desc = ex_src->desc;
-
-	ex_src->desc = NULL;
-	ex_src->id = CAMEL_EXCEPTION_NONE;
-}
-
-
-
-
-
-
-
-/**
- * camel_exception_get_id: get the exception id
- * @ex: The exception object
- * 
- * Return the id of an exception. 
- * If @ex is NULL, return CAMEL_EXCEPTION_NONE;
- * 
- * Return value: Exception ID.
- **/
-ExceptionId
-camel_exception_get_id (CamelException *ex)
-{
-	if (ex)
-		return ex->id;
-	else 
-		return CAMEL_EXCEPTION_NONE;
-}
-
-
-
-
-/**
- * camel_exception_get_description: get the description of an exception.
- * @ex: The exception object
- * 
- * Return the exception description text. 
- * If @ex is NULL, return NULL;
- * 
- * 
- * Return value: Exception description text.
- **/
-const gchar *
-camel_exception_get_description (CamelException *ex)
-{
-	if (ex)
-		return ex->desc;
-	else 
-		return NULL;
-}
diff --git a/camel/camel-exception.h b/camel/camel-exception.h
deleted file mode 100644
index bf361a032b..0000000000
--- a/camel/camel-exception.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-execpetion.h : exception utils */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_EXCEPTION_H
-#define CAMEL_EXCEPTION_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-
-typedef enum {
-#include "camel-exception-list.def"
-
-} ExceptionId;
-
-
-struct _CamelException {
-	/* do not access the fields directly */
-	ExceptionId id;
-	char *desc;
-
-};
-
-
-
-/* creation and destruction functions */
-CamelException *          camel_exception_new           (void);
-void                      camel_exception_free          (CamelException *exception);
-void                      camel_exception_init          (CamelException *ex);
-
-
-/* exception content manipulation */
-void                      camel_exception_clear         (CamelException *exception);
-void                      camel_exception_set           (CamelException *ex,
-							 ExceptionId id,
-							 const char *desc);
-void                      camel_exception_setv          (CamelException *ex,
-							 ExceptionId id,
-							 const char *format,  
-							 ...);
-
-
-/* exception content transfer */
-void                      camel_exception_xfer          (CamelException *ex_dst,
-							 CamelException *ex_src);
-
-
-/* exception content retrieval */
-ExceptionId               camel_exception_get_id        (CamelException *ex);
-const gchar *             camel_exception_get_description (CamelException *ex);
-
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_EXCEPTION_H */
-
diff --git a/camel/camel-folder-pt-proxy.c b/camel/camel-folder-pt-proxy.c
deleted file mode 100644
index 8d8fda4ccf..0000000000
--- a/camel/camel-folder-pt-proxy.c
+++ /dev/null
@@ -1,809 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-folder-pt-proxy.c : proxy folder using posix threads */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-folder-pt-proxy.h"
-#include "camel-marshal-utils.h"
-#include "camel-exception.h"
-#include 
-#include 
-#include 
-#include 
-
-
-static CamelFolderClass *parent_class=NULL;
-
-/* Returns the class for CamelFolderPtProxy and CamelFolder objects */
-#define CFPP_CLASS(so) CAMEL_FOLDER_PT_PROXY_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-
-
-enum CamelFolderFunc {
-	CAMEL_FOLDER_OPEN,
-	CAMEL_FOLDER_CLOSE,
-	CAMEL_FOLDER__LAST_FUNC
-};
-
-static CamelFuncDef _camel_func_def [CAMEL_FOLDER__LAST_FUNC];
-
-
-static void _init (CamelFolder *folder, CamelStore *parent_store, 
-		   CamelFolder *parent_folder, const gchar *name,
-		   gchar separator, CamelException *ex);
-static void _open_async (CamelFolder *folder, 
-			 CamelFolderOpenMode mode, 
-			 CamelFolderAsyncCallback callback, 
-			 gpointer user_data, 
-			 CamelException *ex);
-static void _close_async (CamelFolder *folder, 
-		    gboolean expunge, 
-		    CamelFolderAsyncCallback callback, 
-		    gpointer user_data, 
-		    CamelException *ex);
-static void _open (CamelFolder *folder, 
-		   CamelFolderOpenMode mode, 
-		   CamelException *ex);
-static void _close (CamelFolder *folder, 
-		    gboolean expunge, 
-		    CamelException *ex);
-static void _set_name (CamelFolder *folder, 
-		       const gchar *name, 
-		       CamelException *ex);
-
-static const gchar *_get_name (CamelFolder *folder, CamelException *ex);
-static const gchar *_get_full_name (CamelFolder *folder, CamelException *ex);
-static gboolean _can_hold_folders (CamelFolder *folder);
-static gboolean _can_hold_messages(CamelFolder *folder);
-static gboolean _exists (CamelFolder  *folder, CamelException *ex);
-static gboolean _is_open (CamelFolder *folder);
-static CamelFolder *_get_subfolder (CamelFolder *folder, const gchar *folder_name, CamelException *ex);
-static gboolean _create (CamelFolder *folder, CamelException *ex);
-static gboolean _delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
-static gboolean _delete_messages (CamelFolder *folder, CamelException *ex);
-static CamelFolder *_get_parent_folder (CamelFolder *folder, CamelException *ex);
-static CamelStore *_get_parent_store (CamelFolder *folder, CamelException *ex);
-static CamelFolderOpenMode _get_mode (CamelFolder *folder, CamelException *ex);
-static GList *_list_subfolders (CamelFolder *folder, CamelException *ex);
-static GList *_expunge (CamelFolder *folder, CamelException *ex);
-static CamelMimeMessage *_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex);
-static gint _get_message_count (CamelFolder *folder, CamelException *ex);
-static void _append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
-static const GList *_list_permanent_flags (CamelFolder *folder, CamelException *ex);
-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);
-static CamelMimeMessage *_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex);
-static GList *_get_uid_list  (CamelFolder *folder, CamelException *ex);
-
-static void _finalize (GtkObject *object);
-
-
-static void
-camel_folder_pt_proxy_class_init (CamelFolderPtProxyClass *camel_folder_pt_proxy_class)
-{
-	GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_folder_pt_proxy_class);
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_folder_pt_proxy_class);
-	CamelFolderPtProxyClass *proxy_class = camel_folder_pt_proxy_class;
-
-	parent_class = gtk_type_class (camel_folder_get_type ());
-	
-	/* virtual method definition */
-	camel_folder_class->init = _init;
-	camel_folder_class->open = _open;
-	camel_folder_class->close = _close;
-#ifdef FOLDER_ASYNC_TEST
-	camel_folder_class->open_async = _open_async;
-	camel_folder_class->close_async = _close_async;
-#endif
-	camel_folder_class->get_name = _get_name;
-	camel_folder_class->can_hold_folders = _can_hold_folders;
- 	camel_folder_class->can_hold_messages = _can_hold_messages;
-	camel_folder_class->exists = _exists;
-	camel_folder_class->is_open = _is_open;
-	camel_folder_class->get_subfolder = _get_subfolder;
-	camel_folder_class->create = _create;
-	camel_folder_class->delete = _delete;
-	camel_folder_class->delete_messages = _delete_messages;
-	camel_folder_class->get_parent_folder = _get_parent_folder;
-	camel_folder_class->get_parent_store = _get_parent_store;
-	camel_folder_class->get_mode = _get_mode;
-	camel_folder_class->list_subfolders = _list_subfolders;
-	camel_folder_class->expunge = _expunge;
-	camel_folder_class->get_message_by_number = _get_message_by_number;
-	camel_folder_class->get_message_count = _get_message_count;
-	camel_folder_class->append_message = _append_message;
-	camel_folder_class->list_permanent_flags = _list_permanent_flags;
-	camel_folder_class->copy_message_to = _copy_message_to;
-	camel_folder_class->get_message_uid = _get_message_uid;
-	camel_folder_class->get_message_by_uid = _get_message_by_uid;
-	camel_folder_class->get_uid_list = _get_uid_list;
-
-	/* virtual method overload */
-	gtk_object_class->finalize = _finalize;
-
-	/* function definition for proxying */
-	proxy_class->open_func_def = 
-		camel_func_def_new (camel_marshal_NONE__POINTER_INT_POINTER_POINTER, 
-				    4, 
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_INT,
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_POINTER);
-	proxy_class->open_cb_def = 
-		camel_func_def_new (camel_marshal_NONE__POINTER_POINTER_POINTER, 
-				    3, 
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_POINTER);
-
-	proxy_class->close_func_def = 
-		camel_func_def_new (camel_marshal_NONE__POINTER_BOOL_POINTER_POINTER, 
-				    4, 
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_BOOL,
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_POINTER);
-	proxy_class->close_cb_def = 
-		camel_func_def_new (camel_marshal_NONE__POINTER_POINTER_POINTER, 
-				    3, 
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_POINTER);
-
-	proxy_class->set_name_func_def = 
-		camel_func_def_new (camel_marshal_NONE__POINTER_BOOL_POINTER_POINTER, 
-				    4, 
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_BOOL,
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_POINTER);
-	proxy_class->set_name_cb_def = 
-		camel_func_def_new (camel_marshal_NONE__POINTER_POINTER_POINTER, 
-				    3, 
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_POINTER,
-				    GTK_TYPE_POINTER);
-
-}
-
-
-
-
-static void
-camel_folder_pt_proxy_init (CamelFolderPtProxy *folder_pt_proxy)
-{
-	folder_pt_proxy->thread_ex = camel_exception_new ();	
-	folder_pt_proxy->pud = g_new (_ProxyCbUserData, 1);	
-}
-
-
-
-
-GtkType
-camel_folder_pt_proxy_get_type (void)
-{
-	static GtkType camel_folder_pt_proxy_type = 0;
-	
-	if (!camel_folder_pt_proxy_type)	{
-		GtkTypeInfo camel_folder_pt_proxy_info =	
-		{
-			"CamelFolderPtProxy",
-			sizeof (CamelFolderPtProxy),
-			sizeof (CamelFolderPtProxyClass),
-			(GtkClassInitFunc) camel_folder_pt_proxy_class_init,
-			(GtkObjectInitFunc) camel_folder_pt_proxy_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_folder_pt_proxy_type = gtk_type_unique (gtk_object_get_type (), &camel_folder_pt_proxy_info);
-	}
-	
-	return camel_folder_pt_proxy_type;
-}
-
-
-static void           
-_finalize (GtkObject *object)
-{
-	CamelFolder *camel_folder = CAMEL_FOLDER (object);
-	CamelFolderPtProxy *camel_folder_pt_proxy = CAMEL_FOLDER_PT_PROXY (camel_folder);
-
-	camel_exception_free (camel_folder_pt_proxy->thread_ex);
-	g_free (camel_folder_pt_proxy->pud);
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-
-
-
-/*********/
-
-/**** Operations implementation ****/
-
-
-
-static gpointer
-_proxy_cb_user_data (_ProxyCbUserData *pud,
-		     CamelFolderAsyncCallback real_callback, 
-		     CamelFolderPtProxy *proxy_folder, 
-		     CamelException *ex,
-		     gpointer real_user_data)
-{
-	pud->real_callback = real_callback;
-	pud->proxy_folder = proxy_folder;
-	pud->ex = ex;
-	pud->real_user_data = real_user_data;
-	return (gpointer)pud;
-}
-
-
-/* ******** */
-
-/* thread->init implementation */
-static void
-_init (CamelFolder *folder, CamelStore *parent_store, 
-       CamelFolder *parent_folder, const gchar *name,
-       gchar separator, CamelException *ex)
-{
-
-	parent_class->init (folder, parent_store, parent_folder,
-			    name, separator, ex);
-	if (ex->id != CAMEL_EXCEPTION_NONE)
-		return;
-#warning use proxy store here  
-	CF_CLASS (folder)->init (CAMEL_FOLDER_PT_PROXY (folder)->real_folder, 
-				 parent_store, parent_folder, name,
-				 separator, ex);
-}
-
-
-
-/* a little bit of explanation for the folder_class->open 
- * method implementation : 
- * 
- * the proxy object "open" method is called by the client 
- * program in the main thread. This method creates a 
- * CamelOp object containing all the necessary informations 
- * to call the corresponding "open" method on the real 
- * folder object in the child thread. This CamelOp object 
- * is thus pushed in a queue in the main thread (see the 
- * CamelThreadProxy structure for more details). 
- * The operations in this queue are executed one by one
- * in a child thread. 
- * Once the "open" method of the real object is finished, 
- * it calls a callback. This callback is not the one supplied
- * by the client object. Instead, the _folder_open_cb()
- * function is called (in the child thread) which pushes
- * the real callback function in another operation queue.
- * The real callback is then called in the main thread. 
- */
-
-/* folder->open implementation */
-
-/* 
- * proxy callback. Called in the child thread by the 
- * real folder "open" method when it is completed 
- */
-static void 
-_folder_open_cb (CamelFolder *folder,
-		 gpointer user_data,
-		 CamelException *ex)
-{
-	CamelOp *cb;
-	_ProxyCbUserData *pud;
-	CamelFuncDef *cb_def;
-
-	g_print ("%s: %s(): Bailing. This function is incredibly"
-		 " broken; the \"*pud\" pointer isn't allocated"
-		 " memory anywhere.\n");
-	return;
-	
-	/* transfer the exception information from "ex" to the 
-	 * client supplied exception (kept in pud->ex) */ 	 
-	camel_exception_xfer (pud->ex, ex);
-
-	/* create an operation which will call the real client
-	 * supplied callback in the main thread */
-	cb_def = CAMEL_FOLDER_PT_PROXY_CLASS(pud->proxy_folder)->open_cb_def;
-	cb = camel_marshal_create_op (cb_def,
-				      pud->real_callback, 
-				      pud->proxy_folder, 
-				      pud->real_user_data,
-				      pud->ex);
-	camel_thread_proxy_push_cb (pud->proxy_folder->proxy_object, cb);
-
-}
-
-static void
-_open_async (CamelFolder *folder, 
-	     CamelFolderOpenMode mode, 
-	     CamelFolderAsyncCallback callback, 
-	     gpointer user_data, 
-	     CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-	CamelOp *op;
-	CamelFuncDef *func_def;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	
-	/* create an operation corresponding to the "open"
-	 * method of the real object. The operation definition
-	 * is common to all instances of the CamelFolderPtProxy 
-	 * class so it is contained in the CamelFolderPtProxyClass
-	 * structure. */
-	func_def = CAMEL_FOLDER_PT_PROXY_CLASS(proxy_folder)->open_func_def;
-	if (callback)		
-		op = camel_marshal_create_op (func_def, 
-					      CAMEL_FOLDER_CLASS (proxy_folder->real_folder)->open_async,
-					      proxy_folder->real_folder,
-					      mode,
-					      _folder_open_cb,
-					      _proxy_cb_user_data (proxy_folder->pud, callback, proxy_folder, ex, user_data),
-					      proxy_folder->thread_ex);
-	else 
-		op = camel_marshal_create_op (func_def, 
-					      CAMEL_FOLDER_CLASS (proxy_folder->real_folder)->open_async,
-					      proxy_folder->real_folder,
-					      mode,
-					      NULL,
-					      NULL,
-					      NULL);
-	/* push the operation in the operation queue. This operation 
-	 * will be executed in a child thread but only one operation 
-	 * will be executed at a time, so that folder implementations
-	 * don't have to be MultiThread safe. */
-	camel_thread_proxy_push_op (proxy_folder->proxy_object, op);				      	
-}
-
-
-
-static void _open (CamelFolder *folder, 
-		   CamelFolderOpenMode mode, 
-		   CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	CF_CLASS (proxy_folder->real_folder)->
-		open (proxy_folder->real_folder, mode, ex);
-}
-
-
-
-/* folder->close implementation */
-
-static void 
-_folder_close_cb (CamelFolder *folder,
-		  gpointer user_data,
-		  CamelException *ex)
-{
-	CamelOp *cb;
-	_ProxyCbUserData *pud;
-	CamelFuncDef *cb_def;
-
-	g_print ("%s: %s(): Bailing. This function is incredibly"
-		 " broken; the \"*pud\" pointer isn't allocated"
-		 " memory anywhere.\n");
-	return;
-
-	camel_exception_xfer (pud->ex, ex);
-	cb_def = CAMEL_FOLDER_PT_PROXY_CLASS(pud->proxy_folder)->close_cb_def;
-	cb = camel_marshal_create_op (cb_def,
-				      pud->real_callback, 
-				      pud->proxy_folder, 
-				      pud->real_user_data,
-				      pud->ex);
-	camel_thread_proxy_push_cb (pud->proxy_folder->proxy_object, cb);
-
-}
-
-static void
-_close_async (CamelFolder *folder, 
-	      gboolean expunge, 
-	      CamelFolderAsyncCallback callback, 
-	      gpointer user_data, 
-	      CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-	CamelOp *op;
-	CamelFuncDef *func_def;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	
-	func_def = CAMEL_FOLDER_PT_PROXY_CLASS(proxy_folder)->close_func_def;
-	if (callback)		
-		op = camel_marshal_create_op (func_def, 
-					      CAMEL_FOLDER_CLASS (proxy_folder->real_folder)->close_async,
-					      proxy_folder->real_folder,
-					      expunge,
-					      _folder_close_cb,
-					      _proxy_cb_user_data (proxy_folder->pud, callback, proxy_folder, ex, user_data),
-					      proxy_folder->thread_ex);
-	else 
-		op = camel_marshal_create_op (func_def, 
-					      CAMEL_FOLDER_CLASS (proxy_folder->real_folder)->close_async,
-					      proxy_folder->real_folder,
-					      expunge,
-					      NULL,
-					      NULL,
-					      NULL);
-	camel_thread_proxy_push_op (proxy_folder->proxy_object, op);
-
-}
-
-
-static void _close (CamelFolder *folder, 
-		    gboolean expunge, 
-		    CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	CF_CLASS (proxy_folder->real_folder)->
-		close (proxy_folder->real_folder, expunge, ex);
-}
-
-
-/* folder->get_name implementation */
-/* this one is not executed in a thread */
-static const gchar *
-_get_name (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_name (proxy_folder->real_folder);
-}
-
-
-
-/* folder->get_full_name implementation */
-/* this one is not executed in a thread */
-
-static const gchar *
-_get_full_name (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_full_name (proxy_folder->real_folder);
-}
-
-
-
-
-static gboolean
-_can_hold_folders (CamelFolder *folder)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		can_hold_folders (proxy_folder->real_folder);
-}
-
-
-
-
-static gboolean
-_can_hold_messages (CamelFolder *folder)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		can_hold_messages (proxy_folder->real_folder);
-}
-
-
-
-static gboolean
-_exists (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		exists (proxy_folder->real_folder, ex);
-}
-
-
-
-
-static gboolean
-_is_open (CamelFolder *folder)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		is_open (proxy_folder->real_folder);
-} 
-
-
-
-
-
-static CamelFolder *
-_get_subfolder (CamelFolder *folder, const gchar *folder_name, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_subfolder (proxy_folder->real_folder, folder_name, ex);
-}
-
-
-
-
-
-
-static gboolean
-_create(CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		create (proxy_folder->real_folder, ex);
-}
-
-
-
-
-
-
-
-
-static gboolean
-_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		delete (proxy_folder->real_folder, recurse, ex);
-}
-
-
-
-
-
-
-
-static gboolean 
-_delete_messages (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		delete_messages (proxy_folder->real_folder, ex);
-}
-
-
-
-
-
-
-static CamelFolder *
-_get_parent_folder (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-#warning return proxy parent folder if any
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_parent_folder (proxy_folder->real_folder, ex);
-}
-
-
-
-
-
-static CamelStore *
-_get_parent_store (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_parent_store (proxy_folder->real_folder, ex);
-}
-
-
-
-
-static CamelFolderOpenMode
-_get_mode (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_mode (proxy_folder->real_folder, ex);
-}
-
-
-
-
-static GList *
-_list_subfolders (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		list_subfolders (proxy_folder->real_folder, ex);
-}
-
-
-
-
-static GList *
-_expunge (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		expunge (proxy_folder->real_folder, ex);
-}
-
-
-
-
-static CamelMimeMessage *
-_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_message_by_number (proxy_folder->real_folder, number, ex);
-}
-
-
-
-
-
-static gint
-_get_message_count (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_message_count (proxy_folder->real_folder, ex);
-}
-
-
-
-
-static void
-_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	CF_CLASS (proxy_folder->real_folder)->
-		append_message (proxy_folder->real_folder, message, ex);
-}
-
-
-
-static const GList *
-_list_permanent_flags (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		list_permanent_flags (proxy_folder->real_folder, ex);
-}
-
-
-
-static void
-_copy_message_to (CamelFolder *folder, CamelMimeMessage *message, CamelFolder *dest_folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	CF_CLASS (proxy_folder->real_folder)->
-		copy_message_to (proxy_folder->real_folder, message, dest_folder, ex);
-}
-
-
-
-
-
-
-/* UIDs stuff */
-
-
-static const gchar *
-_get_message_uid (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_message_uid (proxy_folder->real_folder, message, ex);
-}
-
-
-/* the next two func are left there temporarily */
-#if 0
-static const gchar *
-_get_message_uid_by_number (CamelFolder *folder, gint message_number, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_message_uid_by_number (proxy_folder->real_folder, message_number, ex);
-}
-
-#endif
-
-static CamelMimeMessage *
-_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_message_by_uid (proxy_folder->real_folder, uid, ex);
-}
-
-
-static GList *
-_get_uid_list  (CamelFolder *folder, CamelException *ex)
-{
-	CamelFolderPtProxy *proxy_folder;
-
-	proxy_folder = CAMEL_FOLDER_PT_PROXY (folder);
-	return CF_CLASS (proxy_folder->real_folder)->
-		get_uid_list (proxy_folder->real_folder, ex);
-}
-
-
-/* **** */
-
-
-
-
-
diff --git a/camel/camel-folder-pt-proxy.h b/camel/camel-folder-pt-proxy.h
deleted file mode 100644
index e5ae322f33..0000000000
--- a/camel/camel-folder-pt-proxy.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-folder-pt-proxy.h : proxy folder using posix threads */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_FOLDER_PT_PROXY_H
-#define CAMEL_FOLDER_PT_PROXY_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-folder.h"
-#include "camel-op-queue.h"
-#include "camel-thread-proxy.h"
-
-
-#define CAMEL_FOLDER_PT_PROXY_TYPE     (camel_folder_pt_proxy_get_type ())
-#define CAMEL_FOLDER_PT_PROXY(obj)     (GTK_CHECK_CAST((obj), CAMEL_FOLDER_PT_PROXY_TYPE, CamelFolderPtProxy))
-#define CAMEL_FOLDER_PT_PROXY_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_FOLDER_PT_PROXY_TYPE, CamelFolderPtProxyClass))
-#define CAMEL_IS_FOLDER_PT_PROXY(o)    (GTK_CHECK_TYPE((o), CAMEL_FOLDER_PT_PROXY_TYPE))
-
-typedef struct _CamelFolderPtProxy CamelFolderPtProxy;
-
-typedef struct {
-	CamelFolderAsyncCallback real_callback;
-	CamelFolderPtProxy *proxy_folder;
-	CamelException *ex;
-	gpointer real_user_data;
-} _ProxyCbUserData;
-
-struct _CamelFolderPtProxy {
-	CamelFolder parent;
-	
-	/* private fields */ 
-	CamelFolder *real_folder;
-	CamelThreadProxy *proxy_object;
-	CamelException *thread_ex;
-	_ProxyCbUserData *pud;
-	
-};
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-	
-	/* functions and callbacks definition (for marshalling) */
-	CamelFuncDef *open_func_def;
-	CamelFuncDef *open_cb_def;
-	CamelFuncDef *close_func_def;
-	CamelFuncDef *close_cb_def;
-	CamelFuncDef *set_name_func_def;
-	CamelFuncDef *set_name_cb_def;
-
-} CamelFolderPtProxyClass;
-
-
-GtkType       camel_folder_pt_proxy_get_type         (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_FOLDER_PT_PROXY_H */
diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c
deleted file mode 100644
index a04b12a51d..0000000000
--- a/camel/camel-folder-summary.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelFolderSummary.c : Abstract class for a folder_summary */
-
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-folder-summary.h"
-
-static GtkObjectClass *parent_class = NULL;
-
-/* Returns the class for a CamelFolderSummary */
-#define CFS_CLASS(so) CAMEL_FOLDER_SUMMARY_CLASS (GTK_OBJECT(so)->klass)
-
-
-static int count_messages (CamelFolderSummary *summary);
-static int count_subfolders (CamelFolderSummary *summary);
-static GPtrArray *get_subfolder_info (CamelFolderSummary *summary,
-				      int first, int count);
-static GPtrArray *get_message_info (CamelFolderSummary *summary,
-				    int first, int count);
-
-static void
-camel_folder_summary_class_init (CamelFolderSummaryClass *camel_folder_summary_class)
-{
-	parent_class = gtk_type_class (gtk_object_get_type ());
-
-	/* virtual method definition */
-	camel_folder_summary_class->count_messages = count_messages;
-	camel_folder_summary_class->count_subfolders = count_subfolders;
-	camel_folder_summary_class->get_subfolder_info = get_subfolder_info;
-	camel_folder_summary_class->get_message_info = get_message_info;
-}
-
-
-
-GtkType
-camel_folder_summary_get_type (void)
-{
-	static GtkType camel_folder_summary_type = 0;
-	
-	if (!camel_folder_summary_type)	{
-		GtkTypeInfo camel_folder_summary_info =	
-		{
-			"CamelFolderSummary",
-			sizeof (CamelFolderSummary),
-			sizeof (CamelFolderSummaryClass),
-			(GtkClassInitFunc) camel_folder_summary_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_folder_summary_type = gtk_type_unique (gtk_object_get_type (), &camel_folder_summary_info);
-	}
-	
-	return camel_folder_summary_type;
-}
-
-
-static int
-count_messages (CamelFolderSummary *summary)
-{
-	g_warning ("CamelFolderSummary::count_messages not implemented for `%s'", gtk_type_name (GTK_OBJECT_TYPE (summary)));
-	return 0;
-}
-
-/**
- * camel_folder_summary_count_messages: return the number of messages
- * in the folder.
- * @summary: the summary
- *
- * Return value: the number of messages in the folder.
- **/
-int
-camel_folder_summary_count_messages (CamelFolderSummary *summary)
-{
-	return CFS_CLASS (summary)->count_messages (summary);
-}
-
-
-static int
-count_subfolders (CamelFolderSummary *summary)
-{
-	g_warning ("CamelFolderSummary::count_subfolders not implemented for `%s'", gtk_type_name (GTK_OBJECT_TYPE (summary)));
-	return 0;
-}
-
-/**
- * camel_folder_summary_count_subfolders: return the number of subfolders
- * in the folder.
- * @summary: the summary
- *
- * Return value: the number of subfolders in the folder.
- **/
-int
-camel_folder_summary_count_subfolders (CamelFolderSummary *summary)
-{
-	return CFS_CLASS (summary)->count_subfolders (summary);
-}
-
-
-static GPtrArray *
-get_subfolder_info (CamelFolderSummary *summary, int first, int count)
-{
-	g_warning ("CamelFolderSummary::get_subfolder_info not implemented for `%s'", gtk_type_name (GTK_OBJECT_TYPE (summary)));
-	return NULL;
-}
-
-/**
- * camel_folder_summary_get_subfolder_info: return an array of subfolders
- * @summary: a summary
- * @first: the index of the first subfolder to return information for
- * (starting from 0)
- * @count: the number of subfolders to return information for
- *
- * Returns an array of pointers to CamelFolderInfo objects. The caller
- * must free the array when it is done with it, but should not modify
- * the elements.
- *
- * Return value: an array containing information about the subfolders.
- **/
-GPtrArray *
-camel_folder_summary_get_subfolder_info (CamelFolderSummary *summary,
-					 int first, int count)
-{
-	return CFS_CLASS (summary)->get_subfolder_info (summary, first, count);
-}
-
-
-static GPtrArray *
-get_message_info (CamelFolderSummary *summary, int first, int count)
-{
-	g_warning ("CamelFolderSummary::get_message_info not implemented for `%s'", gtk_type_name (GTK_OBJECT_TYPE (summary)));
-	return NULL;
-}
-
-/**
- * camel_folder_summary_get_message_info: return an array of messages
- * @summary: a summary
- * @first: the index of the first message to return information for
- * (starting from 0)
- * @count: the number of messages to return information for
- *
- * Returns an array of pointers to CamelMessageInfo objects. The caller
- * must free the array when it is done with it, but should not modify
- * the elements.
- *
- * Return value: an array containing information about the messages.
- **/
-GPtrArray *
-camel_folder_summary_get_message_info (CamelFolderSummary *summary,
-				       int first, int count)
-{
-	return CFS_CLASS (summary)->get_message_info (summary, first, count);
-}
diff --git a/camel/camel-folder-utils.c b/camel/camel-folder-utils.c
deleted file mode 100644
index 427a93c509..0000000000
--- a/camel/camel-folder-utils.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-folder-utils : Utility for camel folders */
-
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-folder-utils.h"
-#include "camel-mime-message.h"
-
-
-
-/*  Active Message List utilities */
-
-/* */
-static gint
-camel_mime_message_number_cmp (gconstpointer a, gconstpointer b)
-{
-	CamelMimeMessage *m_a = CAMEL_MIME_MESSAGE (a);
-	CamelMimeMessage *m_b = CAMEL_MIME_MESSAGE (b);
-
-	return (m_a->message_number - (m_b->message_number));
-}
-
-
-/**
- * camel_aml_expunge_messages: Expunge the message marked as deleted in an Active Message List
- * @aml: active message list
- * @folder: folder object
- * 
- * Expunge the message flagged as "DELETED" in an active message list. 
- * The messages are not freed nor really expunged on the disk, they
- * are just removed from the active message list and marked as 
- * "EXPUNGED". The list of the message which have been expunged is
- * return in a GList which must be freed by the caller. 
- * To be really expunged the providers must provide or call
- * folder specific methods.
- * 
- * Return value: the list of expunged messages.
- **/
-static GList *
-camel_aml_expunge_messages (GList *aml, 
-			    CamelFolder *folder)
-{
-	CamelMimeMessage *message = NULL;
-	GList *message_node = NULL;
-	GList *next_message_node = NULL;
-	GList *expunged_messages = NULL;
-	
-
-	message_node = aml;
-	/* look in folder message list which messages
-	 * need to be expunged  */
-	while ( message_node) {
-		message = CAMEL_MIME_MESSAGE (message_node->data);
-
-		/* we may free message_node so get the next node now */
-		next_message_node = message_node->next;
-
-		if (message) {			
-			if (camel_mime_message_get_flag (message, "DELETED")) {
-				
-				/* remove the message from active message list */
-				g_list_remove_link (aml, message_node);
-				g_list_free_1 (message_node);
-				camel_mime_message_set_flag (message, "EXPUNGED", TRUE);
-				expunged_messages = g_list_prepend (expunged_messages, message);
-				
-			} 
-		} else {
-			g_warning ("CamelFolder::expunge warning message_node "
-				   "contains no message\n");
-		}
-		message_node = next_message_node;
-	}
-	
-	return expunged_messages;
-}
diff --git a/camel/camel-folder-utils.h b/camel/camel-folder-utils.h
deleted file mode 100644
index f806e923cb..0000000000
--- a/camel/camel-folder-utils.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-folder-utils : Utility for camel folders */
-
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_MIME_PART_UTILS_H
-#define CAMEL_MIME_PART_UTILS_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-folder.h"
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /*  CAMEL_MIME_PART_UTILS_H  */
-
diff --git a/camel/camel-folder.c b/camel/camel-folder.c
deleted file mode 100644
index 31141da5c9..0000000000
--- a/camel/camel-folder.c
+++ /dev/null
@@ -1,1445 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelFolder.c : Abstract class for an email folder */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-folder.h"
-#include "camel-exception.h"
-#include "camel-store.h"
-#include "string-utils.h"
-
-static GtkObjectClass *parent_class=NULL;
-
-/* Returns the class for a CamelFolder */
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT (so)->klass)
-
-
-
-
-static void _init (CamelFolder *folder, CamelStore *parent_store,
-		   CamelFolder *parent_folder, const gchar *name,
-		   gchar separator, CamelException *ex);
-static void _finalize (GtkObject *object);
-
-
-static void _open (CamelFolder *folder, 
-		   CamelFolderOpenMode mode, 
-		   CamelException *ex);
-static void _close (CamelFolder *folder, 
-		    gboolean expunge, 
-		    CamelException *ex);
-
-#ifdef FOLDER_ASYNC_TEST
-
-/* Async operations are not used for the moment */
-static void _open_async (CamelFolder *folder, 
-			 CamelFolderOpenMode mode, 
-			 CamelFolderAsyncCallback callback, 
-			 gpointer user_data, 
-			 CamelException *ex);
-static void _close_async (CamelFolder *folder, 
-			  gboolean expunge, 
-			  CamelFolderAsyncCallback callback, 
-			  gpointer user_data, 
-			  CamelException *ex);
-
-#endif 
-
-static const gchar *_get_name (CamelFolder *folder);
-static const gchar *_get_full_name (CamelFolder *folder);
-
-
-static gboolean _can_hold_folders  (CamelFolder *folder);
-static gboolean _can_hold_messages (CamelFolder *folder);
-static gboolean _exists  (CamelFolder  *folder, CamelException *ex);
-static gboolean _is_open (CamelFolder *folder);
-static const GList *_list_permanent_flags (CamelFolder *folder,
-					   CamelException *ex);
-static CamelFolderOpenMode _get_mode      (CamelFolder *folder,
-					   CamelException *ex);
-
-
-static gboolean _create (CamelFolder *folder, CamelException *ex);
-static gboolean _delete (CamelFolder *folder, gboolean recurse,
-			 CamelException *ex);
-
-
-static GList *_list_subfolders  (CamelFolder *folder, CamelException *ex);
-static CamelFolder *_get_subfolder (CamelFolder *folder, 
-				    const gchar *folder_name,
-				    CamelException *ex);
-static CamelFolder *_get_parent_folder (CamelFolder *folder,
-					CamelException *ex);
-static CamelStore * _get_parent_store  (CamelFolder *folder,
-					CamelException *ex);
-
-
-static gboolean _has_message_number_capability (CamelFolder *folder);
-static CamelMimeMessage *_get_message_by_number (CamelFolder *folder, 
-						 gint number, 
-						 CamelException *ex);
-static void _delete_message_by_number (CamelFolder *folder, 
-				       gint number, 
-				       CamelException *ex);
-static gint _get_message_count        (CamelFolder *folder, 
-				       CamelException *ex);
-
-
-static gboolean _delete_messages (CamelFolder *folder, 
-				  CamelException *ex);
-static GList * _expunge         (CamelFolder *folder, 
-			      CamelException *ex);
-static void _append_message  (CamelFolder *folder, 
-			      CamelMimeMessage *message, 
-			      CamelException *ex);
-static void _copy_message_to (CamelFolder *folder, 
-			      CamelMimeMessage *message, 
-			      CamelFolder *dest_folder, 
-			      CamelException *ex);
-
-
-static GList            *_get_uid_list       (CamelFolder *folder,
-					      CamelException *ex);
-static const gchar      *_get_message_uid    (CamelFolder *folder, 
-					      CamelMimeMessage *message, 
-					      CamelException *ex);
-static CamelMimeMessage *_get_message_by_uid (CamelFolder *folder, 
-					      const gchar *uid, 
-					      CamelException *ex);
-static void _delete_message_by_uid (CamelFolder *folder, 
-				    const gchar *uid, 
-				    CamelException *ex);
-
-static GPtrArray *get_message_info (CamelFolder *folder, int first, int count);
-static GPtrArray *get_subfolder_info (CamelFolder *folder, int first, int count);
-
-
-static void
-camel_folder_class_init (CamelFolderClass *camel_folder_class)
-{
-	GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_folder_class);
-	
-	parent_class = gtk_type_class (gtk_object_get_type ());
-	
-	/* virtual method definition */
-	camel_folder_class->init = _init;
-	camel_folder_class->open = _open;
-#ifdef FOLDER_ASYNC_TEST
-	camel_folder_class->open_async = _open_async;
-#endif
-	camel_folder_class->close = _close;
-#ifdef FOLDER_ASYNC_TEST
-	camel_folder_class->close_async = _close_async;
-#endif
-	camel_folder_class->get_name = _get_name;
-	camel_folder_class->get_full_name = _get_full_name;
-	camel_folder_class->can_hold_folders = _can_hold_folders;
-	camel_folder_class->can_hold_messages = _can_hold_messages;
-	camel_folder_class->exists = _exists;
-	camel_folder_class->is_open = _is_open;
-	camel_folder_class->get_subfolder = _get_subfolder;
-	camel_folder_class->create = _create;
-	camel_folder_class->delete = _delete;
-	camel_folder_class->delete_messages = _delete_messages;
-	camel_folder_class->get_parent_folder = _get_parent_folder;
-	camel_folder_class->get_parent_store = _get_parent_store;
-	camel_folder_class->get_mode = _get_mode;
-	camel_folder_class->list_subfolders = _list_subfolders;
-	camel_folder_class->expunge = _expunge;
-	camel_folder_class->has_message_number_capability = _has_message_number_capability;
-	camel_folder_class->get_message_by_number = _get_message_by_number;
-	camel_folder_class->delete_message_by_number = _delete_message_by_number;
-	camel_folder_class->get_message_count = _get_message_count;
-	camel_folder_class->append_message = _append_message;
-	camel_folder_class->list_permanent_flags = _list_permanent_flags;
-	camel_folder_class->copy_message_to = _copy_message_to;
-	camel_folder_class->get_message_uid = _get_message_uid;
-	camel_folder_class->get_message_by_uid = _get_message_by_uid;
-	camel_folder_class->delete_message_by_uid = _delete_message_by_uid;
-	camel_folder_class->get_uid_list = _get_uid_list;
-
-	camel_folder_class->get_subfolder_info = get_subfolder_info;
-	camel_folder_class->get_message_info = get_message_info;
-
-	/* virtual method overload */
-	gtk_object_class->finalize = _finalize;
-}
-
-
-
-
-
-
-
-GtkType
-camel_folder_get_type (void)
-{
-	static GtkType camel_folder_type = 0;
-	
-	if (!camel_folder_type)	{
-		GtkTypeInfo camel_folder_info =	
-		{
-			"CamelFolder",
-			sizeof (CamelFolder),
-			sizeof (CamelFolderClass),
-			(GtkClassInitFunc) camel_folder_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_folder_type = gtk_type_unique (gtk_object_get_type (), &camel_folder_info);
-	}
-	
-	return camel_folder_type;
-}
-
-
-static void           
-_finalize (GtkObject *object)
-{
-	CamelFolder *camel_folder = CAMEL_FOLDER (object);
-
-	g_free (camel_folder->name);
-	g_free (camel_folder->full_name);
-	g_free (camel_folder->permanent_flags);
-
-	if (camel_folder->parent_store)
-		gtk_object_unref (GTK_OBJECT (camel_folder->parent_store));
-	if (camel_folder->parent_folder)
-		gtk_object_unref (GTK_OBJECT (camel_folder->parent_folder));
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-/**
- * _init: init the folder
- * @folder: folder object to initialize
- * @parent_store: parent store object of the folder
- * @parent_folder: parent folder of the folder (may be NULL)
- * @name: (short) name of the folder
- * @separator: separator between the parent folder name and this name
- * 
- * Initalizes the folder by setting the parent store, parent folder,
- * and name.
- **/
-static void 
-_init (CamelFolder *folder, CamelStore *parent_store,
-       CamelFolder *parent_folder, const gchar *name,
-       gchar separator, CamelException *ex)
-{
-	gchar *full_name;
-	const gchar *parent_full_name;
-
-	g_assert (folder != NULL);
-	g_assert (parent_store != NULL);
-	g_assert (folder->parent_store == NULL);
-	
-	folder->parent_store = parent_store;
-	gtk_object_ref (GTK_OBJECT (parent_store));
-	
-	folder->parent_folder = parent_folder;
-	if (parent_folder)
-		gtk_object_ref (GTK_OBJECT (parent_folder));
-
-	folder->open_mode = FOLDER_OPEN_UNKNOWN;
-	folder->open_state = FOLDER_CLOSE;
-	folder->separator = separator;
-
-	/* if the folder already has a name, free it */	
-	g_free (folder->name);
-	g_free (folder->full_name);
-	
-	/* set those fields to NULL now, so that if an 
-	   exception occurs, they will be set anyway */
-	folder->name = NULL;
-	folder->full_name = NULL;
-
-	if (folder->parent_folder) {
-		parent_full_name =
-			camel_folder_get_full_name (folder->parent_folder);
-		
-		full_name = g_strdup_printf ("%s%c%s", parent_full_name,
-					     folder->separator, name);
-	} else {
-		full_name = g_strdup_printf ("%c%s", folder->separator, name);
-	}
-
-	folder->name = g_strdup (name);
-	folder->full_name = full_name;
-}
-
-
-
-
-
-static void
-_open (CamelFolder *folder, 
-       CamelFolderOpenMode mode, 
-       CamelException *ex)
-{
-	if (folder->open_state == FOLDER_OPEN) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID_STATE,
-				     "folder is already open");
-		return;
-	}
-
-  	folder->open_state = FOLDER_OPEN;
-  	folder->open_mode = mode;
-}
-
-
-
-
-/**
- * camel_folder_open: Open a folder
- * @folder: The folder object
- * @mode: open mode (R/W/RW ?)
- * @ex: exception object
- *
- * Open a folder in a given mode.
- * 
- **/
-void 
-camel_folder_open (CamelFolder *folder, 
-		   CamelFolderOpenMode mode, 
-		   CamelException *ex)
-{	
-	g_assert (folder != NULL);
-	CF_CLASS (folder)->open (folder, mode, ex);
-}
-
-
-
-
-#ifdef FOLDER_ASYNC_TEST
-
-static void
-_open_async (CamelFolder *folder, 
-	     CamelFolderOpenMode mode, 
-	     CamelFolderAsyncCallback callback, 
-	     gpointer user_data, 
-	     CamelException *ex)
-{
-	g_warning ("CamelFolder::open_async not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-}
-
-
-
-
-/**
- * camel_folder_open: Open a folder
- * @folder: The folder object
- * @mode: open mode (R/W/RW ?)
- * @callback: function to call when the operation is over
- * @user_data: data to pass to the callback 
- * @ex: exception object
- *
- * Open a folder in a given mode. When the operation is over
- * the callback is called and the client program can determine
- * if the operation suceeded by examining the exception. 
- * 
- **/
-void 
-camel_folder_open_async (CamelFolder *folder, 
-			 CamelFolderOpenMode mode, 
-			 CamelFolderAsyncCallback callback, 
-			 gpointer user_data, 
-			 CamelException *ex)
-{	
-	g_assert (folder != NULL);
-	CF_CLASS (folder)->open_async (folder, mode, callback, user_data, ex);
-}
-
-
-#endif /* FOLDER_ASYNC_TEST */
-
-
-
-static void
-_close (CamelFolder *folder, 
-	gboolean expunge, 
-	CamelException *ex)
-{	
-	folder->open_state = FOLDER_CLOSE;
-}
-
-/**
- * camel_folder_close: Close a folder.
- * @folder: The folder object
- * @expunge: if TRUE, the flagged message are deleted.
- * @ex: exception object
- *
- * Put a folder in its closed state, and possibly 
- * expunge the flagged messages. 
- * 
- **/
-void 
-camel_folder_close (CamelFolder *folder, 
-		    gboolean expunge, 
-		    CamelException *ex)
-{
-	g_assert (folder != NULL);
-	CF_CLASS (folder)->close (folder, expunge, ex);
-}
-
-
-
-
-#ifdef FOLDER_ASYNC_TEST
-
-
-static void
-_close_async (CamelFolder *folder, 
-	      gboolean expunge, 
-	      CamelFolderAsyncCallback callback, 
-	      gpointer user_data, 
-	      CamelException *ex)
-{	
-	g_warning ("CamelFolder::close_async not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-}
-
-/**
- * camel_folder_close_async: Close a folder.
- * @folder: The folder object
- * @expunge: if TRUE, the flagged message are deleted.
- * @callback: function to call when the operation is over
- * @user_data: data to pass to the callback 
- * @ex: exception object
- *
- * Put a folder in its closed state, and possibly 
- * expunge the flagged messages. The callback is called 
- * when the operation is over and the client program can determine
- * if the operation suceeded by examining the exception. 
- * 
- **/
-void 
-camel_folder_close_async (CamelFolder *folder, 
-			  gboolean expunge, 
-			  CamelFolderAsyncCallback callback, 
-			  gpointer user_data, 
-			  CamelException *ex)
-{
-	g_assert (folder != NULL);
-	CF_CLASS (folder)->close_async (folder, expunge, callback,
-					user_data, ex);
-}
-
-
-#endif
-
-
-static const gchar *
-_get_name (CamelFolder *folder)
-{
-	return folder->name;
-}
-
-
-/**
- * camel_folder_get_name: get the (short) name of the folder
- * @folder: 
- * 
- * get the name of the folder. The fully qualified name
- * can be obtained with the get_full_ame method (not implemented)
- *
- * Return value: name of the folder
- **/
-const gchar *
-camel_folder_get_name (CamelFolder *folder)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->get_name (folder);
-}
-
-
-
-static const gchar *
-_get_full_name (CamelFolder *folder)
-{
-	return folder->full_name;
-}
-
-/**
- * camel_folder_get_full_name:get the (full) name of the folder
- * @folder: folder to get the name 
- * 
- * get the name of the folder. 
- * 
- * Return value: full name of the folder
- **/
-const gchar *
-camel_folder_get_full_name (CamelFolder *folder)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->get_full_name (folder);
-}
-
-
-/**
- * _can_hold_folders: tests if the folder can contain other folders
- * @folder: The folder object 
- * 
- * Tests if a folder can contain other folder 
- * (as for example MH folders)
- * 
- * Return value: 
- **/
-static gboolean
-_can_hold_folders (CamelFolder *folder)
-{
-	return folder->can_hold_folders;
-}
-
-
-
-
-/**
- * _can_hold_messages: tests if the folder can contain messages
- * @folder: The folder object
- * 
- * Tests if a folder object can contain messages. 
- * In the case it can not, it most surely can only 
- * contain folders (rare).
- * 
- * Return value: true if it can contain messages false otherwise
- **/
-static gboolean
-_can_hold_messages (CamelFolder *folder)
-{
-	return folder->can_hold_messages;
-}
-
-
-
-static gboolean
-_exists (CamelFolder *folder, CamelException *ex)
-{
-	return FALSE;
-}
-
-
-/**
- * _exists: tests if the folder object exists in its parent store.
- * @folder: folder object
- * 
- * Test if a folder exists on a store. A folder can be 
- * created without physically on a store. In that case, 
- * use CamelFolder::create to create it 
- * 
- * Return value: true if the folder exists on the store false otherwise 
- **/
-gboolean
-camel_folder_exists (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->exists (folder, ex);
-}
-
-
-
-/**
- * _is_open: test if the folder is open 
- * @folder: The folder object
- * 
- * Tests if a folder is open. If not open it can be opened 
- * CamelFolder::open
- * 
- * Return value: true if the folder exists, false otherwise
- **/
-static gboolean
-_is_open (CamelFolder *folder)
-{
-	return folder->open_state == FOLDER_OPEN;
-} 
-
-
-/**
- * _is_open: test if the folder is open 
- * @folder: The folder object
- * 
- * Tests if a folder is open. If not open it can be opened 
- * CamelFolder::open
- * 
- * Return value: true if the folder exists, false otherwise
- **/
-gboolean
-camel_folder_is_open (CamelFolder *folder)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->is_open (folder);
-} 
-
-
-static CamelFolder *
-_get_subfolder (CamelFolder *folder, 
-		const gchar *folder_name, 
-		CamelException *ex)
-{
-	CamelFolder *new_folder;
-	gchar *full_name;
-	const gchar *current_folder_full_name;
-	
-	g_assert (folder->parent_store != NULL);
-	
-	current_folder_full_name = camel_folder_get_full_name (folder);
-
-	full_name = g_strdup_printf ("%s%c%s", current_folder_full_name,
-				     folder->separator, folder_name);
-	
-	new_folder = camel_store_get_folder (folder->parent_store, full_name, ex);
-	return new_folder;
-}
-
-
-
-/**
- * camel_folder_get_subfolder: return the (sub)folder object that is specified
- * @folder: the folder
- * @folder_name: subfolder path
- * 
- * This method returns a folder objects. This folder
- * is necessarily a subfolder of the current folder. 
- * It is an error to ask a folder begining with the 
- * folder separator character.  
- * 
- * Return value: Required folder. NULL if the subfolder object  could not be obtained
- **/
-CamelFolder *
-camel_folder_get_subfolder (CamelFolder *folder, gchar *folder_name, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (folder_name != NULL);
-	g_assert (camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->get_subfolder (folder, folder_name, ex);
-}
-
-
-
-
-/**
- * _create: creates a folder on its store
- * @folder: a CamelFolder object.
- * 
- * this routine handles the recursion mechanism.
- * Children classes have to implement the actual
- * creation mechanism. They must call this method
- * before physically creating the folder in order
- * to be sure the parent folder exists.
- * Calling this routine on an existing folder is
- * not an error, and returns %TRUE.
- * 
- * Return value: %TRUE if the folder exists, %FALSE otherwise 
- **/
-static gboolean
-_create (CamelFolder *folder, CamelException *ex)
-{
-	gchar *prefix;
-	gchar dich_result;
-	CamelFolder *parent;
-	
-	g_assert (folder->parent_store != NULL);
-	g_assert (folder->name != NULL);
-	
-	/* if the folder already exists on the 
-	   store, do nothing and return true */
-	if (CF_CLASS (folder)->exists (folder, ex))
-		return TRUE;
-	
-	
-	if (folder->parent_folder) {
-		camel_folder_create (folder->parent_folder, ex);
-		if (camel_exception_get_id (ex)) return FALSE;
-	}
-	else {   
-		if (folder->full_name) {
-			dich_result = string_dichotomy (
-							folder->full_name,
-							folder->separator,
-							&prefix, NULL,
-							STRING_DICHOTOMY_STRIP_TRAILING | STRING_DICHOTOMY_RIGHT_DIR);
-			if (dich_result!='o') {
-				if (prefix == NULL) {
-					/* separator is the first caracter, no folder above */
-					 return TRUE;
-				}
-			} else {
-				parent = camel_store_get_folder (folder->parent_store, prefix, ex);
-				camel_folder_create (parent, ex);
-				if (camel_exception_get_id (ex)) return FALSE;
-			}
-		}
-	}	
-	return TRUE;
-}
-
-
-/**
- * camel_folder_create: create the folder object on the physical store
- * @folder: folder object to create
- * 
- * This routine physically creates the folder object on 
- * the store. Having created the  object does not
- * mean the folder physically exists. If it does not
- * exists, this routine will create it.
- * if the folder full name contains more than one level
- * of hierarchy, all folders between the current folder
- * and the last folder name will be created if not existing.
- * 
- * Return value: 
- **/
-gboolean
-camel_folder_create (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (!camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->create (folder, ex);
-}
-
-
-
-
-
-/**
- * _delete: delete folder 
- * @folder: folder to delete
- * @recurse: true is subfolders must also be deleted
- * 
- * Delete a folder and its subfolders (if recurse is TRUE).
- * The scheme is the following:
- * 1) delete all messages in the folder
- * 2) if recurse is FALSE, and if there are subfolders
- *    return FALSE, else delete current folder and retuen TRUE
- *    if recurse is TRUE, delete subfolders, delete
- *    current folder and return TRUE
- * 
- * subclasses implementing a protocol with a different 
- * deletion behaviour must emulate this one or implement
- * empty folders deletion and call  this routine which 
- * will do all the works for them.
- * Opertions must be done in the folllowing order:
- *  - call this routine
- *  - delete empty folder
- * 
- * Return value: true if the folder has been deleted
- **/
-static gboolean
-_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
-{
-	GList *subfolders=NULL;
-	GList *sf;
-	gboolean ok;
-	
-	/* delete all messages in the folder */
-	CF_CLASS (folder)->delete_messages (folder, ex);
-	if (camel_exception_get_id (ex)) return FALSE;
-
-	subfolders = CF_CLASS (folder)->list_subfolders (folder, ex); 
-	if (camel_exception_get_id (ex)) {
-		if (subfolders) g_list_free (subfolders);
-		return FALSE;
-	}
-	
-        ok = TRUE;
-	if (recurse) { /* delete subfolders */
-		if (subfolders) {
-			sf = subfolders;
-			do {
-				CF_CLASS (sf->data)->delete (CAMEL_FOLDER (sf->data), TRUE, ex);
-				if (camel_exception_get_id (ex)) ok = FALSE;
-			} while (ok && (sf = sf->next));
-		}
-	} else if (subfolders) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_NON_EMPTY,
-				     "folder has subfolders");
-		ok = FALSE;
-	}
-	
-	if (subfolders) g_list_free (subfolders);
-
-	return ok;
-}
-
-
-
-/**
- * camel_folder_delete: delete a folder
- * @folder: folder to delete
- * @recurse: TRUE if subfolders must be deleted
- * 
- * Delete a folder. All messages in the folder 
- * are deleted before the folder is deleted. 
- * When recurse is true, all subfolders are
- * deleted too. When recurse is FALSE and folder 
- * contains subfolders, all messages are deleted,
- * but folder deletion fails. 
- * 
- * Return value: TRUE if deletion was successful
- **/
-gboolean 
-camel_folder_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (!camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->delete (folder, recurse, ex);
-}
-
-
-
-
-
-/**
- * _delete_messages: delete all messages in the folder
- * @folder: 
- * 
- * 
- * 
- * Return value: 
- **/
-static gboolean 
-_delete_messages (CamelFolder *folder, CamelException *ex)
-{
-	g_warning ("CamelFolder::delete_messages not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return FALSE;
-}
-
-
-/**
- * camel_folder_delete_messages: delete all messages in the folder
- * @folder: folder 
- * 
- * delete all messages stored in a folder
- * 
- * Return value: TRUE if the messages could be deleted
- **/
-gboolean
-camel_folder_delete_messages (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (!camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->delete_messages (folder, ex);
-}
-
-
-
-
-
-
-/**
- * _get_parent_folder: return parent folder
- * @folder: folder to get the parent
- * 
- * 
- * 
- * Return value: 
- **/
-static CamelFolder *
-_get_parent_folder (CamelFolder *folder, CamelException *ex)
-{
-	return folder->parent_folder;
-}
-
-
-/**
- * camel_folder_get_parent_folder:return parent folder
- * @folder: folder to get the parent
- * 
- * 
- * 
- * Return value: 
- **/
-CamelFolder *
-camel_folder_get_parent_folder (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->get_parent_folder (folder, ex);
-}
-
-
-/**
- * _get_parent_store: return parent store
- * @folder: folder to get the parent
- * 
- * 
- * 
- * Return value: 
- **/
-static CamelStore *
-_get_parent_store (CamelFolder *folder, CamelException *ex)
-{
-	return folder->parent_store;
-}
-
-
-/**
- * camel_folder_get_parent_store: return parent store
- * @folder: folder to get the parent
- * 
- * Return the parent store of a folder
- * 
- * Return value: the parent store. 
- **/
-CamelStore *
-camel_folder_get_parent_store (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->get_parent_store (folder, ex);
-}
-
-
-
-
-static CamelFolderOpenMode
-_get_mode (CamelFolder *folder, CamelException *ex)
-{
-	return folder->open_mode;
-}
-
-
-/**
- * camel_folder_get_mode: return the open mode of a folder
- * @folder: 
- * 
- * 
- * 
- * Return value:  open mode of the folder
- **/
-CamelFolderOpenMode
-camel_folder_get_mode (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->get_mode (folder, ex);
-}
-
-
-
-
-static GList *
-_list_subfolders (CamelFolder *folder, CamelException *ex)
-{
-	g_warning ("CamelFolder::list_folders not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return NULL;
-}
-
-
-/**
- * camel_folder_list_subfolders: list subfolders in a folder
- * @folder: the folder
- * 
- * List subfolders in a folder. 
- * 
- * Return value: list of subfolders
- **/
-GList *
-camel_folder_list_subfolders (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->list_subfolders (folder, ex);
-}
-
-
-
-
-static GList *
-_expunge (CamelFolder *folder, CamelException *ex)
-{
-	g_warning ("CamelFolder::expunge not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return NULL;
-}
-
-
-/**
- * camel_folder_expunge: physically delete messages marked as "DELETED"
- * @folder: the folder
- * 
- * Delete messages which have been marked as  "DELETED"
- * 
- * Return value: list of expunged messages 
- **/
-GList *
-camel_folder_expunge (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (!camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->expunge (folder, ex);
-}
-
-
-static gboolean 
-_has_message_number_capability (CamelFolder *folder)
-{
-	g_warning ("CamelFolder::has_message_number_capability not "
-		   "implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return FALSE;
-
-}
-
-
-/**
- * camel_folder_has_message_number_capability: tests if the message can be numbered within the folder
- * @folder: folder to test
- * 
- * Test if the message in this folder can be
- * obtained via the get_by_number method. 
- * Usually, when the folder has the UID 
- * capability, messages should be referred to
- * by their UID rather than by their number
- * as the UID is more reliable. 
- * 
- * Return value: TRUE if the folder supports message numbering, FALSE otherwise.
- **/
-gboolean 
-camel_folder_has_message_number_capability (CamelFolder *folder)
-{	
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->has_message_number_capability (folder);
-}
-
-
-
-
-static CamelMimeMessage *
-_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
-{
-	g_warning ("CamelFolder::get_message_by_number not implemented "
-		   "for `%s'", gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return NULL;
-}
-
-
-
-
-/**
- * camel_folder_get_message_by_number: return the message corresponding to that number in the folder
- * @folder: a CamelFolder object
- * @number: the number of the message within the folder.
- * 
- * Return the message corresponding to that number within the folder.
- * 
- * Return value: A pointer on the corresponding message or NULL if no corresponding message exists
- **/
-CamelMimeMessage *
-camel_folder_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->get_message_by_number (folder, number, ex);
-}
-
-
-static void
-_delete_message_by_number (CamelFolder *folder, gint number,
-			   CamelException *ex)
-{
-	g_warning ("CamelFolder::delete_message_by_number not implemented "
-		   "for `%s'", gtk_type_name (GTK_OBJECT_TYPE (folder)));
-}
-
-/**
- * camel_folder_delete_message_by_number: delete the message
- * corresponding to that number in the folder
- * @folder: a CamelFolder object
- * @number: the number of the message within the folder.
- * 
- * Delete the message corresponding to that number within the folder.
- * 
- **/
-void
-camel_folder_delete_message_by_number (CamelFolder *folder, gint number,
-				       CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->delete_message_by_number (folder, number,
-							    ex);
-}
-
-
-static gint
-_get_message_count (CamelFolder *folder, CamelException *ex)
-{
-	g_warning ("CamelFolder::get_message_count not implemented "
-		   "for `%s'", gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return -1;
-}
-
-
-
-/**
- * camel_folder_get_message_count: get the number of messages in the folder
- * @folder: A CamelFolder object
- * 
- * Returns the number of messages in the folder.
- * 
- * Return value: the number of messages or -1 if unknown.
- **/
-gint
-camel_folder_get_message_count (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->get_message_count (folder, ex);
-}
-
-
-static void
-_append_message (CamelFolder *folder, CamelMimeMessage *message,
-		 CamelException *ex)
-{
-	g_warning ("CamelFolder::append_message not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return;
-
-}
-
-
-/**
- * camel_folder_append_message: add a message to a folder
- * @folder: folder object to add the message to
- * @message: message object
- * @ex: exception object
- * 
- * Add a message to a folder.
- * 
- **/
-void 
-camel_folder_append_message (CamelFolder *folder, 
-			     CamelMimeMessage *message, 
-			     CamelException *ex)
-{	
-	g_assert (folder != NULL);
-	g_assert (camel_folder_is_open (folder));
-
-	CF_CLASS (folder)->append_message (folder, message, ex);
-}
-
-
-static const GList *
-_list_permanent_flags (CamelFolder *folder, CamelException *ex)
-{
-	return folder->permanent_flags;
-}
-
-
-const GList *
-camel_folder_list_permanent_flags (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->list_permanent_flags (folder, ex);
-}
-
-
-
-
-static void
-_copy_message_to (CamelFolder *folder, CamelMimeMessage *message, CamelFolder *dest_folder, CamelException *ex)
-{
-	camel_folder_append_message (dest_folder, message, ex);
-}
-
-
-void
-camel_folder_copy_message_to (CamelFolder *folder, 
-			      CamelMimeMessage *message, 
-			      CamelFolder *dest_folder, 
-			      CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (camel_folder_is_open (folder));
-
-	CF_CLASS (folder)->copy_message_to (folder, message, dest_folder, ex);;
-}
-
-/* summary stuff */
-static GPtrArray *
-get_subfolder_info (CamelFolder *folder, int first, int count)
-{
-	g_warning ("CamelFolder::get_subfolder_info not implemented for `%s'", gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_summary_get_subfolder_info: return an array of subfolders
- * @summary: a summary
- * @first: the index of the first subfolder to return information for
- * (starting from 0)
- * @count: the number of subfolders to return information for
- *
- * Returns an array of pointers to CamelFolderInfo objects. The caller
- * must free the array when it is done with it, but should not modify
- * the elements.
- *
- * Return value: an array containing information about the subfolders.
- **/
-GPtrArray *
-camel_folder_summary_get_subfolder_info (CamelFolder *folder,
-					 int first, int count)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->get_subfolder_info (folder, first, count);
-}
-
-
-static GPtrArray *
-get_message_info (CamelFolder *folder, int first, int count)
-{
-	g_warning ("CamelFolder::get_message_info not implemented for `%s'", gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_summary_get_message_info: return an array of messages
- * @folder: a camel folder
- * @first: the index of the first message to return information for
- * (starting from 0)
- * @count: the number of messages to return information for
- *
- * Returns an array of pointers to CamelMessageInfo objects. The caller
- * must free the array when it is done with it, but should not modify
- * the elements.
- *
- * Return value: an array containing information about the messages.
- **/
-GPtrArray *
-camel_folder_summary_get_message_info (CamelFolder *folder,
-				       int first, int count)
-{
-	g_assert (folder != NULL);
-	return CF_CLASS (folder)->get_message_info (folder, first, count);
-}
-
-/* summary stuff */
-/* TODO: is this function required anyway? */
-gboolean
-camel_folder_has_summary_capability (CamelFolder *folder)
-{
-	g_assert (folder != NULL);
-	return folder->has_summary_capability;
-}
-
-
-/* UIDs stuff */
-
-/**
- * camel_folder_has_uid_capability: detect if the folder support UIDs
- * @folder: Folder object
- * 
- * Detects if a folder supports UID operations, that is
- * reference messages by a Unique IDentifier instead
- * of by message number.  
- * 
- * Return value: TRUE if the folder supports UIDs 
- **/
-gboolean
-camel_folder_has_uid_capability (CamelFolder *folder)
-{
-	g_assert (folder != NULL);
-	return folder->has_uid_capability;
-}
-
-
-
-static const gchar *
-_get_message_uid (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex)
-{
-	g_warning ("CamelFolder::get_message_uid not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_get_message_uid: get the UID of a message in a folder
- * @folder: Folder in which the UID must refer to
- * @message: Message object 
- * 
- * Return the UID of a message relatively to a folder.
- * A message can have different UID, each one corresponding
- * to a different folder, if the message is referenced in
- * several folders. 
- * 
- * Return value: The UID of the message in the folder
- **/
-const gchar * 
-camel_folder_get_message_uid (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (folder->has_uid_capability);
-	g_assert (camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->get_message_uid (folder, message, ex);
-}
-
-
-
-static CamelMimeMessage *
-_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	g_warning ("CamelFolder::get_message_by_uid not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return NULL;
-}
-
-
-/**
- * camel_folder_get_message_by_uid: Get a message by its UID in a folder
- * @folder: the folder object
- * @uid: the UID
- * 
- * Get a message from its UID in the folder. Messages 
- * are cached within a folder, that is, asking twice
- * for the same UID returns the same message object.
- * 
- * Return value: Message corresponding to the UID
- **/
-CamelMimeMessage *
-camel_folder_get_message_by_uid  (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (folder->has_uid_capability);
-	g_assert (camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->get_message_by_uid (folder, uid, ex);
-}
-
-static void
-_delete_message_by_uid (CamelFolder *folder, const gchar *uid,
-			CamelException *ex)
-{
-	g_warning ("CamelFolder::delete_message_by_uid not implemented "
-		   "for `%s'", gtk_type_name (GTK_OBJECT_TYPE (folder)));
-}
-
-
-/**
- * camel_folder_delete_message_by_uid: Delete a message by its UID in a folder
- * @folder: the folder object
- * @uid: the UID
- * 
- * Delete a message from a folder given its UID.
- *
- **/
-void
-camel_folder_delete_message_by_uid  (CamelFolder *folder, const gchar *uid,
-				     CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (folder->has_uid_capability);
-	g_assert (camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->delete_message_by_uid (folder, uid, ex);
-}
-
-static GList *
-_get_uid_list  (CamelFolder *folder, CamelException *ex)
-{
-	g_warning ("CamelFolder::get_uid_list not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_get_uid_list: get the list of UID in a folder
- * @folder: folder object
- * 
- * get the list of UID available in a folder. This
- * routine is usefull to know what messages are
- * available when the folder does not support
- * summaries. The UIDs in the list must not be freed,
- * the folder object caches them.
- * 
- * Return value: Glist of UID correspondind to the messages available in the folder.
- **/
-GList *
-camel_folder_get_uid_list  (CamelFolder *folder, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_assert (folder->has_uid_capability);
-	g_assert (camel_folder_is_open (folder));
-
-	return CF_CLASS (folder)->get_uid_list (folder, ex);
-}
-
-/**
- * camel_folder_has_search_capability:
- * @folder: Folder object
- * 
- * Checks if a folder supports searching.
- * 
- * Return value: TRUE if the folder supports UIDs 
- **/
-gboolean
-camel_folder_has_search_capability (CamelFolder *folder)
-{
-	g_assert (folder != NULL);
-	return folder->has_search_capability;
-}
-
-int camel_folder_search_by_expression  (CamelFolder *folder,
-					const char *expression,
-					CamelSearchFunc *func,
-					void *data,
-					CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_return_val_if_fail (folder->has_search_capability, -1);
-
-	return CF_CLASS (folder)->search_by_expression (folder, expression, func, data, ex);
-}
-
-gboolean camel_folder_search_complete(CamelFolder *folder, int searchid, gboolean wait, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_return_val_if_fail (folder->has_search_capability, FALSE);
-
-	return CF_CLASS (folder)->search_complete (folder, searchid, wait, ex);
-}
-
-void camel_folder_search_cancel(CamelFolder *folder, int searchid, CamelException *ex)
-{
-	g_assert (folder != NULL);
-	g_return_if_fail (folder->has_search_capability);
-
-	return CF_CLASS (folder)->search_cancel (folder, searchid, ex);	
-}
-
-/* **** */
diff --git a/camel/camel-folder.h b/camel/camel-folder.h
deleted file mode 100644
index b8b2db0da5..0000000000
--- a/camel/camel-folder.h
+++ /dev/null
@@ -1,375 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelFolder.h : Abstract class for an email folder */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_FOLDER_H
-#define CAMEL_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include "camel-types.h"
-
-#define CAMEL_FOLDER_TYPE     (camel_folder_get_type ())
-#define CAMEL_FOLDER(obj)     (GTK_CHECK_CAST((obj), CAMEL_FOLDER_TYPE, CamelFolder))
-#define CAMEL_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_FOLDER_TYPE, CamelFolderClass))
-#define CAMEL_IS_FOLDER(o)    (GTK_CHECK_TYPE((o), CAMEL_FOLDER_TYPE))
-
-typedef enum {
-	FOLDER_OPEN,
-	FOLDER_CLOSE
-} CamelFolderState;
-
-typedef enum {
-	FOLDER_OPEN_UNKNOWN = 0,   /* folder open mode is unknown */
-	FOLDER_OPEN_READ    = 1,   /* folder is read only         */ 
-	FOLDER_OPEN_WRITE   = 2,   /* folder is write only        */ 
-	FOLDER_OPEN_RW      = 3    /* folder is read/write        */ 
-} CamelFolderOpenMode;
-
-
-typedef void (*CamelFolderAsyncCallback) ();
-typedef void (CamelSearchFunc)(CamelFolder *folder, int id, gboolean complete, GList *matches, void *data);
-
-/* these structs from camel-folder-summary.h ... (remove comment after cleanup soon) */
-/* TODO: perhaps they should be full-block objects? */
-/* FIXME: rename this to something more suitable */
-typedef struct {
-	gchar *name;
-	gint nb_message;	/* ick, these should be renamed to something better */
-	gint nb_unread_message;
-	gint nb_deleted_message;
-} CamelFolderInfo;
-
-/* A tree of message content info structures
-   describe the content structure of the message (if it has any) */
-typedef struct _CamelMessageContentInfo {
-	struct _CamelMessageContentInfo *next;
-
-	struct _CamelMessageContentInfo *childs;
-	struct _CamelMessageContentInfo *parent;
-
-	struct _header_content_type *type;
-	char *id;
-	char *description;
-	char *encoding;
-
-	guint32 size;
-} CamelMessageContentInfo;
-
-/* TODO: rename this?? */
-/* TODO: Make this an object, maybe? */
-typedef struct {
-	/* public fields */
-	gchar *subject;
-	gchar *to;
-	gchar *from;
-
-	gchar *uid;
-	guint32 flags;
-
-
-	time_t date_sent;
-	time_t date_received;
-
-	/* tree of content description */
-	CamelMessageContentInfo *content;
-} CamelMessageInfo;
-
-
-struct _CamelFolder
-{
-	GtkObject parent_object;
-	
-	CamelFolderOpenMode open_mode;
-	CamelFolderState open_state;
-	gchar *name;
-	gchar *full_name;
-	gchar separator;
-	CamelStore *parent_store;
-	CamelFolder *parent_folder;
-	GList *permanent_flags;
-
-	gboolean can_hold_folders:1;
-	gboolean can_hold_messages:1;
-	gboolean has_summary_capability:1;
-	gboolean has_uid_capability:1;
-	gboolean has_search_capability:1;
-};
-
-
-
-typedef struct {
-	GtkObjectClass parent_class;
-	
-	/* Virtual methods */	
-	void   (*init) (CamelFolder *folder, CamelStore *parent_store,
-			CamelFolder *parent_folder, const gchar *name,
-			gchar separator, CamelException *ex);
-
-	void   (*open) (CamelFolder *folder, 
-			CamelFolderOpenMode mode, 
-			CamelException *ex);
-	
-	void   (*close) (CamelFolder *folder, 
-			 gboolean expunge, 
-			 CamelException *ex);
-
-	void   (*open_async) (CamelFolder *folder, 
-			      CamelFolderOpenMode mode, 
-			      CamelFolderAsyncCallback callback, 
-			      gpointer user_data, 
-			      CamelException *ex);
-
-	void   (*close_async) (CamelFolder *folder, 
-			       gboolean expunge, 
-			       CamelFolderAsyncCallback callback, 
-			       gpointer user_data, 
-			       CamelException *ex);
-
-	const gchar *  (*get_name)  (CamelFolder *folder);
-
-	const gchar *  (*get_full_name)  (CamelFolder *folder);
-
-	gboolean   (*can_hold_folders)   (CamelFolder *folder);
-
-	gboolean   (*can_hold_messages)  (CamelFolder *folder);
-
-	gboolean   (*exists)  (CamelFolder *folder, 
-			       CamelException *ex);
-
-	gboolean   (*is_open) (CamelFolder *folder);
-
-	CamelFolder *  (*get_subfolder)  (CamelFolder *folder, 
-					  const gchar *folder_name, 
-					  CamelException *ex);
-
-	gboolean   (*create)  (CamelFolder *folder,
-			       CamelException *ex);
-
-	gboolean   (*delete)  (CamelFolder *folder, 
-			       gboolean recurse, 
-			       CamelException *ex);
-	
-	gboolean   (*delete_messages) (CamelFolder *folder, 
-				       CamelException *ex);
-
-	CamelFolder *  (*get_parent_folder)   (CamelFolder *folder, 
-					       CamelException *ex);
-
-	CamelStore *  (*get_parent_store) (CamelFolder *folder, 
-					   CamelException *ex);
-
-	CamelFolderOpenMode (*get_mode)   (CamelFolder *folder, 
-					   CamelException *ex);
-
-	GList *  (*list_subfolders)   (CamelFolder *folder, 
-				       CamelException *ex);
-
-	GList *  (*expunge)  (CamelFolder *folder, 
-			   CamelException *ex);
-
-	gboolean (*has_message_number_capability) (CamelFolder *folder);
-
-	CamelMimeMessage * (*get_message_by_number) (CamelFolder *folder, 
-						     gint number, 
-						     CamelException *ex);
-	
-	void (*delete_message_by_number) (CamelFolder *folder, 
-					  gint number, 
-					  CamelException *ex);
-	
-	gint   (*get_message_count)   (CamelFolder *folder, 
-				       CamelException *ex);
-
-	void (*append_message)  (CamelFolder *folder, 
-				 CamelMimeMessage *message, 
-				 CamelException *ex);
-	
-	const GList * (*list_permanent_flags) (CamelFolder *folder, 
-					       CamelException *ex);
-
-	void   (*copy_message_to) (CamelFolder *folder, 
-				   CamelMimeMessage *message, 
-				   CamelFolder *dest_folder, 
-				   CamelException *ex);
-	
-	gboolean (*has_uid_capability) (CamelFolder *folder);
-
-	const gchar * (*get_message_uid)  (CamelFolder *folder, 
-					   CamelMimeMessage *message, 
-					   CamelException *ex);
-
-	CamelMimeMessage * (*get_message_by_uid)  (CamelFolder *folder, 
-						   const gchar *uid, 
-						   CamelException *ex);
-
-	void (*delete_message_by_uid)  (CamelFolder *folder, 
-					const gchar *uid, 
-					CamelException *ex);
-
-	GList * (*get_uid_list)  (CamelFolder *folder, 
-				  CamelException *ex);
-
-	gboolean (*has_search_capability) (CamelFolder *folder);
-
-	int (*search_by_expression) (CamelFolder *folder, const char *expression,
-				     CamelSearchFunc *func, void *data, CamelException *ex);
-	gboolean (*search_complete)(CamelFolder *folder, int searchid, gboolean wait, CamelException *ex);
-	void (*search_cancel) (CamelFolder *folder, int searchid, CamelException *ex);
-
-	/* moved the old summary stuff from camel-folder-summary.h here */
-	GPtrArray * (*get_subfolder_info) (CamelFolder *, int first, int count);
-	GPtrArray * (*get_message_info) (CamelFolder *, int first, int count);
-
-} CamelFolderClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_folder_get_type (void);
-
-
-/* public methods */
-
-
-
-CamelFolder *      camel_folder_get_subfolder          (CamelFolder *folder, 
-							gchar *folder_name, 
-							CamelException *ex);
-
-void               camel_folder_open                   (CamelFolder *folder, 
-							CamelFolderOpenMode mode, 
-							CamelException *ex);
-
-
-void               camel_folder_close                  (CamelFolder *folder, 
-							gboolean expunge, 
-							CamelException *ex);
-
-gboolean           camel_folder_create                 (CamelFolder *folder, 
-							CamelException *ex);
-CamelFolder *      camel_folder_get_parent_folder      (CamelFolder *folder, 
-							CamelException *ex);
-CamelStore *       camel_folder_get_parent_store       (CamelFolder *folder, 
-							CamelException *ex);
-GList *            camel_folder_list_subfolders        (CamelFolder *folder, 
-							CamelException *ex);
-
-
-/* delete operations */
-gboolean           camel_folder_delete                 (CamelFolder *folder, 
-							gboolean recurse, 
-							CamelException *ex);
-gboolean           camel_folder_delete_messages        (CamelFolder *folder, 
-							CamelException *ex);
-GList *            camel_folder_expunge                (CamelFolder *folder, 
-							CamelException *ex);
-
-
-/* folder name operations */
-const gchar *      camel_folder_get_name               (CamelFolder *folder);
-const gchar *      camel_folder_get_full_name          (CamelFolder *folder);
-
-
-/* various properties accessors */
-gboolean           camel_folder_exists                 (CamelFolder *folder, 
-							CamelException *ex);
-const GList *      camel_folder_list_permanent_flags   (CamelFolder *folder, 
-							CamelException *ex);
-CamelFolderOpenMode camel_folder_get_mode              (CamelFolder *folder, 
-							CamelException *ex);
-gboolean           camel_folder_is_open                (CamelFolder *folder);
-
-
-
-/* message manipulation */
-void               camel_folder_append_message         (CamelFolder *folder, 
-							CamelMimeMessage *message, 
-							CamelException *ex);
-void               camel_folder_copy_message_to        (CamelFolder *folder, 
-							CamelMimeMessage *message, 
-							CamelFolder *dest_folder, 
-							CamelException *ex);
-
-
-/* summary related operations */
-gboolean           camel_folder_has_summary_capability (CamelFolder *folder);
-CamelFolderSummary *camel_folder_get_summary           (CamelFolder *folder, 
-							CamelException *ex);
-
-
-/* number based access operations */
-gboolean           camel_folder_has_message_number_capability (CamelFolder *folder);
-CamelMimeMessage * camel_folder_get_message_by_number (CamelFolder *folder, 
-						       gint number, 
-						       CamelException *ex);
-void               camel_folder_delete_message_by_number (CamelFolder *folder, 
-							  gint number, 
-							  CamelException *ex);
-gint               camel_folder_get_message_count     (CamelFolder *folder, 
-						       CamelException *ex);
-
-
-/* uid based access operations */
-gboolean           camel_folder_has_uid_capability    (CamelFolder *folder);
-const gchar *      camel_folder_get_message_uid       (CamelFolder *folder, 
-						       CamelMimeMessage *message, 
-						       CamelException *ex);
-CamelMimeMessage * camel_folder_get_message_by_uid    (CamelFolder *folder, 
-						       const gchar *uid, 
-						       CamelException *ex);
-void               camel_folder_delete_message_by_uid (CamelFolder *folder, 
-						       const gchar *uid, 
-						       CamelException *ex);
-GList *            camel_folder_get_uid_list          (CamelFolder *folder, 
-						       CamelException *ex);
-
-/* search api */
-gboolean           camel_folder_has_search_capability (CamelFolder *folder);
-int 		   camel_folder_search_by_expression(CamelFolder *folder, const char *expression,
-						     CamelSearchFunc *func, void *data, CamelException *ex);
-gboolean	   camel_folder_search_complete(CamelFolder *folder, int searchid, gboolean wait, CamelException *ex);
-void		   camel_folder_search_cancel(CamelFolder *folder, int searchid, CamelException *ex);
-
-/* summary info, from the old camel-folder-summary
-   FIXME: rename these slightly? */
-GPtrArray *camel_folder_summary_get_subfolder_info (CamelFolder *summary,
-						    int first, int count);
-GPtrArray *camel_folder_summary_get_message_info (CamelFolder *summary,
-						  int first, int count);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_FOLDER_H */
-
diff --git a/camel/camel-marshal-utils.c b/camel/camel-marshal-utils.c
deleted file mode 100644
index a743f155d5..0000000000
--- a/camel/camel-marshal-utils.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-marshal-utils.c : marshal utils */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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-marshal-utils.h"
-#include "camel-arg-collector.c"
-
-
-#define NB_OP_CHUNKS 20
-static GMemChunk *op_chunk=NULL;
-static GStaticMutex op_chunk_mutex = G_STATIC_MUTEX_INIT;
-
-CamelFuncDef *
-camel_func_def_new (CamelMarshal marshal, guint n_params, ...)
-{	
-	CamelFuncDef *func_def;
-	va_list args;
-	GtkType type;
-	int i;
-	
-	func_def = g_new (CamelFuncDef, 1);
-	func_def->marshal = marshal;
-	func_def->n_params = n_params;
-	func_def->params_type = g_new (GtkType, n_params);
-
-	va_start (args, n_params);	
-	for (i=0; iparams_type [i] = type; 
-	}
-	va_end (args);
-
-	return func_def;
-}
-
-
-
-
-static gboolean
-_collect_params (GtkArg	*params,
-		 CamelFuncDef *func_def,
-		 va_list var_args)
-{
-  int i;
-  gboolean failed = FALSE;
-  
-
-  for (i=0; 
-       in_params; 
-       i++, params++)
-    {
-      gchar *error;
-
-      params->name = NULL;
-      params->type = (func_def->params_type) [i];
-      CAMEL_ARG_COLLECT_VALUE (params,
-			       var_args,
-			       error);
-      if (error)
-	{
-	  failed = TRUE;
-	  g_free (error);
-	}
-    }
-  return (failed);
-}
-
-
-
-/**
- * camel_marshal_create_op: create an operation 
- * @func_def: function definition object
- * @func: function to call
- * 
- * create a function ready to be executed. The 
- * vari
- * 
- * 
- * Return value: operation ready to be executed
- **/
-CamelOp *
-camel_marshal_create_op (CamelFuncDef *func_def, CamelFunc func, ...)
-{
-	gboolean error;
-	CamelOp *op;
-	va_list args;
-
-	g_assert (func_def);
-
-	op = camel_op_new (func_def);
-	op->func = func;
-
-	va_start (args, func);
-	error = _collect_params (op->params, func_def, args);
-	va_end (args);
-	 
-	if (error) {
-		camel_op_free (op);
-		return NULL;
-	} else 
-		return (op);
-}
-
-
-
-
-/**
- * camel_op_new: return a new CamelOp object 
- * 
- * The obtained object must be destroyed with 
- * camel_op_free ()
- * 
- * Return value: the newly allocated CamelOp object
- **/
-CamelOp *
-camel_op_new (CamelFuncDef *func_def)
-{
-	CamelOp *op;
-
-	g_static_mutex_lock (&op_chunk_mutex);
-	if (!op_chunk)
-		op_chunk = g_mem_chunk_create (CamelOp, 
-					       NB_OP_CHUNKS,
-					       G_ALLOC_AND_FREE);
-	g_static_mutex_unlock (&op_chunk_mutex);
-
-	op = g_chunk_new (CamelOp, op_chunk);
-	op->func_def = func_def;
-	op->params = g_new (GtkArg, func_def->n_params);
-	
-	return op;	
-}
-
-/**
- * camel_op_free: free a CamelOp object allocated with camel_op_new
- * @op: CamelOp object to free
- * 
- * Free a CamelOp object allocated with camel_op_new ()
- * this routine won't work with CamelOp objects allocated 
- * with other allocators.
- **/
-void 
-camel_op_free (CamelOp *op)
-{
-	g_free (op->params);
-	g_chunk_free (op, op_chunk);
-}
-
-
-/**
- * camel_op_run: run an operation 
- * @op: the operation object
- * 
- * run an operation 
- * 
- **/
-void
-camel_op_run (CamelOp *op)
-{
-	g_assert (op);
-	g_assert (op->func_def);
-	g_assert (op->params);
-
-	op->func_def->marshal (op->func, op->params);
-}
-
-
-
-
-/**
- * camel_op_set_user_data: set the private field
- * @op: operation 
- * @user_data: private field
- * 
- * associate a field to an operation object
- **/
-void 
-camel_op_set_user_data (CamelOp *op, gpointer user_data)
-{
-	g_assert (op);
-	op->user_data = user_data;
-}
-
-
-/**
- * camel_op_get_user_data: return the private field
- * @op: operation object
- * 
- * return the private field associated to 
- * an operation object.
- * 
- * Return value: 
- **/
-gpointer 
-camel_op_get_user_data (CamelOp *op)
-{
-	g_assert (op);
-	return op->user_data;
-}
-
-
-
-/* misc marshaller */
-
-
-typedef void (*CamelMarshal_NONE__POINTER_INT) (gpointer arg1,
-						gint arg2);
-void camel_marshal_NONE__POINTER_INT (CamelFunc func, 
-				      GtkArg *args)
-{
-	CamelMarshal_NONE__POINTER_INT rfunc;
-
-	rfunc = (CamelMarshal_NONE__POINTER_INT) func;
-	(* rfunc) (GTK_VALUE_POINTER(args[0]),
-		   GTK_VALUE_INT(args[1]));
-}
-
-
-
-
-
-typedef void (*CamelMarshal_NONE__POINTER_INT_POINTER) (gpointer arg1,
-							gint arg2,
-							gpointer arg3);
-void camel_marshal_NONE__POINTER_INT_POINTER (CamelFunc func, 
-					      GtkArg *args)
-{
-	CamelMarshal_NONE__POINTER_INT_POINTER rfunc;
-
-	rfunc = (CamelMarshal_NONE__POINTER_INT_POINTER) func;
-	(* rfunc) (GTK_VALUE_POINTER(args[0]),
-		   GTK_VALUE_INT(args[1]),
-		   GTK_VALUE_POINTER(args[2]));
-}
-
-
-typedef void (*CamelMarshal_NONE__POINTER_BOOL_POINTER) (gpointer arg1,
-							 gboolean arg2,
-							 gpointer arg3);
-void camel_marshal_NONE__POINTER_BOOL_POINTER (CamelFunc func, 
-					      GtkArg *args)
-{
-	CamelMarshal_NONE__POINTER_BOOL_POINTER rfunc;
-
-	rfunc = (CamelMarshal_NONE__POINTER_BOOL_POINTER) func;
-	(* rfunc) (GTK_VALUE_POINTER(args[0]),
-		   GTK_VALUE_BOOL(args[1]),
-		   GTK_VALUE_POINTER(args[2]));
-}
-
-
-typedef void (*CamelMarshal_NONE__POINTER_INT_POINTER_POINTER) (gpointer arg1,
-								gint arg2,
-								gpointer arg3,
-								gpointer arg4);
-void camel_marshal_NONE__POINTER_INT_POINTER_POINTER (CamelFunc func, 
-						      GtkArg *args)
-{
-	CamelMarshal_NONE__POINTER_INT_POINTER_POINTER rfunc;
-
-	rfunc = (CamelMarshal_NONE__POINTER_INT_POINTER_POINTER) func;
-	(* rfunc) (GTK_VALUE_POINTER(args[0]),
-		   GTK_VALUE_INT(args[1]),
-		   GTK_VALUE_POINTER(args[2]),
-		   GTK_VALUE_POINTER(args[3]));
-}
-
-
-
-typedef void (*CamelMarshal_NONE__POINTER_BOOL_POINTER_POINTER) (gpointer arg1,
-								 gboolean arg2,
-								 gpointer arg3,
-								 gpointer arg4);
-void camel_marshal_NONE__POINTER_BOOL_POINTER_POINTER (CamelFunc func, 
-						       GtkArg *args)
-{
-	CamelMarshal_NONE__POINTER_BOOL_POINTER_POINTER rfunc;
-
-	rfunc = (CamelMarshal_NONE__POINTER_BOOL_POINTER_POINTER) func;
-	(* rfunc) (GTK_VALUE_POINTER(args[0]),
-		   GTK_VALUE_BOOL(args[1]),
-		   GTK_VALUE_POINTER(args[2]),
-		   GTK_VALUE_POINTER(args[3]));
-}
-
-
-
-typedef void (*CamelMarshal_NONE__POINTER_POINTER_POINTER) (gpointer arg1,
-							    gpointer arg2,
-							    gpointer arg3);
-void camel_marshal_NONE__POINTER_POINTER_POINTER (CamelFunc func, 
-						  GtkArg *args)
-{
-	CamelMarshal_NONE__POINTER_POINTER_POINTER rfunc;
-
-	rfunc = (CamelMarshal_NONE__POINTER_POINTER_POINTER) func;
-	(* rfunc) (GTK_VALUE_POINTER(args[0]),
-		   GTK_VALUE_POINTER(args[1]),
-		   GTK_VALUE_POINTER(args[2]));
-}
-
-
-typedef void (*CamelMarshal_NONE__INT) (gint arg1);
-void camel_marshal_NONE__INT (CamelFunc func, 
-			      GtkArg *args)
-{
-	CamelMarshal_NONE__INT rfunc;
-
-	rfunc = (CamelMarshal_NONE__INT) func;
-	(* rfunc) (GTK_VALUE_INT (args[0]));
-}
-
-
-
-
-
-
diff --git a/camel/camel-marshal-utils.h b/camel/camel-marshal-utils.h
deleted file mode 100644
index d33489d2a1..0000000000
--- a/camel/camel-marshal-utils.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maeshal-utils.h : marshal utils */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_MARSHAL_UTILS_H
-#define CAMEL_MARSHAL_UTILS_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-
-typedef void (*CamelFunc) ();
-
-typedef void ( *CamelMarshal) (CamelFunc func,
-				   GtkArg *args);
-
-
-
-
-
-typedef struct {
-
-	CamelMarshal marshal;
-	guint n_params;
-	GtkType	 *params_type;
-
-} CamelFuncDef;
-
-
-
-typedef struct {
-	CamelFuncDef *func_def;
-	CamelFunc func;
-	GtkArg	*params;
-	gpointer user_data;
-} CamelOp;
-
-
-CamelFuncDef *
-camel_func_def_new (CamelMarshal marshal, 
-		    guint n_params, 
-		    ...);
-
-
-CamelOp *camel_op_new (CamelFuncDef *func_def);
-void camel_op_free (CamelOp *op);
-void camel_op_run (CamelOp *op);
-void camel_op_run_and_free (CamelOp *op);
-void camel_op_set_user_data (CamelOp *op, gpointer user_data);
-gpointer camel_op_get_user_data (CamelOp *op);
-
-CamelOp *camel_marshal_create_op (CamelFuncDef *func_def, CamelFunc func, ...);
-
-/* marshallers */
-void camel_marshal_NONE__POINTER_INT_POINTER (CamelFunc func, 
-					      GtkArg *args);
-void camel_marshal_NONE__POINTER_BOOL_POINTER (CamelFunc func, 
-					      GtkArg *args);
-void camel_marshal_NONE__POINTER_INT_POINTER_POINTER (CamelFunc func, 
-						      GtkArg *args);
-void camel_marshal_NONE__POINTER_BOOL_POINTER_POINTER (CamelFunc func, 
-						       GtkArg *args);
-void camel_marshal_NONE__POINTER_POINTER_POINTER (CamelFunc func, 
-						  GtkArg *args);
-void camel_marshal_NONE__INT (CamelFunc func, 
-			      GtkArg *args);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MARSHAL_UTILS_H */
-
diff --git a/camel/camel-medium.c b/camel/camel-medium.c
deleted file mode 100644
index fe87911b14..0000000000
--- a/camel/camel-medium.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelMedium.c : Abstract class for a medium */
-
-/*
- *
- * Authors: Bertrand Guiheneuf 
- * 	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-medium.h"
-#include 
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include "gmime-utils.h"
-#include "hash-table-utils.h"
-#include "camel-simple-data-wrapper.h"
-
-
-static CamelDataWrapperClass *parent_class = NULL;
-
-/* Returns the class for a CamelMedium */
-#define CM_CLASS(so) CAMEL_MEDIUM_CLASS (GTK_OBJECT (so)->klass)
-
-static void add_header (CamelMedium *medium, const gchar *header_name,
-			const gchar *header_value);
-static void set_header (CamelMedium *medium, const gchar *header_name, const gchar *header_value);
-static void remove_header (CamelMedium *medium, const gchar *header_name);
-static const gchar *get_header (CamelMedium *medium, const gchar *header_name);
-
-static CamelDataWrapper *get_content_object (CamelMedium *medium);
-static void set_content_object (CamelMedium *medium,
-				CamelDataWrapper *content);
-
-static void finalize (GtkObject *object);
-
-static void
-camel_medium_class_init (CamelMediumClass *camel_medium_class)
-{
-	CamelDataWrapperClass *camel_data_wrapper_class =
-		CAMEL_DATA_WRAPPER_CLASS (camel_medium_class);
-	GtkObjectClass *gtk_object_class =
-		GTK_OBJECT_CLASS (camel_data_wrapper_class);
-
-	parent_class = gtk_type_class (camel_data_wrapper_get_type ());
-
-	/* virtual method definition */
-	camel_medium_class->add_header = add_header;
-	camel_medium_class->set_header = set_header;
-	camel_medium_class->remove_header = remove_header;
-	camel_medium_class->get_header = get_header;
-
-	camel_medium_class->set_content_object = set_content_object;
-	camel_medium_class->get_content_object = get_content_object;
-
-	gtk_object_class->finalize = finalize;
-}
-
-static void
-camel_medium_init (gpointer object, gpointer klass)
-{
-	CamelMedium *camel_medium = CAMEL_MEDIUM (object);
-
-	camel_medium->headers = NULL;
-	camel_medium->content = NULL;
-}
-
-
-GtkType
-camel_medium_get_type (void)
-{
-	static GtkType camel_medium_type = 0;
-
-	if (!camel_medium_type) {
-		GtkTypeInfo camel_medium_info =
-		{
-			"CamelMedium",
-			sizeof (CamelMedium),
-			sizeof (CamelMediumClass),
-			(GtkClassInitFunc) camel_medium_class_init,
-			(GtkObjectInitFunc) camel_medium_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_medium_type = gtk_type_unique (camel_data_wrapper_get_type (), &camel_medium_info);
-	}
-
-	return camel_medium_type;
-}
-
-static void
-finalize (GtkObject *object)
-{
-	CamelMedium *medium = CAMEL_MEDIUM (object);
-
-	header_raw_clear(&medium->headers);
-
-	if (medium->content)
-		gtk_object_unref (GTK_OBJECT (medium->content));
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-add_header (CamelMedium *medium, const gchar *header_name,
-	    const gchar *header_value)
-{
-	header_raw_append(&medium->headers, header_name, header_value, -1);
-}
-
-/**
- * camel_medium_add_header:
- * @medium: a CamelMedium
- * @header_name: name of the header
- * @header_value: value of the header
- *
- * Adds a header to a medium.
- *
- * FIXME: Where does it add it? We need to be able to prepend and
- * append headers, and also be able to insert them relative to other
- * headers.   No we dont, order isn't important! Z
- **/
-void
-camel_medium_add_header (CamelMedium *medium, const gchar *header_name,
-			 const gchar *header_value)
-{
-	g_return_if_fail (CAMEL_IS_MEDIUM (medium));
-	g_return_if_fail (header_name != NULL);
-	g_return_if_fail (header_value != NULL);
-
-	CM_CLASS (medium)->add_header (medium, header_name, header_value);
-}
-
-static void
-set_header (CamelMedium *medium, const gchar *header_name, const gchar *header_value)
-{
-	header_raw_replace(&medium->headers, header_name, header_value, -1);
-}
-
-/**
- * camel_medium_set_header:
- * @medium: a CamelMedium
- * @header_name: name of the header
- * @header_value: value of the header
- *
- * Sets the value of a header.  Any other occurances of the header
- * will be removed.
- **/
-void
-camel_medium_set_header (CamelMedium *medium, const gchar *header_name, const gchar *header_value)
-{
-	g_return_if_fail (CAMEL_IS_MEDIUM (medium));
-	g_return_if_fail (header_name != NULL);
-	g_return_if_fail (header_value != NULL);
-
-	CM_CLASS (medium)->add_header (medium, header_name, header_value);
-}
-
-static void
-remove_header (CamelMedium *medium, const gchar *header_name)
-{
-	header_raw_remove(&medium->headers, header_name);
-}
-
-/**
- * camel_medium_remove_header:
- * @medium: a medium
- * @header_name: the name of the header
- *
- * Removes the named header from the medium.  All occurances of the
- * header are removed.
- **/
-void
-camel_medium_remove_header (CamelMedium *medium, const gchar *header_name)
-{
-	g_return_if_fail (CAMEL_IS_MEDIUM (medium));
-	g_return_if_fail (header_name != NULL);
-
-	CM_CLASS (medium)->remove_header (medium, header_name);
-}
-
-
-static const gchar *
-get_header (CamelMedium *medium, const gchar *header_name)
-{
-	return header_raw_find(&medium->headers, header_name, NULL);
-}
-
-/**
- * camel_medium_get_header:
- * @medium: a medium
- * @header_name: the name of the header
- *
- * Returns the value of the named header in the medium, or %NULL if
- * it is unset. The caller should not modify or free the data.
- *
- * FIXME: What if the header occurs more than once?
- *
- * Return value: the value of the named header, or %NULL
- **/
-const gchar *
-camel_medium_get_header (CamelMedium *medium, const gchar *header_name)
-{
-	g_return_val_if_fail (CAMEL_IS_MEDIUM (medium), NULL);
-	g_return_val_if_fail (header_name != NULL, NULL);
-
-	return CM_CLASS (medium)->get_header (medium, header_name);
-}
-
-
-static CamelDataWrapper *
-get_content_object (CamelMedium *medium)
-{
-	return medium->content;
-}
-
-/**
- * camel_medium_get_content_object:
- * @medium: a medium
- *
- * Returns a data wrapper that represents the content of the medium,
- * without its headers.
- *
- * Return value: the medium's content object.
- **/
-CamelDataWrapper *
-camel_medium_get_content_object (CamelMedium *medium)
-{
-	g_return_val_if_fail (CAMEL_IS_MEDIUM (medium), NULL);
-
-	return CM_CLASS (medium)->get_content_object (medium);
-}
-
-
-static void
-set_content_object (CamelMedium *medium, CamelDataWrapper *content)
-{
-	if (medium->content)
-		gtk_object_unref (GTK_OBJECT (medium->content));
-	gtk_object_ref (GTK_OBJECT (content));
-	medium->content = content;
-}
-
-/**
- * camel_medium_set_content_object:
- * @medium: a medium
- * @content: a data wrapper representing the medium's content
- *
- * Sets the content of @medium to be @content.
- **/
-void
-camel_medium_set_content_object (CamelMedium *medium,
-				 CamelDataWrapper *content)
-{
-	g_return_if_fail (CAMEL_IS_MEDIUM (medium));
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (content));
-
-	CM_CLASS (medium)->set_content_object (medium, content);
-}
diff --git a/camel/camel-medium.h b/camel/camel-medium.h
deleted file mode 100644
index 91693439e2..0000000000
--- a/camel/camel-medium.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-medium.h : class for a medium object */
-
-/*
- *
- * Authors:  Bertrand Guiheneuf 
- *	     Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_MEDIUM_H
-#define CAMEL_MEDIUM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-#include 
-
-#define CAMEL_MEDIUM_TYPE     (camel_medium_get_type ())
-#define CAMEL_MEDIUM(obj)     (GTK_CHECK_CAST((obj), CAMEL_MEDIUM_TYPE, CamelMedium))
-#define CAMEL_MEDIUM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MEDIUM_TYPE, CamelMediumClass))
-#define CAMEL_IS_MEDIUM(o)    (GTK_CHECK_TYPE((o), CAMEL_MEDIUM_TYPE))
-
-
-struct _CamelMedium
-{
-	CamelDataWrapper parent_object;
-
-	struct _header_raw *headers;
-
-	/* The content of the medium, as opposed to our parent
-	 * CamelDataWrapper, which wraps both the headers and the
-	 * content.
-	 */
-	CamelDataWrapper *content;
-
-};
-
-
-
-typedef struct {
-	CamelDataWrapperClass parent_class;
-
-	/* Virtual methods */
-	void  (*add_header) (CamelMedium *medium, const gchar *header_name, const gchar *header_value);
-	void  (*set_header) (CamelMedium *medium, const gchar *header_name, const gchar *header_value);
-	void  (*remove_header) (CamelMedium *medium, const gchar *header_name);
-	const gchar * (*get_header) (CamelMedium *medium,  const gchar *header_name);
-
-	CamelDataWrapper * (*get_content_object) (CamelMedium *medium);
-	void (*set_content_object) (CamelMedium *medium, CamelDataWrapper *content);
-
-} CamelMediumClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_medium_get_type (void);
-
-
-/* public methods */
-void camel_medium_add_header (CamelMedium *medium, const gchar *header_name, const gchar *header_value);
-void camel_medium_set_header (CamelMedium *medium, const gchar *header_name, const gchar *header_value);
-void camel_medium_remove_header (CamelMedium *medium, const gchar *header_name);
-const gchar *camel_medium_get_header (CamelMedium *medium, const gchar *header_name);
-
-
-CamelDataWrapper *camel_medium_get_content_object (CamelMedium *medium);
-void camel_medium_set_content_object (CamelMedium *medium,
-				      CamelDataWrapper *content);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MEDIUM_H */
-
diff --git a/camel/camel-mime-body-part.c b/camel/camel-mime-body-part.c
deleted file mode 100644
index 988d530fcb..0000000000
--- a/camel/camel-mime-body-part.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mime-body-part.c : Abstract class for a mime body part */
-
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-mime-body-part.h"
-
-
-static void _set_parent (CamelMimeBodyPart *mime_body_part, CamelMultipart *multipart);
-static const CamelMultipart *_get_parent (CamelMimeBodyPart *mime_body_part);
-
-
-static CamelMimePartClass *parent_class=NULL;
-
-/* Returns the class for a CamelMimeBodyPart */
-#define CMBP_CLASS(so) CAMEL_MIME_BODY_PART_CLASS (GTK_OBJECT(so)->klass)
-
-
-
-static void
-camel_mime_body_part_class_init (CamelMimeBodyPartClass *camel_mime_body_part_class)
-{
-	parent_class = gtk_type_class (camel_mime_part_get_type ());
-		
-	/* virtual method definition */
-	camel_mime_body_part_class->set_parent = _set_parent;
-	camel_mime_body_part_class->get_parent = _get_parent;
-}
-
-static void
-camel_mime_body_part_init (gpointer   object,  gpointer   klass)
-{
-	camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (object), "mime/body-part");
-}
-
-
-
-
-GtkType
-camel_mime_body_part_get_type (void)
-{
-	static GtkType camel_mime_body_part_type = 0;
-	
-	if (!camel_mime_body_part_type)	{
-		GtkTypeInfo camel_mime_body_part_info =	
-		{
-			"CamelMimeBodyPart",
-			sizeof (CamelMimeBodyPart),
-			sizeof (CamelMimeBodyPartClass),
-			(GtkClassInitFunc) camel_mime_body_part_class_init,
-			(GtkObjectInitFunc) camel_mime_body_part_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_mime_body_part_type = gtk_type_unique (camel_mime_part_get_type (), &camel_mime_body_part_info);
-	}
-	
-	return camel_mime_body_part_type;
-}
-
-CamelMimeBodyPart *
-camel_mime_body_part_new (void)
-{
-	CamelMimeBodyPart *mime_body_part;
-	
-	mime_body_part = (CamelMimeBodyPart *)gtk_type_new (CAMEL_MIME_BODY_PART_TYPE);
-	return mime_body_part;
-}
-
-
-static void 
-_set_parent (CamelMimeBodyPart *mime_body_part, CamelMultipart *multipart)
-{
-	if (mime_body_part->parent) gtk_object_unref (GTK_OBJECT (mime_body_part->parent));
-	mime_body_part->parent = multipart;
-	if (multipart) gtk_object_ref (GTK_OBJECT (multipart));
-}
-
-
-void 
-camel_mime_body_part_set_parent (CamelMimeBodyPart *mime_body_part, CamelMultipart *multipart)
-{
-	CMBP_CLASS (mime_body_part)->set_parent (mime_body_part, multipart);
-}
-
-
-static const CamelMultipart *
-_get_parent (CamelMimeBodyPart *mime_body_part)
-{
-	return mime_body_part->parent;
-}
-
-
-const CamelMultipart *
-camel_mime_body_part_get_parent (CamelMimeBodyPart *mime_body_part)
-{
-	return CMBP_CLASS (mime_body_part)->get_parent (mime_body_part);
-}
-
-
diff --git a/camel/camel-mime-body-part.h b/camel/camel-mime-body-part.h
deleted file mode 100644
index d01a5fbbd9..0000000000
--- a/camel/camel-mime-body-part.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mime-body-part.h : class for a mime body part */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_MIME_BODY_PART_H
-#define CAMEL_MIME_BODY_PART_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-mime-part.h"
-
-
-#define CAMEL_MIME_BODY_PART_TYPE     (camel_mime_body_part_get_type ())
-#define CAMEL_MIME_BODY_PART(obj)     (GTK_CHECK_CAST((obj), CAMEL_MIME_BODY_PART_TYPE, CamelMimeBodyPart))
-#define CAMEL_MIME_BODY_PART_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MIME_BODY_PART_TYPE, CamelMimeBodyPartClass))
-#define CAMEL_IS_MIME_BODY_PART(o)    (GTK_CHECK_TYPE((o), CAMEL_MIME_BODY_PART_TYPE))
-
-
-struct _CamelMimeBodyPart
-{
-	CamelMimePart parent_object;
-	CamelMultipart *parent;
-      
-};
-
-
-
-typedef struct {
-	CamelMimePartClass parent_class;
-	
-	/* Virtual methods */	
-	void (*set_parent) (CamelMimeBodyPart *mime_body_part, 
-			    CamelMultipart *multipart);
-	const CamelMultipart * (*get_parent) (CamelMimeBodyPart *mime_body_part);
-
-} CamelMimeBodyPartClass;
-
-
-/* Standard Gtk function */
-GtkType camel_mime_body_part_get_type (void);
-
-
-/* public methods */
-CamelMimeBodyPart *   camel_mime_body_part_new (void);
-void                  camel_mime_body_part_set_parent (CamelMimeBodyPart *mime_body_part, 
-						       CamelMultipart *multipart);
-const CamelMultipart *camel_mime_body_part_get_parent (CamelMimeBodyPart *mime_body_part);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MIME_BODY_PART_H */
-
diff --git a/camel/camel-mime-filter-basic.c b/camel/camel-mime-filter-basic.c
deleted file mode 100644
index 60566abf4e..0000000000
--- a/camel/camel-mime-filter-basic.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-mime-filter-basic.h"
-
-#include "camel-mime-utils.h"
-
-static void camel_mime_filter_basic_class_init (CamelMimeFilterBasicClass *klass);
-static void camel_mime_filter_basic_init       (CamelMimeFilterBasic *obj);
-
-static CamelMimeFilterClass *camel_mime_filter_basic_parent;
-
-enum SIGNALS {
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-guint
-camel_mime_filter_basic_get_type (void)
-{
-	static guint type = 0;
-	
-	if (!type) {
-		GtkTypeInfo type_info = {
-			"CamelMimeFilterBasic",
-			sizeof (CamelMimeFilterBasic),
-			sizeof (CamelMimeFilterBasicClass),
-			(GtkClassInitFunc) camel_mime_filter_basic_class_init,
-			(GtkObjectInitFunc) camel_mime_filter_basic_init,
-			(GtkArgSetFunc) NULL,
-			(GtkArgGetFunc) NULL
-		};
-		
-		type = gtk_type_unique (camel_mime_filter_get_type (), &type_info);
-	}
-	
-	return type;
-}
-
-static void
-finalise(GtkObject *o)
-{
-	((GtkObjectClass *)camel_mime_filter_basic_parent)->finalize (o);
-}
-
-/* should this 'flush' outstanding state/data bytes? */
-static void
-reset(CamelMimeFilter *mf)
-{
-	CamelMimeFilterBasic *f = (CamelMimeFilterBasic *)mf;
-
-	f->state = 0;
-	f->save = 0;
-}
-
-static void
-complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	CamelMimeFilterBasic *f = (CamelMimeFilterBasic *)mf;
-	int newlen;
-
-	switch(f->type) {
-	case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
-		/* wont go to more than 2x size (overly conservative) */
-		camel_mime_filter_set_size(mf, len*2, FALSE);
-		newlen = base64_encode_close(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_QP_ENC:
-		/* FIXME: *3 is probably not quite enough ... */
-		camel_mime_filter_set_size(mf, len*3, FALSE);
-		newlen = quoted_encode_close(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_BASE64_DEC:
-		/* output can't possibly exceed the input size */
-		camel_mime_filter_set_size(mf, len, FALSE);
-		newlen = base64_decode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_QP_DEC:
-		/* output can't possibly exceed the input size */
-		camel_mime_filter_set_size(mf, len, FALSE);
-		newlen = quoted_decode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	default:
-		g_warning("unknown type %d in CamelMimeFilterBasic", f->type);
-		goto donothing;
-	}
-
-	*out = mf->outbuf;
-	*outlen = newlen;
-	*outprespace = mf->outpre;
-
-	return;
-donothing:
-	*out = in;
-	*outlen = len;
-	*outprespace = prespace;
-}
-
-/* here we do all of the basic mime filtering */
-static void
-filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	CamelMimeFilterBasic *f = (CamelMimeFilterBasic *)mf;
-	int newlen;
-
-	switch(f->type) {
-	case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
-		/* wont go to more than 2x size (overly conservative) */
-		camel_mime_filter_set_size(mf, len*2, FALSE);
-		newlen = base64_encode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_QP_ENC:
-		/* FIXME: *3 is probably not quite enough ... */
-		camel_mime_filter_set_size(mf, len*3, FALSE);
-		newlen = quoted_encode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_BASE64_DEC:
-		/* output can't possibly exceed the input size */
-		camel_mime_filter_set_size(mf, len, FALSE);
-		newlen = base64_decode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_QP_DEC:
-		/* output can't possibly exceed the input size */
-		camel_mime_filter_set_size(mf, len, FALSE);
-		newlen = quoted_decode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	default:
-		g_warning("unknown type %d in CamelMimeFilterBasic", f->type);
-		goto donothing;
-	}
-
-	*out = mf->outbuf;
-	*outlen = newlen;
-	*outprespace = mf->outpre;
-
-	return;
-donothing:
-	*out = in;
-	*outlen = len;
-	*outprespace = prespace;
-}
-
-static void
-camel_mime_filter_basic_class_init (CamelMimeFilterBasicClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-	CamelMimeFilterClass *filter_class = (CamelMimeFilterClass *) klass;
-	
-	camel_mime_filter_basic_parent = gtk_type_class (camel_mime_filter_get_type ());
-
-	object_class->finalize = finalise;
-
-	filter_class->reset = reset;
-	filter_class->filter = filter;
-	filter_class->complete = complete;
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-camel_mime_filter_basic_init (CamelMimeFilterBasic *obj)
-{
-	obj->state = 0;
-	obj->save = 0;
-}
-
-/**
- * camel_mime_filter_basic_new:
- *
- * Create a new CamelMimeFilterBasic object.
- * 
- * Return value: A new CamelMimeFilterBasic widget.
- **/
-CamelMimeFilterBasic *
-camel_mime_filter_basic_new (void)
-{
-	CamelMimeFilterBasic *new = CAMEL_MIME_FILTER_BASIC ( gtk_type_new (camel_mime_filter_basic_get_type ()));
-	return new;
-}
-
-CamelMimeFilterBasic *
-camel_mime_filter_basic_new_type(CamelMimeFilterBasicType type)
-{
-	CamelMimeFilterBasic *new;
-
-	switch (type) {
-	case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
-	case CAMEL_MIME_FILTER_BASIC_QP_ENC:
-	case CAMEL_MIME_FILTER_BASIC_BASE64_DEC:
-	case CAMEL_MIME_FILTER_BASIC_QP_DEC:
-		new = camel_mime_filter_basic_new();
-		new->type = type;
-		break;
-	default:
-		g_warning("Invalid type of CamelMimeFilterBasic requested: %d", type);
-		new = NULL;
-		break;
-	}
-	return new;
-}
-
diff --git a/camel/camel-mime-filter-basic.h b/camel/camel-mime-filter-basic.h
deleted file mode 100644
index 57d9898fa6..0000000000
--- a/camel/camel-mime-filter-basic.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_FILTER_BASIC_H
-#define _CAMEL_MIME_FILTER_BASIC_H
-
-#include 
-#include 
-
-#define CAMEL_MIME_FILTER_BASIC(obj)         GTK_CHECK_CAST (obj, camel_mime_filter_basic_get_type (), CamelMimeFilterBasic)
-#define CAMEL_MIME_FILTER_BASIC_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, camel_mime_filter_basic_get_type (), CamelMimeFilterBasicClass)
-#define IS_CAMEL_MIME_FILTER_BASIC(obj)      GTK_CHECK_TYPE (obj, camel_mime_filter_basic_get_type ())
-
-typedef struct _CamelMimeFilterBasic      CamelMimeFilterBasic;
-typedef struct _CamelMimeFilterBasicClass CamelMimeFilterBasicClass;
-
-typedef enum {
-	CAMEL_MIME_FILTER_BASIC_BASE64_ENC = 1,
-	CAMEL_MIME_FILTER_BASIC_BASE64_DEC,
-	CAMEL_MIME_FILTER_BASIC_QP_ENC,
-	CAMEL_MIME_FILTER_BASIC_QP_DEC,
-} CamelMimeFilterBasicType;
-
-struct _CamelMimeFilterBasic {
-	CamelMimeFilter parent;
-
-	struct _CamelMimeFilterBasicPrivate *priv;
-
-	CamelMimeFilterBasicType type;
-
-	int state;
-	int save;
-};
-
-struct _CamelMimeFilterBasicClass {
-	CamelMimeFilterClass parent_class;
-};
-
-guint		camel_mime_filter_basic_get_type	(void);
-CamelMimeFilterBasic      *camel_mime_filter_basic_new	(void);
-CamelMimeFilterBasic      *camel_mime_filter_basic_new_type	(CamelMimeFilterBasicType type);
-
-#endif /* ! _CAMEL_MIME_FILTER_BASIC_H */
diff --git a/camel/camel-mime-filter-charset.c b/camel/camel-mime-filter-charset.c
deleted file mode 100644
index eb9db60802..0000000000
--- a/camel/camel-mime-filter-charset.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include 
-
-#include 
-#include 
-
-#include "camel-mime-filter-charset.h"
-
-
-static void camel_mime_filter_charset_class_init (CamelMimeFilterCharsetClass *klass);
-static void camel_mime_filter_charset_init       (CamelMimeFilterCharset *obj);
-
-static CamelMimeFilterClass *camel_mime_filter_charset_parent;
-
-enum SIGNALS {
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-guint
-camel_mime_filter_charset_get_type (void)
-{
-	static guint type = 0;
-	
-	if (!type) {
-		GtkTypeInfo type_info = {
-			"CamelMimeFilterCharset",
-			sizeof (CamelMimeFilterCharset),
-			sizeof (CamelMimeFilterCharsetClass),
-			(GtkClassInitFunc) camel_mime_filter_charset_class_init,
-			(GtkObjectInitFunc) camel_mime_filter_charset_init,
-			(GtkArgSetFunc) NULL,
-			(GtkArgGetFunc) NULL
-		};
-		
-		type = gtk_type_unique (camel_mime_filter_get_type (), &type_info);
-	}
-	
-	return type;
-}
-
-static void
-finalise(GtkObject *o)
-{
-	CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)o;
-
-	g_free(f->from);
-	g_free(f->to);
-	if (f->ic != (unicode_iconv_t)-1) {
-		unicode_iconv_close(f->ic);
-		f->ic = (unicode_iconv_t) -1;
-	}
-
-	((GtkObjectClass *)camel_mime_filter_charset_parent)->finalize (o);
-}
-
-static void
-reset(CamelMimeFilter *mf)
-{
-	CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)mf;
-	char buf[16];
-	char *buffer;
-	int outlen = 16;
-
-	/* what happens with the output bytes if this resets the state? */
-	if (f->ic != (unicode_iconv_t) -1) {
-		buffer = buf;
-		unicode_iconv(f->ic, NULL, 0, &buffer, &outlen);
-	}
-}
-
-static void
-complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
-{
-	CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)mf;
-	int converted;
-	char *inbuf, *outbuf;
-	int inlen, outlen;
-
-	if (f->ic == (unicode_iconv_t) -1) {
-		goto donothing;
-	}
-
-	/* FIXME: there's probably a safer way to size this ...? */
-	/* We could always resize if we run out of room in outbuf (but it'd be nice not
-	   to have to) */
-	camel_mime_filter_set_size(mf, len*5, FALSE);
-	inbuf = in;
-	inlen = len;
-	outbuf = mf->outbuf;
-	outlen = mf->outsize;
-	if (inlen>0) {
-		converted = unicode_iconv(f->ic, &inbuf, &inlen, &outbuf, &outlen);
-		if (converted == -1) {
-			if (errno != EINVAL) {
-				g_warning("error occured converting: %s", strerror(errno));
-				goto donothing;
-			}
-		}
-
-		if (inlen>0) {
-			g_warning("Output lost in character conversion, invalid sequence encountered?");
-		}
-	}
-
-	/* this 'resets' the output stream, returning back to the initial
-	   shift state for multishift charactersets */
-	converted = unicode_iconv(f->ic, NULL, 0, &outbuf, &outlen);
-	if (converted == -1) {
-		g_warning("Conversion failed to complete: %s", strerror(errno));
-	}
-
-	*out = mf->outbuf;
-	*outlenptr = mf->outsize - outlen;
-	*outprespace = mf->outpre;
-	return;
-
-donothing:
-	*out = in;
-	*outlenptr = len;
-	*outprespace = prespace;
-}
-
-static void
-filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
-{
-	CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)mf;
-	int converted;
-	char *inbuf, *outbuf;
-	int inlen, outlen;
-
-	if (f->ic == (unicode_iconv_t) -1) {
-		goto donothing;
-	}
-
-	/* FIXME: there's probably a safer way to size this ...? */
-	camel_mime_filter_set_size(mf, len*5, FALSE);
-	inbuf = in;
-	inlen = len;
-	outbuf = mf->outbuf;
-	outlen = mf->outsize;
-	converted = unicode_iconv(f->ic, &inbuf, &inlen, &outbuf, &outlen);
-	if (converted == -1) {
-		if (errno != EINVAL) {
-			g_warning("error occured converting: %s", strerror(errno));
-			goto donothing;
-		}
-	}
-
-	/*
-	  NOTE: This assumes EINVAL only occurs because we ran out of
-	  bytes for a multibyte sequence, if not, we're in trouble.
-	*/
-
-	if (inlen>0) {
-		camel_mime_filter_backup(mf, inbuf, inlen);
-	}
-
-	*out = mf->outbuf;
-	*outlenptr = mf->outsize - outlen;
-	*outprespace = mf->outpre;
-	return;
-
-donothing:
-	*out = in;
-	*outlenptr = len;
-	*outprespace = prespace;
-}
-
-static void
-camel_mime_filter_charset_class_init (CamelMimeFilterCharsetClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-	CamelMimeFilterClass *filter_class = (CamelMimeFilterClass *) klass;
-	
-	camel_mime_filter_charset_parent = gtk_type_class (camel_mime_filter_get_type ());
-
-	object_class->finalize = finalise;
-
-	filter_class->reset = reset;
-	filter_class->filter = filter;
-	filter_class->complete = complete;
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-camel_mime_filter_charset_init (CamelMimeFilterCharset *obj)
-{
-	obj->ic = (unicode_iconv_t)-1;
-}
-
-/**
- * camel_mime_filter_charset_new:
- *
- * Create a new CamelMimeFilterCharset object.
- * 
- * Return value: A new CamelMimeFilterCharset widget.
- **/
-CamelMimeFilterCharset *
-camel_mime_filter_charset_new (void)
-{
-	CamelMimeFilterCharset *new = CAMEL_MIME_FILTER_CHARSET ( gtk_type_new (camel_mime_filter_charset_get_type ()));
-	return new;
-}
-
-CamelMimeFilterCharset *
-camel_mime_filter_charset_new_convert(const char *from_charset, const char *to_charset)
-{
-	CamelMimeFilterCharset *new = CAMEL_MIME_FILTER_CHARSET ( gtk_type_new (camel_mime_filter_charset_get_type ()));
-
-	new->ic = unicode_iconv_open(to_charset, from_charset);
-	if (new->ic == (unicode_iconv_t) -1) {
-		g_warning("Cannot create charset conversion from %s to %s: %s", from_charset, to_charset, strerror(errno));
-		gtk_object_unref((GtkObject *)new);
-		new = NULL;
-	} else {
-		new->from = g_strdup(from_charset);
-		new->to = g_strdup(to_charset);
-	}
-	return new;
-}
diff --git a/camel/camel-mime-filter-charset.h b/camel/camel-mime-filter-charset.h
deleted file mode 100644
index 3e15e2e7c7..0000000000
--- a/camel/camel-mime-filter-charset.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_FILTER_CHARSET_H
-#define _CAMEL_MIME_FILTER_CHARSET_H
-
-#include 
-#include 
-#include 
-
-#define CAMEL_MIME_FILTER_CHARSET(obj)         GTK_CHECK_CAST (obj, camel_mime_filter_charset_get_type (), CamelMimeFilterCharset)
-#define CAMEL_MIME_FILTER_CHARSET_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, camel_mime_filter_charset_get_type (), CamelMimeFilterCharsetClass)
-#define IS_CAMEL_MIME_FILTER_CHARSET(obj)      GTK_CHECK_TYPE (obj, camel_mime_filter_charset_get_type ())
-
-typedef struct _CamelMimeFilterCharset      CamelMimeFilterCharset;
-typedef struct _CamelMimeFilterCharsetClass CamelMimeFilterCharsetClass;
-
-struct _CamelMimeFilterCharset {
-	CamelMimeFilter parent;
-
-	struct _CamelMimeFilterCharsetPrivate *priv;
-
-	unicode_iconv_t ic;
-	char *from;
-	char *to;
-};
-
-struct _CamelMimeFilterCharsetClass {
-	CamelMimeFilterClass parent_class;
-};
-
-guint		camel_mime_filter_charset_get_type	(void);
-CamelMimeFilterCharset      *camel_mime_filter_charset_new	(void);
-
-CamelMimeFilterCharset      *camel_mime_filter_charset_new_convert	(const char *from_charset, const char *to_charset);
-
-#endif /* ! _CAMEL_MIME_FILTER_CHARSET_H */
diff --git a/camel/camel-mime-filter-index.c b/camel/camel-mime-filter-index.c
deleted file mode 100644
index 24c223d4e5..0000000000
--- a/camel/camel-mime-filter-index.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-mime-filter-index.h"
-
-
-static void camel_mime_filter_index_class_init (CamelMimeFilterIndexClass *klass);
-static void camel_mime_filter_index_init       (CamelMimeFilterIndex *obj);
-
-static CamelMimeFilterClass *camel_mime_filter_index_parent;
-
-enum SIGNALS {
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-guint
-camel_mime_filter_index_get_type (void)
-{
-	static guint type = 0;
-	
-	if (!type) {
-		GtkTypeInfo type_info = {
-			"CamelMimeFilterIndex",
-			sizeof (CamelMimeFilterIndex),
-			sizeof (CamelMimeFilterIndexClass),
-			(GtkClassInitFunc) camel_mime_filter_index_class_init,
-			(GtkObjectInitFunc) camel_mime_filter_index_init,
-			(GtkArgSetFunc) NULL,
-			(GtkArgGetFunc) NULL
-		};
-		
-		type = gtk_type_unique (camel_mime_filter_get_type (), &type_info);
-	}
-	
-	return type;
-}
-
-static void
-finalise(GtkObject *o)
-{
-	CamelMimeFilterIndex *f = (CamelMimeFilterIndex *)o;
-
-	g_free(f->name);
-	f->index = NULL;	/* ibex's need refcounting? */
-
-	((GtkObjectClass *)camel_mime_filter_index_parent)->finalize (o);
-}
-
-static void
-complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
-{
-	CamelMimeFilterIndex *f = (CamelMimeFilterIndex *)mf;
-
-	if (f->index == NULL || f->name==NULL) {
-		goto donothing;
-	}
-
-	ibex_index_buffer(f->index, f->name, in, len, NULL);
-
-donothing:
-	*out = in;
-	*outlenptr = len;
-	*outprespace = prespace;
-}
-
-static void
-filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
-{
-	CamelMimeFilterIndex *f = (CamelMimeFilterIndex *)mf;
-	int inleft = 0;
-
-	if (f->index == NULL || f->name==NULL) {
-		goto donothing;
-	}
-
-	ibex_index_buffer(f->index, f->name, in, len, &inleft);
-
-	if (inleft>0) {
-		camel_mime_filter_backup(mf, in+(len-inleft), inleft);
-	}
-
-	*out = in;
-	*outlenptr = len-inleft;
-	*outprespace = prespace;
-	return;
-
-donothing:
-	*out = in;
-	*outlenptr = len;
-	*outprespace = prespace;
-}
-
-static void
-camel_mime_filter_index_class_init (CamelMimeFilterIndexClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-	CamelMimeFilterClass *filter_class = (CamelMimeFilterClass *) klass;
-	
-	camel_mime_filter_index_parent = gtk_type_class (camel_mime_filter_get_type ());
-
-	object_class->finalize = finalise;
-
-	/*filter_class->reset = reset;*/
-	filter_class->filter = filter;
-	filter_class->complete = complete;
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-camel_mime_filter_index_init (CamelMimeFilterIndex *obj)
-{
-}
-
-/**
- * camel_mime_filter_index_new:
- *
- * Create a new CamelMimeFilterIndex object.
- * 
- * Return value: A new CamelMimeFilterIndex widget.
- **/
-CamelMimeFilterIndex *
-camel_mime_filter_index_new (void)
-{
-	CamelMimeFilterIndex *new = CAMEL_MIME_FILTER_INDEX ( gtk_type_new (camel_mime_filter_index_get_type ()));
-	return new;
-}
-
-CamelMimeFilterIndex      *camel_mime_filter_index_new_ibex (ibex *index)
-{
-	CamelMimeFilterIndex *new = camel_mime_filter_index_new();
-
-	if (new) {
-		new->index = index;
-		new->name = g_strdup("");
-	}
-	return new;
-}
-
-/* Set the match name for any indexed words */
-void camel_mime_filter_index_set_name (CamelMimeFilterIndex *mf, char *name)
-{
-	g_free(mf->name);
-	mf->name = g_strdup(name);
-}
-
-
diff --git a/camel/camel-mime-filter-index.h b/camel/camel-mime-filter-index.h
deleted file mode 100644
index b4ea1966f0..0000000000
--- a/camel/camel-mime-filter-index.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_FILTER_INDEX_H
-#define _CAMEL_MIME_FILTER_INDEX_H
-
-#include 
-#include 
-
-#include 
-
-#define CAMEL_MIME_FILTER_INDEX(obj)         GTK_CHECK_CAST (obj, camel_mime_filter_index_get_type (), CamelMimeFilterIndex)
-#define CAMEL_MIME_FILTER_INDEX_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, camel_mime_filter_index_get_type (), CamelMimeFilterIndexClass)
-#define IS_CAMEL_MIME_FILTER_INDEX(obj)      GTK_CHECK_TYPE (obj, camel_mime_filter_index_get_type ())
-
-typedef struct _CamelMimeFilterIndex      CamelMimeFilterIndex;
-typedef struct _CamelMimeFilterIndexClass CamelMimeFilterIndexClass;
-
-struct _CamelMimeFilterIndex {
-	CamelMimeFilter parent;
-
-	struct _CamelMimeFilterIndexPrivate *priv;
-
-	ibex *index;
-	char *name;
-};
-
-struct _CamelMimeFilterIndexClass {
-	CamelMimeFilterClass parent_class;
-};
-
-guint		camel_mime_filter_index_get_type	(void);
-CamelMimeFilterIndex      *camel_mime_filter_index_new	(void);
-
-CamelMimeFilterIndex      *camel_mime_filter_index_new_ibex (ibex *);
-
-/* Set the match name for any indexed words */
-void camel_mime_filter_index_set_name (CamelMimeFilterIndex *, char *);
-
-#endif /* ! _CAMEL_MIME_FILTER_INDEX_H */
diff --git a/camel/camel-mime-filter-save.c b/camel/camel-mime-filter-save.c
deleted file mode 100644
index b5b54a2ee6..0000000000
--- a/camel/camel-mime-filter-save.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include 
-
-#include "camel-mime-filter-save.h"
-
-static void camel_mime_filter_save_class_init (CamelMimeFilterSaveClass *klass);
-static void camel_mime_filter_save_init       (CamelMimeFilterSave *obj);
-
-static CamelMimeFilterClass *camel_mime_filter_save_parent;
-
-enum SIGNALS {
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-guint
-camel_mime_filter_save_get_type (void)
-{
-	static guint type = 0;
-	
-	if (!type) {
-		GtkTypeInfo type_info = {
-			"CamelMimeFilterSave",
-			sizeof (CamelMimeFilterSave),
-			sizeof (CamelMimeFilterSaveClass),
-			(GtkClassInitFunc) camel_mime_filter_save_class_init,
-			(GtkObjectInitFunc) camel_mime_filter_save_init,
-			(GtkArgSetFunc) NULL,
-			(GtkArgGetFunc) NULL
-		};
-		
-		type = gtk_type_unique (camel_mime_filter_get_type (), &type_info);
-	}
-	
-	return type;
-}
-
-static void
-finalise(GtkObject *o)
-{
-	CamelMimeFilterSave *f = (CamelMimeFilterSave *)o;
-
-	g_free(f->filename);
-	if (f->fd != -1) {
-		/* FIXME: what do we do with failed writes???? */
-		close(f->fd);
-	}
-
-	((GtkObjectClass *)camel_mime_filter_save_parent)->finalize (o);
-}
-
-static void
-reset(CamelMimeFilter *mf)
-{
-	CamelMimeFilterSave *f = (CamelMimeFilterSave *)mf;
-
-	/* i dunno, how do you 'reset' a file?  reopen it? do i care? */
-	if (f->fd != -1){
-		lseek(f->fd, 0, SEEK_SET);
-	}
-}
-
-/* all this code just to support this little trivial filter! */
-static void
-filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	CamelMimeFilterSave *f = (CamelMimeFilterSave *)mf;
-
-	if (f->fd != -1) {
-		/* FIXME: check return */
-		int outlen = write(f->fd, in, len);
-		if (outlen != len) {
-			g_warning("could not write to '%s': %s", f->filename?f->filename:"", strerror(errno));
-		}
-	}
-	*out = in;
-	*outlen = len;
-	*outprespace = prespace;
-}
-
-static void
-camel_mime_filter_save_class_init (CamelMimeFilterSaveClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-	CamelMimeFilterClass *filter_class = (CamelMimeFilterClass *) klass;
-
-	camel_mime_filter_save_parent = gtk_type_class (camel_mime_filter_get_type ());
-
-	object_class->finalize = finalise;
-
-	filter_class->reset = reset;
-	filter_class->filter = filter;
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-camel_mime_filter_save_init (CamelMimeFilterSave *f)
-{
-	f->fd = -1;
-}
-
-/**
- * camel_mime_filter_save_new:
- *
- * Create a new CamelMimeFilterSave object.
- * 
- * Return value: A new CamelMimeFilterSave widget.
- **/
-CamelMimeFilterSave *
-camel_mime_filter_save_new (void)
-{
-	CamelMimeFilterSave *new = CAMEL_MIME_FILTER_SAVE ( gtk_type_new (camel_mime_filter_save_get_type ()));
-	return new;
-}
-
-CamelMimeFilterSave *
-camel_mime_filter_save_new_name (const char *name, int flags, int mode)
-{
-	CamelMimeFilterSave *new = NULL;
-
-	new = camel_mime_filter_save_new();
-	if (new) {
-		new->fd = open(name, flags, mode);
-		if (new->fd != -1) {
-			new->filename = g_strdup(name);
-		} else {
-			gtk_object_unref((GtkObject *)new);
-			new = NULL;
-		}
-	}
-	return new;
-}
-
diff --git a/camel/camel-mime-filter-save.h b/camel/camel-mime-filter-save.h
deleted file mode 100644
index 970e849db6..0000000000
--- a/camel/camel-mime-filter-save.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_FILTER_SAVE_H
-#define _CAMEL_MIME_FILTER_SAVE_H
-
-#include 
-
-#include 
-
-#define CAMEL_MIME_FILTER_SAVE(obj)         GTK_CHECK_CAST (obj, camel_mime_filter_save_get_type (), CamelMimeFilterSave)
-#define CAMEL_MIME_FILTER_SAVE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, camel_mime_filter_save_get_type (), CamelMimeFilterSaveClass)
-#define IS_CAMEL_MIME_FILTER_SAVE(obj)      GTK_CHECK_TYPE (obj, camel_mime_filter_save_get_type ())
-
-typedef struct _CamelMimeFilterSave      CamelMimeFilterSave;
-typedef struct _CamelMimeFilterSaveClass CamelMimeFilterSaveClass;
-
-struct _CamelMimeFilterSave {
-	CamelMimeFilter parent;
-
-	struct _CamelMimeFilterSavePrivate *priv;
-
-	char *filename;
-	int fd;
-};
-
-struct _CamelMimeFilterSaveClass {
-	CamelMimeFilterClass parent_class;
-};
-
-guint		camel_mime_filter_save_get_type	(void);
-CamelMimeFilterSave      *camel_mime_filter_save_new	(void);
-
-CamelMimeFilterSave *camel_mime_filter_save_new_name (const char *name, int flags, int mode);
-
-#endif /* ! _CAMEL_MIME_FILTER_SAVE_H */
diff --git a/camel/camel-mime-filter.c b/camel/camel-mime-filter.c
deleted file mode 100644
index de34a4c973..0000000000
--- a/camel/camel-mime-filter.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-mime-filter.h"
-
-struct _CamelMimeFilterPrivate {
-	char *inbuf;
-	size_t inlen;
-};
-
-#define PRE_HEAD (64)
-#define BACK_HEAD (64)
-#define _PRIVATE(o) (((CamelMimeFilter *)(o))->priv)
-#define FCLASS(o) ((CamelMimeFilterClass *)((GtkObject *)(o))->klass)
-
-static void camel_mime_filter_class_init (CamelMimeFilterClass *klass);
-static void camel_mime_filter_init       (CamelMimeFilter *obj);
-
-static GtkObjectClass *camel_mime_filter_parent;
-
-enum SIGNALS {
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-guint
-camel_mime_filter_get_type (void)
-{
-	static guint type = 0;
-	
-	if (!type) {
-		GtkTypeInfo type_info = {
-			"CamelMimeFilter",
-			sizeof (CamelMimeFilter),
-			sizeof (CamelMimeFilterClass),
-			(GtkClassInitFunc) camel_mime_filter_class_init,
-			(GtkObjectInitFunc) camel_mime_filter_init,
-			(GtkArgSetFunc) NULL,
-			(GtkArgGetFunc) NULL
-		};
-		
-		type = gtk_type_unique (gtk_object_get_type (), &type_info);
-	}
-	
-	return type;
-}
-
-static void
-finalise(GtkObject *o)
-{
-	CamelMimeFilter *f = (CamelMimeFilter *)o;
-	struct _CamelMimeFilterPrivate *p = _PRIVATE(f);
-
-	g_free(f->outreal);
-	g_free(f->backbuf);
-	g_free(p->inbuf);
-	g_free(p);
-
-	((GtkObjectClass *)camel_mime_filter_parent)->finalize (o);
-}
-
-static void
-complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	/* default - do nothing */
-}
-
-static void
-camel_mime_filter_class_init (CamelMimeFilterClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-	
-	camel_mime_filter_parent = gtk_type_class (gtk_object_get_type ());
-
-	object_class->finalize = finalise;
-
-	klass->complete = complete;
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-camel_mime_filter_init (CamelMimeFilter *obj)
-{
-	obj->outreal = NULL;
-	obj->outbuf = NULL;
-	obj->outsize = 0;
-
-	obj->backbuf = NULL;
-	obj->backsize = 0;
-	obj->backlen = 0;
-
-	_PRIVATE(obj) = g_malloc0(sizeof(*obj->priv));
-}
-
-/**
- * camel_mime_filter_new:
- *
- * Create a new CamelMimeFilter object.
- * 
- * Return value: A new CamelMimeFilter widget.
- **/
-CamelMimeFilter *
-camel_mime_filter_new (void)
-{
-	CamelMimeFilter *new = CAMEL_MIME_FILTER ( gtk_type_new (camel_mime_filter_get_type ()));
-	return new;
-}
-
-static void filter_run(CamelMimeFilter *f,
-		       char *in, size_t len, size_t prespace,
-		       char **out, size_t *outlen, size_t *outprespace,
-		       void (*filterfunc)(CamelMimeFilter *f,
-					  char *in, size_t len, size_t prespace,
-					  char **out, size_t *outlen, size_t *outprespace))
-{
-	struct _CamelMimeFilterPrivate *p;
-
-	/*
-	  here we take a performance hit, if the input buffer doesn't
-	  have the pre-space required.  We make a buffer that does ...
-	*/
-	if (prespace < f->backlen) {
-		int newlen = len+prespace;
-		p = _PRIVATE(f);
-		if (p->inlen < newlen) {
-			/* NOTE: g_realloc copies data, we dont need that (slower) */
-			g_free(p->inbuf);
-			p->inbuf = g_malloc(newlen+PRE_HEAD);
-			p->inlen = newlen+PRE_HEAD;
-		}
-		/* copy to end of structure */
-		memcpy(p->inbuf+p->inlen - len, in, len);
-		in = p->inbuf+p->inlen - len;
-		prespace = p->inlen - len;
-	}
-
-	/* preload any backed up data */
-	if (f->backlen > 0) {
-		memcpy(in-f->backlen, f->backbuf, f->backlen);
-		in -= f->backlen;
-		prespace -= f->backlen;
-		f->backlen = 0;
-	}
-	
-	filterfunc(f, in, len, prespace, out, outlen, outprespace);
-}
-
-void camel_mime_filter_filter(CamelMimeFilter *f,
-			      char *in, size_t len, size_t prespace,
-			      char **out, size_t *outlen, size_t *outprespace)
-{
-	if (FCLASS(f)->filter)
-		filter_run(f, in, len, prespace, out, outlen, outprespace, FCLASS(f)->filter);
-	else
-		g_error("Filter function unplmenented in class");
-}
-
-void camel_mime_filter_complete(CamelMimeFilter *f,
-				char *in, size_t len, size_t prespace,
-				char **out, size_t *outlen, size_t *outprespace)
-{
-	if (FCLASS(f)->complete)
-		filter_run(f, in, len, prespace, out, outlen, outprespace, FCLASS(f)->complete);
-}
-
-void camel_mime_filter_reset(CamelMimeFilter *f)
-{
-	if (FCLASS(f)->reset) {
-		FCLASS(f)->reset(f);
-	}
-
-	/* could free some buffers, if they are really big? */
-	f->backlen = 0;
-}
-
-/* sets number of bytes backed up on the input, new calls replace previous ones */
-void camel_mime_filter_backup(CamelMimeFilter *f, char *data, size_t length)
-{
-	if (f->backsize < length) {
-		/* g_realloc copies data, unnecessary overhead */
-		g_free(f->backbuf);
-		f->backbuf = g_malloc(length+BACK_HEAD);
-		f->backsize = length+BACK_HEAD;
-	}
-	f->backlen = length;
-	memcpy(f->backbuf, data, length);
-}
-
-/* ensure this much size available for filter output (if required) */
-void camel_mime_filter_set_size(CamelMimeFilter *f, size_t size, int keep)
-{
-	if (f->outsize < size) {
-		int offset = f->outptr - f->outreal;
-		if (keep) {
-			f->outreal = g_realloc(f->outreal, size + PRE_HEAD*4);
-		} else {
-			g_free(f->outreal);
-			f->outreal = g_malloc(size + PRE_HEAD*4);
-		}
-		f->outptr = f->outreal + offset;
-		f->outbuf = f->outreal + PRE_HEAD*4;
-		f->outsize = size;
-		/* this could be offset from the end of the structure, but 
-		   this should be good enough */
-		f->outpre = PRE_HEAD*4;
-	}
-}
-
diff --git a/camel/camel-mime-filter.h b/camel/camel-mime-filter.h
deleted file mode 100644
index 51b63479de..0000000000
--- a/camel/camel-mime-filter.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/* Abstract class for non-copying filters */
-
-#ifndef _CAMEL_MIME_FILTER_H
-#define _CAMEL_MIME_FILTER_H
-
-#include 
-#include 
-
-#define CAMEL_MIME_FILTER(obj)         GTK_CHECK_CAST (obj, camel_mime_filter_get_type (), CamelMimeFilter)
-#define CAMEL_MIME_FILTER_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, camel_mime_filter_get_type (), CamelMimeFilterClass)
-#define IS_CAMEL_MIME_FILTER(obj)      GTK_CHECK_TYPE (obj, camel_mime_filter_get_type ())
-
-typedef struct _CamelMimeFilter      CamelMimeFilter;
-typedef struct _CamelMimeFilterClass CamelMimeFilterClass;
-
-struct _CamelMimeFilter {
-	GtkObject parent;
-
-	struct _CamelMimeFilterPrivate *priv;
-
-	char *outreal;		/* real malloc'd buffer */
-	char *outbuf;		/* first 'writable' position allowed (outreal + outpre) */
-	char *outptr;
-	int outsize;
-	int outpre;		/* prespace of this buffer */
-
-	char *backbuf;
-	int backsize;
-	int backlen;		/* significant data there */
-};
-
-struct _CamelMimeFilterClass {
-	GtkObjectClass parent_class;
-
-	/* virtual functions */
-	void (*filter)(CamelMimeFilter *f,
-		       char *in, size_t len, size_t prespace,
-		       char **out, size_t *outlen, size_t *outprespace);
-	void (*complete)(CamelMimeFilter *f,
-			 char *in, size_t len, size_t prespace,
-			 char **out, size_t *outlen, size_t *outprespace);
-	void (*reset)(CamelMimeFilter *f);
-};
-
-guint		camel_mime_filter_get_type	(void);
-CamelMimeFilter      *camel_mime_filter_new	(void);
-
-void camel_mime_filter_filter(CamelMimeFilter *f,
-			      char *in, size_t len, size_t prespace,
-			      char **out, size_t *outlen, size_t *outprespace);
-
-void camel_mime_filter_complete(CamelMimeFilter *f,
-				char *in, size_t len, size_t prespace,
-				char **out, size_t *outlen, size_t *outprespace);
-
-void camel_mime_filter_reset(CamelMimeFilter *f);
-
-/* sets/returns number of bytes backed up on the input */
-void camel_mime_filter_backup(CamelMimeFilter *f, char *data, size_t length);
-
-/* ensure this much size available for filter output */
-void camel_mime_filter_set_size(CamelMimeFilter *f, size_t size, int keep);
-
-#endif /* ! _CAMEL_MIME_FILTER_H */
diff --git a/camel/camel-mime-message.c b/camel/camel-mime-message.c
deleted file mode 100644
index 6561515ec3..0000000000
--- a/camel/camel-mime-message.c
+++ /dev/null
@@ -1,638 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelMimeMessage.c : class for a mime_message */
-
-/* 
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-mime-message.h"
-#include 
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include "gmime-utils.h"
-#include "hash-table-utils.h"
-
-typedef enum {
-	HEADER_UNKNOWN,
-	HEADER_FROM,
-	HEADER_REPLY_TO,
-	HEADER_SUBJECT,
-	HEADER_TO,
-	HEADER_CC,
-	HEADER_BCC,
-	HEADER_DATE
-} CamelHeaderType;
-
-static GHashTable *header_name_table;
-
-static CamelMimePartClass *parent_class=NULL;
-
-/* WTF are these for?? */
-static gchar *received_date_str;
-static gchar *sent_date_str;
-static gchar *reply_to_str;
-static gchar *subject_str;
-static gchar *from_str;
-
-static void _add_recipient (CamelMimeMessage *mime_message, const gchar *recipient_type, const gchar *recipient); 
-static void _remove_recipient (CamelMimeMessage *mime_message, const gchar *recipient_type, const gchar *recipient);
-static const GList *_get_recipients (CamelMimeMessage *mime_message, const gchar *recipient_type);
-static void _set_flag (CamelMimeMessage *mime_message, const gchar *flag, gboolean value);
-static gboolean _get_flag (CamelMimeMessage *mime_message, const gchar *flag);
-static GList *_get_flag_list (CamelMimeMessage *mime_message);
-static void _set_message_number (CamelMimeMessage *mime_message, guint number);
-static guint _get_message_number (CamelMimeMessage *mime_message);
-static void _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream);
-static void _finalize (GtkObject *object);
-static void add_header (CamelMedium *medium, const char *header_name, const char *header_value);
-static void set_header (CamelMedium *medium, const char *header_name, const char *header_value);
-static void remove_header (CamelMedium *medium, const char *header_name);
-
-/* Returns the class for a CamelMimeMessage */
-#define CMM_CLASS(so) CAMEL_MIME_MESSAGE_CLASS (GTK_OBJECT(so)->klass)
-#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (GTK_OBJECT(so)->klass)
-#define CMD_CLASS(so) CAMEL_MEDIUM_CLASS (GTK_OBJECT(so)->klass)
-
-
-static void
-_init_header_name_table()
-{
-	header_name_table = g_hash_table_new (g_str_hash, g_str_equal);
-	g_hash_table_insert (header_name_table, "From", (gpointer)HEADER_FROM);
-	g_hash_table_insert (header_name_table, "Reply-To", (gpointer)HEADER_REPLY_TO);
-	g_hash_table_insert (header_name_table, "Subject", (gpointer)HEADER_SUBJECT);
-	g_hash_table_insert (header_name_table, "To", (gpointer)HEADER_TO);
-	g_hash_table_insert (header_name_table, "Cc", (gpointer)HEADER_CC);
-	g_hash_table_insert (header_name_table, "Bcc", (gpointer)HEADER_BCC);
-	g_hash_table_insert (header_name_table, "Date", (gpointer)HEADER_DATE);
-}
-
-static void
-camel_mime_message_class_init (CamelMimeMessageClass *camel_mime_message_class)
-{
-	CamelDataWrapperClass *camel_data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (camel_mime_message_class);
-	/*CamelMimePartClass *camel_mime_part_class = CAMEL_MIME_PART_CLASS (camel_mime_message_class);*/
-	GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_mime_message_class);
-	CamelMediumClass *camel_medium_class = CAMEL_MEDIUM_CLASS (camel_mime_message_class);
-	
-	parent_class = gtk_type_class (camel_mime_part_get_type ());
-	_init_header_name_table();
-	
-	received_date_str = "";
-	sent_date_str = "";
-	reply_to_str = "Reply-To";
-	subject_str = "Subject";
-	from_str = "From";
-	
-	/* virtual method definition */
-	camel_mime_message_class->add_recipient = _add_recipient; 
-	camel_mime_message_class->remove_recipient = _remove_recipient;
-	camel_mime_message_class->get_recipients = _get_recipients;
-	camel_mime_message_class->set_flag = _set_flag;
-	camel_mime_message_class->get_flag = _get_flag;
-	camel_mime_message_class->get_flag_list = _get_flag_list;
-	camel_mime_message_class->set_message_number = _set_message_number;
-	camel_mime_message_class->get_message_number = _get_message_number;
-	
-	/* virtual method overload */
-	camel_data_wrapper_class->write_to_stream = _write_to_stream;
-
-	camel_medium_class->add_header = add_header;
-	camel_medium_class->set_header = set_header;
-	camel_medium_class->remove_header = remove_header;
-	
-	gtk_object_class->finalize = _finalize;
-}
-
-
-
-
-static void
-camel_mime_message_init (gpointer object, gpointer klass)
-{
-	CamelMimeMessage *camel_mime_message = CAMEL_MIME_MESSAGE (object);
-	
-	camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (object),
-					  "message/rfc822");
-
-	camel_mime_message->recipients =  camel_recipient_table_new ();
-	camel_mime_message->flags =
-		g_hash_table_new (g_strcase_hash, g_strcase_equal);
-
-	camel_mime_message->subject = NULL;
-	camel_mime_message->reply_to = NULL;
-	camel_mime_message->from = NULL;
-	camel_mime_message->folder = NULL;
-	camel_mime_message->date = CAMEL_MESSAGE_DATE_CURRENT;
-	camel_mime_message->date_offset = 0;
-	camel_mime_message->date_str = NULL;
-}
-
-GtkType
-camel_mime_message_get_type (void)
-{
-	static GtkType camel_mime_message_type = 0;
-	
-	if (!camel_mime_message_type)	{
-		GtkTypeInfo camel_mime_message_info =	
-		{
-			"CamelMimeMessage",
-			sizeof (CamelMimeMessage),
-			sizeof (CamelMimeMessageClass),
-			(GtkClassInitFunc) camel_mime_message_class_init,
-			(GtkObjectInitFunc) camel_mime_message_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_mime_message_type = gtk_type_unique (camel_mime_part_get_type (), &camel_mime_message_info);
-	}
-	
-	return camel_mime_message_type;
-}
-
-
-static void           
-_finalize (GtkObject *object)
-{
-	CamelMimeMessage *message = CAMEL_MIME_MESSAGE (object);
-	
-	g_free (message->date_str);
-	g_free (message->subject);
-	g_free (message->reply_to);
-	g_free (message->from);
-	
-	if (message->recipients) camel_recipient_table_unref (message->recipients);
-	if (message->folder) gtk_object_unref (GTK_OBJECT (message->folder));
-	
-	if (message->flags)
-		g_hash_table_foreach (message->flags, g_hash_table_generic_free, NULL);
-	g_hash_table_destroy(message->flags);
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-CamelMimeMessage *
-camel_mime_message_new (void) 
-{
-	CamelMimeMessage *mime_message;
-	mime_message = gtk_type_new (CAMEL_MIME_MESSAGE_TYPE);
-	
-	return mime_message;
-}
-
-
-/* **** Date: */
-
-void
-camel_mime_message_set_date(CamelMimeMessage *message,  time_t date, int offset)
-{
-	g_assert(message);
-	if (date == CAMEL_MESSAGE_DATE_CURRENT) {
-		struct tm *local;
-		int tz;
-
-		date = time(0);
-		local = localtime(&date);
-		offset = 0;
-#if defined(HAVE_TIMEZONE)
-		tz = timezone;
-#elif defined(HAVE_TM_GMTOFF)
-		tz = local->tm_gmtoff;
-#endif
-		offset = ((tz/60/60) * 100) + (tz/60 % 60);
-	}
-	message->date = date;
-	message->date_offset = offset;
-	g_free(message->date_str);
-	message->date_str = header_format_date(date, offset);
-
-	CMD_CLASS(parent_class)->set_header((CamelMedium *)message, "Date", message->date_str);
-}
-
-void
-camel_mime_message_get_date(CamelMimeMessage *message,  time_t *date, int *offset)
-{
-	if (message->date == CAMEL_MESSAGE_DATE_CURRENT)
-		camel_mime_message_set_date(message, CAMEL_MESSAGE_DATE_CURRENT, 0);
-	if (date)
-		*date = message->date;
-	if (offset)
-		*offset = message->date_offset;
-}
-
-char *
-camel_mime_message_get_date_string(CamelMimeMessage *message)
-{
-	if (message->date == CAMEL_MESSAGE_DATE_CURRENT)
-		camel_mime_message_set_date(message, CAMEL_MESSAGE_DATE_CURRENT, 0);
-	return message->date_str;
-}
-
-/* **** Reply-To: */
-
-void
-camel_mime_message_set_reply_to (CamelMimeMessage *mime_message, const gchar *reply_to)
-{
-	g_assert (mime_message);
-
-	/* FIXME: check format of string, handle it nicer ... */
-
-	g_free(mime_message->reply_to);
-	mime_message->reply_to = g_strdup(reply_to);
-	CMD_CLASS(parent_class)->set_header((CamelMedium *)mime_message, "Reply-To", reply_to);
-}
-
-const gchar *
-camel_mime_message_get_reply_to (CamelMimeMessage *mime_message)
-{
-	g_assert (mime_message);
-
-	return mime_message->reply_to;
-}
-
-void
-camel_mime_message_set_subject (CamelMimeMessage *mime_message,
-				const gchar *subject)
-{
-	char *text;
-	g_assert (mime_message);
-
-	g_free(mime_message->subject);
-	mime_message->subject = g_strdup(subject);
-	text = header_encode_string(subject);
-	CMD_CLASS(parent_class)->set_header((CamelMedium *)mime_message, "Subject", text);
-	g_free(text);
-}
-
-const gchar *
-camel_mime_message_get_subject (CamelMimeMessage *mime_message)
-{
-	g_assert (mime_message);
-
-	return mime_message->subject;
-}
-
-/* *** From: */
-void
-camel_mime_message_set_from (CamelMimeMessage *mime_message, const gchar *from)
-{
-	g_assert (mime_message);
-
-	g_free(mime_message->from);
-	mime_message->from = g_strdup(from);
-	CMD_CLASS(parent_class)->set_header((CamelMedium *)mime_message, "From", from);
-}
-
-const gchar *
-camel_mime_message_get_from (CamelMimeMessage *mime_message)
-{
-	g_assert (mime_message);
-
-	return mime_message->from;
-}
-
-/*  ****  */
-
-static void
-_add_recipient (CamelMimeMessage *mime_message, 
-		const gchar *recipient_type, 
-		const gchar *recipient) 
-{
-	camel_recipient_table_add (mime_message->recipients, recipient_type, recipient); 
-}
-
-
-
-void
-camel_mime_message_add_recipient (CamelMimeMessage *mime_message, 
-				  const gchar *recipient_type, 
-				  const gchar *recipient) 
-{
-	g_assert (mime_message);
-	g_return_if_fail (!mime_message->expunged);
-	CMM_CLASS (mime_message)->add_recipient (mime_message, recipient_type, recipient);
-}
-
-
-static void
-_remove_recipient (CamelMimeMessage *mime_message, 
-		   const gchar *recipient_type, 
-		   const gchar *recipient) 
-{
-	camel_recipient_table_remove (mime_message->recipients, recipient_type, recipient); 
-}
-
-
-void
-camel_mime_message_remove_recipient (CamelMimeMessage *mime_message, 
-				     const gchar *recipient_type, 
-				     const gchar *recipient) 
-{
-	g_assert (mime_message);
-	g_return_if_fail (!mime_message->expunged);
-	CMM_CLASS (mime_message)->remove_recipient (mime_message, recipient_type, recipient);
-}
-
-
-static const GList *
-_get_recipients (CamelMimeMessage *mime_message, 
-		 const gchar *recipient_type)
-{
-	return camel_recipient_table_get (mime_message->recipients, recipient_type);
-}
-
-
-const GList *
-camel_mime_message_get_recipients (CamelMimeMessage *mime_message, 
-				   const gchar *recipient_type)
-{
-	g_assert (mime_message);
-	g_return_val_if_fail (!mime_message->expunged, NULL);
-	return CMM_CLASS (mime_message)->get_recipients (mime_message, recipient_type);
-}
-
-
-
-/*  ****  */
-
-
-
-static void
-_set_flag (CamelMimeMessage *mime_message, const gchar *flag, gboolean value)
-{
-	gchar *old_flags;
-	gboolean ptr_value;
-
-	if (! g_hash_table_lookup_extended (mime_message->flags, 
-					    flag, 
-					    (gpointer)&(old_flags),
-					    (gpointer)&(ptr_value)) ) {
-		
-		g_hash_table_insert (mime_message->flags, g_strdup (flag), GINT_TO_POINTER (value));
-	} else 
-		g_hash_table_insert (mime_message->flags, old_flags, GINT_TO_POINTER (value));
-	
-}
-
-void
-camel_mime_message_set_flag (CamelMimeMessage *mime_message, const gchar *flag, gboolean value)
-{
-	g_assert (mime_message);
-	g_return_if_fail (!mime_message->expunged);
-	CMM_CLASS (mime_message)->set_flag (mime_message, flag, value);
-}
-
-
-
-static gboolean 
-_get_flag (CamelMimeMessage *mime_message, const gchar *flag)
-{
-	return GPOINTER_TO_INT (g_hash_table_lookup (mime_message->flags, flag));
-}
-
-gboolean 
-camel_mime_message_get_flag (CamelMimeMessage *mime_message, const gchar *flag)
-{
-	g_assert (mime_message);
-	g_return_val_if_fail (!mime_message->expunged, FALSE);
-	return CMM_CLASS (mime_message)->get_flag (mime_message, flag);
-}
-
-
-
-static void
-_add_flag_to_list (gpointer key, gpointer value, gpointer user_data)
-{
-	GList **flag_list = (GList **)user_data;
-	gchar *flag_name = (gchar *)key;
-	
-	if ((flag_name) && (flag_name[0] != '\0'))
-		*flag_list = g_list_append (*flag_list, flag_name);
-}
-
-static GList *
-_get_flag_list (CamelMimeMessage *mime_message)
-{
-	GList *flag_list = NULL;
-	
-	if (mime_message->flags)
-		g_hash_table_foreach (mime_message->flags, _add_flag_to_list, &flag_list);
-	return flag_list;
-}
-
-
-GList *
-camel_mime_message_get_flag_list (CamelMimeMessage *mime_message)
-{
-	g_assert (mime_message);
-	g_return_val_if_fail (!mime_message->expunged, NULL);
-	return CMM_CLASS (mime_message)->get_flag_list (mime_message);
-}
-
-
-
-static void 
-_set_message_number (CamelMimeMessage *mime_message, guint number)
-{
-	mime_message->message_number = number;
-}
-
-static guint 
-_get_message_number (CamelMimeMessage *mime_message)
-{
-	return mime_message->message_number;
-}
-
-
-
-guint
-camel_mime_message_get_message_number (CamelMimeMessage *mime_message)
-{
-	return CMM_CLASS (mime_message)->get_message_number (mime_message);
-}
-
-
-
-
-#ifdef WHPT
-#warning : WHPT is already defined !!!!!!
-#endif
-#define WHPT gmime_write_header_pair_to_stream
-
-static void
-_write_one_recipient_to_stream (gchar *recipient_type,
-				GList *recipient_list,
-				gpointer user_data)
-{
-	
-	CamelStream *stream = (CamelStream *)user_data;
-	if  (recipient_type)
-		gmime_write_header_with_glist_to_stream (stream, recipient_type, recipient_list, ", ");
-}
-
-static void
-_write_recipients_to_stream (CamelMimeMessage *mime_message, CamelStream *stream)
-{
-	camel_recipient_foreach_recipient_type (mime_message->recipients, 
-						_write_one_recipient_to_stream, 
-						(gpointer)stream);
-}
-
-static void
-_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelMimeMessage *mm = CAMEL_MIME_MESSAGE (data_wrapper);
-
-#if 0
-#warning each header should be stored in the raw headers
-	WHPT (stream, "From", mm->from);
-	WHPT (stream, "Reply-To", mm->reply_to);
-	WHPT (stream, "Date", mm->received_date);
-	WHPT (stream, "Subject", mm->subject);
-#endif
-
-	/* force mandatory headers ... */
-	if (mm->from == NULL) {
-		g_warning("No from set for message");
-		camel_mime_message_set_from(mm, "");
-	}
-	if (mm->date_str == NULL) {
-		g_warning("Application did not set date, using 'now'");
-		camel_mime_message_set_date(mm, CAMEL_MESSAGE_DATE_CURRENT, 0);
-	}
-	if (mm->subject == NULL) {
-		g_warning("Application did not set subject, creating one");
-		camel_mime_message_set_subject(mm, "No Subject");
-	}
-
-#warning need to store receipients lists to headers
-#if 0
-	/* FIXME: remove this snot ... */
-	_write_recipients_to_stream (mm, stream);
-#endif
-	/* FIXME correct to do it here?  */
-	WHPT (stream, "Mime-Version", "1.0");
-
-	CAMEL_DATA_WRAPPER_CLASS (parent_class)->write_to_stream (data_wrapper, stream);
-	
-}
-
-/*******************************/
-/* mime message header parsing */
-
-/* FIXME: This is totally totally broken */
-static void
-_set_recipient_list_from_string (CamelMimeMessage *message, const char *recipient_type, const char *recipients_string)
-{
-	GList *recipients_list;
-
-#warning need to parse receipient lists properly - BROKEN!!!
-	recipients_list = string_split (
-					recipients_string, ',', "\t ",
-					STRING_TRIM_STRIP_TRAILING | STRING_TRIM_STRIP_LEADING);
-	
-	camel_recipient_table_add_list (message->recipients, recipient_type, recipients_list);
-	
-}
-
-/* FIXME: check format of fields. */
-static gboolean
-process_header(CamelMedium *medium, const char *header_name, const char *header_value)
-{
-	CamelHeaderType header_type;
-	CamelMimeMessage *message = CAMEL_MIME_MESSAGE (medium);
-
-	header_type = (CamelHeaderType) g_hash_table_lookup (header_name_table, header_name);
-	switch (header_type) {
-	case HEADER_FROM:
-		g_free(message->from); /* FIXME: parse the from line into something useful */
-		message->from = g_strdup(header_value);
-		break;
-	case HEADER_REPLY_TO:
-		g_free(message->reply_to); /* FIXME: parse the from line into something useful */
-		message->reply_to = g_strdup(header_value);
-		break;
-	case HEADER_SUBJECT:
-		g_free(message->subject);
-		message->subject = header_decode_string(header_value);
-		break;
-	case HEADER_TO:
-		if (header_value)
-			_set_recipient_list_from_string (message, "To", header_value);
-		else
-			camel_recipient_table_remove_type (message->recipients, "To");
-		break;
-	case HEADER_CC:
-		if (header_value)
-			_set_recipient_list_from_string (message, "Cc", header_value);
-		else
-			camel_recipient_table_remove_type (message->recipients, "Cc");
-		break;
-	case HEADER_BCC:
-		if (header_value)
-			_set_recipient_list_from_string (message, "Bcc", header_value);
-		else
-			camel_recipient_table_remove_type (message->recipients, "Bcc");
-		break;
-	case HEADER_DATE:
-		g_free(message->date_str);
-		message->date_str = g_strdup(header_value);
-		if (header_value) {
-			message->date = header_decode_date(header_value, &message->date_offset);
-		} else {
-			message->date = CAMEL_MESSAGE_DATE_CURRENT;
-		}
-		break;
-	default:
-		return FALSE;
-	}
-	return TRUE;
-}
-
-static void
-set_header(CamelMedium *medium, const char *header_name, const char *header_value)
-{
-	process_header(medium, header_name, header_value);
-	parent_class->parent_class.set_header (medium, header_name, header_value);
-}
-
-static void
-add_header(CamelMedium *medium, const char *header_name, const char *header_value)
-{
-	/* if we process it, then it must be forced unique as well ... */
-	if (process_header(medium, header_name, header_value))
-		parent_class->parent_class.set_header (medium, header_name, header_value);
-	else
-		parent_class->parent_class.add_header (medium, header_name, header_value);
-}
-
-static void
-remove_header(CamelMedium *medium, const char *header_name)
-{
-	process_header(medium, header_name, NULL);
-	parent_class->parent_class.remove_header (medium, header_name);
-}
-
diff --git a/camel/camel-mime-message.h b/camel/camel-mime-message.h
deleted file mode 100644
index ddcf846c20..0000000000
--- a/camel/camel-mime-message.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelMimeMessage.h : class for a mime message */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_MIME_MESSAGE_H
-#define CAMEL_MIME_MESSAGE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-mime-part.h"
-#include "camel-recipient.h"
-
-
-#define CAMEL_RECIPIENT_TYPE_TO "To"
-#define CAMEL_RECIPIENT_TYPE_CC "Cc"
-#define CAMEL_RECIPIENT_TYPE_BCC "Bcc"
-
-
-#define CAMEL_MIME_MESSAGE_TYPE     (camel_mime_message_get_type ())
-#define CAMEL_MIME_MESSAGE(obj)     (GTK_CHECK_CAST((obj), CAMEL_MIME_MESSAGE_TYPE, CamelMimeMessage))
-#define CAMEL_MIME_MESSAGE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MIME_MESSAGE_TYPE, CamelMimeMessageClass))
-#define CAMEL_IS_MIME_MESSAGE(o)    (GTK_CHECK_TYPE((o), CAMEL_MIME_MESSAGE_TYPE))
-
-
-/* specify local time */
-#define CAMEL_MESSAGE_DATE_CURRENT (~0)
-
-struct _CamelMimeMessage
-{
-	CamelMimePart parent_object;
-
-	/* header fields */
-	time_t date;
-	int date_offset;	/* GMT offset */
-	char *date_str;		/* cached copy of date string */
-
-	gchar *subject;
-	gchar *reply_to;
-
-	gchar *from;
-	CamelRecipientTable *recipients;
-
-	/* other fields */
-	GHashTable *flags; /* boolean values */
-	gboolean expunged;
-	
-	guint message_number; /* set by folder object when retrieving message */
-	gchar *message_uid;
-
-	CamelFolder *folder;
-
-};
-
-
-
-typedef struct {
-	CamelMimePartClass parent_class;
-	
-	/* Virtual methods */	
-	void            (*set_received_date)      (CamelMimeMessage *mime_message, 
-						   const gchar *received_date);
-	const gchar *   (*get_received_date)      (CamelMimeMessage *mime_message);
-	const gchar *   (*get_sent_date)          (CamelMimeMessage *mime_message);
-	void            (*set_reply_to)           (CamelMimeMessage *mime_message, 
-						   const gchar *reply_to);
-	const gchar *   (*get_reply_to)           (CamelMimeMessage *mime_message);
-	void            (*set_subject)            (CamelMimeMessage *mime_message, 
-						   const gchar *subject);
-	const gchar *   (*get_subject)            (CamelMimeMessage *mime_message);
-	void            (*set_from)               (CamelMimeMessage *mime_message, 
-						   const gchar *from);
-	const gchar *   (*get_from)               (CamelMimeMessage *mime_message);
-	void            (*add_recipient)          (CamelMimeMessage *mime_message, 
-						   const gchar *recipient_type, 
-						   const gchar *recipient); 
-	void            (*remove_recipient)       (CamelMimeMessage *mime_message, 
-						   const gchar *recipient_type, 
-						   const gchar *recipient);
-	const GList *   (*get_recipients)         (CamelMimeMessage *mime_message, 
-						   const gchar *recipient_type);
-	void            (*set_flag)               (CamelMimeMessage *mime_message, 
-						   const gchar *flag, 
-						   gboolean value);
-	gboolean        (*get_flag)               (CamelMimeMessage *mime_message, 
-						   const gchar *flag);
-	GList *         (*get_flag_list)          (CamelMimeMessage *mime_message);
-	void            (*set_message_number)     (CamelMimeMessage *mime_message, 
-						   guint number);
-	guint           (*get_message_number)     (CamelMimeMessage *mime_message);
-
-} CamelMimeMessageClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_mime_message_get_type (void);
-
-
-/* public methods */
-CamelMimeMessage * camel_mime_message_new                  (void);
-
-
-void               camel_mime_message_set_date		   (CamelMimeMessage *mime_message,  time_t date, int offset);
-void               camel_mime_message_get_date		   (CamelMimeMessage *mime_message,  time_t *date, int *offset);
-char		  *camel_mime_message_get_date_string	   (CamelMimeMessage *mime_message);
-
-const gchar *      camel_mime_message_get_received_date    (CamelMimeMessage *mime_message);
-const gchar *      camel_mime_message_get_sent_date        (CamelMimeMessage *mime_message);
-void               camel_mime_message_set_reply_to         (CamelMimeMessage *mime_message, 
-							    const gchar *reply_to);
-const gchar *      camel_mime_message_get_reply_to         (CamelMimeMessage *mime_message);
-void               camel_mime_message_set_subject          (CamelMimeMessage *mime_message, 
-							    const gchar *subject);
-const gchar *      camel_mime_message_get_subject          (CamelMimeMessage *mime_message);
-void               camel_mime_message_set_from             (CamelMimeMessage *mime_message, 
-							    const gchar *from);
-const gchar *      camel_mime_message_get_from             (CamelMimeMessage *mime_message);
-
-void               camel_mime_message_add_recipient        (CamelMimeMessage *mime_message, 
-							    const gchar *recipient_type, 
-							    const gchar *recipient);
-void               camel_mime_message_remove_recipient     (CamelMimeMessage *mime_message, 
-							    const gchar *recipient_type, 
-							    const gchar *recipient);
-const GList *      camel_mime_message_get_recipients       (CamelMimeMessage *mime_message, 
-							    const gchar *recipient_type);
-
-void               camel_mime_message_set_flag             (CamelMimeMessage *mime_message, 
-							    const gchar *flag, 
-							    gboolean value);
-gboolean           camel_mime_message_get_flag             (CamelMimeMessage *mime_message, 
-							    const gchar *flag);
-GList *            camel_mime_message_get_flag_list        (CamelMimeMessage *mime_message);
-
-guint              camel_mime_message_get_message_number   (CamelMimeMessage *mime_message);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MIME_MESSAGE_H */
diff --git a/camel/camel-mime-parser.c b/camel/camel-mime-parser.c
deleted file mode 100644
index 2f1d9fd70d..0000000000
--- a/camel/camel-mime-parser.c
+++ /dev/null
@@ -1,1248 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/* What should hopefully be a fast mail parser */
-
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#include 
-#include 
-
-#include 
-
-#include "camel-mime-parser.h"
-#include "camel-mime-utils.h"
-#include "camel-mime-filter.h"
-#include "camel-stream.h"
-#include "camel-seekable-stream.h"
-
-#define r(x)
-#define h(x)
-#define c(x)
-#define d(x)
-
-#define SCAN_BUF 4096		/* size of read buffer */
-#define SCAN_HEAD 128		/* headroom guaranteed to be before each read buffer */
-
-/* a little hacky, but i couldn't be bothered renaming everything */
-#define _header_scan_state _CamelMimeParserPrivate
-#define _PRIVATE(o) (((CamelMimeParser *)(o))->priv)
-
-struct _header_scan_state {
-
-    /* global state */
-
-	enum _header_state state;
-
-	/* for building headers during scanning */
-	char *outbuf;
-	char *outptr;
-	char *outend;
-
-	int fd;			/* input for a fd input */
-	CamelStream *stream;	/* or for a stream */
-
-	/* for scanning input buffers */
-	char *realbuf;		/* the real buffer, SCAN_HEAD*2 + SCAN_BUF bytes */
-	char *inbuf;		/* points to a subset of the allocated memory, the underflow */
-	char *inptr;		/* (upto SCAN_HEAD) is for use by filters so they dont copy all data */
-	char *inend;
-
-	int atleast;
-
-	int seek;		/* current offset to start of buffer */
-	int unstep;		/* how many states to 'unstep' (repeat the current state) */
-
-	int midline;		/* are we mid-line interrupted? */
-	int scan_from;		/* do we care about From lines? */
-
-	int start_of_from;	/* where from started */
-	int start_of_headers;	/* where headers started from the last scan */
-
-	int header_start;	/* start of last header, or -1 */
-
-	struct _header_scan_stack *top_part;	/* top of message header */
-	int top_start;		/* offset of start */
-
-	struct _header_scan_stack *pending; /* if we're pending part info, from the wrong part end */
-
-	/* filters to apply to all content before output */
-	int filterid;		/* id of next filter */
-	struct _header_scan_filter *filters;
-
-    /* per message/part info */
-	struct _header_scan_stack *parts;
-
-};
-
-struct _header_scan_stack {
-	struct _header_scan_stack *parent;
-
-	enum _header_state savestate; /* state at invocation of this part */
-
-	struct _header_raw *headers;	/* headers for this part */
-
-	struct _header_content_type *content_type;
-
-	char *boundary;		/* for multipart/ * boundaries, including leading -- and trailing -- for the final part */
-	int boundarylen;	/* length of boundary, including leading -- */
-};
-
-struct _header_scan_filter {
-	struct _header_scan_filter *next;
-	int id;
-	CamelMimeFilter *filter;
-};
-
-static void folder_scan_step(struct _header_scan_state *s, char **databuffer, int *datalength);
-static int folder_scan_init_with_fd(struct _header_scan_state *s, int fd);
-static int folder_scan_init_with_stream(struct _header_scan_state *s, CamelStream *stream);
-static struct _header_scan_state *folder_scan_init(void);
-static void folder_scan_close(struct _header_scan_state *s);
-static struct _header_scan_stack *folder_scan_content(struct _header_scan_state *s, int *lastone, char **data, int *length);
-static struct _header_scan_stack *folder_scan_header(struct _header_scan_state *s, int *lastone);
-static int folder_scan_skip_line(struct _header_scan_state *s);
-static off_t folder_seek(struct _header_scan_state *s, off_t offset, int whence);
-static off_t folder_tell(struct _header_scan_state *s);
-
-static void camel_mime_parser_class_init (CamelMimeParserClass *klass);
-static void camel_mime_parser_init       (CamelMimeParser *obj);
-
-static char *states[] = {
-	"HSCAN_INITIAL",
-	"HSCAN_FROM",		/* got 'From' line */
-	"HSCAN_HEADER",		/* toplevel header */
-	"HSCAN_BODY",		/* scanning body of message */
-	"HSCAN_MULTIPART",	/* got multipart header */
-	"HSCAN_MESSAGE",		/* rfc822 message */
-
-	"HSCAN_PART",		/* part of a multipart */
-	"",
-
-	"HSCAN_EOF",		/* end of file */
-	"HSCAN_FROM_END",
-	"HSCAN_HEAER_END",
-	"HSCAN_BODY_END",
-	"HSCAN_MULTIPART_END",
-	"HSCAN_MESSAGE_END",
-};
-
-static GtkObjectClass *camel_mime_parser_parent;
-
-enum SIGNALS {
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-guint
-camel_mime_parser_get_type (void)
-{
-	static guint type = 0;
-	
-	if (!type) {
-		GtkTypeInfo type_info = {
-			"CamelMimeParser",
-			sizeof (CamelMimeParser),
-			sizeof (CamelMimeParserClass),
-			(GtkClassInitFunc) camel_mime_parser_class_init,
-			(GtkObjectInitFunc) camel_mime_parser_init,
-			(GtkArgSetFunc) NULL,
-			(GtkArgGetFunc) NULL
-		};
-		
-		type = gtk_type_unique (gtk_object_get_type (), &type_info);
-	}
-	
-	return type;
-}
-
-static void
-finalise(GtkObject *o)
-{
-	struct _header_scan_state *s = _PRIVATE(o);
-
-	folder_scan_close(s);
-
-	((GtkObjectClass *)camel_mime_parser_parent)->finalize (o);
-}
-
-static void
-camel_mime_parser_class_init (CamelMimeParserClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-	
-	camel_mime_parser_parent = gtk_type_class (gtk_object_get_type ());
-
-	object_class->finalize = finalise;
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-camel_mime_parser_init (CamelMimeParser *obj)
-{
-	struct _header_scan_state *s;
-
-	s = folder_scan_init();
-	_PRIVATE(obj) = s;
-}
-
-/**
- * camel_mime_parser_new:
- *
- * Create a new CamelMimeParser object.
- * 
- * Return value: A new CamelMimeParser widget.
- **/
-CamelMimeParser *
-camel_mime_parser_new (void)
-{
-	CamelMimeParser *new = CAMEL_MIME_PARSER ( gtk_type_new (camel_mime_parser_get_type ()));
-	return new;
-}
-
-
-int
-camel_mime_parser_filter_add(CamelMimeParser *m, CamelMimeFilter *mf)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	struct _header_scan_filter *f, *new;
-
-	new = g_malloc(sizeof(*new));
-	new->filter = mf;
-	new->id = s->filterid++;
-	if (s->filterid == -1)
-		s->filterid++;
-	new->next = 0;
-	gtk_object_ref((GtkObject *)mf);
-
-	/* yes, this is correct, since 'next' is the first element of the struct */
-	f = (struct _header_scan_filter *)&s->filters;
-	while (f->next)
-		f = f->next;
-	f->next = new;
-	return new->id;
-}
-
-void
-camel_mime_parser_filter_remove(CamelMimeParser *m, int id)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	struct _header_scan_filter *f, *old;
-	
-	f = (struct _header_scan_filter *)&s->filters;
-	while (f && f->next) {
-		old = f->next;
-		if (old->id == id) {
-			gtk_object_unref((GtkObject *)old->filter);
-			f->next = old->next;
-			g_free(old);
-			/* there should only be a single matching id, but
-			   scan the whole lot anyway */
-		}
-		f = f->next;
-	}
-}
-
-const char *
-camel_mime_parser_header(CamelMimeParser *m, const char *name, int *offset)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	if (s->parts &&
-	    s->parts->headers) {
-		return header_raw_find(&s->parts->headers, name, offset);
-	}
-	return NULL;
-}
-
-struct _header_raw *
-camel_mime_parser_headers_raw(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	if (s->parts)
-		return s->parts->headers;
-	return NULL;
-}
-
-int
-camel_mime_parser_init_with_fd(CamelMimeParser *m, int fd)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return folder_scan_init_with_fd(s, fd);
-}
-
-int
-camel_mime_parser_init_with_stream(CamelMimeParser *m, CamelStream *stream)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return folder_scan_init_with_stream(s, stream);
-}
-
-void
-camel_mime_parser_scan_from(CamelMimeParser *m, int scan_from)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	s->scan_from = scan_from;
-}
-
-struct _header_content_type *
-camel_mime_parser_content_type(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	/* FIXME: should this search up until its found the 'right'
-	   content-type?  can it? */
-	if (s->parts)
-		return s->parts->content_type;
-	return NULL;
-}
-
-void camel_mime_parser_unstep(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	s->unstep++;
-}
-
-enum _header_state
-camel_mime_parser_step(CamelMimeParser *m, char **databuffer, int *datalength)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	d(printf("OLD STATE:  '%s' :\n", states[s->state]));
-
-	if (s->unstep <= 0)
-		folder_scan_step(s, databuffer, datalength);
-	else
-		s->unstep--;
-
-	d(printf("NEW STATE:  '%s' :\n", states[s->state]));
-
-	return s->state;
-}
-
-off_t camel_mime_parser_tell(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return folder_tell(s);
-}
-
-off_t camel_mime_parser_tell_start_headers(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return s->start_of_headers;
-}
-
-off_t camel_mime_parser_tell_start_from(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return s->start_of_from;
-}
-
-off_t camel_mime_parser_seek(CamelMimeParser *m, off_t off, int whence)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	return folder_seek(s, off, whence);
-}
-
-enum _header_state camel_mime_parser_state(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	return s->state;
-}
-
-CamelStream *camel_mime_parser_stream(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	return s->stream;
-}
-
-int camel_mime_parser_fd(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	return s->fd;
-}
-
-/* ********************************************************************** */
-/*    Implementation							  */
-/* ********************************************************************** */
-
-/* read the next bit of data, ensure there is enough room 'atleast' bytes */
-static int
-folder_read(struct _header_scan_state *s)
-{
-	int len;
-	int inoffset;
-
-	if (s->inptrinend-s->atleast)
-		return s->inend-s->inptr;
-
-	/* check for any remaning bytes (under the atleast limit( */
-	inoffset = s->inend - s->inptr;
-	if (inoffset>0) {
-		memcpy(s->inbuf, s->inptr, inoffset);
-	}
-	if (s->stream) {
-		len = camel_stream_read(s->stream, s->inbuf+inoffset, SCAN_BUF-inoffset);
-	} else {
-		len = read(s->fd, s->inbuf+inoffset, SCAN_BUF-inoffset);
-	}
-	r(printf("read %d bytes, offset = %d\n", len, inoffset));
-	if (len>=0) {
-		/* add on the last read block */
-		s->seek += s->inptr - s->inbuf;
-		s->inptr = s->inbuf;
-		s->inend = s->inbuf+len+inoffset;
-		r(printf("content = %d '%.*s'\n",s->inend - s->inptr,  s->inend - s->inptr, s->inptr));
-	}
-	r(printf("content = %d '%.*s'\n", s->inend - s->inptr,  s->inend - s->inptr, s->inptr));
-	return s->inend-s->inptr;
-}
-
-/* return the current absolute position of the data pointer */
-static off_t
-folder_tell(struct _header_scan_state *s)
-{
-	return s->seek + (s->inptr - s->inbuf);
-}
-
-/*
-  need some way to prime the parser state, so this actually works for 
-  other than top-level messages
-*/
-static off_t
-folder_seek(struct _header_scan_state *s, off_t offset, int whence)
-{
-	off_t newoffset;
-	int len;
-
-	if (s->stream) {
-		if (CAMEL_IS_SEEKABLE_STREAM(s->stream)) {
-			/* NOTE: assumes whence seekable stream == whence libc, which is probably
-			   the case (or bloody well should've been) */
-			newoffset = camel_seekable_stream_seek((CamelSeekableStream *)s->stream, offset, whence);
-		} else {
-			newoffset = -1;
-			errno = EINVAL;
-		}
-	} else {
-		newoffset = lseek(s->fd, offset, whence);
-	}
-	if (newoffset != -1) {
-		s->seek = newoffset;
-		s->inptr = s->inbuf;
-		s->inend = s->inbuf;
-		if (s->stream)
-			len = camel_stream_read(s->stream, s->inbuf, SCAN_BUF);
-		else
-			len = read(s->fd, s->inbuf, SCAN_BUF);
-		if (len>=0)
-			s->inend = s->inbuf+len;
-		else
-			newoffset = -1;
-	}
-	return newoffset;
-}
-
-static void
-folder_push_part(struct _header_scan_state *s, struct _header_scan_stack *h)
-{
-	h->parent = s->parts;
-	s->parts = h;
-}
-
-static void
-folder_pull_part(struct _header_scan_state *s)
-{
-	struct _header_scan_stack *h;
-
-	h = s->parts;
-	if (h) {
-		s->parts = h->parent;
-		g_free(h->boundary);
-		header_raw_clear(&h->headers);
-		header_content_type_unref(h->content_type);
-		g_free(h);
-	} else {
-		g_warning("Header stack underflow!\n");
-	}
-}
-
-static int
-folder_scan_skip_line(struct _header_scan_state *s)
-{
-	int atleast = s->atleast;
-	register char *inptr, *inend, c;
-	int len;
-
-	s->atleast = 1;
-
-	while ( (len = folder_read(s)) > 0 && len > s->atleast) { /* ensure we have at least enough room here */
-		inptr = s->inptr;
-		inend = s->inend-1;
-
-		c = -1;
-		while (inptrinptr = inptr;
-
-		if (c=='\n') {
-			s->atleast = atleast;
-			return 0;
-		}
-	}
-
-	s->atleast = atleast;
-
-	return -1;		/* not found */
-}
-
-static struct _header_scan_stack *
-folder_boundary_check(struct _header_scan_state *s, const char *boundary, int *lastone)
-{
-	struct _header_scan_stack *part;
-	int len = s->atleast-2;	/* make sure we dont access past the buffer */
-
-	h(printf("checking boundary marker upto %d bytes\n", len));
-	part = s->parts;
-	while (part) {
-		h(printf("  boundary: %s\n", part->boundary));
-		h(printf("   against: '%.*s'\n", len, boundary));
-		if (part->boundary
-		    && part->boundarylen <= len
-		    && memcmp(boundary, part->boundary, part->boundarylen)==0) {
-			h(printf("matched boundary: %s\n", part->boundary));
-			/* again, make sure we're in range */
-			if (part->boundarylen <= len+2) {
-				h(printf("checking lastone\n"));
-				*lastone = (boundary[part->boundarylen]=='-'
-					    && boundary[part->boundarylen+1]=='-');
-			} else {
-				h(printf("not enough room to check last one?\n"));
-				*lastone = FALSE;
-			}
-			/*printf("ok, we found it! : %s \n", (*lastone)?"Last one":"More to come?");*/
-			return part;
-		}
-		part = part->parent;
-	}
-	return NULL;
-}
-
-static struct _header_scan_stack *
-folder_scan_header(struct _header_scan_state *s, int *lastone)
-{
-	int atleast = s->atleast;
-	register char *inptr, *inend;
-	char *start;
-	int len;
-	struct _header_scan_stack *part, *overpart = s->parts;
-	struct _header_scan_stack *h;
-
-	h(printf("scanning first bit\n"));
-
-	h = g_malloc0(sizeof(*h));
-
-	/* FIXME: this info should be cached ? */
-	part = s->parts;
-	s->atleast = 5;
-	while (part) {
-		if (part->boundary)
-			s->atleast = MAX(s->atleast, part->boundarylen+2);
-		part = part->parent;
-	}
-#if 0
-	s->atleast = MAX(s->atleast, 5);
-	if (s->parts)
-		s->atleast = MAX(s->atleast, s->parts->boundarylen+2);
-#endif
-
-	*lastone = FALSE;
-retry:
-
-	while ((len = folder_read(s))>0 && len >= s->atleast) { /* ensure we have at least enough room here */
-		inptr = s->inptr;
-		inend = s->inend-s->atleast;
-		start = inptr;
-
-		while (inptr<=inend) {
-			register int c=-1;
-			/*printf("  '%.20s'\n", inptr);*/
-
-			if (!s->midline
-			    && (part = folder_boundary_check(s, inptr, lastone))) {
-				if ((s->outptr>s->outbuf) || (inptr-start))
-					goto header_truncated; /* may not actually be truncated */
-				
-				goto normal_exit;
-			}
-
-			/* goto next line */
-			while (inptr<=inend && (c = *inptr++)!='\n')
-				;
-
-			/* allocate/append - this wont get executed unless we have *huge* headers,
-			   and then probably only once */
-			{
-				register int headerlen = inptr-start;
-				register int len = (s->outend - s->outbuf);
-				char *outnew;
-				
-				if (headerlen >= len) {
-					len = (len+headerlen)*2+1;
-					outnew = g_realloc(s->outbuf, len);
-					s->outptr = s->outptr - s->outbuf + outnew;
-					s->outbuf = outnew;
-					s->outend = outnew + len;
-				}
-				memcpy(s->outptr, start, headerlen);
-				s->outptr += headerlen;
-			}
-
-			h(printf("outbuf[0] = %02x '%c' oubuf[1] = %02x '%c'\n",
-				 s->outbuf[0], isprint(s->outbuf[0])?s->outbuf[0]:'.',
-				 s->outbuf[1], isprint(s->outbuf[1])?s->outbuf[1]:'.'));
-
-			if (s->header_start == -1)
-				s->header_start = (start-s->inbuf) + s->seek;
-
-			if (c!='\n') {
-				s->midline = TRUE;
-			} else {
-				if (!(inptr[0] == ' ' || inptr[0] == '\t')) {
-					if (s->outbuf[0] == '\n'
-					    || (s->outbuf[0] == '\r' && s->outbuf[1]=='\n')) {
-						goto header_done;
-					}
-
-					/* we always have at least _1_ char here ... */
-					if (s->outptr[-1] == '\n')
-						s->outptr--;
-					s->outptr[0] = 0;
-
-					d(printf("header %.10s at %d\n", s->outbuf, s->header_start));
-
-					header_raw_append_parse(&h->headers, s->outbuf, s->header_start);
-					if (inptr[0]=='\n'
-					    || (inptr[0] == '\r' && inptr[1]=='\n')) {
-						inptr++;
-						goto header_done;
-					}
-					s->outptr = s->outbuf;
-					s->header_start = -1;
-				}
-				s->midline = FALSE;
-				start = inptr;
-			}
-		}
-		s->inptr = inptr;
-	}
-
-	/* ok, we're at the end of the data, just make sure we're not missing out some small
-	   truncated header markers */
-	if (overpart) {
-		overpart = overpart->parent;
-		while (overpart) {
-			if (overpart->boundary && (overpart->boundarylen+2) < s->atleast) {
-				s->atleast = overpart->boundarylen+2;
-				h(printf("Retrying next smaller part ...\n"));
-				goto retry;
-			}
-			overpart = overpart->parent;
-		}
-	}
-
-	if ((s->outptr > s->outbuf) || s->inend > s->inptr) {
-		start = s->inptr;
-		inptr = s->inend;
-		goto header_truncated;
-	}
-
-	s->atleast = atleast;
-
-	return h;
-
-header_truncated:
-
-	{
-		register int headerlen = inptr-start;
-		register int len = (s->outend - s->outbuf);
-		char *outnew;
-		
-		if (headerlen >= len) {
-			len = (len+headerlen)*2+1;
-			outnew = g_realloc(s->outbuf, len);
-			s->outptr = s->outptr - s->outbuf + outnew;
-			s->outbuf = outnew;
-			s->outend = outnew + len;
-		}
-		memcpy(s->outptr, start, headerlen);
-		s->outptr += headerlen;
-	}
-	if (s->outptr>s->outbuf && s->outptr[-1] == '\n')
-		s->outptr--;
-	s->outptr[0] = 0;
-
-	if (s->header_start == -1)
-		s->header_start = (start-s->inbuf) + s->seek;
-
-	if (s->outbuf[0] == '\n'
-	    || (s->outbuf[0] == '\r' && s->outbuf[1]=='\n')) {
-		goto header_done;
-	}
-
-	header_raw_append_parse(&h->headers, s->outbuf, s->header_start);
-
-header_done:
-	part = s->parts;
-
-	s->outptr = s->outbuf;
-normal_exit:
-	s->inptr = inptr;
-	s->atleast = atleast;
-	s->header_start = -1;
-	return h;
-}
-
-static struct _header_scan_stack *
-folder_scan_content(struct _header_scan_state *s, int *lastone, char **data, int *length)
-{
-	int atleast = s->atleast;
-	register char *inptr, *inend;
-	char *start;
-	int len;
-	struct _header_scan_stack *part, *overpart = s->parts;
-	int already_packed = FALSE;
-
-	/*printf("scanning content\n");*/
-
-	/* FIXME: this info should be cached ? */
-	part = s->parts;
-	s->atleast = 5;
-	while (part) {
-		if (part->boundary) {
-			c(printf("boundary: %s\n", part->boundary));
-			s->atleast = MAX(s->atleast, part->boundarylen+2);
-		}
-		part = part->parent;
-	}
-/*	s->atleast = MAX(s->atleast, 5);*/
-#if 0
-	if (s->parts)
-		s->atleast = MAX(s->atleast, s->parts->boundarylen+2);
-#endif
-	*lastone = FALSE;
-
-retry:
-	c(printf("atleast = %d\n", s->atleast));
-	
-	while ((len = folder_read(s))>0 && len >= s->atleast) { /* ensure we have at least enough room here */
-		inptr = s->inptr;
-		inend = s->inend-s->atleast;
-		start = inptr;
-
-		c(printf("inptr = %p, inend = %p\n", inptr, inend));
-
-		while (inptr<=inend) {
-			if (!s->midline
-			    && (part = folder_boundary_check(s, inptr, lastone))) {
-				if ( (inptr-start) )
-					goto content;
-				
-				goto normal_exit;
-			}
-			/* goto the next line */
-			while (inptr<=inend && (*inptr++)!='\n')
-				;
-			
-			s->midline = FALSE;
-		}
-
-		/* *sigh* so much for the beautiful simplicity of the code so far - here we
-		   have the snot to deal with the nasty end-cases that come from the read-ahead
-		   buffers we use */
-		/* what this does, is if we are somewhere near the end of the buffer,
-		   force it to the front, and re-read, ensuring we bunch as much together
-		   as possible, for the final read, without copying too much of the time */
-		/* make sure we dont loop forever, but also make sure we try smaller
-		   boundaries, if there are any, so we dont miss any. */
-		/* this is not needed for the header scanner, since it copies its own
-		   data */
-		c(printf("start offset = %d  atleast = %d\n", start-s->inbuf, s->atleast));
-		if (start > (s->inbuf + s->atleast)) {
-			/* force a re-scan of this data */
-			s->inptr = start;
-			if (already_packed)
-				goto smaller_boundary;
-			c(printf("near the end, try and bunch things up a bit first\n"));
-			already_packed = TRUE;
-		} else {
-			c(printf("dumping what i've got ...\n"));
-			/* what would be nice here, is if that we're at eof, we bunch the last
-			   little bit in the same content, but i dont think this is easy */
-			goto content_mid;
-		}
-	}
-
-	c(printf("length read = %d\n", len));
-smaller_boundary:
-
-	/* ok, we're at the end of the data, just make sure we're not missing out some small
-	   truncated header markers */
-	if (overpart) {
-		overpart = overpart->parent;
-		while (overpart) {
-			if (overpart->boundary && (overpart->boundarylen+2) < s->atleast) {
-				s->atleast = overpart->boundarylen+2;
-				c(printf("Retrying next smaller part ...\n"));
-				goto retry;
-			}
-			overpart = overpart->parent;
-		}
-	}
-
-	if (s->inend > s->inptr) {
-		start = s->inptr;
-		inptr = s->inend;
-		goto content;
-	}
-
-	*length = 0;
-	s->atleast = atleast;
-	return NULL;
-
-content_mid:
-	s->midline = TRUE;
-content:
-	part = s->parts;
-normal_exit:
-	s->atleast = atleast;
-	s->inptr = inptr;
-
-	*data = start;
-	*length = inptr-start;
-
-/*	printf("got %scontent: %.*s", s->midline?"partial ":"", inptr-start, start);*/
-
-	return part;
-}
-
-
-static void
-folder_scan_close(struct _header_scan_state *s)
-{
-	g_free(s->realbuf);
-	g_free(s->outbuf);
-	while (s->parts)
-		folder_pull_part(s);
-	if (s->fd != -1)
-		close(s->fd);
-	if (s->stream)
-		gtk_object_unref((GtkObject *)s->stream);
-	g_free(s);
-}
-
-
-static struct _header_scan_state *
-folder_scan_init(void)
-{
-	struct _header_scan_state *s;
-
-	s = g_malloc(sizeof(*s));
-
-	s->fd = -1;
-	s->stream = NULL;
-
-	s->outbuf = g_malloc(1024);
-	s->outptr = s->outbuf;
-	s->outend = s->outbuf+1024;
-
-	s->realbuf = g_malloc(SCAN_BUF + SCAN_HEAD*2);
-	s->inbuf = s->realbuf + SCAN_HEAD;
-	s->inptr = s->inbuf;
-	s->inend = s->inbuf;
-	s->atleast = 0;
-
-	s->seek = 0;		/* current character position in file of the last read block */
-	s->unstep = 0;
-
-	s->header_start = -1;
-
-	s->start_of_from = -1;
-	s->start_of_headers = -1;
-
-	s->midline = FALSE;
-	s->scan_from = FALSE;
-
-	s->filters = NULL;
-	s->filterid = 1;
-
-	s->parts = NULL;
-
-	s->state = HSCAN_INITIAL;
-	return s;
-}
-
-static int
-folder_scan_init_with_fd(struct _header_scan_state *s, int fd)
-{
-	int len;
-
-	len = read(fd, s->inbuf, SCAN_BUF);
-	if (len>=0) {
-		s->inend = s->inbuf+len;
-		if (s->fd != -1)
-			close(s->fd);
-		s->fd = fd;
-		if (s->stream) {
-			gtk_object_unref((GtkObject *)s->stream);
-			s->stream = NULL;
-		}
-		return 0;
-	} else {
-		return -1;
-	}
-}
-
-static int
-folder_scan_init_with_stream(struct _header_scan_state *s, CamelStream *stream)
-{
-	int len;
-
-	len = camel_stream_read(stream, s->inbuf, SCAN_BUF);
-	if (len>=0) {
-		s->inend = s->inbuf+len;
-		if (s->stream)
-			gtk_object_unref((GtkObject *)s->stream);
-		s->stream = stream;
-		gtk_object_ref((GtkObject *)stream);
-		if (s->fd != -1) {
-			close(s->fd);
-			s->fd = -1;
-		}
-		return 0;
-	} else {
-		return -1;
-	}
-}
-
-#define USE_FROM
-
-static void
-folder_scan_step(struct _header_scan_state *s, char **databuffer, int *datalength)
-{
-	struct _header_scan_stack *h, *hb;
-	const char *content;
-	const char *bound;
-	int type;
-	int state;
-	struct _header_content_type *ct = NULL;
-	struct _header_scan_filter *f;
-	size_t presize;
-
-/*	printf("\nSCAN PASS: state = %d '%s'\n", s->state, states[s->state]);*/
-
-tail_recurse:
-	d({
-		printf("\nSCAN STACK:\n");
-		printf("  '%s' :\n", states[s->state]);
-		hb = s->parts;
-		while (hb) {
-			printf("  '%s' : %s\n", states[hb->savestate], hb->boundary);
-			hb = hb->parent;
-		}
-		printf("\n");
-	});
-
-	switch (s->state) {
-
-	case HSCAN_INITIAL:
-#ifdef USE_FROM
-		if (s->scan_from) {
-			/* FIXME: it would be nice not to have to allocate this every pass */
-			h = g_malloc0(sizeof(*h));
-			h->boundary = g_strdup("From ");
-			h->boundarylen = strlen(h->boundary);
-			folder_push_part(s, h);
-			
-			h = s->parts;
-			do {
-				hb = folder_scan_content(s, &state, databuffer, datalength);
-			} while (hb==h && *datalength>0);
-			
-			if (*datalength==0 && hb==h) {
-				d(printf("found 'From '\n"));
-				s->start_of_from = folder_tell(s);
-				folder_scan_skip_line(s);
-				h->savestate = HSCAN_INITIAL;
-				s->state = HSCAN_FROM;
-			} else {
-				folder_pull_part(s);
-				s->state = HSCAN_EOF;
-			}
-			return;
-		} else {
-			s->start_of_from = -1;
-		}
-
-#endif
-	case HSCAN_FROM:
-		s->start_of_headers = folder_tell(s);
-		h = folder_scan_header(s, &state);
-#ifdef USE_FROM
-		if (s->scan_from)
-			h->savestate = HSCAN_FROM_END;
-		else
-#endif
-			h->savestate = HSCAN_EOF;
-
-		/* FIXME: should this check for MIME-Version: 1.0 as well? */
-
-		type = HSCAN_HEADER;
-		if ( (content = header_raw_find(&h->headers, "Content-Type", NULL))
-		     && (ct = header_content_type_decode(content))) {
-			if (!strcasecmp(ct->type, "multipart")) {
-				bound = header_content_type_param(ct, "boundary");
-				if (bound) {
-					d(printf("multipart, boundary = %s\n", bound));
-					h->boundarylen = strlen(bound)+2;
-					h->boundary = g_malloc(h->boundarylen+3);
-					sprintf(h->boundary, "--%s--", bound);
-					type = HSCAN_MULTIPART;
-				} else {
-					g_warning("Multipart with no boundary, treating as text/plain");
-				}
-			} else if (!strcasecmp(ct->type, "message")) {
-				if (!strcasecmp(ct->subtype, "rfc822")
-				    /*|| !strcasecmp(ct->subtype, "partial")*/) {
-					type = HSCAN_MESSAGE;
-				}
-			}
-		}
-		h->content_type = ct;
-		folder_push_part(s, h);
-		s->state = type;
-		return;
-
-	case HSCAN_HEADER:
-		s->state = HSCAN_BODY;
-
-	case HSCAN_BODY:
-		h = s->parts;
-		*datalength = 0;
-		presize = SCAN_HEAD;
-		f = s->filters;
-
-		do {
-			hb = folder_scan_content(s, &state, databuffer, datalength);
-			if (*datalength>0) {
-				d(printf("Content raw: '%.*s'\n", *datalength, *databuffer));
-
-				while (f) {
-					camel_mime_filter_filter(f->filter, *databuffer, *datalength, presize,
-								 databuffer, datalength, &presize);
-					f = f->next;
-				}
-				return;
-			}
-		} while (hb==h && *datalength>0);
-
-		/* check for any filter completion data */
-		while (f) {
-			camel_mime_filter_filter(f->filter, *databuffer, *datalength, presize,
-						 databuffer, datalength, &presize);
-			f = f->next;
-		}
-		if (*datalength > 0)
-			return;
-
-		s->state = HSCAN_BODY_END;
-		break;
-
-	case HSCAN_MULTIPART:
-		h = s->parts;
-		do {
-			do {
-				hb = folder_scan_content(s, &state, databuffer, datalength);
-				if (*datalength>0) {
-					/* FIXME: needs a state to return this shit??? */
-					d(printf("Multipart Content: '%.*s'\n", *datalength, *databuffer));
-				}
-			} while (hb==h && *datalength>0);
-			if (*datalength==0 && hb==h) {
-				d(printf("got boundary: %s\n", hb->boundary));
-				folder_scan_skip_line(s);
-				if (!state) {
-					s->state = HSCAN_FROM;
-					folder_scan_step(s, databuffer, datalength);
-					s->parts->savestate = HSCAN_MULTIPART; /* set return state for the new head part */
-					return;
-				}
-			} else {
-				break;
-			}
-		} while (1);
-
-		s->state = HSCAN_MULTIPART_END;
-		break;
-
-	case HSCAN_MESSAGE:
-		s->state = HSCAN_FROM;
-		folder_scan_step(s, databuffer, datalength);
-		s->parts->savestate = HSCAN_MESSAGE_END;
-		break;
-
-	case HSCAN_FROM_END:
-	case HSCAN_BODY_END:
-	case HSCAN_MULTIPART_END:
-	case HSCAN_MESSAGE_END:
-		s->state = s->parts->savestate;
-		folder_pull_part(s);
-		if (s->state & HSCAN_END)
-			return;
-		goto tail_recurse;
-
-	case HSCAN_EOF:
-		return;
-
-	default:
-		g_warning("Invalid state in camel-mime-parser: %d", s->state);
-		break;
-	}
-
-	return;
-}
-
-#ifdef STANDALONE
-int main(int argc, char **argv)
-{
-	int fd;
-	struct _header_scan_state *s;
-	char *data;
-	int len;
-	int state;
-	char *name = "/tmp/evmail/Inbox";
-	struct _header_scan_stack *h;
-	int i;
-	int attach = 0;
-
-	if (argc==2)
-		name = argv[1];
-
-	printf("opening: %s", name);
-
-	for (i=1;iscan_from = FALSE;
-#if 0
-		h = g_malloc0(sizeof(*h));
-		h->savestate = HSCAN_EOF;
-		folder_push_part(s, h);
-#endif	
-		while (s->state != HSCAN_EOF) {
-			folder_scan_step(s, &data, &len);
-			printf("\n -- PARSER STEP RETURN -- %d '%s'\n\n", s->state, states[s->state]);
-			switch (s->state) {
-			case HSCAN_HEADER:
-				if (s->parts->content_type
-				    && (charset = header_content_type_param(s->parts->content_type, "charset"))) {
-					if (strcasecmp(charset, "us-ascii")) {
-						folder_push_filter_charset(s, "UTF-8", charset);
-					} else {
-						charset = NULL;
-					}
-				} else {
-					charset = NULL;
-				}
-
-				encoding = header_raw_find(&s->parts->headers, "Content-transfer-encoding");
-				printf("encoding = '%s'\n", encoding);
-				if (encoding && !strncasecmp(encoding, " base64", 7)) {
-					printf("adding base64 filter\n");
-					attachname = g_strdup_printf("attach.%d.%d", i, attach++);
-					folder_push_filter_save(s, attachname);
-					g_free(attachname);
-					folder_push_filter_mime(s, 0);
-				}
-				if (encoding && !strncasecmp(encoding, " quoted-printable", 17)) {
-					printf("adding quoted-printable filter\n");
-					attachname = g_strdup_printf("attach.%d.%d", i, attach++);
-					folder_push_filter_save(s, attachname);
-					g_free(attachname);
-					folder_push_filter_mime(s, 1);
-				}
-
-				break;
-			case HSCAN_BODY:
-				break;
-			case HSCAN_BODY_END:
-				if (encoding && !strncasecmp(encoding, " base64", 7)) {
-					printf("removing filters\n");
-					folder_filter_pull(s);
-					folder_filter_pull(s);
-				}
-				if (encoding && !strncasecmp(encoding, " quoted-printable", 17)) {
-					printf("removing filters\n");
-					folder_filter_pull(s);
-					folder_filter_pull(s);
-				}
-				if (charset) {
-					folder_filter_pull(s);
-					charset = NULL;
-				}
-				encoding = NULL;
-				break;
-			default:
-				break;
-			}
-		}
-		folder_scan_close(s);
-		close(fd);
-	}
-	return 0;
-}
-
-#endif /* STANDALONE */
diff --git a/camel/camel-mime-parser.h b/camel/camel-mime-parser.h
deleted file mode 100644
index f8964ed86c..0000000000
--- a/camel/camel-mime-parser.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_PARSER_H
-#define _CAMEL_MIME_PARSER_H
-
-#include 
-
-#include 
-#include 
-#include 
-
-#define CAMEL_MIME_PARSER(obj)         GTK_CHECK_CAST (obj, camel_mime_parser_get_type (), CamelMimeParser)
-#define CAMEL_MIME_PARSER_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, camel_mime_parser_get_type (), CamelMimeParserClass)
-#define IS_CAMEL_MIME_PARSER(obj)      GTK_CHECK_TYPE (obj, camel_mime_parser_get_type ())
-
-typedef struct _CamelMimeParser      CamelMimeParser;
-typedef struct _CamelMimeParserClass CamelMimeParserClass;
-
-/* NOTE: if you add more states, you may need to bump the
-   start of the END tags to 16 or 32, etc - so they are
-   the same as the matching start tag, with a bit difference */
-enum _header_state {
-	HSCAN_INITIAL,
-	HSCAN_FROM,		/* got 'From' line */
-	HSCAN_HEADER,		/* toplevel header */
-	HSCAN_BODY,		/* scanning body of message */
-	HSCAN_MULTIPART,	/* got multipart header */
-	HSCAN_MESSAGE,		/* rfc822 message */
-
-	HSCAN_PART,		/* part of a multipart */
-
-	HSCAN_END = 8,		/* bit mask for 'end' flags */
-
-	HSCAN_EOF = 8,		/* end of file */
-	HSCAN_FROM_END,		/* end of whole from bracket */
-	HSCAN_HEADER_END,	/* dummy value */
-	HSCAN_BODY_END,		/* end of message */
-	HSCAN_MULTIPART_END,	/* end of multipart  */
-	HSCAN_MESSAGE_END,	/* end of message */
-
-};
-
-struct _CamelMimeParser {
-	GtkObject parent;
-
-	struct _CamelMimeParserPrivate *priv;
-};
-
-struct _CamelMimeParserClass {
-	GtkObjectClass parent_class;
-
-	void (*message)(CamelMimeParser *, void *headers);
-	void (*part)(CamelMimeParser *);
-	void (*content)(CamelMimeParser *);
-};
-
-guint		camel_mime_parser_get_type	(void);
-CamelMimeParser      *camel_mime_parser_new	(void);
-
-/* using an fd will be a little faster, but not much (over a simple stream) */
-int		camel_mime_parser_init_with_fd(CamelMimeParser *, int fd);
-int		camel_mime_parser_init_with_stream(CamelMimeParser *m, CamelStream *stream);
-
-/* get the stream or fd back of the parser */
-CamelStream    *camel_mime_parser_stream(CamelMimeParser *m);
-int		camel_mime_parser_fd(CamelMimeParser *m);
-
-/* scan 'From' separators? */
-void camel_mime_parser_scan_from(CamelMimeParser *, int);
-
-/* normal interface */
-enum _header_state camel_mime_parser_step(CamelMimeParser *, char **, int *);
-void camel_mime_parser_unstep(CamelMimeParser *);
-enum _header_state camel_mime_parser_state(CamelMimeParser *);
-
-/* get content type for the current part/header */
-struct _header_content_type *camel_mime_parser_content_type(CamelMimeParser *);
-
-/* get a raw header by name */
-const char *camel_mime_parser_header(CamelMimeParser *, const char *, int *offset);
-/* get all raw headers */
-struct _header_raw *camel_mime_parser_headers_raw(CamelMimeParser *);
-
-/* add a processing filter for body contents */
-int camel_mime_parser_filter_add(CamelMimeParser *, CamelMimeFilter *);
-void camel_mime_parser_filter_remove(CamelMimeParser *, int);
-
-/* these should be used with caution, because the state will not
-   track the seeked position */
-/* FIXME: something to bootstrap the state? */
-off_t camel_mime_parser_tell(CamelMimeParser *);
-off_t camel_mime_parser_seek(CamelMimeParser *, off_t, int);
-
-off_t camel_mime_parser_tell_start_headers(CamelMimeParser *);
-off_t camel_mime_parser_tell_start_from(CamelMimeParser *);
-
-#endif /* ! _CAMEL_MIME_PARSER_H */
diff --git a/camel/camel-mime-part-utils.c b/camel/camel-mime-part-utils.c
deleted file mode 100644
index a4392d5f88..0000000000
--- a/camel/camel-mime-part-utils.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mime-part-utils : Utility for mime parsing and so on */
-
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include "gmime-utils.h"
-#include "camel-simple-data-wrapper.h"
-#include "data-wrapper-repository.h" 
- 
-#include "camel-mime-part-utils.h"
-
-
-
-/* declare this function because it is public
-   but it must not be called except here */
-void        camel_mime_part_set_content_type              (CamelMimePart *mime_part, 
-							   gchar *content_type);
-
-
-void
-camel_mime_part_construct_headers_from_stream (CamelMimePart *mime_part, 
-					       CamelStream *stream)
-{
-	GArray *header_array;
-	Rfc822Header *cur_header;
-	int i;
-
-	g_assert (stream);
-	/* 
-	 * parse all header lines 
-	 */
-	header_array = get_header_array_from_stream (stream);
-	if (header_array) {
-		for (i=0; ilen; i++) {
-			cur_header = (Rfc822Header *)header_array->data + i;
-			camel_medium_add_header ( CAMEL_MEDIUM (mime_part), 
-						  cur_header->name, 
-						  cur_header->value);
-			g_free (cur_header->name);
-			g_free (cur_header->value);
-		}
-
-		g_array_free (header_array, TRUE);
-
-	}
-}
-
-
-
-
-
-void
-camel_mime_part_construct_content_from_stream (CamelMimePart *mime_part, 
-					       CamelStream *stream)
-{
-	GMimeContentField *content_type = NULL;
-	gchar *mime_type = NULL;
-	GtkType content_object_type;
-	CamelDataWrapper *content_object = NULL;
-	
-	
-	/* 
-	 * find content mime type 
-	 */
-	content_type = camel_mime_part_get_content_type (mime_part);
-	/* here we should have a mime type */
-	if (content_type)
-		mime_type = gmime_content_field_get_mime_type (content_type);
-
-	/* 
-	 * no mime type found for the content, 
-	 * using text/plain is the default 
-	 */
-	if (!mime_type) {
-		mime_type = g_strdup ("text/plain");
-		camel_mime_part_set_content_type (mime_part, mime_type);
-	}
-	
-	/* 
-	 * find in the repository what particular data wrapper is 
-	 * associated to this mime type 
-	 */
-	content_object_type = 
-		data_wrapper_repository_get_data_wrapper_type (mime_type);
-
-	g_free (mime_type);
-
-	/* 
-	 * create the content object data wrapper with the type 
-	 * returned by the data wrapper repository 
-	 */
-	content_object = CAMEL_DATA_WRAPPER (gtk_type_new (content_object_type));
-	camel_data_wrapper_set_mime_type_field (content_object, 
-						camel_mime_part_get_content_type (mime_part));
-	camel_medium_set_content_object ( CAMEL_MEDIUM (mime_part), content_object);
-
-	/* set the input stream for the content object */
-	camel_data_wrapper_set_input_stream (content_object, stream);
-
-	/* 
-	 * the object is referenced in the set_content_object method, 
-	 * so unref it here 
-	 */
-	gtk_object_unref (GTK_OBJECT (content_object));
-}
-
-
-
-void
-camel_mime_part_store_stream_in_buffer (CamelMimePart *mime_part, 
-					CamelStream *stream)
-{
-	gint nb_bytes_read_total = 0;
-	gint nb_bytes_read_chunk;
-	GByteArray *buffer;
-#define STREAM_READ_CHUNK_SZ  100
-
-	if (mime_part->temp_message_buffer == NULL)
-		mime_part->temp_message_buffer = g_byte_array_new ();
-	
-	buffer = mime_part->temp_message_buffer;
-
-	g_byte_array_set_size (buffer, nb_bytes_read_total + STREAM_READ_CHUNK_SZ);
-	nb_bytes_read_chunk = camel_stream_read (stream,
-						 buffer->data + nb_bytes_read_total, 
-						 STREAM_READ_CHUNK_SZ);
-
-	if (nb_bytes_read_chunk>0) {
-		nb_bytes_read_total += nb_bytes_read_chunk;
-		
-		while (nb_bytes_read_chunk >0) {
-			g_byte_array_set_size (buffer, nb_bytes_read_total + STREAM_READ_CHUNK_SZ);
-			nb_bytes_read_chunk = camel_stream_read (stream,
-								 buffer->data + nb_bytes_read_total, 
-								 STREAM_READ_CHUNK_SZ);
-			nb_bytes_read_total += nb_bytes_read_chunk;
-		}
-	}
-
-	g_byte_array_set_size (buffer, nb_bytes_read_total);
-}
diff --git a/camel/camel-mime-part-utils.h b/camel/camel-mime-part-utils.h
deleted file mode 100644
index 85e86a25e9..0000000000
--- a/camel/camel-mime-part-utils.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mime-part-utils : Utility for mime parsing and so on */
-
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_MIME_PART_UTILS_H
-#define CAMEL_MIME_PART_UTILS_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-mime-part.h"
-
-
-void camel_mime_part_construct_headers_from_stream (CamelMimePart *mime_part, 
-						    CamelStream *stream);
-
-void camel_mime_part_construct_content_from_stream (CamelMimePart *mime_part, 
-						    CamelStream *stream);
-
-void camel_mime_part_store_stream_in_buffer (CamelMimePart *mime_part, 
-					     CamelStream *stream);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /*  CAMEL_MIME_PART_UTILS_H  */
-
diff --git a/camel/camel-mime-part.c b/camel/camel-mime-part.c
deleted file mode 100644
index 78f1897e8b..0000000000
--- a/camel/camel-mime-part.c
+++ /dev/null
@@ -1,881 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelMimePart.c : Abstract class for a mime_part */
-
-/* 
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include 
-#include "camel-mime-part.h"
-#include 
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include "gmime-utils.h"
-#include "camel-simple-data-wrapper.h"
-#include "hash-table-utils.h"
-#include "camel-stream-mem.h"
-#include "camel-mime-part-utils.h"
-#include "camel-seekable-substream.h"
-#include "camel-stream-filter.h"
-#include "camel-mime-filter-basic.h"
-#include "camel-mime-filter-charset.h"
-#include 
-#include "camel-mime-parser.h"
-
-/* ick, this shouldn't need to know about the parent types ... then again the repository does *sigh* */
-#include "camel-mime-message.h"
-#include "camel-multipart.h"
-#include "camel-mime-body-part.h"
-
-#define d(x)
-
-typedef enum {
-	HEADER_UNKNOWN,
-	HEADER_DESCRIPTION,
-	HEADER_DISPOSITION,
-	HEADER_CONTENT_ID,
-	HEADER_ENCODING,
-	HEADER_CONTENT_MD5,
-	HEADER_CONTENT_LANGUAGES,
-	HEADER_CONTENT_TYPE
-} CamelHeaderType;
-
-
-static GHashTable *header_name_table;
-
-
-static CamelMediumClass *parent_class=NULL;
-
-/* Returns the class for a CamelMimePart */
-#define CMP_CLASS(so) CAMEL_MIME_PART_CLASS (GTK_OBJECT(so)->klass)
-#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (GTK_OBJECT(so)->klass)
-#define CMD_CLASS(so) CAMEL_MEDIUM_CLASS (GTK_OBJECT(so)->klass)
-
-/* from GtkObject */
-static void            my_finalize (GtkObject *object);
-
-/* from CamelDataWrapper */
-static void            my_write_to_stream              (CamelDataWrapper *data_wrapper, 
-							CamelStream *stream);
-static void            my_construct_from_stream        (CamelDataWrapper *data_wrapper, 
-							CamelStream *stream);
-static void            construct_from_parser           (CamelDataWrapper *, CamelMimeParser *);
-static void            my_set_input_stream             (CamelDataWrapper *data_wrapper, 
-							CamelStream *stream);
-static CamelStream *   my_get_output_stream            (CamelDataWrapper *data_wrapper);
-
-
-/* from CamelMedia */ 
-static void            add_header                      (CamelMedium *medium, const char *header_name, const char *header_value);
-static void            set_header                      (CamelMedium *medium, const char *header_name, const char *header_value);
-static void            remove_header                   (CamelMedium *medium, const char *header_name);
-
-static void            my_set_content_object           (CamelMedium *medium, 
-							CamelDataWrapper *content);
-static CamelDataWrapper *my_get_content_object         (CamelMedium *medium);
-
-/* forward references */
-static void set_disposition (CamelMimePart *mime_part, const gchar *disposition);
-
-
-/* loads in a hash table the set of header names we */
-/* recognize and associate them with a unique enum  */
-/* identifier (see CamelHeaderType above)           */
-static void
-my_init_header_name_table()
-{
-	header_name_table = g_hash_table_new (g_strcase_hash, g_strcase_equal);
-	g_hash_table_insert (header_name_table, "Content-Description", (gpointer)HEADER_DESCRIPTION);
-	g_hash_table_insert (header_name_table, "Content-Disposition", (gpointer)HEADER_DISPOSITION);
-	g_hash_table_insert (header_name_table, "Content-id", (gpointer)HEADER_CONTENT_ID);
-	g_hash_table_insert (header_name_table, "Content-Transfer-Encoding", (gpointer)HEADER_ENCODING);
-	g_hash_table_insert (header_name_table, "Content-MD5", (gpointer)HEADER_CONTENT_MD5);
-	g_hash_table_insert (header_name_table, "Content-Type", (gpointer)HEADER_CONTENT_TYPE);
-	
-}
-
-static void
-camel_mime_part_class_init (CamelMimePartClass *camel_mime_part_class)
-{
-	CamelMediumClass *camel_medium_class = CAMEL_MEDIUM_CLASS (camel_mime_part_class);
-	CamelDataWrapperClass *camel_data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (camel_mime_part_class);
-	GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_data_wrapper_class);
-
-	parent_class = gtk_type_class (camel_medium_get_type ());
-	my_init_header_name_table();
-	
-	/* virtual method overload */	
-	camel_medium_class->add_header                = add_header;
-	camel_medium_class->set_header                = set_header;
-	camel_medium_class->remove_header             = remove_header;
-	camel_medium_class->set_content_object        = my_set_content_object;
-	camel_medium_class->get_content_object        = my_get_content_object;
-
-	camel_data_wrapper_class->write_to_stream     = my_write_to_stream;
-	camel_data_wrapper_class->construct_from_stream = my_construct_from_stream;
-	camel_data_wrapper_class->construct_from_parser = construct_from_parser;
-	camel_data_wrapper_class->set_input_stream    = my_set_input_stream;
-/*	camel_data_wrapper_class->get_output_stream   = my_get_output_stream;*/
-
-	gtk_object_class->finalize                    = my_finalize;
-}
-
-static void
-camel_mime_part_init (gpointer   object,  gpointer   klass)
-{
-	CamelMimePart *camel_mime_part = CAMEL_MIME_PART (object);
-	
-	camel_mime_part->content_type         = gmime_content_field_new ("text", "plain");
-	camel_mime_part->description          = NULL;
-	camel_mime_part->disposition          = NULL;
-	camel_mime_part->content_id           = NULL;
-	camel_mime_part->content_MD5          = NULL;
-	camel_mime_part->content_languages    = NULL;
-	camel_mime_part->encoding             = CAMEL_MIME_PART_ENCODING_DEFAULT;
-
-	camel_mime_part->temp_message_buffer  = NULL;	
-	camel_mime_part->content_input_stream = NULL;
-}
-
-
-
-
-GtkType
-camel_mime_part_get_type (void)
-{
-	static GtkType camel_mime_part_type = 0;
-	
-	if (!camel_mime_part_type)	{
-		GtkTypeInfo camel_mime_part_info =	
-		{
-			"CamelMimePart",
-			sizeof (CamelMimePart),
-			sizeof (CamelMimePartClass),
-			(GtkClassInitFunc) camel_mime_part_class_init,
-			(GtkObjectInitFunc) camel_mime_part_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_mime_part_type = gtk_type_unique (camel_medium_get_type (), &camel_mime_part_info);
-	}
-	
-	return camel_mime_part_type;
-}
-
-
-static void           
-my_finalize (GtkObject *object)
-{
-	CamelMimePart *mime_part = CAMEL_MIME_PART (object);
-
-	g_free (mime_part->description);
-	g_free (mime_part->content_id);
-	g_free (mime_part->content_MD5);
-	string_list_free (mime_part->content_languages);
-	header_disposition_unref(mime_part->disposition);
-	
-	if (mime_part->content_type) gmime_content_field_unref (mime_part->content_type);
-	if (mime_part->temp_message_buffer) g_byte_array_free (mime_part->temp_message_buffer, TRUE);
-
-	if (mime_part->content_input_stream) gtk_object_unref (GTK_OBJECT (mime_part->content_input_stream));
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-/* **** */
-
-static gboolean
-process_header(CamelMedium *medium, const char *header_name, const char *header_value)
-{
-	CamelMimePart *mime_part = CAMEL_MIME_PART (medium);
-	CamelHeaderType header_type;
-	char *text;
-
-	/* Try to parse the header pair. If it corresponds to something   */
-	/* known, the job is done in the parsing routine. If not,         */
-	/* we simply add the header in a raw fashion                      */
-
-	/* FIXMME: MUST check fields for validity before adding them! */
-
-	header_type = (CamelHeaderType) g_hash_table_lookup (header_name_table, header_name);
-	switch (header_type) {
-	case HEADER_DESCRIPTION: /* raw header->utf8 conversion */
-		text = header_decode_string(header_value);
-		g_free(mime_part->description);
-		mime_part->description = text;
-		break;
-	case HEADER_DISPOSITION:
-		set_disposition (mime_part, header_value);
-		break;
-	case HEADER_CONTENT_ID:
-		text = header_msgid_decode(header_value);
-		g_free(mime_part->content_id);
-		mime_part->content_id = text;
-		break;
-	case HEADER_ENCODING:
-		text = header_token_decode(header_value);
-		mime_part->encoding = camel_mime_part_encoding_from_string (text);
-		g_free(text);
-		break;
-	case HEADER_CONTENT_MD5:
-		g_free(mime_part->content_MD5);
-		mime_part->content_MD5 = g_strdup(header_value);
-		break;
-	case HEADER_CONTENT_TYPE: 
-		gmime_content_field_construct_from_string (mime_part->content_type, header_value);
-		break;
-	default:
-		return FALSE;
-	}
-	return TRUE;
-}
-
-
-static void
-set_header (CamelMedium *medium, const char *header_name, const char *header_value)
-{
-	process_header(medium, header_name, header_value);
-	parent_class->set_header (medium, header_name, header_value);
-}
-
-static void
-add_header (CamelMedium *medium, const char *header_name, const char *header_value)
-{
-	/* Try to parse the header pair. If it corresponds to something   */
-	/* known, the job is done in the parsing routine. If not,         */
-	/* we simply add the header in a raw fashion                      */
-
-	/* FIXMME: MUST check fields for validity before adding them! */
-
-	/* If it was one of the headers we handled, it must be unique, set it instead of add */
-	if (process_header(medium, header_name, header_value))
-		parent_class->set_header (medium, header_name, header_value);
-	else
-		parent_class->add_header (medium, header_name, header_value);
-}
-
-static void
-remove_header (CamelMedium *medium, const char *header_name)
-{
-	process_header(medium, header_name, NULL);
-	parent_class->remove_header (medium, header_name);
-}
-
-
-/* **** Content-Description */
-void
-camel_mime_part_set_description (CamelMimePart *mime_part, const gchar *description)
-{
-	char *text;
-
-	/* FIXME: convert header, internationalise, etc. */
-	text = g_strdup(description);
-	/* text = header_encode_string(description); */
-
-	g_free(mime_part->description);
-	mime_part->description = text;
-
-	parent_class->set_header ((CamelMedium *)mime_part, "Content-Description", text);
-}
-
-const gchar *
-camel_mime_part_get_description (CamelMimePart *mime_part)
-{
-	return mime_part->description;
-}
-
-/* **** Content-Disposition */
-
-static void
-set_disposition (CamelMimePart *mime_part, const gchar *disposition)
-{
-	header_disposition_unref(mime_part->disposition);
-	if (disposition)
-		mime_part->disposition = header_disposition_decode(disposition);
-	else
-		mime_part->disposition = NULL;
-}
-
-
-void
-camel_mime_part_set_disposition (CamelMimePart *mime_part, const gchar *disposition)
-{
-	char *text;
-
-	/* we poke in a new disposition (so we dont lose 'filename', etc) */
-	if (mime_part->disposition == NULL) {
-		set_disposition(mime_part, disposition);
-	}
-	if (mime_part->disposition != NULL) {
-		g_free(mime_part->disposition->disposition);
-		mime_part->disposition->disposition = g_strdup(disposition);
-	}
-	text = header_disposition_format(mime_part->disposition);
-
-	parent_class->set_header ((CamelMedium *)mime_part, "Content-Description", text);
-
-	g_free(text);
-}
-
-const gchar *
-camel_mime_part_get_disposition (CamelMimePart *mime_part)
-{
-	if (mime_part->disposition)
-		return (mime_part->disposition)->disposition;
-	else
-		return NULL;
-}
-
-
-/* **** Content-Disposition: filename="xxx" */
-
-void
-camel_mime_part_set_filename (CamelMimePart *mime_part, gchar *filename)
-{
-	char *str;
-	if (mime_part->disposition == NULL)
-		mime_part->disposition = header_disposition_decode("attachment");
-
-	header_set_param(&mime_part->disposition->params, "filename", filename);
-	str = header_disposition_format(mime_part->disposition);
-
-	/* we dont want to override what we just created ... */
-	parent_class->set_header ((CamelMedium *)mime_part, "Content-Disposition", str);
-	g_free(str);
-}
-
-const gchar *
-camel_mime_part_get_filename (CamelMimePart *mime_part)
-{
-	if (mime_part->disposition)
-		return header_param(mime_part->disposition->params, "filename");
-	return NULL;
-}
-
-
-/* **** Content-ID: */
-
-void
-camel_mime_part_set_content_id (CamelMimePart *mime_part, const char *contentid)
-{
-	char *text;
-
-	/* perform a syntax check, just 'cause we can */
-	text = header_msgid_decode(contentid);
-	if (text == NULL) {
-		g_warning("Invalid content id being set: '%s'", contentid);
-	} else {
-		g_free(text);
-	}
-	g_free(mime_part->content_id);
-	mime_part->content_id = g_strdup(contentid);
-	parent_class->set_header ((CamelMedium *)mime_part, "Content-ID", contentid);
-}
-
-const gchar *
-camel_mime_part_get_content_id (CamelMimePart *mime_part)
-{
-	return mime_part->content_id;
-}
-
-/* **** Content-MD5: */
-
-void
-camel_mime_part_set_content_MD5 (CamelMimePart *mime_part, const char *md5)
-{
-	g_free(mime_part->content_MD5);
-	mime_part->content_MD5 = g_strdup(md5);
-	parent_class->set_header ((CamelMedium *)mime_part, "Content-MD5", md5);
-}
-
-const gchar *
-camel_mime_part_get_content_MD5 (CamelMimePart *mime_part)
-{
-	return mime_part->content_MD5;
-}
-
-/* **** Content-Transfer-Encoding: */
-
-void
-camel_mime_part_set_encoding (CamelMimePart *mime_part,
-			      CamelMimePartEncodingType encoding)
-{
-	const char *text;
-
-	mime_part->encoding = encoding;
-	text = camel_mime_part_encoding_to_string (encoding);
-	if (text[0])
-		text = g_strdup(text);
-	else
-		text = NULL;
-
-	parent_class->set_header ((CamelMedium *)mime_part, "Content-Transfer-Encoding", text);
-}
-
-const CamelMimePartEncodingType
-camel_mime_part_get_encoding (CamelMimePart *mime_part)
-{
-	return mime_part->encoding;
-}
-
-/* FIXME: do something with this stuff ... */
-
-void
-camel_mime_part_set_content_languages (CamelMimePart *mime_part, GList *content_languages)
-{
-	if (mime_part->content_languages) string_list_free (mime_part->content_languages);
-	mime_part->content_languages = content_languages;
-
-	/* FIXME: translate to a header and set it */
-}
-
-const GList *
-camel_mime_part_get_content_languages (CamelMimePart *mime_part)
-{
-	return mime_part->content_languages;
-}
-
-
-/* **** */
-
-/* **** Content-Type: */
-
-void 
-camel_mime_part_set_content_type (CamelMimePart *mime_part, gchar *content_type)
-{
-	/* FIXME: need a way to specify content-type parameters without putting them
-	   in a string ... */
-	gmime_content_field_construct_from_string (mime_part->content_type, content_type);
-	parent_class->set_header ((CamelMedium *)mime_part, "Content-Type", content_type);
-}
-
-GMimeContentField *
-camel_mime_part_get_content_type (CamelMimePart *mime_part)
-{
-	return mime_part->content_type;
-}
-
-/*********/
-
-
-
-static void
-my_set_content_object (CamelMedium *medium, CamelDataWrapper *content)
-{
-	CamelMimePart *mime_part = CAMEL_MIME_PART (medium);
-	GMimeContentField *object_content_field;
-
-	parent_class->set_content_object (medium, content);
-
-	object_content_field = camel_data_wrapper_get_mime_type_field (content);
-	if (mime_part->content_type && (mime_part->content_type != object_content_field)) {
-		char *txt;
-
-		gmime_content_field_unref (mime_part->content_type);
-		txt = header_content_type_format(object_content_field?object_content_field->content_type:NULL);
-		parent_class->set_header ((CamelMedium *)mime_part, "Content-Type", txt);
-	}
-	mime_part->content_type = object_content_field;
-
-	gmime_content_field_ref (object_content_field);
-}
-
-static CamelDataWrapper *
-my_get_content_object (CamelMedium *medium)
-{
-	CamelMimePart *mime_part = CAMEL_MIME_PART (medium);
-	CamelStream *stream;
-	CamelStream *decoded_stream;
-	CamelMimeFilter *mf = NULL;
-
-	d(printf("getting content object? for %p\n", medium));
-
-	if (!medium->content ) {
-		stream = mime_part->content_input_stream; 
-		decoded_stream = stream;
-
-		g_warning("No content object, this old code is probably going to crash ...");
-
-		switch (mime_part->encoding) {
-		case CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE:
-			mf = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_QP_DEC);
-			break;
-		case CAMEL_MIME_PART_ENCODING_BASE64:
-			mf = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_BASE64_DEC);
-			break;
-		default:
-			break;
-		}
-
-		if (mf) {
-			decoded_stream = (CamelStream *)camel_stream_filter_new_with_stream (stream);
-			camel_stream_filter_add((CamelStreamFilter *)decoded_stream, mf);
-			gtk_object_unref((GtkObject *)mf);
-		}
-
-		camel_mime_part_construct_content_from_stream (mime_part, decoded_stream);
-		
-	}
-
-	return parent_class->get_content_object (medium);
-		
-}
-
-
-/* **** */
-
-
-
-
-/**********************************************************************/
-#ifdef WHPT
-#warning : WHPT is already defined !!!!!!
-#endif
-#define WHPT gmime_write_header_pair_to_stream
-
-
-static void
-my_write_content_to_stream (CamelMimePart *mime_part, CamelStream *stream)
-{
-	CamelMedium *medium;
-	CamelStream *wrapper_stream;
-	CamelStream *stream_encode;
-	CamelMimeFilter *mf = NULL;
-	CamelDataWrapper *content;
-
-	g_assert (mime_part);
-
-	medium = CAMEL_MEDIUM (mime_part);
-	content = medium->content;
-	
-	if (!content) {
-		content = camel_medium_get_content_object (CAMEL_MEDIUM (mime_part));
-		if (!content)
-			return;
-	}
-
-	switch (mime_part->encoding) {
-	case CAMEL_MIME_PART_ENCODING_DEFAULT:
-	case CAMEL_MIME_PART_ENCODING_7BIT:
-	case CAMEL_MIME_PART_ENCODING_8BIT:
-		camel_data_wrapper_write_to_stream (content, stream);
-		break;
-	case CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE:
-		mf = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_QP_ENC);
-		break;
-	case CAMEL_MIME_PART_ENCODING_BASE64:
-		mf = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_BASE64_ENC);
-		break;
-	default:
-		camel_data_wrapper_write_to_stream (content, stream);
-		g_warning ("Encoding type `%s' not supported.",
-			   camel_mime_part_encoding_to_string
-			   (mime_part->encoding));
-	}
-
-	if (mf) {
-		/* encode the data wrapper output stream in the filtered encoding */
-		wrapper_stream = camel_data_wrapper_get_output_stream (content);
-		camel_stream_reset (wrapper_stream);
-		stream_encode = (CamelStream *)camel_stream_filter_new_with_stream (wrapper_stream);
-		camel_stream_filter_add((CamelStreamFilter *)stream_encode, mf);
-
-		/*  ... and write it to the output stream in a blocking way */
-		camel_stream_write_to_stream (stream_encode, stream);
-		
-		/* now free the intermediate b64 stream */
-		gtk_object_unref (GTK_OBJECT (stream_encode));
-		gtk_object_unref((GtkObject *)mf);
-	}
-}
-
-
-
-
-/* FIXME: this is just totally broken broken broken broken */
-
-static void
-my_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelMimePart *mp = CAMEL_MIME_PART (data_wrapper);
-	CamelMedium *medium = CAMEL_MEDIUM (data_wrapper);
-
-	d(printf("mime_part::write_to_stream\n"));
-
-#warning This class should NOT BE WRITING the headers out
-	if (medium->headers) {
-		struct _header_raw *h = medium->headers;
-		while (h) {
-			camel_stream_write_strings (stream, h->name, isspace(h->value[0])?":":": ", h->value, "\n", NULL);
-			h = h->next;
-		}
-	}
-
-	/* FIXME: something needs to be done about this ... */
-	gmime_write_header_with_glist_to_stream (stream, "Content-Language", mp->content_languages,", ");
-
-	camel_stream_write_string(stream,"\n");
-
-#if 1
-	{
-		CamelDataWrapper *content = camel_medium_get_content_object (CAMEL_MEDIUM (data_wrapper));
-		if (content) {
-			camel_data_wrapper_write_to_stream(content, stream);
-		} else {
-			g_warning("No content for data wrapper");
-		}
-	}
-#else
-	((CamelDataWrapperClass *)parent_class)->write_to_stream (data_wrapper, stream);
-#endif
-	/*my_write_content_to_stream (mp, stream);*/
-}
-
-
-
-static void
-my_construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-
-	CamelMimePart *mime_part = CAMEL_MIME_PART (data_wrapper);
-	
-	camel_mime_part_construct_headers_from_stream (mime_part, stream);
-	
-	camel_mime_part_store_stream_in_buffer (mime_part, stream);
-}
-
-
-/* FIXME: this should be in another file ... */
-/* This replaces the data wrapper repository ... and/or could be replaced by it? */
-static void
-camel_mime_part_construct_content(CamelDataWrapper *dw, CamelMimeParser *mp)
-{
-	CamelDataWrapper *content = NULL;
-	int state;
-
-	switch ((state = camel_mime_parser_state(mp))) {
-	case HSCAN_HEADER:
-		d(printf("Creating body part\n"));
-		content = (CamelDataWrapper *)camel_simple_data_wrapper_new();
-		break;
-	case HSCAN_MESSAGE:
-		d(printf("Creating message part\n"));
-		content = (CamelDataWrapper *)camel_mime_message_new();
-		break;
-	case HSCAN_MULTIPART:
-		d(printf("Creating multi-part\n"));
-		content = (CamelDataWrapper *)camel_multipart_new();
-		break;
-	default:
-		g_warning("Invalid state encountered???: %d", camel_mime_parser_state(mp));
-	}
-	if (content) {
-		camel_data_wrapper_construct_from_parser(content, mp);
-#warning there just has got to be a better way ... to transfer the mime-type to the datawrapper
-		/* would you believe you have to set this BEFORE you set the content object???  oh my god !!!! */
-		camel_data_wrapper_set_mime_type_field (content, 
-							camel_mime_part_get_content_type ((CamelMimePart *)dw));
-		camel_medium_set_content_object((CamelMedium *)dw, content);
-	}
-	/* this should probably go into camel-mime-message::construct_from_parser */
-	if (state == HSCAN_MESSAGE) {
-		char *buf;
-		int len;
-
-		if (camel_mime_parser_step(mp, &buf, &len) != HSCAN_MESSAGE_END) {
-			g_warning("Bad parser state: Expecing MESSAGE_EOF, got: %d", camel_mime_parser_state(mp));
-			camel_mime_parser_unstep(mp);
-		}
-	}
-}
-
-/* mime_part */
-static void
-construct_from_parser(CamelDataWrapper *dw, CamelMimeParser *mp)
-{
-	struct _header_raw *headers;
-	char *buf;
-	int len;
-
-	d(printf("constructing mime-part\n"));
-
-	switch (camel_mime_parser_step(mp, &buf, &len)) {
-	case HSCAN_HEADER:
-	case HSCAN_MESSAGE:
-	case HSCAN_MULTIPART:
-		/* we have the headers, build them into 'us' */
-		headers = camel_mime_parser_headers_raw(mp);
-		while (headers) {
-			camel_medium_add_header((CamelMedium *)dw, headers->name, headers->value);
-			headers = headers->next;
-		}
-		camel_mime_part_construct_content(dw, mp);
-		break;
-	default:
-		g_warning("Invalid state encountered???: %d", camel_mime_parser_state(mp));
-	}
-}
-
-static void 
-my_set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelMimePart *mime_part = CAMEL_MIME_PART (data_wrapper);
-	CamelSeekableStream *seekable_stream;
-	guint32 content_stream_inf_bound;
-	
-
-	g_assert (CAMEL_IS_SEEKABLE_STREAM (stream));
-	seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
-
-	/* call parent class implementation */
-	CAMEL_DATA_WRAPPER_CLASS (parent_class)->set_input_stream (data_wrapper, stream);
-
-
-	camel_mime_part_construct_headers_from_stream (mime_part, stream);
-	
-	/* set the input stream for the content object */
-	content_stream_inf_bound = camel_seekable_stream_get_current_position (seekable_stream);
-	
-	if (mime_part->content_input_stream)
-		gtk_object_unref (GTK_OBJECT (mime_part->content_input_stream));
-	mime_part->content_input_stream = camel_seekable_substream_new_with_seekable_stream_and_bounds (seekable_stream,
-													content_stream_inf_bound, 
-													-1);
-	gtk_object_ref (GTK_OBJECT (mime_part->content_input_stream));
-	gtk_object_sink (GTK_OBJECT (mime_part->content_input_stream));
-}
-
-
-static CamelStream *
-my_get_output_stream (CamelDataWrapper *data_wrapper)
-{
-	CamelMimePart *mime_part = CAMEL_MIME_PART (data_wrapper);
-	CamelStream *input_stream;
-	CamelStream *output_stream;
-	/* ** FIXME : bogus bogus bogus - test test test */
-
-	return NULL; 
-
-	/* 
-	 * For the moment, we do not use this routine on 
-	 * mime parts. Maybe later.
-	 */
-	input_stream = camel_data_wrapper_get_input_stream (data_wrapper);
-	
-	if (input_stream == NULL)
-		return NULL;
-
-	switch (mime_part->encoding) {
-		
-	case CAMEL_MIME_PART_ENCODING_DEFAULT:
-	case CAMEL_MIME_PART_ENCODING_7BIT:
-	case CAMEL_MIME_PART_ENCODING_8BIT:
-		return input_stream;
-		
-	case CAMEL_MIME_PART_ENCODING_BASE64:
-		return output_stream;
-
-	case CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE:
-		return input_stream;
-	default:
-		break;
-	}
-
-	return NULL;
-}
-
-
-const gchar *
-camel_mime_part_encoding_to_string (CamelMimePartEncodingType encoding)
-{
-	switch (encoding) {
-	case CAMEL_MIME_PART_ENCODING_DEFAULT:
-	case CAMEL_MIME_PART_ENCODING_7BIT:
-		return "7bit";
-	case CAMEL_MIME_PART_ENCODING_8BIT:
-		return "8bit";
-	case CAMEL_MIME_PART_ENCODING_BASE64:
-		return "base64";
-	case CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE:
-		return "quoted-printable";
-	default:
-		break;
-	}
-	return "";
-}
-
-
-
-/* FIXME I am not sure this is the correct way to do this.  */
-CamelMimePartEncodingType
-camel_mime_part_encoding_from_string (const gchar *string)
-{
-	if (string == NULL)
-		return CAMEL_MIME_PART_ENCODING_DEFAULT;
-	else if (strcasecmp (string, "7bit") == 0)
-		return CAMEL_MIME_PART_ENCODING_7BIT;
-	else if (strcasecmp (string, "8bit") == 0)
-		return CAMEL_MIME_PART_ENCODING_8BIT;
-	else if (strcasecmp (string, "base64") == 0)
-		return CAMEL_MIME_PART_ENCODING_BASE64;
-	else if (strcasecmp (string, "quoted-printable") == 0)
-		return CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE;
-	else
-		/* FIXME?  Spit a warning?  */
-		return CAMEL_MIME_PART_ENCODING_DEFAULT;
-}
-
-
-/******************************/
-/**  Misc utility functions  **/
-
-
-/**
- * camel_mime_part_set_text: set the content to be some text
- * @camel_mime_part: Mime part 
- * @text: the text
- * 
- * Utility function used to set the content of a mime part object to 
- * be a text string. When @text is NULL, this routine can be used as
- * a way to remove old text content.
- * 
- **/
-void 
-camel_mime_part_set_text (CamelMimePart *camel_mime_part, const gchar *text)
-{
-	CamelSimpleDataWrapper *simple_data_wrapper;
-	CamelMedium *medium = CAMEL_MEDIUM (camel_mime_part);
-
-	if (medium->content)
-		gtk_object_unref (GTK_OBJECT (medium->content));
-	if (text) {
-		simple_data_wrapper = camel_simple_data_wrapper_new ();
-		camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (simple_data_wrapper), "text/plain");
-		camel_simple_data_wrapper_set_text ( simple_data_wrapper, text);
-		camel_medium_set_content_object ( CAMEL_MEDIUM (camel_mime_part), CAMEL_DATA_WRAPPER (simple_data_wrapper));
-		gtk_object_unref (GTK_OBJECT (simple_data_wrapper));
-	} else medium->content = NULL;
-}
-
- 
diff --git a/camel/camel-mime-part.h b/camel/camel-mime-part.h
deleted file mode 100644
index 89409dab5f..0000000000
--- a/camel/camel-mime-part.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mime-part.h : class for a mime part */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_MIME_PART_H
-#define CAMEL_MIME_PART_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-medium.h"
-#include 
-
-#define CAMEL_MIME_PART_TYPE     (camel_mime_part_get_type ())
-#define CAMEL_MIME_PART(obj)     (GTK_CHECK_CAST((obj), CAMEL_MIME_PART_TYPE, CamelMimePart))
-#define CAMEL_MIME_PART_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MIME_PART_TYPE, CamelMimePartClass))
-#define CAMEL_IS_MIME_PART(o)    (GTK_CHECK_TYPE((o), CAMEL_MIME_PART_TYPE))
-
-
-enum _CamelMimePartEncodingType {
-        CAMEL_MIME_PART_ENCODING_DEFAULT,
-        CAMEL_MIME_PART_ENCODING_7BIT,
-        CAMEL_MIME_PART_ENCODING_8BIT,
-        CAMEL_MIME_PART_ENCODING_BASE64,
-        CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE,
-        CAMEL_MIME_PART_NUM_ENCODINGS
-};
-typedef enum _CamelMimePartEncodingType CamelMimePartEncodingType;
-
-
-/* Do not change these values directly, you
-   would regret it one day */
-struct _CamelMimePart
-{
-	CamelMedium parent_object;
-	
-	/* All fields here are -** PRIVATE **- */ 
-	gchar *description;
-	CamelMimeDisposition *disposition;
-	gchar *content_id;
-	gchar *content_MD5;
-	GList *content_languages;
-	CamelMimePartEncodingType encoding;
-	
-	GByteArray *temp_message_buffer;
-	GMimeContentField *content_type;
-	CamelStream *content_input_stream;
-	
-};
-
-
-
-typedef struct {
-	CamelMediumClass parent_class;
-	
-	/* Virtual methods */	
-} CamelMimePartClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_mime_part_get_type (void);
-
-
-/* public methods */
-void	         camel_mime_part_set_description	(CamelMimePart *mime_part, const gchar *description);
-const     gchar *camel_mime_part_get_description	(CamelMimePart *mime_part);
-
-void	         camel_mime_part_set_disposition	(CamelMimePart *mime_part, const gchar *disposition);
-const     gchar *camel_mime_part_get_disposition	(CamelMimePart *mime_part);
-
-void	         camel_mime_part_set_filename		(CamelMimePart *mime_part, gchar *filename);
-const	  gchar *camel_mime_part_get_filename		(CamelMimePart *mime_part);
-
-void             camel_mime_part_set_content_id		(CamelMimePart *mime_part, const char *contentid);
-const	  gchar *camel_mime_part_get_content_id		(CamelMimePart *mime_part);
-
-void		 camel_mime_part_set_content_MD5	(CamelMimePart *mime_part, const char *);
-const	  gchar *camel_mime_part_get_content_MD5	(CamelMimePart *mime_part);
-
-void	         camel_mime_part_set_encoding		(CamelMimePart *mime_part, CamelMimePartEncodingType type);
-CamelMimePartEncodingType camel_mime_part_get_encoding	(CamelMimePart *mime_part);
-
-void	 	 camel_mime_part_set_content_languages	(CamelMimePart *mime_part, GList *content_languages);
-const	  GList *camel_mime_part_get_content_languages	(CamelMimePart *mime_part);
-
-/* FIXME: what about content-type parameters?   what about major/minor parts? */
-void               camel_mime_part_set_content_type 	(CamelMimePart *mime_part, gchar *content_type);
-GMimeContentField *camel_mime_part_get_content_type	(CamelMimePart *mime_part);
-
-const     gchar *         camel_mime_part_encoding_to_string   (CamelMimePartEncodingType encoding);
-CamelMimePartEncodingType camel_mime_part_encoding_from_string (const gchar *string);
-
-/* utility functions */
-void      camel_mime_part_set_text			(CamelMimePart *camel_mime_part, 
-							 const gchar *text);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MIME_PART_H */
-
diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c
deleted file mode 100644
index f9e2389fee..0000000000
--- a/camel/camel-mime-utils.c
+++ /dev/null
@@ -1,2117 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include 
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#include 
-#include 
-
-#include 
-#include 
-
-#include "camel-mime-utils.h"
-
-#define d(x)
-#define d2(x)
-
-static char *base64_alphabet =
-"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-static unsigned char tohex[16] = {
-	'0', '1', '2', '3', '4', '5', '6', '7',
-	'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
-};
-
-static unsigned char camel_mime_special_table[256] = {
-	  5,  5,  5,  5,  5,  5,  5,  5,  5,167,  7,  5,  5, 39,  5,  5,
-	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
-	178,128,140,128,128,128,128,128,140,140,128,128,140,128,136,132,
-	128,128,128,128,128,128,128,128,128,128,204,140,140,  4,140,132,
-	140,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-	128,128,128,128,128,128,128,128,128,128,128,172,172,172,128,128,
-	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,  5,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-};
-
-static unsigned char camel_mime_base64_rank[256] = {
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255, 62,255,255,255, 63,
-	 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,255,255,255,  0,255,255,
-	255,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
-	 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,255,255,255,255,255,
-	255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-	 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-};
-
-/*
-  if any of these change, then the tables above should be regenerated
-  by compiling this with -DBUILD_TABLE, and running.
-
-  gcc -o buildtable `glib-config --cflags --libs` -DBUILD_TABLE camel-mime-utils.c
-  ./buildtable
-
-*/
-enum {
-	IS_CTRL		= 1<<0,
-	IS_LWSP		= 1<<1,
-	IS_TSPECIAL	= 1<<2,
-	IS_SPECIAL	= 1<<3,
-	IS_SPACE	= 1<<4,
-	IS_DSPECIAL	= 1<<5,
-	IS_COLON	= 1<<6,	/* rather wasteful of space ... */
-	IS_QPSAFE	= 1<<7
-};
-
-#define is_ctrl(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_CTRL) != 0)
-#define is_lwsp(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_LWSP) != 0)
-#define is_tspecial(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_TSPECIAL) != 0)
-#define is_type(x, t) ((camel_mime_special_table[(unsigned char)(x)] & (t)) != 0)
-#define is_ttoken(x) ((camel_mime_special_table[(unsigned char)(x)] & (IS_TSPECIAL|IS_LWSP|IS_CTRL)) == 0)
-#define is_atom(x) ((camel_mime_special_table[(unsigned char)(x)] & (IS_SPECIAL|IS_SPACE|IS_CTRL)) == 0)
-#define is_dtext(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_DSPECIAL) == 0)
-#define is_fieldname(x) ((camel_mime_special_table[(unsigned char)(x)] & (IS_CTRL|IS_SPACE|IS_COLON)) == 0)
-#define is_qpsafe(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_QPSAFE) != 0)
-
-/* only needs to be run to rebuild the tables above */
-#ifdef BUILD_TABLE
-
-#define CHARS_LWSP " \t\n\r"
-#define CHARS_TSPECIAL "()<>@,;:\\\"/[]?="
-#define CHARS_SPECIAL "()<>@,;:\\\".[]"
-#define CHARS_CSPECIAL "()\\\r"	/* not in comments */
-#define CHARS_DSPECIAL "[]\\\r \t"	/* not in domains */
-
-static void
-header_init_bits(unsigned char bit, unsigned char bitcopy, int remove, unsigned char *vals, int len)
-{
-	int i;
-
-	if (!remove) {
-		for (i=0;i=33 && i<=60) || (i>=62 && i<=126) || i==32 || i==9) camel_mime_special_table[i] |= IS_QPSAFE;
-}
-
-void
-base64_init(void)
-{
-	int i;
-
-	memset(camel_mime_base64_rank, 0xff, sizeof(camel_mime_base64_rank));
-	for (i=0;i<64;i++) {
-		camel_mime_base64_rank[(unsigned int)base64_alphabet[i]] = i;
-	}
-	camel_mime_base64_rank['='] = 0;
-}
-
-int main(int argc, char **argv)
-{
-	int i;
-	void run_test(void);
-
-	header_decode_init();
-	base64_init();
-
-	printf("static unsigned char camel_mime_special_table[256] = {\n\t");
-	for (i=0;i<256;i++) {
-		printf("%3d,", camel_mime_special_table[i]);
-		if ((i&15) == 15) {
-			printf("\n");
-			if (i!=255) {
-				printf("\t");
-			}
-		}
-	}
-	printf("};\n");
-
-	printf("static unsigned char camel_mime_base64_rank[256] = {\n\t");
-	for (i=0;i<256;i++) {
-		printf("%3d,", camel_mime_base64_rank[i]);
-		if ((i&15) == 15) {
-			printf("\n");
-			if (i!=255) {
-				printf("\t");
-			}
-		}
-	}
-	printf("};\n");
-
-	run_test();
-
-	return 0;
-}
-
-#endif
-
-
-/* call this when finished encoding everything, to
-   flush off the last little bit */
-int
-base64_encode_close(unsigned char *in, int inlen, unsigned char *out, int *state, int *save)
-{
-	int c1, c2;
-	unsigned char *outptr = out;
-
-	if (inlen>0)
-		outptr += base64_encode_step(in, inlen, outptr, state, save);
-
-	c1 = ((char *)save)[1];
-	c2 = ((char *)save)[2];
-
-	switch (((char *)save)[0]) {
-	case 2:
-		outptr[2] = base64_alphabet [ ( (c2 &0x0f) << 2 ) ];
-		goto skip;
-	case 1:
-		outptr[2] = '=';
-	skip:
-		outptr[0] = base64_alphabet [ c1 >> 2 ];
-		outptr[1] = base64_alphabet [ c2 >> 4 | ( (c1&0x3) << 4 )];
-		outptr[3] = '=';
-		outptr += 4;
-		break;
-	}
-	*outptr++ = '\n';
-
-	*save = 0;
-	*state = 0;
-
-	return outptr-out;
-}
-
-/*
-  performs an 'encode step', only encodes blocks of 3 characters to the
-  output at a time, saves left-over state in state and save (initialise to
-  0 on first invocation).
-*/
-int
-base64_encode_step(unsigned char *in, int len, unsigned char *out, int *state, int *save)
-{
-	register unsigned char *inptr, *outptr;
-
-	if (len<=0)
-		return 0;
-
-	inptr = in;
-	outptr = out;
-
-	d(printf("we have %d chars, and %d saved chars\n", len, ((char *)save)[0]));
-
-	if (len + ((char *)save)[0] > 2) {
-		unsigned char *inend = in+len-2;
-		register int c1, c2, c3;
-		register int already;
-
-		already = *state;
-
-		switch (((char *)save)[0]) {
-		case 1:	c1 = ((char *)save)[1];	goto skip1;
-		case 2:	c1 = ((char *)save)[1];
-			c2 = ((char *)save)[2];	goto skip2;
-		}
-		
-		/* yes, we jump into the loop, no i'm not going to change it, its beautiful! */
-		while (inptr < inend) {
-			c1 = *inptr++;
-		skip1:
-			c2 = *inptr++;
-		skip2:
-			c3 = *inptr++;
-			*outptr++ = base64_alphabet [ c1 >> 2 ];
-			*outptr++ = base64_alphabet [ c2 >> 4 | ( (c1&0x3) << 4 ) ];
-			*outptr++ = base64_alphabet [ ( (c2 &0x0f) << 2 ) | (c3 >> 6) ];
-			*outptr++ = base64_alphabet [ c3 & 0x3f ];
-			/* this is a bit ugly ... */
-			if ((++already)>=19) {
-				*outptr++='\n';
-				already = 0;
-			}
-		}
-
-		((char *)save)[0] = 0;
-		len = 2-(inptr-inend);
-		*state = already;
-	}
-
-	d(printf("state = %d, len = %d\n",
-		 (int)((char *)save)[0],
-		 len));
-
-	if (len>0) {
-		register char *saveout;
-
-		/* points to the slot for the next char to save */
-		saveout = & (((char *)save)[1]) + ((char *)save)[0];
-
-		/* len can only be 0 1 or 2 */
-		switch(len) {
-		case 2:	*saveout++ = *inptr++;
-		case 1:	*saveout++ = *inptr++;
-		}
-		((char *)save)[0]+=len;
-	}
-
-	d(printf("mode = %d\nc1 = %c\nc2 = %c\n",
-		 (int)((char *)save)[0],
-		 (int)((char *)save)[1],
-		 (int)((char *)save)[2]));
-
-	return outptr-out;
-}
-
-int
-base64_decode_step(unsigned char *in, int len, unsigned char *out, int *state, unsigned int *save)
-{
-	register unsigned char *inptr, *outptr;
-	unsigned char *inend, c;
-	register unsigned int v;
-	int i;
-
-	inend = in+len;
-	outptr = out;
-
-	/* convert 4 base64 bytes to 3 normal bytes */
-	v=*save;
-	i=*state;
-	inptr = in;
-	while (inptr>16;
-				*outptr++ = v>>8;
-				*outptr++ = v;
-				i=0;
-			}
-		}
-	}
-
-	*save = v;
-	*state = i;
-
-	/* quick scan back for '=' on the end somewhere */
-	/* fortunately we can drop 1 output char for each trailing = (upto 2) */
-	i=2;
-	while (inptr>in && i) {
-		inptr--;
-		if (camel_mime_base64_rank[*inptr] != 0xff) {
-			if (*inptr == '=')
-				outptr--;
-			i--;
-		}
-	}
-
-	/* if i!= 0 then there is a truncation error! */
-	return outptr-out;
-}
-
-int
-quoted_encode_close(unsigned char *in, int len, unsigned char *out, int *state, int *save)
-{
-	register unsigned char *outptr = out;
-
-	if (len>0)
-		outptr += quoted_encode_step(in, len, outptr, state, save);
-
-	/* hmm, not sure if this should really be added here, we dont want
-	   to add it to the content, afterall ...? */
-	*outptr++ = '\n';
-
-	*save = 0;
-	*state = 0;
-
-	return outptr-out;
-}
-
-/*
-  FIXME: does not handle trailing spaces/tabs before end of line
-*/
-int
-quoted_encode_step(unsigned char *in, int len, unsigned char *out, int *state, int *save)
-{
-	register unsigned char *inptr, *outptr, *inend;
-	unsigned char c;
-	register int sofar = *state;
-
-	inptr = in;
-	inend = in+len;
-	outptr = out;
-	while (inptr74) {
-				*outptr++='=';
-				*outptr++='\n';
-				sofar = 1;
-			}
-			*outptr++=c;
-		} else {
-			if ((++sofar)>72) {
-				*outptr++='=';
-				*outptr++='\n';
-				sofar = 3;
-			}
-			*outptr++ = '=';
-			*outptr++ = tohex[(c>>4) & 0xf];
-			*outptr++ = tohex[c & 0xf];
-		}
-	}
-	*state = sofar;
-	return outptr-out;
-}
-
-/*
-  FIXME: this does not strip trailing spaces from lines (as it should, rfc 2045, section 6.7)
-  Should it also canonicalise the end of line to CR LF??
-
-  Note: Trailing rubbish (at the end of input), like = or =x or =\r will be lost.
-*/ 
-
-int
-quoted_decode_step(unsigned char *in, int len, unsigned char *out, int *savestate, int *saveme)
-{
-	register unsigned char *inptr, *outptr;
-	unsigned char *inend, c;
-	int state, save;
-
-	inend = in+len;
-	outptr = out;
-
-	d(printf("quoted-printable, decoding text '%.*s'\n", len, in));
-
-	state = *savestate;
-	save = *saveme;
-	inptr = in;
-	while (inptr='A'?save-'A'+10:save-'0')&0x0f) << 4)
-					| ((c>='A'?c-'A'+10:c-'0')&0x0f);
-			} else if (c=='\n' && save == '\r') {
-				/* soft break ... canonical end of line */
-			} else {
-				/* just output the data */
-				*outptr++ = '=';
-				*outptr++ = save;
-				*outptr++ = c;
-			}
-			state = 0;
-			break;
-#ifdef CANONICALISE_EOL
-		case 3:
-			/* convert \r -> to \r\n, leaves \r\n alone */
-			c = *inptr++;
-			if (c=='\n') {
-				*outptr++ = '\r';
-				*outptr++ = c;
-			} else {
-				*outptr++ = '\r';
-				*outptr++ = '\n';
-				*outptr++ = c;
-			}
-			state = 0;
-			break;
-#endif
-		}
-	}
-
-	*savestate = state;
-	*saveme = save;
-
-	return outptr-out;
-}
-
-/*
-  this is for the "Q" encoding of international words,
-  which is slightly different than plain quoted-printable
-*/
-static int
-quoted_decode(const unsigned char *in, int len, unsigned char *out)
-{
-	register const unsigned char *inptr;
-	register unsigned char *outptr;
-	unsigned const char *inend;
-	unsigned char c, c1;
-	int ret = 0;
-
-	inend = in+len;
-	outptr = out;
-
-	d(printf("decoding text '%.*s'\n", len, in));
-
-	inptr = in;
-	while (inptr=2) {
-				c = toupper(*inptr++);
-				c1 = toupper(*inptr++);
-				*outptr++ = (((c>='A'?c-'A'+10:c-'0')&0x0f) << 4)
-					| ((c1>='A'?c1-'A'+10:c1-'0')&0x0f);
-			} else {
-				ret = -1;
-				break;
-			}
-		} else if (c=='_') {
-			*outptr++ = 0x20;
-		} else if (c==' ' || c==0x09) {
-			/* FIXME: this is an error! ignore for now ... */
-			ret = -1;
-			break;
-		} else {
-			*outptr++ = c;
-		}
-	}
-	if (ret==0) {
-		return outptr-out;
-	}
-	return -1;
-}
-
-/* rfc2047 version of quoted-printable */
-static int
-quoted_encode(const unsigned char *in, int len, unsigned char *out)
-{
-	register const unsigned char *inptr, *inend;
-	unsigned char *outptr;
-	unsigned char c;
-
-	inptr = in;
-	inend = in+len;
-	outptr = out;
-	while (inptr>4) & 0xf];
-			*outptr++ = tohex[c & 0xf];
-		}
-	}
-
-	printf("encoding '%.*s' = '%.*s'\n", len, in, outptr-out, out);
-
-	return outptr-out;
-}
-
-
-static void
-header_decode_lwsp(const char **in)
-{
-	const char *inptr = *in;
-	char c;
-
-	d2(printf("is ws: '%s'\n", *in));
-
-	while (is_lwsp(*inptr) || *inptr =='(') {
-		while (is_lwsp(*inptr)) {
-			d2(printf("(%c)", *inptr));
-			inptr++;
-		}
-		d2(printf("\n"));
-
-		/* check for comments */
-		if (*inptr == '(') {
-			int depth = 1;
-			inptr++;
-			while (depth && (c=*inptr)) {
-				if (c=='\\' && inptr[1]) {
-					inptr++;
-				} else if (c=='(') {
-					depth++;
-				} else if (c==')') {
-					depth--;
-				}
-				inptr++;
-			}
-		}
-	}
-	*in = inptr;
-}
-
-/* decode rfc 2047 encoded string segment */
-static char *
-rfc2047_decode_word(const char *in, int len)
-{
-	const char *inptr = in+2;
-	const char *inend = in+len-2;
-	char *encname;
-	int tmplen;
-	int ret;
-	char *decword = NULL;
-	char *decoded = NULL;
-	char *outbase = NULL;
-	char *inbuf, *outbuf;
-	int inlen, outlen;
-	unicode_iconv_t ic;
-
-	d(printf("decoding '%.*s'\n", len, in));
-
-	/* just make sure we're not passed shit */
-	if (len<7
-	    || !(in[0]=='=' && in[1]=='?' && in[len-1]=='=' && in[len-2]=='?')) {
-		d(printf("invalid\n"));
-		return NULL;
-	}
-
-	inptr = memchr(inptr, '?', inend-inptr);
-	if (inptr!=NULL
-	    && inptr0) {
-			/* yuck, all this snot is to setup iconv! */
-			tmplen = inptr-in-3;
-			encname = alloca(tmplen+1);
-			encname[tmplen]=0;
-			memcpy(encname, in+2, tmplen);
-
-			inbuf = decword;
-
-			outlen = inlen*6;
-			outbase = g_malloc(outlen);
-			outbuf = outbase;
-
-			ic = unicode_iconv_open("utf-8", encname);
-			ret = unicode_iconv(ic, (const char **)&inbuf, &inlen, &outbuf, &outlen);
-			unicode_iconv_close(ic);
-			if (ret>=0) {
-				*outbuf = 0;
-				decoded = outbase;
-				outbase = NULL;
-			}
-		}
-	}
-	free(outbase);
-	free(decword);
-
-	d(printf("decoded '%s'\n", decoded));
-
-	return decoded;
-}
-
-/* grrr, glib should have this ! */
-static GString *
-g_string_append_len(GString *st, const char *s, int l)
-{
-	char *tmp;
-
-	tmp = alloca(l+1);
-	tmp[l]=0;
-	memcpy(tmp, s, l);
-	return g_string_append(st, tmp);
-}
-
-/* decodes a simple text, rfc822 */
-static char *
-header_decode_text(const char *in, int inlen)
-{
-	GString *out;
-	const char *inptr = in;
-	const char *inend = in+inlen;
-	char *encstart, *encend;
-	char *decword;
-
-	out = g_string_new("");
-	while ( (encstart = strstr(inptr, "=?"))
-		&& (encend = strstr(encstart+2, "?=")) ) {
-
-		decword = rfc2047_decode_word(encstart, encend-encstart+2);
-		if (decword) {
-			g_string_append_len(out, inptr, encstart-inptr);
-			g_string_append_len(out, decword, strlen(decword));
-			free(decword);
-		} else {
-			g_string_append_len(out, inptr, encend-inptr+2);
-		}
-		inptr = encend+2;
-	}
-	g_string_append_len(out, inptr, inend-inptr);
-
-	encstart = out->str;
-	g_string_free(out, FALSE);
-
-	return encstart;
-}
-
-char *
-header_decode_string(const char *in)
-{
-	if (in == NULL)
-		return NULL;
-	return header_decode_text(in, strlen(in));
-}
-
-static char *encoding_map[] = {
-	"US-ASCII",
-	"ISO-8859-1",
-	"UTF-8"
-};
-
-/* FIXME: needs a way to cache iconv opens for different charsets? */
-static
-char *rfc2047_encode_word(const char *in, int len, char *type)
-{
-	unicode_iconv_t ic;
-	char *buffer, *out, *ascii;
-	size_t inlen, outlen, enclen;
-
-	printf("Converting '%.*s' to %s\n", len, in, type);
-
-	/* convert utf8->encoding */
-	outlen = len*6;
-	buffer = alloca(outlen);
-	inlen = len;
-	out = buffer;
-
-	/* if we can't convert from utf-8, just encode as utf-8 */
-	if (!strcasecmp(type, "UTF-8")
-	    || (ic = unicode_iconv_open(type, "UTF-8")) == (unicode_iconv_t)-1) {
-		memcpy(buffer, in, len);
-		out = buffer+len;
-		type = "UTF-8";
-	} else {
-		if (unicode_iconv(ic, &in, &inlen, &out, &outlen) == -1) {
-			g_warning("Conversion problem: conversion truncated: %s", strerror(errno));
-		}
-		unicode_iconv_close(ic);
-	}
-	enclen = out-buffer;
-
-	/* now create qp version */
-	ascii = alloca(enclen*3 + strlen(type) + 8);
-	out = ascii;
-	/* should determine which encoding is smaller, and use that? */
-	out += sprintf(out, "=?%s?Q?", type);
-	out += quoted_encode(buffer, enclen, out);
-	sprintf(out, "?=");
-
-	printf("converted = %s\n", ascii);
-	return g_strdup(ascii);
-}
-
-
-/* TODO: Should this worry about quotes?? */
-char *
-header_encode_string(const unsigned char *in)
-{
-	GString *out;
-	const unsigned char *inptr = in, *start;
-	int encoding;
-	char *outstr;
-
-	if (in == NULL)
-		return NULL;
-
-	/* do a quick us-ascii check (the common case?) */
-	while (*inptr) {
-		if (*inptr > 127)
-			break;
-		inptr++;
-	}
-	if (*inptr == 0)
-		return g_strdup(in);
-
-	/* This gets each word out of the input, and checks to see what charset
-	   can be used to encode it. */
-	/* TODO: Work out when to merge subsequent words, or across word-parts */
-	/* FIXME: Make sure a converted word is less than the encoding size */
-	out = g_string_new("");
-	inptr = in;
-	encoding = 0;
-	start = inptr;
-	while (inptr && *inptr) {
-		unicode_char_t c;
-		const char *newinptr;
-		newinptr = unicode_get_utf8(inptr, &c);
-		if (newinptr == NULL) {
-			g_warning("Invalid UTF-8 sequence encountered (pos %d, char '%c'): %s", (inptr-in), inptr[0], in);
-			inptr++;
-			continue;
-		}
-		inptr = newinptr;
-		if (unicode_isspace(c)) {
-			if (encoding == 0) {
-				g_string_append_len(out, start, inptr-start);
-			} else {
-				char *text = rfc2047_encode_word(start, inptr-start-1, encoding_map[encoding]);
-				g_string_append(out, text);
-				g_string_append_c(out, c);
-				g_free(text);
-			}
-			start = inptr;
-			encoding = 0;
-		} else if (c>127 && c < 256) {
-			encoding = MAX(encoding, 1);
-		} else if (c >=256) {
-			encoding = MAX(encoding, 2);
-		}
-	}
-	if (inptr-start) {
-		if (encoding == 0) {
-			g_string_append_len(out, start, inptr-start);
-		} else {
-			char *text = rfc2047_encode_word(start, inptr-start, encoding_map[encoding]);
-			g_string_append(out, text);
-			g_free(text);
-		}
-	}
-	outstr = out->str;
-	g_string_free(out, FALSE);
-	return outstr;
-}
-
-
-/* these are all internal parser functions */
-
-static char *
-decode_token(const char **in)
-{
-	const char *inptr = *in;
-	const char *start;
-
-	header_decode_lwsp(&inptr);
-	start = inptr;
-	while (is_ttoken(*inptr))
-		inptr++;
-	if (inptr>start) {
-		*in = inptr;
-		return g_strndup(start, inptr-start);
-	} else {
-		return NULL;
-	}
-}
-
-char *
-header_token_decode(const char *in)
-{
-	if (in == NULL)
-		return NULL;
-
-	return decode_token(&in);
-}
-
-/*
-   <"> * (  \, cr  /  \  ) <">
-*/
-static char *
-header_decode_quoted_string(const char **in)
-{
-	const char *inptr = *in;
-	char *out = NULL, *outptr;
-	int outlen;
-	int c;
-
-	header_decode_lwsp(&inptr);
-	if (*inptr == '"') {
-		const char *intmp;
-		int skip = 0;
-
-		/* first, calc length */
-		inptr++;
-		intmp = inptr;
-		while ( (c = *intmp++) && c!= '"' ) {
-			if (c=='\\' && *intmp) {
-				intmp++;
-				skip++;
-			}
-		}
-		outlen = intmp-inptr-skip;
-		out = outptr = g_malloc(outlen+1);
-		while ( (c = *inptr++) && c!= '"' ) {
-			if (c=='\\' && *inptr) {
-				c = *inptr++;
-			}
-			*outptr++ = c;
-		}
-		*outptr = 0;
-	}
-	*in = inptr;
-	return out;
-}
-
-static char *
-header_decode_atom(const char **in)
-{
-	const char *inptr = *in, *start;
-
-	header_decode_lwsp(&inptr);
-	start = inptr;
-	while (is_atom(*inptr))
-		inptr++;
-	*in = inptr;
-	if (inptr > start)
-		return g_strndup(start, inptr-start);
-	else
-		return NULL;
-}
-
-static char *
-header_decode_word(const char **in)
-{
-	const char *inptr = *in;
-
-	header_decode_lwsp(&inptr);
-	if (*inptr == '"') {
-		*in = inptr;
-		return header_decode_quoted_string(in);
-	} else {
-		*in = inptr;
-		return header_decode_atom(in);
-	}
-}
-
-static char *
-header_decode_value(const char **in)
-{
-	const char *inptr = *in;
-
-	header_decode_lwsp(&inptr);
-	if (*inptr == '"') {
-		d(printf("decoding quoted string\n"));
-		return header_decode_quoted_string(in);
-	} else if (is_ttoken(*inptr)) {
-		d(printf("decoding token\n"));
-		/* this may not have the right specials for all params? */
-		return decode_token(in);
-	}
-	return NULL;
-}
-
-/* shoudl this return -1 for no int? */
-static int
-header_decode_int(const char **in)
-{
-	const char *inptr = *in;
-	int c, v=0;
-
-	header_decode_lwsp(&inptr);
-	while ( (c=*inptr++ & 0xff)
-		&& isdigit(c) ) {
-		v = v*10+(c-'0');
-	}
-	*in = inptr-1;
-	return v;
-}
-
-static int
-header_decode_param(const char **in, char **paramp, char **valuep)
-{
-	const char *inptr = *in;
-	char *param, *value=NULL;
-
-	param = decode_token(&inptr);
-	header_decode_lwsp(&inptr);
-	if (*inptr == '=') {
-		inptr++;
-		value = header_decode_value(&inptr);
-	}
-
-	if (param && value) {
-		*paramp = param;
-		*valuep = value;
-		*in = inptr;
-		return 0;
-	} else {
-		g_free(param);
-		g_free(value);
-		return 1;
-	}
-}
-
-char *
-header_param(struct _header_param *p, const char *name)
-{
-	while (p && strcasecmp(p->name, name) != 0)
-		p = p->next;
-	if (p)
-		return p->value;
-	return NULL;
-}
-
-struct _header_param *
-header_set_param(struct _header_param **l, const char *name, const char *value)
-{
-	struct _header_param *p = (struct _header_param *)l, *pn;
-
-	while (p->next) {
-		pn = p->next;
-		if (!strcasecmp(pn->name, name)) {
-			g_free(pn->value);
-			if (value) {
-				pn->value = g_strdup(value);
-				return pn;
-			} else {
-				p->next = pn->next;
-				g_free(pn);
-				return NULL;
-			}
-		}
-		p = pn;
-	}
-
-	if (value == NULL)
-		return NULL;
-
-	pn = g_malloc(sizeof(*pn));
-	pn->next = 0;
-	pn->name = g_strdup(name);
-	pn->value = g_strdup(value);
-	p->next = pn;
-
-	return pn;
-}
-
-const char *
-header_content_type_param(struct _header_content_type *t, const char *name)
-{
-	if (t==NULL)
-		return NULL;
-	return header_param(t->params, name);
-}
-
-void header_content_type_set_param(struct _header_content_type *t, const char *name, const char *value)
-{
-	header_set_param(&t->params, name, value);
-}
-
-/**
- * header_content_type_is:
- * @ct: A content type specifier, or #NULL.
- * @type: A type to check against.
- * @subtype: A subtype to check against, or "*" to match any subtype.
- * 
- * Returns #TRUE if the content type @ct is of type @type/@subtype.
- * The subtype of "*" will match any subtype.  If @ct is #NULL, then
- * it will match the type "text/plain".
- * 
- * Return value: #TRUE or #FALSE depending on the matching of the type.
- **/
-int
-header_content_type_is(struct _header_content_type *ct, const char *type, const char *subtype)
-{
-	/* no type == text/plain or text/"*" */
-	if (ct==NULL) {
-		return (!strcasecmp(type, "text")
-			&& (!strcasecmp(subtype, "plain")
-			    || !strcasecmp(subtype, "*")));
-	}
-
-	return (ct->type != NULL
-		&& (!strcasecmp(ct->type, type)
-		    && ((ct->subtype != NULL
-			 && !strcasecmp(ct->subtype, subtype))
-			|| !strcasecmp("*", subtype))));
-}
-
-void
-header_param_list_free(struct _header_param *p)
-{
-	struct _header_param *n;
-
-	while (p) {
-		n = p->next;
-		g_free(p->name);
-		g_free(p->value);
-		g_free(p);
-		p = n;
-	}
-}
-
-struct _header_content_type *
-header_content_type_new(const char *type, const char *subtype)
-{
-	struct _header_content_type *t = g_malloc(sizeof(*t));
-
-	t->type = g_strdup(type);
-	t->subtype = g_strdup(subtype);
-	t->params = NULL;
-	t->refcount = 1;
-	return t;
-}
-
-void
-header_content_type_ref(struct _header_content_type *ct)
-{
-	if (ct)
-		ct->refcount++;
-}
-
-
-void
-header_content_type_unref(struct _header_content_type *ct)
-{
-	if (ct) {
-		if (ct->refcount <= 1) {
-			header_param_list_free(ct->params);
-			g_free(ct->type);
-			g_free(ct->subtype);
-			g_free(ct);
-		} else {
-			ct->refcount--;
-		}
-	}
-}
-
-/* for decoding email addresses, canonically */
-static char *
-header_decode_domain(const char **in)
-{
-	const char *inptr = *in, *start;
-	int go = TRUE;
-	GString *domain = g_string_new("");
-
-				/* domain ref | domain literal */
-	header_decode_lwsp(&inptr);
-	while (go) {
-		if (*inptr == '[') { /* domain literal */
-			g_string_append(domain, "[ ");
-			inptr++;
-			header_decode_lwsp(&inptr);
-			start = inptr;
-			while (is_dtext(*inptr)) {
-				g_string_append_c(domain, *inptr);
-				inptr++;
-			}
-			if (*inptr == ']') {
-				g_string_append(domain, " ]");
-				inptr++;
-			} else {
-				g_warning("closing ']' not found in domain: %s", *in);
-			}
-		} else {
-			char *a = header_decode_atom(&inptr);
-			if (a) {
-				g_string_append(domain, a);
-			} else {
-				g_warning("missing atom from domain-ref");
-				break;
-			}
-		}
-		header_decode_lwsp(&inptr);
-		if (*inptr == '.') { /* next sub-domain? */
-			g_string_append(domain, " . ");
-			inptr++;
-			header_decode_lwsp(&inptr);
-		} else
-			go = FALSE;
-	}
-
-	*in = inptr;
-
-	/* FIXME:L free string header */
-	return domain->str;
-}
-
-static char *
-header_decode_addrspec(const char **in)
-{
-	const char *inptr = *in;
-	char *word;
-	GString *addr = g_string_new("");
-
-	header_decode_lwsp(&inptr);
-
-	/* addr-spec */
-	word = header_decode_word(&inptr);
-	if (word) {
-		g_string_append(addr, word);
-		header_decode_lwsp(&inptr);
-		while (*inptr == '.' && word) {
-			inptr++;
-			g_string_append_c(addr, '.');
-			word = header_decode_word(&inptr);
-			if (word) {
-				g_string_append(addr, word);
-				header_decode_lwsp(&inptr);
-			} else {
-				g_warning("Invalid address spec: %s", *in);
-			}
-		}
-		if (*inptr == '@') {
-			inptr++;
-			g_string_append_c(addr, '@');
-			word = header_decode_domain(&inptr);
-			if (word) {
-				g_string_append(addr, word);
-			} else {
-				g_warning("Invalid address, missing domain: %s", *in);
-			}
-		} else {
-			g_warning("Invalid addr-spec, missing @: %s", *in);
-		}
-	} else {
-		g_warning("invalid addr-spec, no local part");
-	}
-
-	/* FIXME: return null on error? */
-
-	*in = inptr;
-	word = addr->str;
-	g_string_free(addr, FALSE);
-	return word;
-}
-
-/*
-  address:
-   word *('.' word) @ domain |
-   *(word) '<' [ *('@' domain ) ':' ] word *( '.' word) @ domain |
-
-   1*word ':' [ word ... etc (mailbox, as above) ] ';'
- */
-
-/* mailbox:
-   word *( '.' word ) '@' domain
-   *(word) '<' [ *('@' domain ) ':' ] word *( '.' word) @ domain
-   */
-
-/* FIXME: what does this return? */
-
-static void
-header_decode_mailbox(const char **in)
-{
-	const char *inptr = *in;
-	char *pre;
-	int closeme = FALSE;
-	GString *addr;
-
-	addr = g_string_new("");
-
-	/* for each address */
-	pre = header_decode_word(&inptr);
-	header_decode_lwsp(&inptr);
-	if (!(*inptr == '.' || *inptr == '@' || *inptr==',' || *inptr=='\0')) {	/* ',' and '\0' required incase it is a simple address, no @ domain part (buggy writer) */
-		/* FIXME: rfc 2047 decode each word */
-		while (pre) {
-			/* rfc_decode(pre) */
-			pre = header_decode_word(&inptr);
-		}
-		header_decode_lwsp(&inptr);
-		if (*inptr == '<') {
-			closeme = TRUE;
-			inptr++;
-			header_decode_lwsp(&inptr);
-			if (*inptr == '@') {
-				while (*inptr == '@') {
-					inptr++;
-					header_decode_domain(&inptr);
-					header_decode_lwsp(&inptr);
-					if (*inptr == ',') {
-						inptr++;
-						header_decode_lwsp(&inptr);
-					}
-				}
-				if (*inptr == ':') {
-					inptr++;
-				} else {
-					g_warning("broken route-address, missing ':': %s", *in);
-				}
-			}
-			pre = header_decode_word(&inptr);
-			header_decode_lwsp(&inptr);
-		} else {
-			g_warning("broken address? %s", *in);
-		}
-	}
-
-	if (pre) {
-		g_string_append(addr, pre);
-	} else {
-		g_warning("No local-part for email address: %s", *in);
-	}
-
-	/* should be at word '.' localpart */
-	while (*inptr == '.' && pre) {
-		inptr++;
-		pre = header_decode_word(&inptr);
-		g_string_append_c(addr, '.');
-		g_string_append(addr, pre);
-		header_decode_lwsp(&inptr);
-	}
-
-	/* now at '@' domain part */
-	if (*inptr == '@') {
-		char *dom;
-
-		inptr++;
-		g_string_append_c(addr, '@');
-		dom = header_decode_domain(&inptr);
-		g_string_append(addr, dom);
-	} else {
-		g_warning("invalid address, no '@' domain part at %c: %s", *inptr, *in);
-	}
-
-	if (closeme) {
-		header_decode_lwsp(&inptr);
-		if (*inptr == '>') {
-			inptr++;
-		} else {
-			g_warning("invalid route address, no closing '>': %s", *in);
-		} 
-	}
-
-	*in = inptr;
-
-	d(printf("got mailbox: %s\n", addr->str));
-}
-
-/* FIXME: what does this return? */
-static void
-header_decode_address(const char **in)
-{
-	const char *inptr = *in;
-	char *pre;
-	GString *group = g_string_new("");
-
-	/* pre-scan, trying to work out format, discard results */
-	header_decode_lwsp(&inptr);
-	while ( (pre = header_decode_word(&inptr)) ) {
-		g_string_append(group, pre);
-		g_string_append(group, " ");
-		g_free(pre);
-	}
-	header_decode_lwsp(&inptr);
-	if (*inptr == ':') {
-		d(printf("group detected: %s\n", group->str));
-		/* that was a group spec, scan mailbox's */
-		inptr++;
-		/* FIXME: check rfc 2047 encodings of words, here or above in the loop */
-		header_decode_lwsp(&inptr);
-		if (*inptr != ';') {
-			int go = TRUE;
-			do {
-				header_decode_mailbox(&inptr);
-				header_decode_lwsp(&inptr);
-				if (*inptr == ',')
-					inptr++;
-				else
-					go = FALSE;
-			} while (go);
-			if (*inptr == ';') {
-				inptr++;
-			} else {
-				g_warning("Invalid group spec, missing closing ';': %s", *in);
-			}
-		} else {
-			inptr++;
-		}
-		*in = inptr;
-/*	} else if (*inptr == '.' || *inptr == '<' || *inptr == '@') {*/
-	} else {
-		/* back-track, and rescan.  not worth the code duplication to do this faster */
-		/* this will detect invalid input */
-		header_decode_mailbox(in);
-	}/* else {
-		g_warning("Cannot scan address at '%c': %s", *inptr, *in);
-		}*/
-
-	/* FIXME: store gropu somewhere */
-	g_string_free(group, TRUE);
-}
-
-char *
-header_msgid_decode(const char *in)
-{
-	const char *inptr = in;
-	char *msgid = NULL;
-
-	d(printf("decoding Message-ID: '%s'\n", in));
-
-	if (in == NULL)
-		return NULL;
-
-	header_decode_lwsp(&inptr);
-	if (*inptr == '<') {
-		inptr++;
-		header_decode_lwsp(&inptr);
-		msgid = header_decode_addrspec(&inptr);
-		if (msgid) {
-			header_decode_lwsp(&inptr);
-			if (*inptr == '>') {
-				inptr++;
-			} else {
-				g_warning("Missing closing '>' on message id: %s", in);
-			}
-		} else {
-			g_warning("Cannot find message id in: %s", in);
-		}
-	} else {
-		g_warning("missing opening '<' on message id: %s", in);
-	}
-
-	if (msgid) {
-		d(printf("Got message id: %s\n", msgid));
-	}
-	return msgid;
-}
-
-void
-header_to_decode(const char *in)
-{
-	const char *inptr = in, *last;
-
-	d(printf("decoding To: '%s'\n", in));
-
-#warning header_to_decode needs to return some structure
-
-	if (in == NULL)
-		return;
-
-	do {
-		last = inptr;
-		header_decode_address(&inptr);
-		header_decode_lwsp(&inptr);
-		if (*inptr == ',')
-			inptr++;
-		else
-			break;
-	} while (inptr != last);
-
-	if (*inptr) {
-		g_warning("Invalid input detected at %c (%d): %s\n or at: %s", *inptr, inptr-in, in, inptr);
-	}
-
-	if (inptr == last) {
-		g_warning("detected invalid input loop at : %s", last);
-	}
-}
-
-void
-header_mime_decode(const char *in)
-{
-	const char *inptr = in;
-	int major=-1, minor=-1;
-
-	d(printf("decoding MIME-Version: '%s'\n", in));
-
-#warning header_mime_decode needs to return the version
-
-	if (in == NULL)
-		return;
-
-	header_decode_lwsp(&inptr);
-	if (isdigit(*inptr)) {
-		major = header_decode_int(&inptr);
-		header_decode_lwsp(&inptr);
-		if (*inptr == '.') {
-			inptr++;
-			header_decode_lwsp(&inptr);
-			if (isdigit(*inptr))
-				minor = header_decode_int(&inptr);
-		}
-	}
-
-	d(printf("major = %d, minor = %d\n", major, minor));
-}
-
-static struct _header_param *
-header_param_list_decode(const char **in)
-{
-	const char *inptr = *in;
-	struct _header_param *head = NULL, *tail = NULL;
-
-	header_decode_lwsp(&inptr);
-	while (*inptr == ';') {
-		char *param, *value;
-		struct _header_param *p;
-
-		inptr++;
-		/* invalid format? */
-		if (header_decode_param(&inptr, ¶m, &value) != 0)
-			break;
-
-		p = g_malloc(sizeof(*p));
-		p->name = param;
-		p->value = value;
-		p->next = NULL;
-		if (head == NULL)
-			head = p;
-		if (tail)
-			tail->next = p;
-		tail = p;
-		header_decode_lwsp(&inptr);
-	}
-	*in = inptr;
-	return head;
-}
-
-static void
-header_param_list_format_append(GString *out, struct _header_param *p)
-{
-	int len = out->len;
-	while (p) {
-		int here = out->len;
-		if (len+strlen(p->name)+strlen(p->value)>60) {
-			g_string_append(out, "\n\t");
-			len = 0;
-		}
-		/* FIXME: format the value properly */
-		g_string_sprintfa(out, " ; %s=\"%s\"", p->name, p->value);
-		len += (out->len - here);
-		p = p->next;
-	}
-}
-
-struct _header_content_type *
-header_content_type_decode(const char *in)
-{
-	const char *inptr = in;
-	char *type, *subtype = NULL;
-	struct _header_content_type *t = NULL;
-
-	if (in==NULL)
-		return NULL;
-
-	type = decode_token(&inptr);
-	header_decode_lwsp(&inptr);
-	if (type) {
-		if  (*inptr == '/') {
-			inptr++;
-			subtype = decode_token(&inptr);
-		}
-		if (subtype == NULL && (!strcasecmp(type, "text"))) {
-			g_warning("text type with no subtype, resorting to text/plain: %s", in);
-			subtype = g_strdup("plain");
-		}
-		if (subtype == NULL) {
-			g_warning("MIME type with no subtype: %s", in);
-		}
-
-		t = header_content_type_new(type, subtype);
-		t->params = header_param_list_decode(&inptr);
-	} else {
-		g_free(type);
-		d(printf("cannot find MIME type in header (2) '%s'", in));
-	}
-	return t;
-}
-
-void
-header_content_type_dump(struct _header_content_type *ct)
-{
-	struct _header_param *p;
-
-	printf("Content-Type: ");
-	if (ct==NULL) {
-		printf("\n");
-		return;
-	}
-	printf("%s / %s", ct->type, ct->subtype);
-	p = ct->params;
-	if (p) {
-		while (p) {
-			printf(";\n\t%s=\"%s\"", p->name, p->value);
-			p = p->next;
-		}
-	}
-	printf("\n");
-}
-
-char *
-header_content_type_format(struct _header_content_type *ct)
-{
-	GString *out;
-	char *ret;
-
-	if (ct==NULL)
-		return NULL;
-
-	out = g_string_new("");
-	if (ct->type == NULL) {
-		g_string_sprintfa(out, "text/plain");
-		g_warning("Content-Type with no main type");
-	} else if (ct->subtype == NULL) {
-		g_warning("Content-Type with no sub type: %s", ct->type);
-		if (!strcasecmp(ct->type, "multipart"))
-			g_string_sprintfa(out, "%s/mixed", ct->type);
-		else
-			g_string_sprintfa(out, "%s", ct->type);
-	} else {
-		g_string_sprintfa(out, "%s/%s", ct->type, ct->subtype);
-	}
-	header_param_list_format_append(out, ct->params);
-
-	ret = out->str;
-	g_string_free(out, FALSE);
-	return ret;
-}
-
-char *
-header_content_encoding_decode(const char *in)
-{
-	if (in)
-		return decode_token(&in);
-	return NULL;
-}
-
-CamelMimeDisposition *header_disposition_decode(const char *in)
-{
-	CamelMimeDisposition *d = NULL;
-	const char *inptr = in;
-
-	if (in == NULL)
-		return NULL;
-
-	d = g_malloc(sizeof(*d));
-	d->refcount = 1;
-	d->disposition = decode_token(&inptr);
-	if (d->disposition == NULL)
-		g_warning("Empty disposition type");
-	d->params = header_param_list_decode(&inptr);
-	return d;
-}
-
-void header_disposition_ref(CamelMimeDisposition *d)
-{
-	if (d)
-		d->refcount++;
-}
-void header_disposition_unref(CamelMimeDisposition *d)
-{
-	if (d) {
-		if (d->refcount<=1) {
-			header_param_list_free(d->params);
-			g_free(d->disposition);
-			g_free(d);
-		} else {
-			d->refcount--;
-		}
-	}
-}
-
-char *header_disposition_format(CamelMimeDisposition *d)
-{
-	GString *out;
-	char *ret;
-
-	if (d==NULL)
-		return NULL;
-
-	out = g_string_new("");
-	if (d->disposition)
-		g_string_append(out, d->disposition);
-	else
-		g_string_append(out, "attachment");
-	header_param_list_format_append(out, d->params);
-
-	ret = out->str;
-	g_string_free(out, FALSE);
-	return ret;
-}
-
-/* hrm, is there a library for this shit? */
-static struct {
-	char *name;
-	int offset;
-} tz_offsets [] = {
-	{ "UT", 0 },
-	{ "GMT", 0 },
-	{ "EST", -500 },	/* these are all US timezones.  bloody yanks */
-	{ "EDT", -400 },
-	{ "CST", -600 },
-	{ "CDT", -500 },
-	{ "MST", -700 },
-	{ "MDT", -600 },
-	{ "PST", -800 },
-	{ "PDT", -700 },
-	{ "Z", 0 },
-	{ "A", -100 },
-	{ "M", -1200 },
-	{ "N", 100 },
-	{ "Y", 1200 },
-};
-
-static char *tz_months [] = {
-	"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-	"Jul", "Aug", "Sep", "Oct", "Nove", "Dec"
-};
-
-char *
-header_format_date(time_t time, int offset)
-{
-	struct tm tm;
-
-	d(printf("offset = %d\n", offset));
-
-	d(printf("converting date %s", ctime(&time)));
-
-	time += ((offset / 100) * (60*60)) + (offset % 100)*60;
-
-	d(printf("converting date %s", ctime(&time)));
-
-	memcpy(&tm, gmtime(&time), sizeof(tm));
-
-	return g_strdup_printf("%02d %s %04d %02d:%02d:%02d %c%04d",
-			       tm.tm_mday, tz_months[tm.tm_mon],
-			       tm.tm_year + 1900,
-			       tm.tm_hour, tm.tm_min, tm.tm_sec,
-			       offset>=0?'+':'-',
-			       offset);
-}
-
-/* convert a date to time_t representation */
-/* this is an awful mess oh well */
-time_t
-header_decode_date(const char *in, int *saveoffset)
-{
-	const char *inptr = in;
-	char *monthname;
-	int year, offset = 0;
-	struct tm tm;
-	int i;
-	time_t t;
-
-	if (in == NULL) {
-		if (*saveoffset)
-			*saveoffset = 0;
-		return 0;
-	}
-
-	d(printf("\ndecoding date '%s'\n", inptr));
-
-	memset(&tm, 0, sizeof(tm));
-
-	header_decode_lwsp(&inptr);
-	if (!isdigit(*inptr)) {
-		char *day = decode_token(&inptr);
-		/* we dont really care about the day, its only for display */
-		if (day) {
-			d(printf("got day: %s\n", day));
-			g_free(day);
-			header_decode_lwsp(&inptr);
-			if (*inptr == ',')
-				inptr++;
-			else
-				g_warning("day not followed by ','");
-		}
-	}
-	tm.tm_mday = header_decode_int(&inptr);
-	monthname = decode_token(&inptr);
-	if (monthname) {
-		for (i=0;ivalue;
-	while (*p) {
-		if (!isascii(*p)) {
-			g_warning("Appending header violates rfc: %s: %s", h->name, h->value);
-			return;
-		}
-		p++;
-	}
-}
-#endif
-
-void
-header_raw_append_parse(struct _header_raw **list, const char *header, int offset)
-{
-	register const char *in;
-	int fieldlen;
-	char *name;
-
-	in = header;
-	while (is_fieldname(*in))
-		in++;
-	fieldlen = in-header;
-	while (is_lwsp(*in))
-		in++;
-	if (fieldlen == 0 || *in != ':') {
-		printf("Invalid header line: '%s'\n", header);
-		return;
-	}
-	in++;
-	name = alloca(fieldlen+1);
-	memcpy(name, header, fieldlen);
-	name[fieldlen] = 0;
-
-	header_raw_append(list, name, in, offset);
-}
-
-void
-header_raw_append(struct _header_raw **list, const char *name, const char *value, int offset)
-{
-	struct _header_raw *l, *n;
-
-	d(printf("Header: %s: %s\n", name, value));
-
-	n = g_malloc(sizeof(*n));
-	n->next = NULL;
-	n->name = g_strdup(name);
-	n->value = g_strdup(value);
-	n->offset = offset;
-#ifdef CHECKS
-	check_header(n);
-#endif
-	l = (struct _header_raw *)list;
-	while (l->next) {
-		l = l->next;
-	}
-	l->next = n;
-
-	/* debug */
-#if 0
-	if (!strcasecmp(name, "To")) {
-		printf("- Decoding To\n");
-		header_to_decode(value);
-	} else if (!strcasecmp(name, "Content-type")) {
-		printf("- Decoding content-type\n");
-		header_content_type_dump(header_content_type_decode(value));		
-	} else if (!strcasecmp(name, "MIME-Version")) {
-		printf("- Decoding mime version\n");
-		header_mime_decode(value);
-	}
-#endif
-}
-
-static struct _header_raw *
-header_raw_find_node(struct _header_raw **list, const char *name)
-{
-	struct _header_raw *l;
-
-	l = *list;
-	while (l) {
-		if (!strcasecmp(l->name, name))
-			break;
-		l = l->next;
-	}
-	return l;
-}
-
-const char *
-header_raw_find(struct _header_raw **list, const char *name, int *offset)
-{
-	struct _header_raw *l;
-
-	l = header_raw_find_node(list, name);
-	if (l) {
-		if (offset)
-			*offset = l->offset;
-		return l->value;
-	} else
-		return NULL;
-}
-
-const char *
-header_raw_find_next(struct _header_raw **list, const char *name, int *offset, const char *last)
-{
-	struct _header_raw *l;
-
-	if (last == NULL || name == NULL)
-		return NULL;
-
-	l = *list;
-	while (l && l->value != last)
-		l = l->next;
-	return header_raw_find(&l, name, offset);
-}
-
-static void
-header_raw_free(struct _header_raw *l)
-{
-	g_free(l->name);
-	g_free(l->value);
-	g_free(l);
-}
-
-void
-header_raw_remove(struct _header_raw **list, const char *name)
-{
-	struct _header_raw *l, *p;
-
-	/* the next pointer is at the head of the structure, so this is safe */
-	p = (struct _header_raw *)list;
-	l = *list;
-	while (l) {
-		if (!strcasecmp(l->name, name)) {
-			p->next = l->next;
-			header_raw_free(l);
-			l = p->next;
-		} else {
-			p = l;
-			l = l->next;
-		}
-	}
-}
-
-void
-header_raw_replace(struct _header_raw **list, const char *name, const char *value, int offset)
-{
-	header_raw_remove(list, name);
-	header_raw_append(list, name, value, offset);
-}
-
-void
-header_raw_clear(struct _header_raw **list)
-{
-	struct _header_raw *l, *n;
-	l = *list;
-	while (l) {
-		n = l->next;
-		header_raw_free(l);
-		l = n;
-	}
-	*list = NULL;
-}
-
-
-
-#ifdef BUILD_TABLE
-
-/* for debugging tests */
-/* should also have some regression tests somewhere */
-
-void run_test(void)
-{
-	char *to = "gnome hacker dudes: license-discuss@opensource.org,
-        \"Richard M. Stallman\" ,
-        Barry Chester ,
-        Michael Zucchi ,
-        Miguel de Icaza ;,
-	zucchi@zedzone.mmc.com.au, \"Foo bar\" ,
-	";
-
-	header_to_decode(to);
-
-	header_mime_decode("1.0");
-	header_mime_decode("1.3 (produced by metasend V1.0)");
-	header_mime_decode("(produced by metasend V1.0) 5.2");
-	header_mime_decode("7(produced by metasend 1.0) . (produced by helix/send/1.0) 9 . 5");
-	header_mime_decode("3.");
-	header_mime_decode(".");
-	header_mime_decode(".5");
-	header_mime_decode("c.d");
-	header_mime_decode("");
-
-	header_msgid_decode(" <\"L3x2i1.0.Nm5.Xd-Wu\"@lists.redhat.com>");
-	header_msgid_decode("<200001180446.PAA02065@beaker.htb.com.au>");
-
-}
-
-#endif /* BUILD_TABLE */
diff --git a/camel/camel-mime-utils.h b/camel/camel-mime-utils.h
deleted file mode 100644
index febd0f8dbe..0000000000
--- a/camel/camel-mime-utils.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_UTILS_H
-#define _CAMEL_MIME_UTILS_H
-
-#include 
-
-struct _header_param {
-	struct _header_param *next;
-	char *name;
-	char *value;
-};
-
-/* describes a content-type */
-struct _header_content_type {
-	char *type;
-	char *subtype;
-	struct _header_param *params;
-	unsigned int refcount;
-};
-
-/* a raw rfc822 header */
-/* the value MUST be US-ASCII */
-struct _header_raw {
-	struct _header_raw *next;
-	char *name;
-	char *value;
-	int offset;		/* in file, if known */
-};
-
-typedef struct _CamelMimeDisposition {
-	char *disposition;
-	struct _header_param *params;
-	unsigned int refcount;
-} CamelMimeDisposition;
-
-/* structured header prameters */
-char *header_param(struct _header_param *p, const char *name);
-struct _header_param *header_set_param(struct _header_param **l, const char *name, const char *value);
-void header_param_list_free(struct _header_param *p);
-
-/* Content-Type header */
-struct _header_content_type *header_content_type_new(const char *type, const char *subtype);
-struct _header_content_type *header_content_type_decode(const char *in);
-void header_content_type_unref(struct _header_content_type *ct);
-void header_content_type_ref(struct _header_content_type *ct);
-const char *header_content_type_param(struct _header_content_type *t, const char *name);
-void header_content_type_set_param(struct _header_content_type *t, const char *name, const char *value);
-int header_content_type_is(struct _header_content_type *ct, const char *type, const char *subtype);
-char *header_content_type_format(struct _header_content_type *ct);
-
-/* DEBUGGING function */
-void header_content_type_dump(struct _header_content_type *ct);
-
-/* Content-Disposition header */
-CamelMimeDisposition *header_disposition_decode(const char *in);
-void header_disposition_ref(CamelMimeDisposition *);
-void header_disposition_unref(CamelMimeDisposition *);
-char *header_disposition_format(CamelMimeDisposition *d);
-
-/* decode the contents of a content-encoding header */
-char *header_content_encoding_decode(const char *in);
-
-/* raw headers */
-void header_raw_append(struct _header_raw **list, const char *name, const char *value, int offset);
-void header_raw_append_parse(struct _header_raw **list, const char *header, int offset);
-const char *header_raw_find(struct _header_raw **list, const char *name, int *ofset);
-const char *header_raw_find_next(struct _header_raw **list, const char *name, int *ofset, const char *last);
-void header_raw_replace(struct _header_raw **list, const char *name, const char *value, int offset);
-void header_raw_remove(struct _header_raw **list, const char *name);
-void header_raw_clear(struct _header_raw **list);
-
-/* decode a header which is a simple token */
-char *header_token_decode(const char *in);
-
-/* decode/encode a string type, like a subject line */
-char *header_decode_string(const char *in);
-char *header_encode_string(const unsigned char *in);
-
-/* decode an email date field into a GMT time, + optional offset */
-time_t header_decode_date(const char *in, int *saveoffset);
-char *header_format_date(time_t time, int offset);
-
-/* decode a message id */
-char *header_msgid_decode(const char *in);
-
-/* do incremental base64/quoted-printable (de/en)coding */
-int base64_decode_step(unsigned char *in, int len, unsigned char *out, int *state, unsigned int *save);
-
-int base64_encode_step(unsigned char *in, int len, unsigned char *out, int *state, int *save);
-int base64_encode_close(unsigned char *in, int inlen, unsigned char *out, int *state, int *save);
-
-int quoted_decode_step(unsigned char *in, int len, unsigned char *out, int *savestate, int *saveme);
-
-int quoted_encode_step(unsigned char *in, int len, unsigned char *out, int *state, int *save);
-int quoted_encode_close(unsigned char *in, int len, unsigned char *out, int *state, int *save);
-
-#endif /* ! _CAMEL_MIME_UTILS_H */
diff --git a/camel/camel-movemail.c b/camel/camel-movemail.c
deleted file mode 100644
index e15e26e7ae..0000000000
--- a/camel/camel-movemail.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-movemail.c: mbox copying function */
-
-/*
- * Author:
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://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 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-movemail.h"
-#include "camel-exception.h"
-
-/**
- * camel_movemail: Copy an mbox file from a shared spool directory to a
- * new folder in a Camel store
- * @source: source file
- * @dest: destination file
- * @ex: a CamelException
- *
- * This copies an mbox file from a shared directory with multiple
- * readers and writers into a private (presumably Camel-controlled)
- * directory. Dot locking is used on the source file (but not the
- * destination).
- *
- * Return value: 1 if mail was copied, 0 if the source file contained
- * no mail, -1 if an error occurred.
- **/
-int
-camel_movemail (const char *source, const char *dest, CamelException *ex)
-{
-	gboolean locked, error;
-	int sfd, dfd, tmpfd;
-	char *locktmpfile, *lockfile;
-	struct stat st;
-	time_t now, timeout;
-	int nread, nwrote;
-	char buf[BUFSIZ];
-
-	camel_exception_clear (ex);
-
-	/* Stat and then open the spool file. If it doesn't exist or
-	 * is empty, the user has no mail. (There's technically a race
-	 * condition here in that an MDA might have just now locked it
-	 * to deliver a message, but we don't care. In that case,
-	 * assuming it's unlocked is equivalent to pretending we were
-	 * called a fraction earlier.)
-	 */
-	if (stat (source, &st) == -1) {
-		if (errno == ENOENT)
-			return 0;
-
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not check mail file %s: %s",
-				      source, g_strerror (errno));
-		return -1;
-	}
-	if (st.st_size == 0)
-		return 0;
-
-	sfd = open (source, O_RDWR);
-	if (sfd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not open mail file %s: %s",
-				      source, g_strerror (errno));
-		return -1;
-	}
-
-	dfd = open (dest, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
-	if (dfd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not open temporary mail "
-				      "file %s: %s", dest, g_strerror (errno));
-		close (sfd);
-		return -1;
-	}
-
-	/* Create the unique lock file. */
-	locktmpfile = g_strdup_printf ("%s.lock.XXXXXX", source);
-#ifdef HAVE_MKSTEMP
-	tmpfd = mkstemp (locktmpfile);
-#else
-	if (mktemp (locktmpfile)) {
-		tmpfd = open (locktmpfile, O_RDWR | O_CREAT | O_EXCL,
-			      S_IRUSR | S_IWUSR);
-	} else
-		tmpfd = -1;
-#endif
-	if (tmpfd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not create lock file "
-				      "for %s: %s", source, g_strerror (errno));
-		close (sfd);
-		close (dfd);
-		unlink (dest);
-		return -1;
-	}
-	close (tmpfd);
-
-	lockfile = g_strdup_printf ("%s.lock", source);
-	locked = FALSE;
-	time (&timeout);
-	timeout += 30;
-
-	/* Loop trying to lock the file for 30 seconds. */
-	while (time (&now) < timeout) {
-		/* Try to make the lock. */
-		if (symlink (locktmpfile, lockfile) == 0) {
-			locked = TRUE;
-			break;
-		}
-
-		/* If we fail for a reason other than that someone
-		 * else has the lock, then abort.
-		 */
-		if (errno != EEXIST) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not create lock "
-					      "file for %s: %s", source,
-					      g_strerror (errno));
-			break;
-		}
-
-		/* Check the modtime on the lock file. */
-		if (stat (lockfile, &st) == -1) {
-			/* If the lockfile disappeared, try again. */
-			if (errno == ENOENT)
-				continue;
-
-			/* Some other error. Abort. */
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not test lock "
-					      "file for %s: %s", source,
-					      g_strerror (errno));
-			break;
-		}
-
-		/* If the lock file is stale, remove it and try again. */
-		if (st.st_mtime < now - 60) {
-			unlink (lockfile);
-			continue;
-		}
-
-		/* Otherwise, sleep and try again. */
-		sleep (5);
-	}
-
-	if (!locked) {
-		/* Something has gone awry. */
-		if (now >= timeout) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Timed out trying to get "
-					      "lock file on %s. Try again "
-					      "later.", source);
-		}
-		g_free (lockfile);
-		unlink (locktmpfile);
-		g_free (locktmpfile);
-		close (sfd);
-		close (dfd);
-		unlink (dest);
-		return -1;
-	}
-
-	/* OK. We have the file locked now. */
-
-	/* FIXME: Set a timer to keep the file locked. */
-
-	error = FALSE;
-	while (1) {
-		int written = 0;
-
-		nread = read (sfd, buf, sizeof (buf));
-		if (nread == 0)
-			break;
-		else if (nread == -1) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Error reading mail file: %s",
-					      g_strerror (errno));
-			error = TRUE;
-			break;
-		}
-
-		while (nread) {
-			nwrote = write (dfd, buf + written, nread);
-			if (nwrote == -1) {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-						      "Error writing "
-						      "mail temp file: %s",
-						      g_strerror (errno));
-				error = TRUE;
-				break;
-			}
-			written += nwrote;
-			nread -= nwrote;
-		}
-	}
-
-	/* If no errors occurred copying the data, and we successfully
-	 * close the destination file, then truncate the source file.
-	 * If there is some sort of error, delete the destination file.
-	 */
-	if (!error) {
-		if (close (dfd) == 0)
-			ftruncate (sfd, 0);
-		else {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Failed to store mail in "
-					      "temp file %s: %s", dest,
-					      g_strerror (errno));
-			unlink (dest);
-			error = TRUE;
-		}
-	} else {
-		close (dfd);
-		unlink (dest);
-	}
-	close (sfd);
-
-	/* Clean up lock files. */
-	unlink (lockfile);
-	g_free (lockfile);
-	unlink (locktmpfile);
-	g_free (locktmpfile);
-
-	return error ? -1 : 1;
-}
diff --git a/camel/camel-movemail.h b/camel/camel-movemail.h
deleted file mode 100644
index a4b20141ac..0000000000
--- a/camel/camel-movemail.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-movemail.h: mbox copy function */
-
-/* 
- * Author: 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://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_MOVEMAIL_H
-#define CAMEL_MOVEMAIL_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-exception.h"
-
-int camel_movemail (const char *source, const char *dest, CamelException *ex);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MOVEMAIL_H */
diff --git a/camel/camel-multipart.c b/camel/camel-multipart.c
deleted file mode 100644
index 94ec8a4dbf..0000000000
--- a/camel/camel-multipart.c
+++ /dev/null
@@ -1,678 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-multipart.c : Abstract class for a multipart */
-
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "gmime-content-field.h"
-#include "gmime-utils.h"
-#include "camel-stream-mem.h"
-#include "camel-seekable-substream.h"
-#include "camel-mime-body-part.h"
-#include "camel-multipart.h"
-
-#define d(x)
-
-static void                  add_part          (CamelMultipart *multipart,
-						   CamelMimeBodyPart *part);
-static void                  add_part_at       (CamelMultipart *multipart,
-						CamelMimeBodyPart *part,
-						guint index);
-static void                  remove_part       (CamelMultipart *multipart,
-						CamelMimeBodyPart *part);
-static CamelMimeBodyPart *   remove_part_at    (CamelMultipart *multipart,
-						guint index);
-static CamelMimeBodyPart *   get_part          (CamelMultipart *multipart,
-						guint index);
-static guint                 get_number        (CamelMultipart *multipart);
-static void                  set_parent        (CamelMultipart *multipart,
-						CamelMimePart *parent);
-static CamelMimePart *       get_parent        (CamelMultipart *multipart);
-static void                  set_boundary      (CamelMultipart *multipart,
-						gchar *boundary);
-static const gchar *         get_boundary      (CamelMultipart *multipart);
-static void                  write_to_stream   (CamelDataWrapper *data_wrapper,
-						CamelStream *stream);
-static void                  set_input_stream  (CamelDataWrapper *data_wrapper,
-						CamelStream *stream);
-static void                  finalize          (GtkObject *object);
-static void construct_from_parser(CamelDataWrapper *dw, CamelMimeParser *mp);
-
-
-static CamelDataWrapperClass *parent_class = NULL;
-
-
-
-/* Returns the class for a CamelMultipart */
-#define CMP_CLASS(so) CAMEL_MULTIPART_CLASS (GTK_OBJECT(so)->klass)
-
-/* Returns the class for a CamelDataWrapper */
-#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (GTK_OBJECT(so)->klass)
-
-
-static void
-camel_multipart_class_init (CamelMultipartClass *camel_multipart_class)
-{
-	CamelDataWrapperClass *camel_data_wrapper_class =
-		CAMEL_DATA_WRAPPER_CLASS (camel_multipart_class);
-	GtkObjectClass *gtk_object_class =
-		GTK_OBJECT_CLASS (camel_multipart_class);
-
-	parent_class = gtk_type_class (camel_data_wrapper_get_type ());
-
-	/* virtual method definition */
-	camel_multipart_class->add_part = add_part;
-	camel_multipart_class->add_part_at = add_part_at;
-	camel_multipart_class->remove_part = remove_part;
-	camel_multipart_class->remove_part_at = remove_part_at;
-	camel_multipart_class->get_part = get_part;
-	camel_multipart_class->get_number = get_number;
-	camel_multipart_class->set_parent = set_parent;
-	camel_multipart_class->get_parent = get_parent;
-	camel_multipart_class->set_boundary = set_boundary;
-	camel_multipart_class->get_boundary = get_boundary;
-
-	/* virtual method overload */
-	camel_data_wrapper_class->write_to_stream = write_to_stream;
-	camel_data_wrapper_class->set_input_stream = set_input_stream;
-
-	camel_data_wrapper_class->construct_from_parser = construct_from_parser;	
-
-	gtk_object_class->finalize = finalize;
-}
-
-static void
-camel_multipart_init (gpointer object, gpointer klass)
-{
-	CamelMultipart *multipart = CAMEL_MULTIPART (object);
-
-	camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (multipart),
-					  "multipart/mixed");
-	camel_multipart_set_boundary (multipart, "=-=-=-=");
-	multipart->preface = NULL;
-	multipart->postface = NULL;
-}
-
-
-GtkType
-camel_multipart_get_type (void)
-{
-	static GtkType camel_multipart_type = 0;
-
-	if (!camel_multipart_type) {
-		GtkTypeInfo camel_multipart_info =
-		{
-			"CamelMultipart",
-			sizeof (CamelMultipart),
-			sizeof (CamelMultipartClass),
-			(GtkClassInitFunc) camel_multipart_class_init,
-			(GtkObjectInitFunc) camel_multipart_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_multipart_type = gtk_type_unique (camel_data_wrapper_get_type (), &camel_multipart_info);
-	}
-
-	return camel_multipart_type;
-}
-
-static void
-unref_part (gpointer data, gpointer user_data)
-{
-	GtkObject *body_part = GTK_OBJECT (data);
-
-	gtk_object_unref (body_part);
-}
-
-static void
-finalize (GtkObject *object)
-{
-	CamelMultipart *multipart = CAMEL_MULTIPART (object);
-
-	if (multipart->parent)
-		gtk_object_unref (GTK_OBJECT (multipart->parent));
-
-	g_list_foreach (multipart->parts, unref_part, NULL);
-
-	if (multipart->boundary)
-		g_free (multipart->boundary);
-	if (multipart->preface)
-		g_free (multipart->preface);
-	if (multipart->postface)
-		g_free (multipart->postface);
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-/**
- * camel_multipart_new:
- *
- * Create a new CamelMultipart object.
- *
- * Return value: a new CamelMultipart
- **/
-CamelMultipart *
-camel_multipart_new (void)
-{
-	CamelMultipart *multipart;
-
-	multipart = (CamelMultipart *)gtk_type_new (CAMEL_MULTIPART_TYPE);
-	multipart->preface = NULL;
-	multipart->postface = NULL;
-
-	return multipart;
-}
-
-
-static void
-add_part (CamelMultipart *multipart, CamelMimeBodyPart *part)
-{
-	multipart->parts = g_list_append (multipart->parts, part);
-	gtk_object_ref (GTK_OBJECT (part));
-}
-
-/**
- * camel_multipart_add_part:
- * @multipart: a CamelMultipart
- * @part: the body part to add
- *
- * Appends the body part to the multipart object.
- **/
-void
-camel_multipart_add_part (CamelMultipart *multipart, CamelMimeBodyPart *part)
-{
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-	g_return_if_fail (CAMEL_IS_MIME_BODY_PART (part));
-
-	CMP_CLASS (multipart)->add_part (multipart, part);
-}
-
-
-static void
-add_part_at (CamelMultipart *multipart, CamelMimeBodyPart *part, guint index)
-{
-	multipart->parts = g_list_insert (multipart->parts, part, index);
-	gtk_object_ref (GTK_OBJECT (part));
-}
-
-/**
- * camel_multipart_add_part_at:
- * @multipart: a CamelMultipart
- * @part: the body part to add
- * @index: index to add the multipart at
- *
- * Adds the body part to the multipart object after the @index'th
- * element. If @index is greater than the number of parts, it is
- * equivalent to camel_multipart_add_part().
- **/
-void
-camel_multipart_add_part_at (CamelMultipart *multipart,
-			     CamelMimeBodyPart *part, guint index)
-{
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-	g_return_if_fail (CAMEL_IS_MIME_BODY_PART (part));
-
-	CMP_CLASS (multipart)->add_part_at (multipart, part, index);
-}
-
-
-static void
-remove_part (CamelMultipart *multipart, CamelMimeBodyPart *part)
-{
-	if (!multipart->parts)
-		return;
-	multipart->parts = g_list_remove (multipart->parts, part);
-	gtk_object_unref (GTK_OBJECT (part));
-}
-
-/**
- * camel_multipart_remove_part:
- * @multipart: a CamelMultipart
- * @part: the part to remove
- *
- * Removes @part from @multipart.
- **/
-void
-camel_multipart_remove_part (CamelMultipart *multipart,
-			     CamelMimeBodyPart *part)
-{
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-	g_return_if_fail (CAMEL_IS_MIME_BODY_PART (part));
-
-	CMP_CLASS (multipart)->remove_part (multipart, part);
-}
-
-
-static CamelMimeBodyPart *
-remove_part_at (CamelMultipart *multipart, guint index)
-{
-	GList *parts_list;
-	GList *part_to_remove;
-	CamelMimeBodyPart *removed_body_part;
-
-	if (!(multipart->parts))
-		return NULL;
-
-	parts_list = multipart->parts;
-	part_to_remove = g_list_nth (parts_list, index);
-	if (!part_to_remove) {
-		g_warning ("CamelMultipart::remove_part_at: "
-			   "part to remove is NULL\n");
-		return NULL;
-	}
-	removed_body_part = CAMEL_MIME_BODY_PART (part_to_remove->data);
-
-	multipart->parts = g_list_remove_link (parts_list, part_to_remove);
-	if (part_to_remove->data)
-		gtk_object_unref (GTK_OBJECT (part_to_remove->data));
-	g_list_free_1 (part_to_remove);
-
-	return removed_body_part;
-}
-
-/**
- * camel_multipart_remove_part_at:
- * @multipart: a CamelMultipart
- * @index: a zero-based index indicating the part to remove
- *
- * Remove the indicated part from the multipart object.
- *
- * Return value: the removed part. Note that it is gtk_object_unref()ed
- * before being returned, which may cause it to be destroyed.
- **/
-CamelMimeBodyPart *
-camel_multipart_remove_part_at (CamelMultipart *multipart, guint index)
-{
-	g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), NULL);
-
-	return CMP_CLASS (multipart)->remove_part_at (multipart, index);
-}
-
-
-static CamelMimeBodyPart *
-get_part (CamelMultipart *multipart, guint index)
-{
-	GList *part;
-
-	if (!(multipart->parts))
-		return NULL;
-
-	part = g_list_nth (multipart->parts, index);
-	if (part)
-		return CAMEL_MIME_BODY_PART (part->data);
-	else
-		return NULL;
-}
-
-/**
- * camel_multipart_get_part:
- * @multipart: a CamelMultipart
- * @index: a zero-based index indicating the part to get
- *
- * Return value: the indicated subpart, or %NULL
- **/
-CamelMimeBodyPart *
-camel_multipart_get_part (CamelMultipart *multipart, guint index)
-{
-	g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), NULL);
-
-	return CMP_CLASS (multipart)->get_part (multipart, index);
-}
-
-
-static guint
-get_number (CamelMultipart *multipart)
-{
-	return g_list_length (multipart->parts);
-}
-
-/**
- * camel_multipart_get_number:
- * @multipart: a CamelMultipart
- *
- * Return value: the number of subparts in @multipart
- **/
-guint
-camel_multipart_get_number (CamelMultipart *multipart)
-{
-	g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), 0);
-
-	return CMP_CLASS (multipart)->get_number (multipart);
-}
-
-
-static void
-set_parent (CamelMultipart *multipart, CamelMimePart *parent)
-{
-	multipart->parent = parent;
-	if (parent)
-		gtk_object_ref (GTK_OBJECT (parent));
-}
-
-/**
- * camel_multipart_set_parent:
- * @multipart: a CamelMultipart
- * @parent: the CamelMimePart that is @multipart's parent
- *
- * Sets the parent of @multipart.
- **/
-void
-camel_multipart_set_parent (CamelMultipart *multipart, CamelMimePart *parent)
-{
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-	g_return_if_fail (CAMEL_IS_MIME_PART (parent));
-
-	CMP_CLASS (multipart)->set_parent (multipart, parent);
-}
-
-
-static CamelMimePart *
-get_parent (CamelMultipart *multipart)
-{
-	return multipart->parent;
-}
-
-/**
- * camel_multipart_get_parent:
- * @multipart: a CamelMultipart
- *
- * Return value: @multipart's parent part
- **/
-CamelMimePart *
-camel_multipart_get_parent (CamelMultipart *multipart)
-{
-	g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), NULL);
-
-	return CMP_CLASS (multipart)->get_parent (multipart);
-}
-
-
-
-static void
-set_boundary (CamelMultipart *multipart, gchar *boundary)
-{
-	CamelDataWrapper *cdw = CAMEL_DATA_WRAPPER (multipart);
-
-	g_return_if_fail (cdw->mime_type != NULL);
-
-	gmime_content_field_set_parameter (cdw->mime_type, "boundary",
-					   boundary);
-}
-
-/**
- * camel_multipart_set_boundary:
- * @multipart: a CamelMultipart
- * @boundary: the message boundary
- *
- * Sets the message boundary for @multipart to @boundary. This should
- * be a string which does not occur anywhere in any of @multipart's
- * subparts.
- **/
-void
-camel_multipart_set_boundary (CamelMultipart *multipart, gchar *boundary)
-{
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-	g_return_if_fail (boundary != NULL);
-
-	CMP_CLASS (multipart)->set_boundary (multipart, boundary);
-}
-
-
-static const gchar *
-get_boundary (CamelMultipart *multipart)
-{
-	CamelDataWrapper *cdw = CAMEL_DATA_WRAPPER (multipart);
-
-	g_return_val_if_fail (cdw->mime_type != NULL, NULL);
-	return gmime_content_field_get_parameter (cdw->mime_type, "boundary");
-}
-
-/**
- * camel_multipart_get_boundary:
- * @multipart: a CamelMultipart
- *
- * Return value: @multipart's message boundary
- **/
-const gchar *
-camel_multipart_get_boundary (CamelMultipart *multipart)
-{
-	return CMP_CLASS (multipart)->get_boundary (multipart);
-}
-
-
-struct print_part_user_data {
-	CamelStream *stream;
-	const gchar *boundary;
-};
-
-static void
-print_part (gpointer data, gpointer user_data)
-{
-	CamelMimeBodyPart *body_part = CAMEL_MIME_BODY_PART (data);
-	struct print_part_user_data *ud = user_data;
-
-	if (ud->boundary)
-		camel_stream_write_strings (ud->stream, "\n--",
-					    ud->boundary, "\n", NULL);
-	else camel_stream_write_strings (ud->stream, "\n--\n", NULL);
-	camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (body_part),
-					    ud->stream);
-}
-
-static void
-write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelMultipart *multipart = CAMEL_MULTIPART (data_wrapper);
-	struct print_part_user_data ud;
-	const gchar *boundary;
-
-	/* get the bundary text */
-	boundary = camel_multipart_get_boundary (multipart);
-
-	/* we cannot write a multipart without a boundary string */
-	g_return_if_fail (boundary);
-
-	/*
-	 * write the preface text (usually something like
-	 *   "This is a mime message, if you see this, then
-	 *    your mail client probably doesn't support ...."
-	 */
-	if (multipart->preface)
-		camel_stream_write_strings (stream, multipart->preface, NULL);
-
-	/*
-	 * Now, write all the parts, separated by the boundary
-	 * delimiter
-	 */
-	ud.boundary = boundary;
-	ud.stream = stream;
-	if (boundary && (boundary[0] == '\0'))
-		g_warning ("Multipart boundary is zero length\n");
-	g_list_foreach (multipart->parts, print_part, (gpointer)&ud);
-
-	/* write the terminating boudary delimiter */
-	camel_stream_write_strings (stream, "\n--", boundary, "--\n", NULL);
-
-	/* and finally the postface */
-	if (multipart->postface)
-		camel_stream_write_strings (stream, multipart->postface, NULL);
-}
-
-
-/**
- * separate_part: separate one part in a multipart environement.
- * @stream: the stream to read the lines from.
- * @normal_boundary: end of part bundary.
- * @end_boundary: end of multipart boundary.
- * @end_position: end position of the mime part
- *
- * This routine is a bit special: RFC 2046 says that, in a multipart
- * environment, the last CRLF before a boundary belongs to the boundary.
- * Thus, if there is no blank line before the boundary, the last CRLF
- * of the last line of the part is removed.
- *
- * Return value: %TRUE if the last boundary element has been found or
- * if no more data was available from the stream, %FALSE otherwise
- **/
-static gboolean
-separate_part (CamelStream *stream, gchar *normal_boundary,
-	       gchar *end_boundary, guint32 *end_position)
-{
-	gchar *new_line = NULL;
-	gboolean end_of_part = FALSE;
-	gboolean last_part = FALSE;
-	guint32 last_position;
-
-	/* Note for future enhancements */
-	/* RFC 2046 specifies that when parsing the content of a
-	 * multipart element, the program should not assume it will
-	 * find the last boundary, and in particular, if the message
-	 * is damaged during transport, the parsing should still be
-	 * OK.
-	 */
-
-	last_position = camel_seekable_stream_get_current_position (
-		CAMEL_SEEKABLE_STREAM (stream));
-	new_line = gmime_read_line_from_stream (stream);
-
-	while (new_line && !end_of_part && !last_part) {
-		end_of_part = (strcmp (new_line, normal_boundary) == 0);
-		last_part   = (strcmp (new_line, end_boundary) == 0);
-		if (!end_of_part && !last_part) {
-			g_free (new_line);
-
-			last_position =
-				camel_seekable_stream_get_current_position (
-					CAMEL_SEEKABLE_STREAM (stream));
-
-			new_line = gmime_read_line_from_stream (stream);
-		}
-	}
-
-	if (new_line)
-		g_free (new_line);
-	else
-		last_part = TRUE;
-
-	*end_position = last_position;
-
-	return last_part;
-}
-
-
-static void
-set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelMultipart *multipart = CAMEL_MULTIPART (data_wrapper);
-	CamelSeekableStream *seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
-	const gchar *boundary;
-	gchar *real_boundary_line;
-	gchar *end_boundary_line;
-	gboolean end_of_multipart;
-	CamelMimeBodyPart *body_part;
-	guint32 part_begining, part_end;
-	CamelSeekableSubstream *body_part_input_stream;
-	guint32 saved_stream_pos;
-
-	/* Call parent class implementation. */
-	parent_class->set_input_stream (data_wrapper, stream);
-
-	boundary = camel_multipart_get_boundary (multipart);
-	g_return_if_fail (boundary);
-
-	real_boundary_line = g_strdup_printf ("--%s", boundary);
-	end_boundary_line  = g_strdup_printf ("--%s--", boundary);
-
-	/* Read the prefix, if any. */
-	end_of_multipart = separate_part (stream, real_boundary_line,
-					  end_boundary_line, &part_end);
-	if (multipart->preface)
-		g_free (multipart->preface);
-
-	/* Read all the real parts. */
-	while (!end_of_multipart) {
-		/* Determine the position of the begining of the part. */
-		part_begining = camel_seekable_stream_get_current_position (seekable_stream);
-
-		body_part = camel_mime_body_part_new ();
-
-		end_of_multipart = separate_part (stream, real_boundary_line,
-						  end_boundary_line,
-						  &part_end);
-		body_part_input_stream = CAMEL_SEEKABLE_SUBSTREAM (
-			camel_seekable_substream_new_with_seekable_stream_and_bounds (seekable_stream,
-										      part_begining,
-										      part_end));
-
-		/* The seekable substream may change the position of
-		 * the stream so we must save it before calling
-		 * set_input_stream.
-		 */
-		saved_stream_pos = camel_seekable_stream_get_current_position (seekable_stream);
-		camel_data_wrapper_set_input_stream (CAMEL_DATA_WRAPPER (body_part), 
-						     CAMEL_STREAM (body_part_input_stream));
-		
-		/* restore the stream position */
-		camel_seekable_stream_seek (seekable_stream, saved_stream_pos, CAMEL_STREAM_SET);
-		
-		/* add the body part to the multipart object */
-		camel_multipart_add_part (multipart, body_part);		
-	}
-	
-	/* g_string_assign (new_part, ""); */
-	/* my_localize_part (new_part, stream, real_boundary_line, end_boundary_line); */
-	
-	if (multipart->postface) g_free (multipart->postface);
-	/* if ( (new_part->str)[0] != '\0') multipart->postface = g_strdup (new_part->str); */
-	
-	/* g_string_free (new_part, TRUE); */
-	
-	g_free (real_boundary_line);
-	g_free (end_boundary_line);
-}
-
-/* multi_part */
-static void
-construct_from_parser(CamelDataWrapper *dw, CamelMimeParser *mp)
-{
-	CamelDataWrapper *bodypart;
-	char *buf;
-	int len;
-
-	d(printf("constructing multipart\n"));
-
-	/* get/set boundary? */
-
-	while (camel_mime_parser_step(mp, &buf, &len) != HSCAN_MULTIPART_END) {
-		camel_mime_parser_unstep(mp);
-		bodypart = (CamelDataWrapper *)camel_mime_body_part_new();
-		camel_data_wrapper_construct_from_parser(bodypart, mp);
-		camel_multipart_add_part((CamelMultipart *)dw, (CamelMimeBodyPart *)bodypart);
-	}
-}
diff --git a/camel/camel-multipart.h b/camel/camel-multipart.h
deleted file mode 100644
index 8491e0aec4..0000000000
--- a/camel/camel-multipart.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-multipart.h : class for a multipart */
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_MULTIPART_H
-#define CAMEL_MULTIPART_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-data-wrapper.h"
-
-#define CAMEL_MULTIPART_TYPE     (camel_multipart_get_type ())
-#define CAMEL_MULTIPART(obj)     (GTK_CHECK_CAST((obj), CAMEL_MULTIPART_TYPE, CamelMultipart))
-#define CAMEL_MULTIPART_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MULTIPART_TYPE, CamelMultipartClass))
-#define CAMEL_IS_MULTIPART(o)    (GTK_CHECK_TYPE((o), CAMEL_MULTIPART_TYPE))
-
-
-struct _CamelMultipart
-{
-	CamelDataWrapper parent_object;
-
-	CamelMimePart *parent;
-	GList *parts;
-	gchar *boundary;
-	gchar *preface;
-	gchar *postface;
-
-};
-
-
-
-typedef struct {
-	CamelDataWrapperClass parent_class;
-
-	/* Virtual methods */
-	void (*add_part) (CamelMultipart *multipart, CamelMimeBodyPart *part);
-	void (*add_part_at) (CamelMultipart *multipart, CamelMimeBodyPart *part, guint index);
-	void (*remove_part) (CamelMultipart *multipart, CamelMimeBodyPart *part);
-	CamelMimeBodyPart * (*remove_part_at) (CamelMultipart *multipart, guint index);
-	CamelMimeBodyPart * (*get_part) (CamelMultipart *multipart, guint index);
-	guint (*get_number) (CamelMultipart *multipart);
-	void (*set_parent) (CamelMultipart *multipart, CamelMimePart *parent);
-	CamelMimePart * (*get_parent) (CamelMultipart *multipart);
-	void (*set_boundary) (CamelMultipart *multipart, gchar *boundary);
-	const gchar * (*get_boundary) (CamelMultipart *multipart);
-
-} CamelMultipartClass;
-
-
-/* Standard Gtk function */
-GtkType camel_multipart_get_type (void);
-
-
-/* public methods */
-CamelMultipart *    camel_multipart_new            (void);
-void                camel_multipart_add_part       (CamelMultipart *multipart,
-						    CamelMimeBodyPart *part);
-void                camel_multipart_add_part_at    (CamelMultipart *multipart,
-						    CamelMimeBodyPart *part,
-						    guint index);
-void                camel_multipart_remove_part    (CamelMultipart *multipart,
-						    CamelMimeBodyPart *part);
-CamelMimeBodyPart * camel_multipart_remove_part_at (CamelMultipart *multipart,
-						    guint index);
-CamelMimeBodyPart * camel_multipart_get_part       (CamelMultipart *multipart,
-						    guint index);
-guint               camel_multipart_get_number     (CamelMultipart *multipart);
-void                camel_multipart_set_parent     (CamelMultipart *multipart,
-						    CamelMimePart *parent);
-CamelMimePart *     camel_multipart_get_parent     (CamelMultipart *multipart);
-void                camel_multipart_set_boundary   (CamelMultipart *multipart,
-						    gchar *boundary);
-const gchar *       camel_multipart_get_boundary   (CamelMultipart *multipart);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MULTIPART_H */
-
diff --git a/camel/camel-op-queue.c b/camel/camel-op-queue.c
deleted file mode 100644
index 3e17222f0a..0000000000
--- a/camel/camel-op-queue.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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
- */
-
-
-/* MT safe */
-
- 
-#include 
-#include "camel-op-queue.h"
-
-static GStaticMutex op_queue_mutex = G_STATIC_MUTEX_INIT;
-
-
-
-/**
- * camel_op_queue_new: create a new operation queue
- * 
- * Create a new operation queue. 
- *
- * Return value: the newly allcated object
- **/
-CamelOpQueue *
-camel_op_queue_new ()
-{
-	CamelOpQueue *op_queue;
-
-	op_queue = g_new (CamelOpQueue, 1);
-	op_queue->ops_tail = NULL;
-	op_queue->ops_head = NULL;
-	op_queue->service_available = TRUE;
-
-	return op_queue;
-}
-
-
-void 
-camel_op_queue_free (CamelOpQueue *op_queue)
-{
-	g_list_free (op_queue->ops_head);	
-	g_free (op_queue);
-}
-
-/**
- * camel_op_queue_push_op: Add an operation to the queue
- * @queue: queue object
- * @op: operation to add
- * 
- * Add an operation to an operation queue. 
- * The queue is a FIFO queue. 
- **/
-void
-camel_op_queue_push_op (CamelOpQueue *queue, CamelOp *op)
-{
-	g_assert (queue);
-	g_static_mutex_lock (&op_queue_mutex);
-	if (!queue->ops_tail) {
-		queue->ops_head = g_list_prepend (NULL, op);
-		queue->ops_tail = queue->ops_head;
-	} else 
-		queue->ops_head = g_list_prepend (queue->ops_head, op);	
-	g_static_mutex_unlock (&op_queue_mutex);
-}
-
-
-/**
- * camel_op_queue_pop_op: Pop the next operation pending in the queue
- * @queue: queue object
- * 
- * Pop the next operation pending in the queue.
- * 
- * Return value: 
- **/
-CamelOp *
-camel_op_queue_pop_op (CamelOpQueue *queue)
-{
-	GList *op_list;
-	CamelOp *op;
-
-	g_assert (queue);
-
-	g_static_mutex_lock (&op_queue_mutex);
-	op_list = queue->ops_tail;
-	if (!op_list) return NULL;
-
-	queue->ops_tail = queue->ops_tail->prev;
-	op = (CamelOp *)op_list->data;
-	g_static_mutex_unlock (&op_queue_mutex);
-
-	return op;
-}
-
-
-/**
- * camel_op_queue_run_next_op: run the next pending operation
- * @queue: queue object
- * 
- * Run the next pending operation in the queue.
- * 
- * Return value: TRUE if an operation was launched FALSE if there was no operation pending in the queue.
- **/
-gboolean
-camel_op_queue_run_next_op (CamelOpQueue *queue)
-{
-	CamelOp *op;
-
-	op = camel_op_queue_pop_op (queue);
-	if (!op) return FALSE;
-	
-	return FALSE;
-}
-
-/**
- * camel_op_queue_set_service_availability: set the service availability for an operation queue
- * @queue: queue object
- * @available: availability flag
- * 
- * set the service availability
- **/
-void
-camel_op_queue_set_service_availability (CamelOpQueue *queue, gboolean available)
-{
-	g_static_mutex_lock (&op_queue_mutex);
-	queue->service_available = available;
-	g_static_mutex_unlock (&op_queue_mutex);
-}
-
-/**
- * camel_op_queue_get_service_availability: determine if an operation queue service is available 
- * @queue: queue object
- * 
- * Determine if the service associated to an operation queue is available.
- * 
- * Return value: service availability.
- **/
-gboolean
-camel_op_queue_get_service_availability (CamelOpQueue *queue)
-{
-	gboolean available;
-
-	g_static_mutex_lock (&op_queue_mutex);
-	available = queue->service_available;
-	g_static_mutex_unlock (&op_queue_mutex);
-	return available;
-}
-
diff --git a/camel/camel-op-queue.h b/camel/camel-op-queue.h
deleted file mode 100644
index b96737eba5..0000000000
--- a/camel/camel-op-queue.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_OP_QUEUE_H
-#define CAMEL_OP_QUEUE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-marshal-utils.h"
-
-
-
-typedef struct 
-{
-	GList *ops_head;
-	GList *ops_tail;
-	gboolean service_available;
-
-} CamelOpQueue;
-
-
-/* public methods */
-CamelOpQueue *camel_op_queue_new ();
-void camel_op_queue_free (CamelOpQueue *op_queue);
-void camel_op_queue_push_op (CamelOpQueue *queue, CamelOp *op);
-CamelOp *camel_op_queue_pop_op (CamelOpQueue *queue);
-gboolean camel_op_queue_run_next_op (CamelOpQueue *queue);
-gboolean camel_op_queue_get_service_availability (CamelOpQueue *queue);
-void camel_op_queue_set_service_availability (CamelOpQueue *queue, gboolean available);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_OP_QUEUE_H */
-
diff --git a/camel/camel-provider.c b/camel/camel-provider.c
deleted file mode 100644
index 52cfea60a1..0000000000
--- a/camel/camel-provider.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-provider.c :  provider framework   */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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
- */
-
-
-/* 
-   A provider can be added "by hand" or by loading a module. 
-
-
-   Adding providers with modules. 
-   ------------------------------
-
-   The modules are shared libraries which must contain the 
-   function
-
-   CamelProvider *camel_provider_module_init ();
-  
-   returning the provider object defined in the module 
-
-   
-*/
-
-/* FIXME: Shouldn't we add a version number to providers ? */
-
-#include "config.h"
-#include "camel-provider.h"
-
-#include 
-#include 
-
-static GList *_provider_list = NULL;
-
-static gint        
-_provider_name_cmp (gconstpointer a, gconstpointer b)
-{
-	CamelProvider *provider_a = CAMEL_PROVIDER (a);
-	CamelProvider *provider_b = CAMEL_PROVIDER (b);
-
-	return strcmp ( provider_a->name,  provider_b->name);
-}
-
-void
-camel_provider_register (CamelProvider *provider)
-{
-	GList *old_provider_node = NULL;
-
-	g_assert (provider);
-
-	if (_provider_list)
-		old_provider_node = g_list_find_custom (_provider_list, provider, _provider_name_cmp);
-
-	if (old_provider_node != NULL) {
-		/* camel_provider_unref (CAMEL_PROVIDER (old_provider_node->data)); */
-		old_provider_node->data = provider;
-	} else {
-		/* be careful, we use prepend here, so that last registered
-		   providers come first */
-		_provider_list = g_list_prepend (_provider_list, provider);
-	}
-	/* camel_provider_ref (provider); */
-}
-
-
-const CamelProvider *
-camel_provider_register_as_module (const gchar *module_path)
-{
-	
-	CamelProvider *new_provider = NULL;
-	GModule *new_module = NULL;
-	CamelProvider * (*camel_provider_module_init) ();
-	gboolean has_module_init;
-	
-	g_return_val_if_fail (module_path, NULL);
-
-	if (!g_module_supported ()) {
-		g_warning ("CamelProvider::register_as_module: module "
-			   "loading not supported on this system\n");
-		return NULL;
-	}
-	
-
-	new_module = g_module_open (module_path, 0);
-	if (!new_module) {
-		printf ("g_module_open reports: %s\n", g_module_error ());
-		g_warning ("CamelProvider::register_as_module: Unable to "
-			   "load module %s\n", module_path);
-		return NULL;
-	}
-		
-	has_module_init = g_module_symbol (new_module, "camel_provider_module_init", (gpointer *)&camel_provider_module_init);
-	if (!has_module_init){
-		g_warning ("CamelProvider::register_as_module loading "
-			   "of module %s failed,\n\tSymbol "
-			   "camel_provider_module_init not defined in it\n",
-			   module_path);
-		return NULL;
-	}
-
-	new_provider = camel_provider_module_init();
-	new_provider->gmodule = new_module;
-	camel_provider_register (new_provider);
-
-	return new_provider;
-} 
-
-/**
- * camel_provider_scan: Scan for available providers and return a list.
- *
- * Note that this function will cause all providers in the providerdir
- * to be loaded into memory.
- *
- * Return value: the list of CamelProviders. The caller must free this
- * list when it is done with it.
- **/
-GList *
-camel_provider_scan (void)
-{
-	DIR *dir;
-	struct dirent *dent;
-	char *p, *name;
-
-	dir = opendir (CAMEL_PROVIDERDIR);
-	if (!dir)
-		return NULL;
-	while ((dent = readdir (dir))) {
-		p = strstr (dent->d_name, ".so");
-		if (!p || strcmp (p, ".so") != 0)
-			continue;
-
-		name = g_module_build_path (CAMEL_PROVIDERDIR, dent->d_name);
-		camel_provider_register_as_module (name);
-		g_free (name);
-	}
-	closedir (dir);
-
-	return g_list_copy (_provider_list);
-}
-	
-
-/**
- * camel_provider_get_for_protocol: get a registered provider for a protocol
- * @protocol: protocol name (case insensitive)
- * @type: provider type (transport, store, ...)
- * 
- * Look into the list of registered provider if 
- * one correspond both to the protocol name 
- * and to the protocol type. When several providers
- * exist for a same protocol, the last registered
- * is returned.
- * 
- * Return value: Matching provider or NULL if none exists. 
- **/
-const CamelProvider *
-camel_provider_get_for_protocol (const gchar *protocol, ProviderType type)
-{
-	CamelProvider *current_provider = NULL;
-	GList *current_provider_node;
-	gboolean protocol_is_found;
-	gboolean provider_is_found;
-
-	g_assert (protocol);
-	g_return_val_if_fail (_provider_list, NULL);
-
-	current_provider_node = _provider_list;
-	provider_is_found = FALSE;
-
-	while ((!provider_is_found) && current_provider_node) {
-		current_provider = (CamelProvider *)current_provider_node->data;
-		
-		protocol_is_found = (g_strcasecmp (protocol, current_provider->protocol) == 0);
-		if (protocol_is_found) 
-			provider_is_found = (current_provider->provider_type == type);
-		
-		current_provider_node = current_provider_node->next;
-		}
-
-	if (provider_is_found) return current_provider;
-	else return NULL;
-}
diff --git a/camel/camel-provider.h b/camel/camel-provider.h
deleted file mode 100644
index d359ca90c8..0000000000
--- a/camel/camel-provider.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-provider.h :  provider definition  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_PROVIDER_H
-#define CAMEL_PROVIDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-#define CAMEL_PROVIDER(obj) ((CamelProvider *)(obj))
-
-typedef enum {
-	PROVIDER_STORE,
-	PROVIDER_TRANSPORT
-} ProviderType;
-
-#define PROVIDER_REMOTE		0x01
-
-typedef struct {
-	GtkType object_type;        /* used to create instance of the provider */
-	ProviderType provider_type; /* is a store or a transport */ 
-	int flags;                  /* information about the provider */
-
-	/* Provider name used in CamelURLs. */
-	gchar *protocol;
-
-	/* Provider name as used by people. (May be the same as protocol) */
-	gchar *name;
-
-	/* Description of the provider. A novice user should be able
-	 * to read this description, and the information provided by
-	 * an ISP, IS department, etc, and determine whether or not
-	 * this provider is relevant to him, and if so, which
-	 * information goes with it.
-	 */
-	gchar *description;
-
-	GModule *gmodule;
-} CamelProvider;
-
-void camel_provider_register (CamelProvider *provider);
-const CamelProvider *camel_provider_register_as_module (const gchar *module_path);
-const CamelProvider *camel_provider_get_for_protocol (const gchar *protocol, ProviderType type);
-GList *camel_provider_scan (void);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_PROVIDER_H */
diff --git a/camel/camel-recipient.c b/camel/camel-recipient.c
deleted file mode 100644
index 0ed028763b..0000000000
--- a/camel/camel-recipient.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-recipient.h : handle recipients (addresses) and recipiemt lists */
-
-/* 
- *
- * Authors:  Bertrand Guiheneuf 
- *	     Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 "glib.h"
-#include "hash-table-utils.h"
-#include "camel-recipient.h"
-
-
-/**
- * camel_recipient_table_new: Create a new recipient table object
- * 
- * 
- * creates a new recipient table object. A recipient table 
- * objects merely associates a recipient list (GList) to
- * recipient types (as for example "To", "Cc" for mime
- * maile messages 
- *
- * Return value: the newly created recipient table object
- **/
-CamelRecipientTable *
-camel_recipient_table_new ()
-{
-	CamelRecipientTable *recipient_table;
-
-	recipient_table = g_new0 (CamelRecipientTable, 1);
-	recipient_table->recipient_hash_table = g_hash_table_new (g_strcase_hash, g_strcase_equal);
-	recipient_table->ref_count = 1;
-	return recipient_table;
-}
-
-
-/**
- * camel_recipient_table_ref: add a reference to a recipient table object
- * @recipient_table: the recipient table object
- * 
- * Add a reference to a recipient table object. 
- **/
-void 
-camel_recipient_table_ref (CamelRecipientTable *recipient_table)
-{
-	g_return_if_fail (recipient_table);
-	recipient_table->ref_count += 1;
-}
-
-
-
-static void 
-_free_recipient_list (gpointer key, gpointer value, gpointer user_data)
-{
-	GList *recipient_list = (GList *)value;
-	gchar *recipient_name = (gchar *)key;
-
-	while (recipient_list) {
-		g_free (recipient_list->data);
-		recipient_list = recipient_list->next;
-	}
-
-	g_list_free ((GList *)value);
-	g_free (recipient_name);
-	
-}
-
-/**
- * camel_recipient_table_free: Free a recipient table object
- * @recipient_table: the recipient table object to free
- * 
- * Free a recipient table object. All recipients and recipient
- * are freed. 
- **/
-void 
-camel_recipient_table_free (CamelRecipientTable *recipient_table)
-{
-	if (!recipient_table) return;
-
-	/* free each recipient list */
-	g_hash_table_foreach (recipient_table->recipient_hash_table, _free_recipient_list, NULL);
-	g_hash_table_destroy (recipient_table->recipient_hash_table);
-	g_free(recipient_table);
-}
-
-
-
-
-/**
- * camel_recipient_table_unref: Removes a reference to a recipient table object
- * @recipient_table: the recipient table object
- * 
- * Removes a reference to the reference count of a recipient
- * table object. If the reference count falls to zero, the 
- * recipient table object is freed.
- *
- **/
-void 
-camel_recipient_table_unref (CamelRecipientTable *recipient_table)
-{
-	if (!recipient_table) return;
-
-	recipient_table->ref_count -= 1;
-	if (recipient_table->ref_count <1)		
-			camel_recipient_table_free (recipient_table);
-		
-}
-
-
-
-
-/**
- * camel_recipient_table_add: Add a recipient to a recipient table object.
- * @recipient_table: The recipient table object
- * @recipient_type: Recipient type string
- * @recipient:  The recipient to add
- * 
- * Add a recipient to a recipient table object. 
- * The recipient is appended to the list of recipients
- * of type @recipient_type. @recipient and @recipient_type
- * are duplicated if necessary and freed when 
- * camel_recipient_table_free is called.
- **/
-void 
-camel_recipient_table_add (CamelRecipientTable *recipient_table, 
-			   const gchar *recipient_type, 
-			   const gchar *recipient)
-{
-	GList *recipients_list;
-	GList *existent_list;
-	
-	/* see if there is already a list for this recipient type */
-	existent_list = (GList *)g_hash_table_lookup (recipient_table->recipient_hash_table, recipient_type);
-	
-	/* append the new recipient to the recipient list
-	   if the existent_list is NULL, then a new GList is
-	   automagically created */	
-	recipients_list = g_list_append (existent_list, (gpointer)g_strdup (recipient));
-	
-	if (!existent_list) /* if there was no recipient of this type create the section */
-		g_hash_table_insert (recipient_table->recipient_hash_table, g_strdup (recipient_type), recipients_list);
-	
- 
-}
-
-
-/**
- * camel_recipient_table_add_list: Add a full list of recipients to a recipient table.
- * @recipient_table: The recipient table object
- * @recipient_type:  Recipient type string.
- * @recipient_list: Recipient list to add.
- * 
- * Add a full list of recipients to a recipient table.
- * The new recipients are appended at the end of the
- * existing recipient list corresponding to @recipient_type.
- * Be careful, the list is used as is, and its element
- * will be freed by camel_recipient_table_unref
- **/
-void 
-camel_recipient_table_add_list (CamelRecipientTable *recipient_table, 
-				const gchar *recipient_type, 
-				GList *recipient_list)
-{
-	GList *existent_list;
-
-	/* see if there is already a list for this recipient type */
-	existent_list = (GList *)g_hash_table_lookup (recipient_table->recipient_hash_table, recipient_type);
-
-	if (existent_list) 
-		g_list_concat (existent_list, recipient_list);
-	else 
-		g_hash_table_insert (recipient_table->recipient_hash_table, g_strdup (recipient_type), recipient_list);		
-
-}
-
-
-
-
-/**
- * camel_recipient_table_remove: Remove a recipient from a recipient table.
- * @recipient_table: The recipient table object
- * @recipient_type: Recipient type string.
- * @recipient: Recipient to remove from the table
- * 
- * Remove a recipient from a recipient table. The recipient is
- * only removed from the recipient list corresponding to 
- * @recipient_type. The removed recipient is freed.
- *
- **/
-void
-camel_recipient_table_remove (CamelRecipientTable *recipient_table,
-			      const gchar *recipient_type,
-			      const gchar *recipient) 
-{
-	GList *recipients_list;
-	GList *new_recipients_list;
-	GList *old_element;
-	gchar *old_recipient_type;
-	
-	/* if the recipient type section does not exist, do nothing */
-	if (! g_hash_table_lookup_extended (recipient_table->recipient_hash_table, 
-					    recipient_type, 
-					    (gpointer)&(old_recipient_type),
-					    (gpointer)&(recipients_list)) 
-	    ) return;
-	
-	/* look for the recipient to remove */
-	/* g_list_find_custom , use gpointer instead of gconstpointer */
-	old_element = g_list_find_custom (recipients_list, (gpointer)recipient, g_strcase_equal);
-	if (old_element) {
-		/* if recipient exists, remove it */
-		new_recipients_list =  g_list_remove_link (recipients_list, old_element);
-		
-		/* if glist head has changed, fix up hash table */
-		if (new_recipients_list != recipients_list)
-			g_hash_table_insert (recipient_table->recipient_hash_table, old_recipient_type, new_recipients_list);
-		
-		g_free( (gchar *)(old_element->data));
-		g_list_free_1 (old_element);
-	}
-}
-
-void
-camel_recipient_table_remove_type (CamelRecipientTable *recipient_table,
-				   const gchar *recipient_type)
-{
-	GList *l, *n;
-	gchar *old_recipient_type;
-	
-	/* if the recipient type section does not exist, do nothing */
-	if (! g_hash_table_lookup_extended (recipient_table->recipient_hash_table, 
-					    recipient_type, 
-					    (gpointer)&(old_recipient_type),
-					    (void *)&l))
-		return;
-
-	g_hash_table_remove(recipient_table->recipient_hash_table, old_recipient_type);
-	g_free(old_recipient_type);
-	n = l;
-	while (l) {
-		g_free(l->data);
-		l = l->next;
-	}
-	g_list_free(n);
-}
-
-/**
- * camel_recipient_table_get: Get the recipients corresponding to a recipient type.
- * @recipient_table: The recipient table object
- * @recipient_type: Recipient type string.
- * 
- * Return the list of recipients corresponding to 
- * @recipient_type. The returned list is not a copy 
- * of the internal list used by the recipient table object
- * but the list itself. It thus must not be freed.
- * The recipients it contains can be modified.
- * 
- * Return value: The list of recipients.
- **/
-const GList *
-camel_recipient_table_get (CamelRecipientTable *recipient_table,
-			   const gchar *recipient_type)
-{
-	return (const GList *)g_hash_table_lookup (recipient_table->recipient_hash_table, recipient_type);
-}
-
-
-
-
-/**
- * camel_recipient_foreach_recipient_type: Runs a function over over all recipients type lists.
- * @recipient_table: The recipient table object.
- * @func: The function to run.
- * @user_data: User data to pass to the function.
- * 
- * Runs a function over over all recipients type lists.
- **/
-void
-camel_recipient_foreach_recipient_type (CamelRecipientTable *recipient_table,
-					CRLFunc func,
-					gpointer user_data)
-{
-	g_hash_table_foreach (recipient_table->recipient_hash_table, (GHFunc)func, user_data);
-}
diff --git a/camel/camel-recipient.h b/camel/camel-recipient.h
deleted file mode 100644
index 1136cf36ae..0000000000
--- a/camel/camel-recipient.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-recipient.h : handle recipients (addresses) and recipiemt lists */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_RECIPIENT_H
-#define CAMEL_RECIPIENT_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-
-
-typedef struct {
-	GHashTable *recipient_hash_table;
-	gint ref_count;
-
-} CamelRecipientTable;
-
-
-typedef void (*CRLFunc) (gchar *recipient_type,
-			 GList *recipient_list,
-			 gpointer user_data);
-
-
-
-
-CamelRecipientTable *camel_recipient_table_new ();
-
-void camel_recipient_table_ref (CamelRecipientTable *recipient_table);
-
-void camel_recipient_table_unref (CamelRecipientTable *recipient_table);
-
-void camel_recipient_table_add (CamelRecipientTable *recipient_table, 
-				const gchar *recipient_type, 
-				const gchar *recipient);
-
-void camel_recipient_table_add_list (CamelRecipientTable *recipient_table, 
-				     const gchar *recipient_type, 
-				     GList *recipient_list);
-
-void camel_recipient_table_remove (CamelRecipientTable *recipient_table,
-				   const gchar *recipient_type,
-				   const gchar *recipient);
-void camel_recipient_table_remove_type (CamelRecipientTable *recipient_table,
-					const gchar *recipient_type);
-const GList *camel_recipient_table_get (CamelRecipientTable *recipient_table,
-					const gchar *recipient_type);
-
-void camel_recipient_foreach_recipient_type (CamelRecipientTable *recipient_table,
-					     CRLFunc func,
-					     gpointer user_data);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_RECIPIENT_H */
-
diff --git a/camel/camel-seekable-stream.c b/camel/camel-seekable-stream.c
deleted file mode 100644
index b0f6e753b1..0000000000
--- a/camel/camel-seekable-stream.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-seekable-stream.h"
-
-static CamelStreamClass *parent_class=NULL;
-
-
-/* Returns the class for a CamelSeekableStream */
-#define CSS_CLASS(so) CAMEL_SEEKABLE_STREAM_CLASS (GTK_OBJECT(so)->klass)
-
-static gint      _seek      (CamelSeekableStream *stream, 
-			     gint offset, 
-			     CamelStreamSeekPolicy policy);
-static void      _reset     (CamelStream *stream);
-
-
-static void
-camel_seekable_stream_class_init (CamelSeekableStreamClass *camel_seekable_stream_class)
-{
-	CamelStreamClass *camel_stream_class = CAMEL_STREAM_CLASS (camel_seekable_stream_class);
-
-	parent_class = gtk_type_class (camel_stream_get_type ());
-	
-	/* seekable stream methods */
-	camel_seekable_stream_class->seek = _seek;
-
-	/* camel stream methods overload */
-	camel_stream_class->reset = _reset;
-}
-
-GtkType
-camel_seekable_stream_get_type (void)
-{
-	static GtkType camel_seekable_stream_type = 0;
-	
-	if (!camel_seekable_stream_type)	{
-		GtkTypeInfo camel_seekable_stream_info =	
-		{
-			"CamelSeekableStream",
-			sizeof (CamelSeekableStream),
-			sizeof (CamelSeekableStreamClass),
-			(GtkClassInitFunc) camel_seekable_stream_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_seekable_stream_type = gtk_type_unique (camel_stream_get_type (), &camel_seekable_stream_info);
-	}
-	
-	return camel_seekable_stream_type;
-}
-
-
-
-
-static gint
-_seek (CamelSeekableStream *stream, 
-       gint offset, 
-       CamelStreamSeekPolicy policy)
-{
-	g_warning ("CamelSeekableStream::seek called on default implementation \n");
-	return -1;
-}
-
-
-
-/**
- * camel_stream_seek:
- * @stream: a CamelStream object.
- * @offset: offset value
- * @policy: what to do with the offset
- * 
- * 
- * 
- * Return value: new position, -1 if operation failed.
- **/
-gint
-camel_seekable_stream_seek (CamelSeekableStream *stream, 
-			    gint offset, 
-			    CamelStreamSeekPolicy policy)
-{
-	return CSS_CLASS (stream)->seek (stream, offset, policy);
-}
-
-
-
-
-/**
- * camel_seekable_stream_get_current_position: get the position of a stream
- * @stream: seekable stream object 
- * 
- * Get the current position of a seekable stream.
- * 
- * Return value: the position.
- **/
-guint32  
-camel_seekable_stream_get_current_position  (CamelSeekableStream *stream)
-{
-	return stream->cur_pos;		
-}
-
-
-
-/* a default implementation of reset for seekable streams */
-static void 
-_reset (CamelStream *stream)
-{
-	CamelSeekableStream *seekable_stream;
-
-	g_assert (stream);
-	seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
-
-	camel_seekable_stream_seek (seekable_stream, 0, CAMEL_STREAM_SET);	
-}
-
-
-
-
-
-
diff --git a/camel/camel-seekable-stream.h b/camel/camel-seekable-stream.h
deleted file mode 100644
index cd450c27a3..0000000000
--- a/camel/camel-seekable-stream.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-fs.h :stream based on unix filesystem */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_SEEKABLE_STREAM_H
-#define CAMEL_SEEKABLE_STREAM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-stream.h"
-
-#define CAMEL_SEEKABLE_STREAM_TYPE     (camel_seekable_stream_get_type ())
-#define CAMEL_SEEKABLE_STREAM(obj)     (GTK_CHECK_CAST((obj), CAMEL_SEEKABLE_STREAM_TYPE, CamelSeekableStream))
-#define CAMEL_SEEKABLE_STREAM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_SEEKABLE_STREAM_TYPE, CamelSeekableStreamClass))
-#define CAMEL_IS_SEEKABLE_STREAM(o)    (GTK_CHECK_TYPE((o), CAMEL_SEEKABLE_STREAM_TYPE))
-
-
-typedef enum
-{
-	CAMEL_STREAM_SET,
-	CAMEL_STREAM_CUR,
-	CAMEL_STREAM_END
-
-} CamelStreamSeekPolicy;
-
-
-struct _CamelSeekableStream
-{
-	CamelStream parent_object;
-	
-	guint32 cur_pos;     /* current postion in the stream */
-
-};
-
-
-
-typedef struct {
-	CamelStreamClass parent_class;
-	
-	/* Virtual methods */	
-	gint (*seek)       (CamelSeekableStream *stream, gint offset, CamelStreamSeekPolicy policy);
-	
-	
-} CamelSeekableStreamClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_seekable_stream_get_type (void);
-
-
-/* public methods */
-gint     camel_seekable_stream_seek                      (CamelSeekableStream *stream, 
-							  gint offset, 
-							  CamelStreamSeekPolicy policy);
-guint32  camel_seekable_stream_get_current_position      (CamelSeekableStream *stream);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SEEKABLE_STREAM_H */
diff --git a/camel/camel-seekable-substream.c b/camel/camel-seekable-substream.c
deleted file mode 100644
index 59f53c3090..0000000000
--- a/camel/camel-seekable-substream.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-fs.c : file system based stream */
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-seekable-substream.h"
-
-static CamelSeekableStreamClass *parent_class = NULL;
-
-/* Returns the class for a CamelSeekableSubStream */
-#define CSS_CLASS(so) CAMEL_SEEKABLE_SUBSTREAM_CLASS (GTK_OBJECT(so)->klass)
-
-static	gint	       stream_read	      (CamelStream *stream,
-					       gchar *buffer, gint n);
-static	gint	       stream_write	      (CamelStream *stream,
-					       const gchar *buffer,
-					       gint n);
-static	void	       stream_flush	      (CamelStream *stream);
-static	gint	       available	      (CamelStream *stream);
-static	gboolean       eos		      (CamelStream *stream);
-static	gint	       stream_seek	      (CamelSeekableStream *stream,
-					       gint offset,
-					       CamelStreamSeekPolicy policy);
-					
-static	void	       finalize		      (GtkObject *object);
-
-static	void	       init_with_seekable_stream_and_bounds	 (CamelSeekableSubstream *seekable_substream,
-								  CamelSeekableStream *parent_stream,
-								  guint32 inf_bound,
-								  gint64  sup_bound);
-
-
-
-static void
-camel_seekable_substream_class_init (CamelSeekableSubstreamClass *camel_seekable_substream_class)
-{
-	CamelSeekableStreamClass *camel_seekable_stream_class =
-		CAMEL_SEEKABLE_STREAM_CLASS (camel_seekable_substream_class);
-	CamelStreamClass *camel_stream_class =
-		CAMEL_STREAM_CLASS (camel_seekable_substream_class);
-	GtkObjectClass *gtk_object_class =
-		GTK_OBJECT_CLASS (camel_seekable_substream_class);
-
-	parent_class = gtk_type_class (camel_seekable_stream_get_type ());
-
-	/* virtual method definition */
-	camel_seekable_substream_class->init_with_seekable_stream_and_bounds =
-		init_with_seekable_stream_and_bounds;
-
-	/* virtual method overload */
-	camel_stream_class->read = stream_read;
-	camel_stream_class->write = stream_write;
-	camel_stream_class->flush = stream_flush;
-	camel_stream_class->available = available;
-	camel_stream_class->eos = eos;
-
-	camel_seekable_stream_class->seek = stream_seek;
-
-	gtk_object_class->finalize = finalize;
-}
-
-
-GtkType
-camel_seekable_substream_get_type (void)
-{
-	static GtkType camel_seekable_substream_type = 0;
-
-	if (!camel_seekable_substream_type) {
-		GtkTypeInfo camel_seekable_substream_info =
-		{
-			"CamelSeekableSubstream",
-			sizeof (CamelSeekableSubstream),
-			sizeof (CamelSeekableSubstreamClass),
-			(GtkClassInitFunc) camel_seekable_substream_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_seekable_substream_type = gtk_type_unique (camel_seekable_stream_get_type (), &camel_seekable_substream_info);
-	}
-
-	return camel_seekable_substream_type;
-}
-
-
-static void
-finalize (GtkObject *object)
-{
-	CamelSeekableSubstream *seekable_substream =
-		CAMEL_SEEKABLE_SUBSTREAM (object);
-
-	if (seekable_substream->parent_stream)
-		gtk_object_unref (GTK_OBJECT (seekable_substream->parent_stream));
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static void
-set_bounds (CamelSeekableSubstream *seekable_substream,
-	    guint32 inf_bound, gint64 sup_bound)
-{
-	/* store the bounds */
-	seekable_substream->inf_bound = inf_bound;
-	seekable_substream->sup_bound = sup_bound;
-
-	seekable_substream->eos = FALSE;
-}
-
-
-static void
-reemit_parent_signal (CamelStream *parent_stream, gpointer user_data)
-{
-	CamelSeekableSubstream *seekable_substream =
-		CAMEL_SEEKABLE_SUBSTREAM (user_data);
-
-	gtk_signal_emit_by_name (GTK_OBJECT (seekable_substream),
-				 "data_available");
-}
-
-
-static void
-init_with_seekable_stream_and_bounds (CamelSeekableSubstream *seekable_substream,
-				      CamelSeekableStream *parent_stream,
-				      guint32 inf_bound, gint64 sup_bound)
-{
-	/* Store the parent stream. */
-	seekable_substream->parent_stream = parent_stream;
-	gtk_object_ref (GTK_OBJECT (parent_stream));
-	gtk_object_sink (GTK_OBJECT (parent_stream));
-
-	/* Set the bound of the substream. */
-	set_bounds (seekable_substream, inf_bound, sup_bound);
-
-	/* Connect to the parent stream "data_available" signal so
-	 * that we can reemit the signal on the seekable substream in
-	 * case some data would be available for us
-	 */
-	gtk_signal_connect (GTK_OBJECT (parent_stream), "data_available",
-			    reemit_parent_signal, seekable_substream);
-
-	gtk_signal_emit_by_name (GTK_OBJECT (seekable_substream),
-				 "data_available");
-}
-
-/**
- * camel_seekable_substream_new_with_seekable_stream_and_bounds:
- * @parent_stream: a seekable parent stream
- * @inf_bound: a lower bound
- * @sup_bound: an upper bound
- *
- * Creates a new CamelSeekableSubstream that references the portion
- * of @parent_stream from @inf_bound to @sup_bound. (If @sup_bound is -1,
- * it references to the end of stream, even if the stream grows.)
- *
- * While the substream is open, the caller cannot assume anything about
- * the current position of @parent_stream. After the substream has been
- * closed, @parent_stream will stabilize again.
- *
- * Return value: the substream
- **/
-CamelStream *
-camel_seekable_substream_new_with_seekable_stream_and_bounds (CamelSeekableStream *parent_stream,
-							      guint32 inf_bound,
-							      gint64 sup_bound)
-{
-	CamelSeekableSubstream *seekable_substream;
-
-	g_return_val_if_fail (CAMEL_IS_SEEKABLE_STREAM (parent_stream), NULL);
-
-	/* Create the seekable substream. */
-	seekable_substream =
-		gtk_type_new (camel_seekable_substream_get_type ());
-
-	/* Initialize it. */
-	init_with_seekable_stream_and_bounds (seekable_substream,
-					      parent_stream,
-					      inf_bound, sup_bound);
-	return CAMEL_STREAM (seekable_substream);
-}
-
-
-static gboolean
-parent_reset (CamelSeekableSubstream *seekable_substream)
-{
-	CamelSeekableStream *parent, *seekable_stream =
-		CAMEL_SEEKABLE_STREAM (seekable_substream);
-	guint32 parent_stream_current_position;
-	guint32 position_in_parent;
-
-	parent = seekable_substream->parent_stream;
-	g_return_val_if_fail (parent != NULL, FALSE);
-
-	parent_stream_current_position =
-		camel_seekable_stream_get_current_position (parent);
-
-	/* Compute our position in the parent stream. */
-	position_in_parent =
-		seekable_stream->cur_pos + seekable_substream->inf_bound;
-
-	/* Go to our position in the parent stream. */
-	if (parent_stream_current_position != position_in_parent) {
-		camel_seekable_stream_seek (parent, position_in_parent,
-					    CAMEL_STREAM_SET);
-	}
-
-	/* Check if we were able to set the position in the parent. */
-	parent_stream_current_position =
-		camel_seekable_stream_get_current_position (parent);
-
-	return parent_stream_current_position == position_in_parent;
-}
-
-static gint
-stream_read (CamelStream *stream, gchar *buffer, gint n)
-{
-	CamelSeekableStream *seekable_stream =
-		CAMEL_SEEKABLE_STREAM (stream);
-	CamelSeekableSubstream *seekable_substream =
-		CAMEL_SEEKABLE_SUBSTREAM (stream);
-	gint v, nb_to_read, position_in_parent;
-
-	/* Go to our position in the parent stream. */
-	if (!parent_reset (seekable_substream)) {
-		seekable_substream->eos = TRUE;
-		return 0;
-	}
-
-	/* Compute how much byte should be read. */
-	position_in_parent =
-		seekable_stream->cur_pos + seekable_substream->inf_bound;
-	if (seekable_substream->sup_bound != -1) {
-		nb_to_read = MIN (seekable_substream->sup_bound -
-				  position_in_parent, n);
-	} else
-		nb_to_read = n;
-
-	if (!nb_to_read) {
-		if (n)
-			seekable_substream->eos = TRUE;
-		return 0;
-	}
-
-	/* Read the data. */
-	if (nb_to_read > 0) {
-		v = camel_stream_read (CAMEL_STREAM (seekable_substream->parent_stream),
-				       buffer, nb_to_read);
-	} else
-		v = 0;
-
-	/* If the return value is negative, an error occured,
-	 * we must do something  FIXME : handle exception
-	 */
-	if (v > 0)
-		seekable_stream->cur_pos += v;
-
-	return v;
-}
-
-
-static gint
-stream_write (CamelStream *stream, const gchar *buffer, gint n)
-{
-	/* NOT VALID ON SEEKABLE SUBSTREAM */
-	g_warning ("CamelSeekableSubstream:: seekable substream doesn't "
-		   "have a write method\n");
-	return -1;
-}
-
-
-static void
-stream_flush (CamelStream *stream)
-{
-	/* NOT VALID ON SEEKABLE SUBSTREAM */
-	g_warning ("CamelSeekableSubstream:: seekable substream doesn't "
-		   "have a flush method\n");
-}
-
-
-static gint
-available (CamelStream *stream)
-{
-	g_warning ("CamelSeekableSubstream::available not implemented\n");
-	return -1;
-}
-
-
-static gboolean
-eos (CamelStream *stream)
-{
-	CamelSeekableSubstream *seekable_substream =
-		CAMEL_SEEKABLE_SUBSTREAM (stream);
-	CamelSeekableStream *seekable_stream =
-		CAMEL_SEEKABLE_STREAM (stream);
-	guint32 substream_len;
-	gboolean eos;
-
-	g_assert (stream);
-
-	if (seekable_substream->eos)
-		eos = TRUE;
-	else {
-		parent_reset (seekable_substream);
-
-		eos = camel_stream_eos (CAMEL_STREAM (seekable_substream->parent_stream));
-		if ((!eos) && (seekable_substream->sup_bound != -1)) {
-			substream_len = seekable_substream->sup_bound - seekable_substream->inf_bound;
-			eos = ( seekable_stream->cur_pos >= substream_len);
-		}
-	}
-
-	return eos;
-}
-
-
-static gint
-stream_seek (CamelSeekableStream *stream, gint offset,
-	     CamelStreamSeekPolicy policy)
-{
-	CamelSeekableSubstream *seekable_substream =
-		CAMEL_SEEKABLE_SUBSTREAM (stream);
-	CamelSeekableStream *seekable_stream =
-		CAMEL_SEEKABLE_STREAM (stream);
-	gint64 real_offset = 0;
-	guint32 substream_len;
-	guint32 parent_pos;
-	gboolean seek_done = FALSE;
-
-	substream_len = seekable_substream->sup_bound -
-		seekable_substream->inf_bound;
-
-	seekable_substream->eos = FALSE;
-
-	switch (policy) {
-	case CAMEL_STREAM_SET:
-		real_offset = offset;
-		break;
-
-	case CAMEL_STREAM_CUR:
-		real_offset = seekable_stream->cur_pos + offset;
-		break;
-
-	case CAMEL_STREAM_END:
-		if (seekable_substream->sup_bound != -1)
-			real_offset = substream_len - offset;
-		else {
-			parent_pos = camel_seekable_stream_seek (seekable_substream->parent_stream,
-								 offset,
-								 CAMEL_STREAM_END);
-			seekable_stream->cur_pos = parent_pos -
-				seekable_substream->inf_bound;
-			seek_done = TRUE;
-		}
-		break;
-
-	default:
-		return -1;
-	}
-
-	if (!seek_done) {
-		if (real_offset > 0) {
-			seekable_stream->cur_pos = MIN (real_offset,
-							substream_len);
-		} else
-			seekable_stream->cur_pos = 0;
-	}
-
-	return seekable_stream->cur_pos;
-}
-
-
diff --git a/camel/camel-seekable-substream.h b/camel/camel-seekable-substream.h
deleted file mode 100644
index 4710f5fd5a..0000000000
--- a/camel/camel-seekable-substream.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-seekable-substream.h : stream */
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_SEEKABLE_SUBSTREAM_H
-#define CAMEL_SEEKABLE_SUBSTREAM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-seekable-stream.h"
-
-
-#define CAMEL_SEEKABLE_SUBSTREAM_TYPE       (camel_seekable_substream_get_type ())
-#define CAMEL_SEEKABLE_SUBSTREAM(obj)       (GTK_CHECK_CAST((obj), CAMEL_SEEKABLE_SUBSTREAM_TYPE, CamelSeekableSubstream))
-#define CAMEL_SEEKABLE_SUBSTREAM_CLASS(k)   (GTK_CHECK_CLASS_CAST ((k), CAMEL_SEEKABLE_SUBSTREAM_TYPE, CamelSeekableSubstreamClass))
-#define CAMEL_IS_SEEKABLE_SUBSTREAM(o)      (GTK_CHECK_TYPE((o), CAMEL_SEEKABLE_SUBSTREAM_TYPE))
-
-
-
-
-struct _CamelSeekableSubstream
-{
-	CamelSeekableStream parent_object;
-
-	/*  --**-- Private fields --**--  */
-	CamelSeekableStream *parent_stream;
-	guint32 inf_bound;                    /* first valid position */
-	gint64  sup_bound;                    /* first invalid position */
-	gboolean eos;
-};
-
-
-
-typedef struct {
-	CamelSeekableStreamClass parent_class;
-
-	/* Virtual methods */
-	void (*init_with_seekable_stream_and_bounds) (CamelSeekableSubstream *seekable_substream,
-						      CamelSeekableStream    *parent_stream,
-						      guint32 inf_bound,
-						      gint64  sup_bound);
-
-} CamelSeekableSubstreamClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_seekable_substream_get_type (void);
-
-
-/* public methods */
-
-/* obtain a new seekable substream */
-CamelStream *
-camel_seekable_substream_new_with_seekable_stream_and_bounds (CamelSeekableStream    *parent_stream,
-							      guint32                 inf_bound,
-							      gint64                  sup_bound);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SEEKABLE_SUBSTREAM_H */
diff --git a/camel/camel-service.c b/camel/camel-service.c
deleted file mode 100644
index 77ba709682..0000000000
--- a/camel/camel-service.c
+++ /dev/null
@@ -1,464 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camelService.c : Abstract class for an email service */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-service.h"
-#include "camel-exception.h"
-
-#include 
-#include 
-
-static GtkObjectClass *parent_class=NULL;
-
-/* Returns the class for a CamelService */
-#define CSERV_CLASS(so) CAMEL_SERVICE_CLASS (GTK_OBJECT(so)->klass)
-
-static gboolean _connect(CamelService *service, CamelException *ex);
-static gboolean _connect_with_url (CamelService *service, CamelURL *url,
-				   CamelException *ex);
-static gboolean _disconnect(CamelService *service, CamelException *ex);
-static gboolean _is_connected (CamelService *service);
-static GList *  _query_auth_types (CamelService *service);
-static void     _free_auth_types (CamelService *service, GList *authtypes);
-static void     _finalize (GtkObject *object);
-static gboolean _set_url (CamelService *service, CamelURL *url,
-			  CamelException *ex);
-
-static void
-camel_service_class_init (CamelServiceClass *camel_service_class)
-{
-	GtkObjectClass *gtk_object_class =
-		GTK_OBJECT_CLASS (camel_service_class);
-
-	parent_class = gtk_type_class (gtk_object_get_type ());
-	
-	/* virtual method definition */
-	camel_service_class->connect = _connect;
-	camel_service_class->connect_with_url = _connect_with_url;
-	camel_service_class->disconnect = _disconnect;
-	camel_service_class->is_connected = _is_connected;
-	camel_service_class->query_auth_types = _query_auth_types;
-	camel_service_class->free_auth_types = _free_auth_types;
-
-	/* virtual method overload */
-	gtk_object_class->finalize = _finalize;
-}
-
-GtkType
-camel_service_get_type (void)
-{
-	static GtkType camel_service_type = 0;
-	
-	if (!camel_service_type)	{
-		GtkTypeInfo camel_service_info =	
-		{
-			"CamelService",
-			sizeof (CamelService),
-			sizeof (CamelServiceClass),
-			(GtkClassInitFunc) camel_service_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_service_type = gtk_type_unique (gtk_object_get_type (),
-						      &camel_service_info);
-	}
-	
-	return camel_service_type;
-}
-
-
-static void           
-_finalize (GtkObject *object)
-{
-	CamelService *camel_service = CAMEL_SERVICE (object);
-
-	if (camel_service->url)
-		camel_url_free (camel_service->url);
-	if (camel_service->session)
-		gtk_object_unref (GTK_OBJECT (camel_service->session));
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-/**
- * camel_service_new: create a new CamelService or subtype
- * @type: the GtkType of the class to create
- * @session: the session for the service
- * @url: the default URL for the service (may be NULL)
- * @ex: a CamelException
- *
- * Creates a new CamelService (or one of its subtypes), initialized
- * with the given parameters.
- *
- * Return value: the CamelService, or NULL.
- **/
-CamelService *
-camel_service_new (GtkType type, CamelSession *session, CamelURL *url,
-		   CamelException *ex)
-{
-	CamelService *service;
-
-	g_assert(session);
-
-	service = CAMEL_SERVICE (gtk_object_new (type, NULL));
-	service->session = session;
-	gtk_object_ref (GTK_OBJECT (session));
-	if (url) {
-		if (!_set_url (service, url, ex))
-			return NULL;
-	}
-
-	return service;
-}
-
-/**
- * _connect : connect to a service 
- * @service: object to connect
- * @ex: a CamelException
- *
- * connect to the service using the parameters 
- * stored in the session it is initialized with
- *
- * Return value: whether or not the connection succeeded
- **/
-static gboolean
-_connect (CamelService *service, CamelException *ex)
-{
-	g_assert (service->session);
-	/* XXX it's possible that this should be an exception
-	 * rather than an assertion... I'm not sure how the code
-	 * is supposed to be used.
-	 */
-	g_assert (service->url);
-
-	service->connected = TRUE;
-	return TRUE;
-}
-
-
-
-/**
- * camel_service_connect:connect to a service 
- * @service: CamelService object
- * @ex: a CamelException
- * 
- * connect to the service using the parameters 
- * stored in the session it is initialized with
- *
- * Return value: whether or not the connection succeeded
- **/
-gboolean
-camel_service_connect (CamelService *service, CamelException *ex)
-{
-	return CSERV_CLASS(service)->connect(service, ex);
-}
-
-
-
-/**
- * _connect_with_url: connect to the specified address
- * @service: object to connect
- * @url: URL describing service to connect to
- * @ex: a CamelException
- *
- * Connect to the service, but do not use the session
- * default parameters to retrieve server's address
- *
- * Return value: whether or not the connection succeeded
- **/
-static gboolean
-_connect_with_url (CamelService *service, CamelURL *url, CamelException *ex)
-{
-	g_assert (service->session);
-
-	if (!_set_url (service, url, ex))
-		return FALSE;
-
-	return CSERV_CLASS(service)->connect (service, ex);
-}
-
-/**
- * camel_service_connect_with_url: connect a service 
- * @service:  the service to connect
- * @url:  URL describing the service to connect to
- * @ex: a CamelException
- * 
- * Connect to a service, but do not use the session
- * default parameters to retrieve server's address
- *
- * Return value: whether or not the connection succeeded
- **/
-gboolean
-camel_service_connect_with_url (CamelService *service, char *url_string,
-				CamelException *ex)
-{
-	CamelURL *url = camel_url_new (url_string, ex);
-
-	if (!url)
-		return FALSE;
-	return CSERV_CLASS(service)->connect_with_url (service, url, ex);
-}
-
-
-
-/**
- * _disconnect : disconnect from a service 
- * @service: object to disconnect
- * @ex: a CamelException
- *
- * disconnect from the service
- *
- * Return value: whether or not the disconnection succeeded without
- * errors. (Consult @ex if FALSE.)
- **/
-static gboolean
-_disconnect (CamelService *service, CamelException *ex)
-{
-	service->connected = FALSE;
-
-	return TRUE;
-}
-
-
-
-/**
- * camel_service_disconnect: disconnect from a service 
- * @service: CamelService object
- * @ex: a CamelException
- *
- * disconnect from the service
- *
- * Return value: whether or not the disconnection succeeded without
- * errors. (Consult @ex if FALSE.)
- **/
-gboolean
-camel_service_disconnect (CamelService *service, CamelException *ex)
-{
-	return CSERV_CLASS(service)->disconnect(service, ex);
-}
-
-
-
-/**
- * _is_connected: test if the service object is connected
- * @service: object to test
- * 
- * Return value: whether or not the service is connected
- **/
-static gboolean
-_is_connected (CamelService *service)
-{
-	return service->connected;
-}
-
-
-/**
- * camel_service_is_connected: test if the service object is connected
- * @service: object to test
- * 
- * Return value: whether or not the service is connected
- **/
-gboolean
-camel_service_is_connected (CamelService *service)
-{
-	return CSERV_CLASS(service)->is_connected(service);
-}
-
-
-/**
- * _set_url: Validate a URL and set it as the default for a service
- * @service: the CamelService
- * @url_string: the URL
- * @ex: a CamelException
- *
- * This converts the URL to a CamelURL, validates it for the service,
- * and sets it as the default URL for the service.
- *
- * Return value: success or failure
- **/
-static gboolean
-_set_url (CamelService *service, CamelURL *url, CamelException *ex)
-{
-	char *url_string;
-
-	if (service->url_flags & CAMEL_SERVICE_URL_NEED_USER &&
-	    (url->user == NULL || url->user[0] == '\0')) {
-		url_string = camel_url_to_string (url, FALSE);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "URL '%s' needs a username component",
-				      url_string);
-		g_free (url_string);
-		return FALSE;
-	} else if (service->url_flags & CAMEL_SERVICE_URL_NEED_HOST &&
-		   (url->host == NULL || url->host[0] == '\0')) {
-		url_string = camel_url_to_string (url, FALSE);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "URL '%s' needs a host component",
-				      url_string);
-		g_free (url_string);
-		return FALSE;
-	} else if (service->url_flags & CAMEL_SERVICE_URL_NEED_PATH &&
-		   (url->path == NULL || url->path[0] == '\0')) {
-		url_string = camel_url_to_string (url, FALSE);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "URL '%s' needs a path component",
-				      url_string);
-		g_free (url_string);
-		return FALSE;
-	}
-
-	if (service->url)
-		camel_url_free (service->url);
-	service->url = url;
-	return TRUE;
-}
-
-/**
- * camel_service_get_url: get the url representing a service
- * @service: the service
- * 
- * returns the URL representing a service. The returned URL must be
- * freed when it is no longer needed. For security reasons, this
- * routine does not return the password.
- * 
- * Return value: the url name
- **/
-char *
-camel_service_get_url (CamelService *service)
-{
-	return camel_url_to_string(service->url, FALSE);
-}
-
-
-/**
- * camel_service_get_session: return the session associated with a service
- * @service: the service
- *
- * returns the CamelSession associated with the service.
- *
- * Return value: the session
- **/
-CamelSession *
-camel_service_get_session (CamelService *service)
-{
-	return service->session;
-}
-
-
-GList *
-_query_auth_types (CamelService *service)
-{
-	return NULL;
-}
-
-/**
- * camel_service_query_auth_types: return a list of supported
- * authentication types.
- * @service: a CamelService
- *
- * This is used by the mail source wizard to get the list of
- * authentication types supported by the protocol, and information
- * about them.
- *
- * This may be called on a service with or without an associated URL.
- * If there is no URL, the routine must return a generic answer. If
- * the service does have a URL, the routine MAY connect to the server
- * and query what authentication mechanisms it supports.
- *
- * Return value: a list of CamelServiceAuthType records. The caller
- * must free the list by calling camel_service_free_auth_types when
- * it is done.
- **/
-GList *
-camel_service_query_auth_types (CamelService *service)
-{
-	return CSERV_CLASS (service)->query_auth_types (service);
-}
-
-static void
-_free_auth_types (CamelService *service, GList *authtypes)
-{
-	;
-}
-
-/**
- * camel_service_free_auth_types: free a type list returned by
- * camel_service_query_auth_types.
- * @service: the service
- * @authtypes: the list of authtypes
- *
- * This frees the data allocated by camel_service_query_auth_types.
- **/
-void
-camel_service_free_auth_types (CamelService *service, GList *authtypes)
-{
-	CSERV_CLASS (service)->free_auth_types (service, authtypes);
-}
-
-
-
-/* URL utility routines */
-
-/**
- * camel_service_gethost: get a hostent for a CamelService's host
- * @service: a CamelService
- * @ex: a CamelException
- *
- * This is a convenience function to do a gethostbyname on the host
- * for the service's URL.
- *
- * Return value: a (statically-allocated) hostent.
- **/
-struct hostent *
-camel_service_gethost (CamelService *service, CamelException *ex)
-{
-	struct hostent *h;
-	char *hostname;
-
-	if (service->url->host)
-		hostname = service->url->host;
-	else
-		hostname = "localhost";
-	h = gethostbyname (hostname);
-	if (!h) {
-		extern int h_errno;
-
-		if (h_errno == HOST_NOT_FOUND || h_errno == NO_DATA) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-					      "No such host %s.", hostname);
-		} else {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					      "Temporarily unable to look up "
-					      "hostname %s.", hostname);
-		}
-		return NULL;
-	}
-
-	return h;
-}
diff --git a/camel/camel-service.h b/camel/camel-service.h
deleted file mode 100644
index 7b04ef24a8..0000000000
--- a/camel/camel-service.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-service.h : Abstract class for an email service */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_SERVICE_H
-#define CAMEL_SERVICE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include "camel-types.h"
-#include "camel-url.h"
-
-#define CAMEL_SERVICE_TYPE     (camel_service_get_type ())
-#define CAMEL_SERVICE(obj)     (GTK_CHECK_CAST((obj), CAMEL_SERVICE_TYPE, CamelService))
-#define CAMEL_SERVICE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_SERVICE_TYPE, CamelServiceClass))
-#define CAMEL_IS_SERVICE(o)    (GTK_CHECK_TYPE((o), CAMEL_SERVICE_TYPE))
-
-
-
-struct _CamelService {
-	GtkObject parent_object;
-
-	CamelSession *session;
-	gboolean connected;
-	CamelURL *url;
-	int url_flags;
-
-};
-
-
-
-typedef struct {
-	GtkObjectClass parent_class;
-
-	gboolean  (*connect)           (CamelService *service, 
-					CamelException *ex);
-	gboolean  (*connect_with_url)  (CamelService *service, 
-					CamelURL *url,
-					CamelException *ex);
-	gboolean  (*disconnect)        (CamelService *service, 
-					CamelException *ex);
-
-	gboolean  (*is_connected)      (CamelService *service);
-
-	GList *   (*query_auth_types)  (CamelService *service);
-	void      (*free_auth_types)   (CamelService *service,
-					GList *authtypes);
-
-} CamelServiceClass;
-
-
-
-/* flags for url_flags. (others can be added if needed) */
-#define CAMEL_SERVICE_URL_NEED_USER	(1 << 1)
-#define CAMEL_SERVICE_URL_NEED_AUTH	(1 << 2)
-#define CAMEL_SERVICE_URL_NEED_HOST	(1 << 4)
-#define CAMEL_SERVICE_URL_NEED_PATH	(1 << 6)
-
-
-/* query_auth_types returns a GList of these */
-typedef struct {
-	char *name, *description, *authproto;
-	gboolean need_password;
-} CamelServiceAuthType;
-
-
-/* public methods */
-CamelService *      camel_service_new                (GtkType type, 
-						      CamelSession *session,
-						      CamelURL *url, 
-						      CamelException *ex);
-
-gboolean            camel_service_connect            (CamelService *service, 
-						      CamelException *ex);
-gboolean            camel_service_connect_with_url   (CamelService *service, 
-						      char *url,
-						      CamelException *ex);
-gboolean            camel_service_disconnect         (CamelService *service, 
-                                                      CamelException *ex);
-gboolean            camel_service_is_connected       (CamelService *service);
-
-char *              camel_service_get_url            (CamelService *service);
-CamelSession *      camel_service_get_session        (CamelService *service);
-
-GList *             camel_service_query_auth_types   (CamelService *service);
-void                camel_service_free_auth_types    (CamelService *service,
-						      GList *authtypes);
-
-/* convenience functions */
-struct hostent *    camel_service_gethost            (CamelService *service,
-						      CamelException *ex);
-
-
-/* Standard Gtk function */
-GtkType camel_service_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SERVICE_H */
-
diff --git a/camel/camel-session.c b/camel/camel-session.c
deleted file mode 100644
index 7b672c5c60..0000000000
--- a/camel/camel-session.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-session.c : Abstract class for an email session */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-session.h"
-#include "camel-store.h"
-#include "camel-transport.h"
-#include "camel-exception.h"
-#include "string-utils.h"
-#include "camel-url.h"
-#include "hash-table-utils.h"
-
-
-
-static GtkObjectClass *parent_class=NULL;
-
-
-
-/* Returns the class for a CamelSession */
-#define CSS_CLASS(so) CAMEL_SESSION_CLASS (GTK_OBJECT(so)->klass)
-
-
-static void
-camel_session_class_init (CamelSessionClass *camel_session_class)
-{
-	parent_class = gtk_type_class (gtk_object_get_type ());
-	
-	/* virtual method definition */
-	/* virtual method overload */
-}
-
-
-
-
-
-static void
-camel_session_init (CamelSession *session)
-{
-	session->store_provider_list = g_hash_table_new (g_strcase_hash, g_strcase_equal);
-	session->transport_provider_list = g_hash_table_new (g_strcase_hash, g_strcase_equal);
-}
-
-
-
-GtkType
-camel_session_get_type (void)
-{
-	static GtkType camel_session_type = 0;
-	
-	if (!camel_session_type)	{
-		GtkTypeInfo camel_session_info =	
-		{
-			"CamelSession",
-			sizeof (CamelSession),
-			sizeof (CamelSessionClass),
-			(GtkClassInitFunc) camel_session_class_init,
-			(GtkObjectInitFunc) camel_session_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_session_type = gtk_type_unique (gtk_object_get_type (), &camel_session_info);
-	}
-	
-	return camel_session_type;
-}
-
-
-CamelSession *
-camel_session_new (CamelAuthCallback authenticator)
-{
-	CamelSession *session = gtk_type_new (CAMEL_SESSION_TYPE);
-
-	session->authenticator = authenticator;
-	return session;
-}
-
-/**
- * camel_session_set_provider: set the default provider for a protocol
- * @session: session object for wich the provider will the default
- * @provider: provider object
- * 
- * Set the default implementation for a protocol. The protocol
- * is determined by provider->protocol field (See CamelProvider).
- * It overrides the default provider for this protocol.
- * 
- **/
-void 
-camel_session_set_provider (CamelSession *session, CamelProvider *provider)
-{
-	GHashTable *table;
-
-	g_assert(session);
-	g_assert(provider);
-	
-	if (provider->provider_type == PROVIDER_STORE)
-		table = session->store_provider_list;
-	else
-		table = session->transport_provider_list;
-	
-	g_hash_table_insert (table, (gpointer)(provider->protocol), (gpointer)(provider));
-	
-}
-
-
-
-
-
-/**
- * camel_session_get_store_from_provider: create a folder instance for a given provider
- * @session: session object the folder will be initialized with
- * @provider: provider folder to instantiate
- * @ex: a CamelException
- * 
- * 
- * Return value: the newly instantiated store
- **/
-CamelStore *
-camel_session_get_store_from_provider (CamelSession *session,
-				       CamelProvider *provider,
-				       CamelException *ex)
-{
-	g_assert(session);
-	g_assert(provider);
-
-	return CAMEL_STORE (camel_service_new (provider->object_type,
-					       session, NULL, ex));
-}
-
-
-
-/**
- * get_store_for_protocol_with_url: private helper routine
- * @session: CamelSession object
- * @protocol: protocol name
- * @url: a URL, or NULL
- * @ex: a CamelException
- *
- * Used by camel_session_get_store_for_protocol and
- * camel_session_get_store.
- *
- * Return value: initialized store associated with this protocol, or NULL if no provider was found.
- **/
-static CamelStore *
-get_store_for_protocol_with_url (CamelSession *session, const char *protocol,
-				 CamelURL *url, CamelException *ex)
-{
-	const CamelProvider *provider = NULL;
-
-	/* See if there is a provider assiciated with this
-	 * protocol in this session.
-	 */
-	provider = CAMEL_PROVIDER (g_hash_table_lookup (session->store_provider_list, protocol));
-	if (!provider) {
-		/* No provider was found in this session. See
-		 * if there is a registered provider for this 
-		 * protocol.
-		 */
-		provider = camel_provider_get_for_protocol (protocol, PROVIDER_STORE);
-	}
-	if (!provider) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "No provider available for protocol "
-				      "`%s'", protocol);
-		return NULL;
-	}
-
-	return CAMEL_STORE (camel_service_new (provider->object_type,
-					       session, url, ex));
-}
-
-
-/**
- * camel_session_get_store_for_protocol: get the store associated to a protocol
- * @session: CamelSession object
- * @protocol: protocol name 
- * @ex: a CamelException
- * 
- * Return a CamelStore object associated with a given
- * store protocol. If a provider has been set for this
- * protocol in the session @session using 
- * camel_session_set_provider (), then a store 
- * obtained from this provider is returned.
- * Otherwise, if one or more providers corresponding 
- * to this protocol have been registered (See 
- * camel_provider_register_as_module), the last registered
- * one is used. 
- * 
- * Return value: store associated with this protocol, or NULL if no provider was found. 
- **/
-CamelStore *
-camel_session_get_store_for_protocol (CamelSession *session,
-				      const char *protocol,
-				      CamelException *ex)
-{
-	return get_store_for_protocol_with_url (session, protocol, NULL, ex);
-}
-
-
-
-/**
- * camel_session_get_store: get a store object for an URL
- * @session: session object
- * @url_string: url
- * @ex: a CamelException
- * 
- * return a store corresponding to an URL. 
- * 
- * Return value: the store, or NULL if no provider correponds to the protocol
- **/
-CamelStore *
-camel_session_get_store (CamelSession *session, const char *url_string,
-			 CamelException *ex)
-{
-	CamelURL *url;
-	CamelStore *store;
-
-	url = camel_url_new (url_string, ex);
-	if (!url)
-		return NULL;
-	
-	store = get_store_for_protocol_with_url (session, url->protocol,
-						 url, ex);
-	if (store == NULL)
-		camel_url_free (url);
-	return store;
-}
-
-
-
-/**
- * camel_session_query_authenticator: query the session authenticator
- * @session: session object
- * @prompt: prompt to use if authenticator can query the user
- * @secret: whether or not the data is secret (eg, a password)
- * @service: the service this query is being made by
- * @item: an identifier, unique within this service, for the information
- * @ex: a CamelException
- *
- * This function is used by a CamelService to request authentication
- * information it needs to complete a connection. If the authenticator
- * stores any authentication information in configuration files, it
- * should use @service and @item as keys to find the right piece of
- * information. If it doesn't store authentication information in config
- * files, it should use the given @prompt to ask the user for the
- * information. If @secret is set, the user's input should not be
- * echoed back. The authenticator should set @ex to
- * CAMEL_EXCEPTION_USER_CANCEL if the user did not provide the
- * information. The caller must g_free() the information when it is
- * done with it.
- *
- * Return value: the authentication information or NULL.
- **/
-char *
-camel_session_query_authenticator (CamelSession *session, char *prompt,
-				   gboolean secret,
-				   CamelService *service, char *item,
-				   CamelException *ex)
-{
-	return session->authenticator (prompt, secret, service, item, ex);
-}
-
-
-
-/**
- * camel_session_get_transport_for_protocol: get the transport for a protocol
- * @session: the session
- * @protocol: protocol name
- * @ex: a CamelException
- *
- * Return a CamelTransport object associated with a given transport
- * protocol. If a provider has been set for this protocol in the
- * session @session using camel_session_set_provider (), then a transport
- * obtained from this provider is returned. Otherwise, if one or more
- * providers corresponding to this protocol have been registered (See
- * camel_provider_register_as_module), the last registered one is
- * used.
- * 
- * Return value: transport associated with this protocol, or NULL if no provider was found. 
- **/
-CamelTransport *
-camel_session_get_transport_for_protocol (CamelSession *session,
-					  const char *protocol,
-					  CamelException *ex)
-{
-	const CamelProvider *provider = NULL;
-
-	/* See if there is a provider assiciated with this
-	 * protocol in this session.
-	 */
-	provider = CAMEL_PROVIDER (g_hash_table_lookup (session->transport_provider_list, protocol));
-	if (!provider) {
-		/* No provider was found in this session. See
-		 * if there is a registered provider for this 
-		 * protocol.
-		 */
-		provider = camel_provider_get_for_protocol (protocol, PROVIDER_TRANSPORT);
-	}
-	if (!provider)
-		return NULL;
-
-	return CAMEL_TRANSPORT (gtk_object_new (provider->object_type, NULL));
-}
diff --git a/camel/camel-session.h b/camel/camel-session.h
deleted file mode 100644
index 4bb51804ac..0000000000
--- a/camel/camel-session.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-session.h : Abstract class for an email session */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_SESSION_H
-#define CAMEL_SESSION_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-provider.h"
-
-#define CAMEL_SESSION_TYPE     (camel_session_get_type ())
-#define CAMEL_SESSION(obj)     (GTK_CHECK_CAST((obj), CAMEL_SESSION_TYPE, CamelSession))
-#define CAMEL_SESSION_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_SESSION_TYPE, CamelSessionClass))
-#define CAMEL_IS_SESSION(o)    (GTK_CHECK_TYPE((o), CAMEL_SESSION_TYPE))
-
-
-typedef char *(*CamelAuthCallback) (char *prompt, gboolean secret,
-				    CamelService *service, char *item,
-				    CamelException *ex);
-
-
-struct _CamelSession
-{
-	GtkObject parent_object;
-
-	CamelAuthCallback authenticator;
-	GHashTable *store_provider_list; /* providers are identified by their protocol */
-	GHashTable *transport_provider_list; 
-
-};
-
-
-
-typedef struct {
-	GtkObjectClass parent_class;
-	
-	/* Virtual methods */	
-
-} CamelSessionClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType            camel_session_get_type                      (void);
-
-
-CamelSession *     camel_session_new                           (CamelAuthCallback authenticator);
-void               camel_session_set_provider                  (CamelSession *session, CamelProvider *provider);
-CamelStore *       camel_session_get_store_for_protocol        (CamelSession *session,
-								const gchar *protocol,
-								CamelException *ex);
-CamelStore *       camel_session_get_store                     (CamelSession *session,
-								const char *url_string,
-								CamelException *ex);
-CamelTransport *   camel_session_get_transport_for_protocol    (CamelSession *session,
-								const char *protocol,
-								CamelException *ex);
-char *             camel_session_query_authenticator           (CamelSession *session, char *prompt,
-								gboolean secret,
-								CamelService *service, char *item,
-								CamelException *ex);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SESSION_H */
diff --git a/camel/camel-simple-data-wrapper-stream.c b/camel/camel-simple-data-wrapper-stream.c
deleted file mode 100644
index 5ee5363108..0000000000
--- a/camel/camel-simple-data-wrapper-stream.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* camel-simple-data-wrapper-stream.c
- *
- * Copyright 1999, 2000 HelixCode (http://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.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include 
-#endif
-
-#include "camel-simple-data-wrapper-stream.h"
-#include "camel-simple-data-wrapper.h"
-
-
-static CamelStreamClass *parent_class = NULL;
-
-
-/* CamelStream methods.  */
-
-static	gint 
-read (CamelStream *stream,
-      gchar *buffer,
-      gint n)
-{
-	CamelSimpleDataWrapperStream *wrapper_stream;
-	CamelSimpleDataWrapper *wrapper;
-	GByteArray *array;
-	gint len;
-
-	wrapper_stream = CAMEL_SIMPLE_DATA_WRAPPER_STREAM (stream);
-	wrapper = wrapper_stream->wrapper;
-	g_return_val_if_fail (wrapper != NULL, -1);
-	array = wrapper->byte_array;
-
-	len = MIN (n, array->len - wrapper_stream->current_position);
-	if (len > 0) {
-		memcpy (buffer, wrapper_stream->current_position + array->data, len);
-		wrapper_stream->current_position += len;
-		return len;
-	} else {
-		return 0;
-	}
-}
-
-static	gint 
-write (CamelStream *stream,
-       const gchar *buffer,
-       gint n)
-{
-	CamelSimpleDataWrapperStream *wrapper_stream;
-	CamelSimpleDataWrapper *wrapper;
-	GByteArray *array;
-	gint len;
-	const gchar *buffer_next;
-	gint left;
-
-	wrapper_stream = CAMEL_SIMPLE_DATA_WRAPPER_STREAM (stream);
-	wrapper = wrapper_stream->wrapper;
-	g_return_val_if_fail (wrapper != NULL, -1);
-	array = wrapper->byte_array;
-
-	len = MIN (n, array->len - wrapper_stream->current_position);
-	if (len > 0) {
-		memcpy (array->data, buffer, len);
-		buffer_next = buffer + len;
-		left = n - len;
-	} else {
-		/* If we are past the end of the array, fill with zeros.  */
-		if (wrapper_stream->current_position > array->len) {
-			gint saved_length;
-
-			saved_length = array->len;
-			g_byte_array_set_size
-				(array, wrapper_stream->current_position);
-			memset (array->data + saved_length,
-				0,
-				(wrapper_stream->current_position
-				 - saved_length));
-		}
-
-		buffer_next = buffer;
-		left = n;
-	}
-
-	if (n > 0)
-		g_byte_array_append (array, buffer_next, left);
-
-	wrapper_stream->current_position += n;
-	return n;
-}
-
-static void 
-flush (CamelStream *stream)
-{
-	/* No op, as we don't do any buffering.  */
-}
-
-static gint 
-available (CamelStream *stream)
-{
-	CamelSimpleDataWrapperStream *wrapper_stream;
-	CamelSimpleDataWrapper *wrapper;
-	GByteArray *array;
-	gint available;
-
-	wrapper_stream = CAMEL_SIMPLE_DATA_WRAPPER_STREAM (stream);
-	wrapper = wrapper_stream->wrapper;
-	g_return_val_if_fail (wrapper != NULL, -1);
-	array = wrapper->byte_array;
-
-	available = array->len - wrapper_stream->current_position;
-	return MAX (available, 0);
-}
-
-static gboolean
-eos (CamelStream *stream)
-{
-	if (available (stream) > 0)
-		return TRUE;
-	else
-		return FALSE;
-}
-
-static void 
-close (CamelStream *stream)
-{
-	/* Nothing to do, we have no associated file descriptor.  */
-}
-
-static gint
-seek (CamelSeekableStream *stream,
-      gint offset,
-      CamelStreamSeekPolicy policy)
-{
-	CamelSimpleDataWrapperStream *wrapper_stream;
-	gint new_position;
-
-	wrapper_stream = CAMEL_SIMPLE_DATA_WRAPPER_STREAM (stream);
-
-	switch (policy) {
-	case CAMEL_STREAM_SET:
-		new_position = offset;
-		break;
-	case CAMEL_STREAM_CUR:
-		new_position = wrapper_stream->current_position + offset;
-		break;
-	case CAMEL_STREAM_END:
-		new_position = wrapper_stream->wrapper->byte_array->len - offset;
-		break;
-	default:
-		g_warning ("Unknown CamelStreamSeekPolicy %d.", policy);
-		return -1;
-	}
-
-	if (new_position<0)
-		new_position = 0;
-	else if (new_position>=wrapper_stream->wrapper->byte_array->len)
-		new_position = wrapper_stream->wrapper->byte_array->len-1;
-
-	wrapper_stream->current_position = new_position;
-	return new_position;
-}
-
-
-/* This handles destruction of the associated CamelDataWrapper.  */
-/* Hm, this should never happen though, because we gtk_object_ref() the
-   wrapper.  */
-static void
-wrapper_destroy_cb (GtkObject *object,
-		    gpointer data)
-{
-	CamelSimpleDataWrapperStream *stream;
-
-	g_warning ("CamelSimpleDataWrapperStream: associated CamelSimpleDataWrapper was destroyed.");
-	stream = CAMEL_SIMPLE_DATA_WRAPPER_STREAM (object);
-	stream->wrapper = NULL;
-}
-
-
-/* GtkObject methods.  */
-
-static void
-destroy (GtkObject *object)
-{
-	CamelSimpleDataWrapperStream *stream;
-
-	stream = CAMEL_SIMPLE_DATA_WRAPPER_STREAM (object);
-
-	gtk_object_unref (GTK_OBJECT (stream->wrapper));
-
-	if (GTK_OBJECT_CLASS (parent_class)->destroy != NULL)
-		(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-
-static void
-class_init (CamelSimpleDataWrapperStreamClass *klass)
-{
-	GtkObjectClass *object_class;
-	CamelStreamClass *stream_class;
-	CamelSeekableStreamClass *seek_class;
-
-	object_class = (GtkObjectClass*) klass;
-	stream_class = (CamelStreamClass *)klass;
-	seek_class = (CamelSeekableStreamClass *)klass;
-
-	stream_class->read = read;
-	stream_class->write = write;
-	stream_class->flush = flush;
-	stream_class->available = available;
-	stream_class->eos = eos;
-	stream_class->close = close;
-
-	seek_class->seek = seek;
-
-	object_class->destroy = destroy;
-
-	parent_class = gtk_type_class (camel_stream_get_type ());
-}
-
-static void
-init (CamelSimpleDataWrapperStream *simple_data_wrapper_stream)
-{
-	simple_data_wrapper_stream->current_position = 0;
-}
-
-
-GtkType
-camel_simple_data_wrapper_stream_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (type == 0) {
-		static const GtkTypeInfo info = {
-			"CamelSimpleDataWrapperStream",
-			sizeof (CamelSimpleDataWrapperStream),
-			sizeof (CamelSimpleDataWrapperStreamClass),
-			(GtkClassInitFunc) class_init,
-			(GtkObjectInitFunc) init,
-			/* reserved_1 */ NULL,
-			/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		type = gtk_type_unique (camel_seekable_stream_get_type (), &info);
-	}
-
-	return type;
-}
-
-void
-camel_simple_data_wrapper_stream_construct (CamelSimpleDataWrapperStream *stream,
-					    CamelSimpleDataWrapper *wrapper)
-{
-	g_return_if_fail (stream != NULL);
-	g_return_if_fail (CAMEL_IS_SIMPLE_DATA_WRAPPER_STREAM (stream));
-	g_return_if_fail (wrapper != NULL);
-	g_return_if_fail (CAMEL_IS_SIMPLE_DATA_WRAPPER (wrapper));
-
-	gtk_object_ref (GTK_OBJECT (wrapper));
-	stream->wrapper = wrapper;
-#if 0
-	gtk_signal_connect (GTK_OBJECT (wrapper), "destroy",
-			    wrapper_destroy_cb, stream);
-#endif
-}
-
-CamelStream *
-camel_simple_data_wrapper_stream_new (CamelSimpleDataWrapper *wrapper)
-{
-	CamelStream *stream;
-
-	g_return_val_if_fail (wrapper != NULL, NULL);
-	g_return_val_if_fail (CAMEL_IS_SIMPLE_DATA_WRAPPER (wrapper), NULL);
-
-	stream = gtk_type_new (camel_simple_data_wrapper_stream_get_type ());
-
-	camel_simple_data_wrapper_stream_construct
-		(CAMEL_SIMPLE_DATA_WRAPPER_STREAM (stream), wrapper);
-
-	return stream;
-}
diff --git a/camel/camel-simple-data-wrapper-stream.h b/camel/camel-simple-data-wrapper-stream.h
deleted file mode 100644
index 23ba42df3e..0000000000
--- a/camel/camel-simple-data-wrapper-stream.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* camel-simple-data-wrapper-stream.h
- *
- * Copyright 1999, 2000 HelixCode (http://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.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __CAMEL_SIMPLE_DATA_WRAPPER_STREAM_H__
-#define __CAMEL_SIMPLE_DATA_WRAPPER_STREAM_H__
-
-#include 
-#include "camel-types.h"
-#include "camel-seekable-stream.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define CAMEL_TYPE_SIMPLE_DATA_WRAPPER_STREAM \
-	(camel_simple_data_wrapper_stream_get_type ())
-#define CAMEL_SIMPLE_DATA_WRAPPER_STREAM(obj) \
-	(GTK_CHECK_CAST ((obj), CAMEL_TYPE_SIMPLE_DATA_WRAPPER_STREAM, CamelSimpleDataWrapperStream))
-#define CAMEL_SIMPLE_DATA_WRAPPER_STREAM_CLASS(klass) \
-	(GTK_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_SIMPLE_DATA_WRAPPER_STREAM, CamelSimpleDataWrapperStreamClass))
-#define CAMEL_IS_SIMPLE_DATA_WRAPPER_STREAM(obj) \
-	(GTK_CHECK_TYPE ((obj), CAMEL_TYPE_SIMPLE_DATA_WRAPPER_STREAM))
-#define CAMEL_IS_SIMPLE_DATA_WRAPPER_STREAM_CLASS(klass) \
-	(GTK_CHECK_CLASS_TYPE ((obj), CAMEL_TYPE_SIMPLE_DATA_WRAPPER_STREAM))
-
-
-typedef struct _CamelSimpleDataWrapperStreamClass  CamelSimpleDataWrapperStreamClass;
-
-struct _CamelSimpleDataWrapperStream {
-	CamelSeekableStream parent;
-
-	CamelSimpleDataWrapper *wrapper;
-	gint current_position;
-};
-
-struct _CamelSimpleDataWrapperStreamClass {
-	CamelSeekableStreamClass parent_class;
-};
-
-
-GtkType camel_simple_data_wrapper_stream_get_type (void);
-CamelStream *camel_simple_data_wrapper_stream_new (CamelSimpleDataWrapper *wrapper);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __CAMEL_SIMPLE_DATA_WRAPPER_STREAM_H__ */
diff --git a/camel/camel-simple-data-wrapper.c b/camel/camel-simple-data-wrapper.c
deleted file mode 100644
index d368a4ddfd..0000000000
--- a/camel/camel-simple-data-wrapper.c
+++ /dev/null
@@ -1,358 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-simple-data-wrapper.c : simple implementation of a data wrapper */
-/* store the data in a glib byte array                                   */
-
-/*
- *
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-
-#include "camel-simple-data-wrapper.h"
-#include "camel-simple-data-wrapper-stream.h"
-#include 
-#include "camel-mime-utils.h"
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#define d(x)
-
-static CamelDataWrapperClass *parent_class = NULL;
-
-/* Returns the class for a CamelDataWrapper */
-#define CSDW_CLASS(so) CAMEL_SIMPLE_DATA_WRAPPER_CLASS (GTK_OBJECT (so)->klass)
-
-static void            construct_from_stream     (CamelDataWrapper *data_wrapper,
-						     CamelStream *stream);
-static void            write_to_stream           (CamelDataWrapper *data_wrapper,
-						     CamelStream *stream);
-static void            finalize                  (GtkObject *object);
-static CamelStream *   get_output_stream         (CamelDataWrapper *data_wrapper);
-static void construct_from_parser(CamelDataWrapper *dw, CamelMimeParser *mp);
-
-
-
-static void
-camel_simple_data_wrapper_class_init (CamelSimpleDataWrapperClass *camel_simple_data_wrapper_class)
-{
-	CamelDataWrapperClass *camel_data_wrapper_class =
-		CAMEL_DATA_WRAPPER_CLASS (camel_simple_data_wrapper_class);
-	GtkObjectClass *gtk_object_class =
-		GTK_OBJECT_CLASS (camel_data_wrapper_class);
-
-	parent_class = gtk_type_class (camel_data_wrapper_get_type ());
-
-
-	/* virtual method overload */
-	camel_data_wrapper_class->write_to_stream = write_to_stream;
-	camel_data_wrapper_class->construct_from_stream = construct_from_stream;
-	camel_data_wrapper_class->get_output_stream = get_output_stream;
-
-	camel_data_wrapper_class->construct_from_parser = construct_from_parser;
-
-	gtk_object_class->finalize = finalize;
-}
-
-
-static void
-camel_simple_data_wrapper_init (CamelSimpleDataWrapper *wrapper)
-{
-	wrapper->byte_array = NULL;
-	wrapper->has_byte_array_stream = FALSE;
-}
-
-
-GtkType
-camel_simple_data_wrapper_get_type (void)
-{
-	static GtkType camel_simple_data_wrapper_type = 0;
-
-	if (!camel_simple_data_wrapper_type) {
-		GtkTypeInfo camel_simple_data_wrapper_info =
-		{
-			"CamelSimpleDataWrapper",
-			sizeof (CamelSimpleDataWrapper),
-			sizeof (CamelSimpleDataWrapperClass),
-			(GtkClassInitFunc) camel_simple_data_wrapper_class_init,
-			(GtkObjectInitFunc) camel_simple_data_wrapper_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_simple_data_wrapper_type =
-			gtk_type_unique (camel_data_wrapper_get_type (),
-					 &camel_simple_data_wrapper_info);
-	}
-
-	return camel_simple_data_wrapper_type;
-}
-
-
-static void
-finalize (GtkObject *object)
-{
-	CamelSimpleDataWrapper *simple_data_wrapper =
-		CAMEL_SIMPLE_DATA_WRAPPER (object);
-
-	if (simple_data_wrapper->byte_array)
-		g_byte_array_free (simple_data_wrapper->byte_array, TRUE);
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-/**
- * camel_simple_data_wrapper_new:
- *
- * Return value: a new CamelSimpleDataWrapper object
- **/
-CamelSimpleDataWrapper *
-camel_simple_data_wrapper_new (void)
-{
-	return (CamelSimpleDataWrapper *)
-		gtk_type_new (CAMEL_SIMPLE_DATA_WRAPPER_TYPE);
-}
-
-
-static void
-write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelSimpleDataWrapper *simple_data_wrapper =
-		CAMEL_SIMPLE_DATA_WRAPPER (data_wrapper);
-	GByteArray *array;
-
-	array = simple_data_wrapper->byte_array;
-	if ( array && array->len)
-		camel_stream_write (stream, (gchar *)array->data, array->len);
-	else
-		parent_class->write_to_stream (data_wrapper, stream);
-}
-
-
-#define CMSDW_TMP_BUF_SIZE 100
-static void
-construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelSimpleDataWrapper *simple_data_wrapper =
-		CAMEL_SIMPLE_DATA_WRAPPER (data_wrapper);
-	gint nb_bytes_read;
-	static gchar *tmp_buf;
-	GByteArray *array;
-
-	if (!tmp_buf)
-		tmp_buf = g_new (gchar, CMSDW_TMP_BUF_SIZE);
-
-	array = simple_data_wrapper->byte_array;
-	if (array)
-		g_byte_array_free (array, FALSE);
-
-	array = g_byte_array_new ();
-	simple_data_wrapper->byte_array = array;
-	nb_bytes_read = camel_stream_read (stream, tmp_buf, CMSDW_TMP_BUF_SIZE);
-	while (nb_bytes_read > 0) {
-		if (nb_bytes_read > 0)
-			g_byte_array_append (array, tmp_buf, nb_bytes_read);
-		nb_bytes_read = camel_stream_read (stream, tmp_buf,
-						   CMSDW_TMP_BUF_SIZE);
-	};
-}
-
-
-
-
-/**
- * camel_simple_data_wrapper_set_text: set some text as data wrapper content
- * @simple_data_wrapper: SimpleDataWrapper object
- * @text: the text to use
- *
- * Utility routine used to set up the content of a SimpleDataWrapper object
- * to be a character string.
- **/
-void
-camel_simple_data_wrapper_set_text (CamelSimpleDataWrapper *simple_data_wrapper, const gchar *text)
-{
-	GByteArray *array;
-
-	array = simple_data_wrapper->byte_array;
-	if (array)
-		g_byte_array_free (array, FALSE);
-
-	array = g_byte_array_new ();
-	simple_data_wrapper->byte_array = array;
-
-	g_byte_array_append (array, text, strlen (text));
-}
-
-
-static CamelStream *
-get_output_stream (CamelDataWrapper *data_wrapper)
-{
-	CamelSimpleDataWrapper *simple_data_wrapper;
-	CamelStream *output_stream = NULL;
-
-	simple_data_wrapper = CAMEL_SIMPLE_DATA_WRAPPER (data_wrapper);
-
-	if (simple_data_wrapper->byte_array &&
-	    !(simple_data_wrapper->has_byte_array_stream)) {
-		output_stream = camel_simple_data_wrapper_stream_new (simple_data_wrapper);
-		camel_data_wrapper_set_output_stream (data_wrapper, output_stream);
-	}
-
-	return parent_class->get_output_stream (data_wrapper);
-}
-
-/* simple data wrapper */
-static void
-construct_from_parser(CamelDataWrapper *dw, CamelMimeParser *mp)
-{
-	GByteArray *buffer;
-	char *buf;
-	int len;
-	off_t start, end;
-	CamelMimeFilter *fdec = NULL, *fch = NULL;
-	struct _header_content_type *ct;
-	int decid=-1, chrid=-1, cache=FALSE;
-	CamelStream *source;
-	char *encoding;
-
-	d(printf("constructing simple-data-wrapper\n"));
-
-		/* Ok, try and be smart.  If we're storing a small message (typical) convert it,
-		   and store it in memory as we parse it ... if not, throw away the conversion
-		   and scan till the end ... */
-
-		/* if we can't seek, dont have a stream/etc, then we must cache it */
-	source = camel_mime_parser_stream(mp);
-	gtk_object_ref((GtkObject *)source);
-	if (source == NULL
-	    || !CAMEL_IS_SEEKABLE_STREAM(source))
-		cache = TRUE;
-
-	/* first, work out conversion, if any, required, we dont care about what we dont know about */
-	encoding = header_content_encoding_decode(camel_mime_parser_header(mp, "content-transfer-encoding", NULL));
-	if (encoding) {
-		if (!strcasecmp(encoding, "base64")) {
-			d(printf("Adding base64 decoder ...\n"));
-			fdec = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_BASE64_DEC);
-			decid = camel_mime_parser_filter_add(mp, fdec);
-		} else if (!strcasecmp(encoding, "quoted-printable")) {
-			d(printf("Adding quoted-printable decoder ...\n"));
-			fdec = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_QP_DEC);
-			decid = camel_mime_parser_filter_add(mp, fdec);
-		}
-		g_free(encoding);
-	}
-
-	/* if we're doing text, then see if we have to convert it to UTF8 as well */
-	ct = camel_mime_parser_content_type(mp);
-	if (header_content_type_is(ct, "text", "*")) {
-		const char *charset = header_content_type_param(ct, "charset");
-		if (charset!=NULL
-		    && !(strcasecmp(charset, "us-ascii")==0
-			 || strcasecmp(charset, "utf-8")==0)) {
-			d(printf("Adding conversion filter from %s to utf-8\n", charset));
-			fch = (CamelMimeFilter *)camel_mime_filter_charset_new_convert(charset, "utf-8");
-			if (fch) {
-				chrid = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)fch);
-			} else {
-				g_warning("Cannot convert '%s' to 'utf-8', message display may be corrupt", charset);
-			}
-		}
-
-	}
-
-	buffer = g_byte_array_new();
-
-		/* write to a memory buffer or something??? */
-	start = camel_mime_parser_tell(mp);
-	while ( camel_mime_parser_step(mp, &buf, &len) != HSCAN_BODY_END ) {
-		if (buffer) {
-			if (buffer->len > 20480 && !cache) {
-				/* is this a 'big' message?  Yes?  We dont want to convert it all then.*/
-				camel_mime_parser_filter_remove(mp, decid);
-				camel_mime_parser_filter_remove(mp, chrid);
-				decid = -1;
-				chrid = -1;
-				g_byte_array_free(buffer, TRUE);
-				buffer = NULL;
-			} else {
-				g_byte_array_append(buffer, buf, len);
-			}
-		}
-	}
-
-	if (buffer) {
-		CamelStream *mem;
-		d(printf("Small message part, kept in memory!\n"));
-		mem = camel_stream_mem_new_with_byte_array(buffer, CAMEL_STREAM_MEM_READ);
-		camel_data_wrapper_set_output_stream (dw, mem);
-	} else {
-		CamelSeekableSubstream *sub;
-		CamelStreamFilter *filter;
-
-		d(printf("Big message part, left on disk ...\n"));
-
-		end = camel_mime_parser_tell(mp);
-		sub = (CamelSeekableSubstream *)camel_seekable_substream_new_with_seekable_stream_and_bounds ((CamelSeekableStream *)source, start, end);
-		if (fdec || fch) {
-			filter = camel_stream_filter_new_with_stream((CamelStream *)sub);
-			if (fdec) {
-				camel_mime_filter_reset(fdec);
-				camel_stream_filter_add(filter, fdec);
-			}
-			if (fch) {
-				camel_mime_filter_reset(fdec);
-				camel_stream_filter_add(filter, fch);
-			}
-			camel_data_wrapper_set_output_stream (dw, (CamelStream *)filter);
-		} else {
-			camel_data_wrapper_set_output_stream (dw, (CamelStream *)sub);
-		}
-	}
-
-	camel_mime_parser_filter_remove(mp, decid);
-	camel_mime_parser_filter_remove(mp, chrid);
-
-	if (fdec)
-		gtk_object_unref((GtkObject *)fdec);
-	if (fch)
-		gtk_object_unref((GtkObject *)fch);
-	gtk_object_unref((GtkObject *)source);
-
-	/* FIXME: lookup in headers for content-type/encoding */
-#if 0
-	/* trivial, mem-based ... */
-	buffer = g_byte_array_new();
-	start = camel_mime_parser_tell(mp);
-	while ( camel_mime_parser_step(mp, &buf, &len) != HSCAN_BODY_END ) {
-		g_byte_array_append(buffer, buf, len);
-	}
-	end = camel_mime_parser_tell(mp);
-	mem = camel_stream_mem_new_with_byte_array(buffer, CAMEL_STREAM_MEM_READ);
-	camel_data_wrapper_set_output_stream (dw, mem);
-#endif
-}
diff --git a/camel/camel-simple-data-wrapper.h b/camel/camel-simple-data-wrapper.h
deleted file mode 100644
index a16d1373a1..0000000000
--- a/camel/camel-simple-data-wrapper.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-simple-data-wrapper.c : simple implementation of a data wrapper */
-/* store the data in a glib byte array                                   */
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_SIMPLE_DATA_WRAPPER_H
-#define CAMEL_SIMPLE_DATA_WRAPPER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-data-wrapper.h"
-
-#define CAMEL_SIMPLE_DATA_WRAPPER_TYPE     (camel_simple_data_wrapper_get_type ())
-#define CAMEL_SIMPLE_DATA_WRAPPER(obj)     (GTK_CHECK_CAST((obj), CAMEL_SIMPLE_DATA_WRAPPER_TYPE, CamelSimpleDataWrapper))
-#define CAMEL_SIMPLE_DATA_WRAPPER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_SIMPLE_DATA_WRAPPER_TYPE, CamelSimpleDataWrapperClass))
-#define CAMEL_IS_SIMPLE_DATA_WRAPPER(o)    (GTK_CHECK_TYPE((o), CAMEL_SIMPLE_DATA_WRAPPER_TYPE))
-
-
-struct _CamelSimpleDataWrapper
-{
-	CamelDataWrapper parent_object;
-
-	GByteArray *byte_array;
-	gboolean has_byte_array_stream;
-};
-
-
-
-typedef struct {
-	CamelDataWrapperClass parent_class;
-
-} CamelSimpleDataWrapperClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_simple_data_wrapper_get_type (void);
-
-
-/* public methods */
-
-CamelSimpleDataWrapper *camel_simple_data_wrapper_new (void);
-void camel_simple_data_wrapper_set_text (CamelSimpleDataWrapper *simple_data_wrapper, const gchar *text);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SIMPLE_DATA_WRAPPER_H */
diff --git a/camel/camel-store.c b/camel/camel-store.c
deleted file mode 100644
index a303920c4e..0000000000
--- a/camel/camel-store.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-store.c : Abstract class for an email store */
-
-/* 
- *
- * Authors:
- *  Bertrand Guiheneuf 
- *  Dan Winship 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-store.h"
-#include "camel-folder.h"
-#include "camel-exception.h"
-
-static CamelServiceClass *parent_class = NULL;
-
-/* Returns the class for a CamelStore */
-#define CS_CLASS(so) CAMEL_STORE_CLASS (GTK_OBJECT(so)->klass)
-
-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 char *get_root_folder_name (CamelStore *store, CamelException *ex);
-static char *get_default_folder_name (CamelStore *store, CamelException *ex);
-
-static CamelFolder *lookup_folder (CamelStore *store, const char *folder_name);
-static void cache_folder (CamelStore *store, const char *folder_name,
-			  CamelFolder *folder);
-static void uncache_folder (CamelStore *store, CamelFolder *folder);
-
-static void finalize (GtkObject *object);
-
-static void
-camel_store_class_init (CamelStoreClass *camel_store_class)
-{
-	GtkObjectClass *gtk_object_class =
-		GTK_OBJECT_CLASS (camel_store_class);
-
-	parent_class = gtk_type_class (camel_service_get_type ());
-
-	/* virtual method definition */
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->get_folder_name = get_folder_name;
-	camel_store_class->get_root_folder_name = get_root_folder_name;
-	camel_store_class->get_default_folder_name = get_default_folder_name;
-	camel_store_class->lookup_folder = lookup_folder;
-	camel_store_class->cache_folder = cache_folder;
-	camel_store_class->uncache_folder = uncache_folder;
-
-	/* virtual method override */
-	gtk_object_class->finalize = finalize;
-}
-
-
-GtkType
-camel_store_get_type (void)
-{
-	static GtkType camel_store_type = 0;
-
-	if (!camel_store_type) {
-		GtkTypeInfo camel_store_info =
-		{
-			"CamelStore",
-			sizeof (CamelStore),
-			sizeof (CamelStoreClass),
-			(GtkClassInitFunc) camel_store_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_store_type = gtk_type_unique (CAMEL_SERVICE_TYPE, &camel_store_info);
-	}
-
-	return camel_store_type;
-}
-
-
-static void
-finalize (GtkObject *object)
-{
-	CamelStore *store = CAMEL_STORE (object);
-
-	if (store->folders) {
-		if (g_hash_table_size (store->folders) != 0) {
-			g_warning ("Folder cache for store %p contains "
-				   "%d folders at destruction.", store,
-				   g_hash_table_size (store->folders));
-		}
-		g_hash_table_destroy (store->folders);
-	}
-}
-
-
-static CamelFolder *
-get_folder (CamelStore *store, const char *folder_name, CamelException *ex)
-{
-	g_warning ("CamelStore::get_folder not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (store)));
-	return NULL;
-}
-
-static char *
-get_folder_name (CamelStore *store, const char *folder_name,
-		 CamelException *ex)
-{
-	g_warning ("CamelStore::get_folder_name not implemented for `%s'",
-		   gtk_type_name (GTK_OBJECT_TYPE (store)));
-	return NULL;
-}
-
-static char *
-get_root_folder_name (CamelStore *store, CamelException *ex)
-{
-	return g_strdup ("/");
-}
-
-static char *
-get_default_folder_name (CamelStore *store, CamelException *ex)
-{
-	return CS_CLASS (store)->get_root_folder_name (store, ex);
-}
-
-static CamelFolder *
-lookup_folder (CamelStore *store, const char *folder_name)
-{
-	if (store->folders)
-		return g_hash_table_lookup (store->folders, folder_name);
-	return NULL;
-}
-
-static void
-cache_folder (CamelStore *store, const char *folder_name, CamelFolder *folder)
-{
-	if (!store->folders)
-		return;
-
-	if (g_hash_table_lookup (store->folders, folder_name)) {
-		g_warning ("Caching folder %s that already exists.",
-			   folder_name);
-	}
-	g_hash_table_insert (store->folders, (gpointer)folder_name, folder);
-	gtk_signal_connect_object (GTK_OBJECT (folder), "destroy",
-				   GTK_SIGNAL_FUNC (CS_CLASS (store)->uncache_folder),
-				   GTK_OBJECT (store));
-}
-
-static void
-uncache_folder (CamelStore *store, CamelFolder *folder)
-{
-	g_hash_table_remove (store->folders,
-			     camel_folder_get_full_name (folder));
-}
-
-
-static CamelFolder *
-get_folder_internal (CamelStore *store, const char *folder_name,
-		     CamelException *ex)
-{
-	CamelFolder *folder = NULL;
-
-	/* Try cache first. */
-	folder = CS_CLASS (store)->lookup_folder (store, folder_name);
-
-	if (!folder) {
-		folder = CS_CLASS (store)->get_folder (store, folder_name, ex);
-		if (!folder)
-			return NULL;
-
-		CS_CLASS (store)->cache_folder (store, folder_name, folder);
-	}
-
-	gtk_object_ref (GTK_OBJECT (folder));
-	return folder;
-}
-
-
-
-/** 
- * camel_store_get_folder: Return the folder corresponding to a path.
- * @store: a CamelStore
- * @folder_name: name of the folder to get
- * @ex: a CamelException
- * 
- * Returns the folder corresponding to the path "name". If the path
- * begins with the separator character, it is relative to the root
- * folder. Otherwise, it is relative to the default folder. The folder
- * does not necessarily already exist on the store. To test if it
- * already exists, use its "exists" method. If it does not exist, you
- * can create it with its "create" method.
- *
- * Return value: the folder
- **/
-CamelFolder *
-camel_store_get_folder (CamelStore *store, const char *folder_name,
-			CamelException *ex)
-{
-	char *name;
-	CamelFolder *folder = NULL;
-
-	name = CS_CLASS (store)->get_folder_name (store, folder_name, ex);
-	if (name) {
-		folder = get_folder_internal (store, name, ex);
-		g_free (name);
-	}
-	return folder;
-}
-
-
-/**
- * camel_store_get_root_folder: return the top-level folder
- * 
- * Returns the folder which is at the top of the folder hierarchy.
- * This folder may or may not be the same as the default folder.
- * 
- * Return value: the top-level folder.
- **/
-CamelFolder *
-camel_store_get_root_folder (CamelStore *store, CamelException *ex)
-{
-	char *name;
-	CamelFolder *folder = NULL;
-
-	name = CS_CLASS (store)->get_root_folder_name (store, ex);
-	if (name) {
-		folder = get_folder_internal (store, name, ex);
-		g_free (name);
-	}
-	return folder;
-}
-
-/** 
- * camel_store_get_default_folder: return the store default folder
- *
- * The default folder is the folder which is presented to the user in
- * the default configuration. This defaults to the root folder if
- * the store doesn't override it.
- *
- * Return value: the default folder.
- **/
-CamelFolder *
-camel_store_get_default_folder (CamelStore *store, CamelException *ex)
-{
-	char *name;
-	CamelFolder *folder = NULL;
-
-	name = CS_CLASS (store)->get_default_folder_name (store, ex);
-	if (name) {
-		folder = get_folder_internal (store, name, ex);
-		g_free (name);
-	}
-	return folder;
-}
-
diff --git a/camel/camel-store.h b/camel/camel-store.h
deleted file mode 100644
index d66e6344b5..0000000000
--- a/camel/camel-store.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-store.h : Abstract class for an email store */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_STORE_H
-#define CAMEL_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-service.h"
-
-#define CAMEL_STORE_TYPE     (camel_store_get_type ())
-#define CAMEL_STORE(obj)     (GTK_CHECK_CAST((obj), CAMEL_STORE_TYPE, CamelStore))
-#define CAMEL_STORE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_STORE_TYPE, CamelStoreClass))
-#define CAMEL_IS_STORE(o)    (GTK_CHECK_TYPE((o), CAMEL_STORE_TYPE))
-
-
-struct _CamelStore
-{
-	CamelService parent_object;
-
-	GHashTable *folders;
-
-};
-
-
-
-typedef struct {
-	CamelServiceClass parent_class;
-
-	CamelFolder *   (*get_folder)               (CamelStore *store,
-						     const char *folder_name,
-						     CamelException *ex);
-
-	char *          (*get_folder_name)          (CamelStore *store,
-						     const char *folder_name,
-						     CamelException *ex);
-	char *          (*get_root_folder_name)     (CamelStore *store,
-						     CamelException *ex);
-	char *          (*get_default_folder_name)  (CamelStore *store,
-						     CamelException *ex);
-
-        CamelFolder *   (*lookup_folder)            (CamelStore *store,
-						     const char *folder_name);
-	void            (*cache_folder)             (CamelStore *store,
-						     const char *folder_name,
-						     CamelFolder *folder);
-        void            (*uncache_folder)           (CamelStore *store,
-						     CamelFolder *folder);
-
-} CamelStoreClass;
-
-
-/* Standard Gtk function */
-GtkType camel_store_get_type (void);
-
-/* public methods */
-CamelFolder *    camel_store_get_folder         (CamelStore *store,
-					         const char *folder_name,
-					         CamelException *ex);
-CamelFolder *    camel_store_get_root_folder    (CamelStore *store,
-					         CamelException *ex);
-CamelFolder *    camel_store_get_default_folder (CamelStore *store,
-						 CamelException *ex);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STORE_H */
diff --git a/camel/camel-stream-buffer.c b/camel/camel-stream-buffer.c
deleted file mode 100644
index cd394e3f81..0000000000
--- a/camel/camel-stream-buffer.c
+++ /dev/null
@@ -1,487 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* camel-stream-buffer.c : Buffer any other other stream */
-
-/* 
- *
- * Author : 
- *  Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-stream-buffer.h"
-#include 
-#include 
-#include 
-#include 
-
-static CamelStreamBufferClass *parent_class=NULL;
-
-enum {
-	BUF_USER = 1<<0,	/* user-supplied buffer, do not free */
-};
-
-#define BUF_SIZE 1024
-
-static gint _read (CamelStream *stream, gchar *buffer, gint n);
-static gint _write (CamelStream *stream, const gchar *buffer, gint n);
-static void _flush (CamelStream *stream);
-static gint _available (CamelStream *stream);
-static gboolean _eos (CamelStream *stream);
-static void _close (CamelStream *stream);
-
-static void _finalize (GtkObject *object);
-static void _destroy (GtkObject *object);
-
-static void _init_vbuf(CamelStreamBuffer *sbf, CamelStream *s, CamelStreamBufferMode mode, char *buf, guint32 size);
-static void _init(CamelStreamBuffer *sbuf, CamelStream *s, CamelStreamBufferMode mode);
-
-static void
-camel_stream_buffer_class_init (CamelStreamBufferClass *camel_stream_buffer_class)
-{
-	CamelStreamClass *camel_stream_class = CAMEL_STREAM_CLASS (camel_stream_buffer_class);
-	GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_stream_buffer_class);
-
-	parent_class = gtk_type_class (camel_stream_get_type ());
-	
-	/* virtual method definition */
-	camel_stream_buffer_class->init = _init;
-	camel_stream_buffer_class->init_vbuf = _init_vbuf;
-
-	/* virtual method overload */
-	camel_stream_class->read = _read;
-	camel_stream_class->write = _write;
-	camel_stream_class->flush = _flush;
-	camel_stream_class->available = _available;
-	camel_stream_class->eos = _eos;
-	camel_stream_class->close = _close;
-
-	gtk_object_class->finalize = _finalize;
-	gtk_object_class->destroy = _destroy;
-
-}
-
-static void
-camel_stream_buffer_init (gpointer   object,  gpointer   klass)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (object);
-
-	sbf->flags = 0;
-	sbf->size = BUF_SIZE;
-	sbf->buf = g_malloc(BUF_SIZE);
-	sbf->ptr = sbf->buf;
-	sbf->end = sbf->buf;
-	sbf->mode = CAMEL_STREAM_BUFFER_READ | CAMEL_STREAM_BUFFER_BUFFER;
-	sbf->stream = 0;
-}
-
-GtkType
-camel_stream_buffer_get_type (void)
-{
-	static GtkType camel_stream_buffer_type = 0;
-	
-	gdk_threads_enter ();
-	if (!camel_stream_buffer_type)	{
-		GtkTypeInfo camel_stream_buffer_info =	
-		{
-			"CamelStreamBuffer",
-			sizeof (CamelStreamBuffer),
-			sizeof (CamelStreamBufferClass),
-			(GtkClassInitFunc) camel_stream_buffer_class_init,
-			(GtkObjectInitFunc) camel_stream_buffer_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_stream_buffer_type = gtk_type_unique (camel_stream_get_type (), &camel_stream_buffer_info);
-	}
-	gdk_threads_leave ();
-	return camel_stream_buffer_type;
-}
-
-
-static void           
-_destroy (GtkObject *object)
-{
-	CamelStreamBuffer *stream_buffer = CAMEL_STREAM_BUFFER (object);
-	
-	/* NOP to remove warnings */
-	stream_buffer->buf = stream_buffer->buf;
-	
-	GTK_OBJECT_CLASS (parent_class)->destroy (object);
-}
-
-
-static void           
-_finalize (GtkObject *object)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (object);
-
-	if (!(sbf->flags & BUF_USER)) {
-		g_free(sbf->buf);
-	}
-	if (sbf->stream)
-		gtk_object_unref(GTK_OBJECT(sbf->stream));
-	
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-_set_vbuf(CamelStreamBuffer *sbf, char *buf, CamelStreamBufferMode mode, int size)
-{
-	if (sbf->buf && !(sbf->flags & BUF_USER)) {
-		g_free(sbf->buf);
-	}
-	if (buf) {
-		sbf->buf = buf;
-		sbf->flags |= BUF_USER;
-	} else {
-		sbf->buf = g_malloc(size);
-		sbf->flags &= ~BUF_USER;
-	}
-	sbf->size = size;
-	sbf->mode = mode;
-}
-
-static void
-_init_vbuf(CamelStreamBuffer *sbf, CamelStream *s, CamelStreamBufferMode mode, char *buf, guint32 size)
-{
-	_set_vbuf(sbf, buf, mode, size);
-	if (sbf->stream)
-		gtk_object_unref(GTK_OBJECT(sbf->stream));
-	sbf->stream = s;
-}
-
-static void
-_init(CamelStreamBuffer *sbuf, CamelStream *s, CamelStreamBufferMode mode)
-{
-	_init_vbuf(sbuf, s, mode, NULL, BUF_SIZE);
-}
-
-
-/**
- * camel_stream_buffer_new:
- * @stream: Existing stream to buffer.
- * @mode: Operational mode of buffered stream.
- * 
- * Create a new buffered stream of another stream.  A default
- * buffer size (1024 bytes), automatically managed will be used
- * for buffering.
- *
- * See camel_stream_buffer_new_with_vbuf() for details on the
- * @mode parameter.
- * 
- * Return value: A newly created buffered stream.
- **/
-CamelStream *
-camel_stream_buffer_new (CamelStream *stream, CamelStreamBufferMode mode)
-{
-	CamelStreamBuffer *sbf;
-	sbf = gtk_type_new (camel_stream_buffer_get_type ());
-	CAMEL_STREAM_BUFFER_CLASS (GTK_OBJECT(sbf)->klass)->init (sbf, stream, mode);
-	
-	return CAMEL_STREAM (sbf);
-}
-
-/**
- * camel_stream_buffer_new_with_vbuf:
- * @stream: An existing stream to buffer.
- * @mode: Mode to buffer in.
- * @buf: Memory to use for buffering.
- * @size: Size of buffer to use.
- * 
- * Create a new stream which buffers another stream, @stream.
- *
- * The following values are available for @mode:
- *
- * CAMEL_STREAM_BUFFER_BUFFER, Buffer the input/output in blocks.
- * CAMEL_STREAM_BUFFER_NEWLINE, Buffer on newlines (for output).
- * CAMEL_STREAM_BUFFER_NONE, Perform no buffering.
- *
- * Note that currently this is ignored and CAMEL_STREAM_BUFFER_BUFFER
- * is always used.
- *
- * In addition, one of the following mode options should be or'd
- * together with the buffering mode:
- *
- * CAMEL_STREAM_BUFFER_WRITE, Buffer in write mode.
- * CAMEL_STREAM_BUFFER_READ, Buffer in read mode.
- * 
- * Buffering can only be done in one direction for any
- * buffer instance.
- * 
- * If @buf is non-NULL, then use the memory pointed to
- * (for upto @size bytes) as the buffer for all buffering
- * operations.  It is upto the application to free this buffer.
- * If @buf is NULL, then allocate and manage @size bytes
- * for all buffering.
- *
- * Return value: A new stream with buffering applied.
- **/
-CamelStream *camel_stream_buffer_new_with_vbuf (CamelStream *stream, CamelStreamBufferMode mode, char *buf, guint32 size)
-{
-	CamelStreamBuffer *sbf;
-	sbf = gtk_type_new (camel_stream_buffer_get_type ());
-	CAMEL_STREAM_BUFFER_CLASS (GTK_OBJECT(sbf)->klass)->init_vbuf (sbf, stream, mode, buf, size);
-	
-	return CAMEL_STREAM (sbf);	
-}
-
-/**
- * _read: read bytes from a stream
- * @stream: stream
- * @buffer: buffer where bytes are stored
- * @n: max number of bytes to read
- * 
- * 
- * 
- * Return value: number of bytes actually read.
- **/
-static gint
-_read (CamelStream *stream, gchar *buffer, gint n)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-	int bytes_read=1;
-	int bytes_left;
-	gchar *bptr = buffer;
-
-	g_return_val_if_fail( (sbf->mode & CAMEL_STREAM_BUFFER_MODE) == CAMEL_STREAM_BUFFER_READ, 0);
-
-	while (n && bytes_read>0) {
-		bytes_left = sbf->end - sbf->ptr;
-		if (bytes_left0) {
-				memcpy(bptr, sbf->ptr, bytes_left);
-				n -= bytes_left;
-				bptr += bytes_left;
-				sbf->ptr += bytes_left;
-			}
-			/* if we are reading a lot, then read directly to the destination buffer */
-			if (n >= sbf->size/3) {
-				bytes_read = camel_stream_read(sbf->stream, bptr, n);
-				if (bytes_read>0) {
-					n -= bytes_read;
-					bptr += bytes_read;
-				}
-			} else {
-				bytes_read = camel_stream_read(sbf->stream, sbf->buf, sbf->size);
-				if (bytes_read>0) {
-					sbf->ptr = sbf->buf;
-					sbf->end = sbf->buf+bytes_read;
-					memcpy(bptr, sbf->ptr, n);
-					sbf->ptr += n;
-					bptr += n;
-					n -= bytes_read;
-				}
-			}
-		} else {
-			memcpy(bptr, sbf->ptr, bytes_left);
-			sbf->ptr += n;
-			bptr += n;
-			n = 0;
-		}
-	}
-
-	return bptr-buffer;
-}
-
-
-static gint
-_write (CamelStream *stream, const gchar *buffer, gint n)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-	const gchar *bptr = buffer;
-	int bytes_written = 1;
-	int bytes_left;
-
-	g_return_val_if_fail( (sbf->mode & CAMEL_STREAM_BUFFER_MODE) == CAMEL_STREAM_BUFFER_WRITE, 0);
-
-	while (n && bytes_written > 0) {
-		bytes_left = sbf->size - (sbf->ptr-sbf->buf);
-		if (bytes_leftptr, bptr, bytes_left);
-			n -= bytes_left;
-			bptr += bytes_left;
-			bytes_written = camel_stream_write(sbf->stream, sbf->buf, sbf->size);
-			sbf->ptr = sbf->buf;
-			/* if we are writing a lot, write directly to the stream */
-			if (n >= sbf->size/3) {
-				bytes_written = camel_stream_write(sbf->stream, bptr, n);
-				bytes_written = n;
-				n -= bytes_written;
-				bptr += bytes_written;
-			} else {
-				memcpy(sbf->ptr, bptr, n);
-				sbf->ptr += n;
-				bptr += n;
-				n = 0;
-			}
-		} else {
-			memcpy(sbf->ptr, bptr, n);
-			sbf->ptr += n;
-			bptr += n;
-			n = 0;
-		}
-	}
-	return 0;
-}
-
-
-
-static void
-_flush (CamelStream *stream)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-
-	if ((sbf->mode & CAMEL_STREAM_BUFFER_MODE) == CAMEL_STREAM_BUFFER_WRITE) {
-		int written = camel_stream_write(sbf->stream, sbf->buf, sbf->ptr-sbf->buf);
-		if (written > 0) {
-			sbf->ptr += written;
-		}
-	} else {
-		/* nothing to do for read mode 'flush' */
-	}
-
-	camel_stream_flush(sbf->stream);
-}
-
-
-
-static gint 
-_available (CamelStream *stream)
-{
-	/* unimplemented */
-	return 0;
-}
-
-
-static gboolean
-_eos (CamelStream *stream)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-
-	return camel_stream_eos(sbf->stream);
-}
-
-static void
-_close (CamelStream *stream)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-
-	_flush(stream);
-	camel_stream_close(sbf->stream);
-}
-
-/**
- * camel_stream_buffer_gets:
- * @sbf: A CamelStreamBuffer.
- * @buf: Memory to write the string to.
- * @max: Maxmimum number of characters to store.
- * 
- * Read a line of characters up to the next newline character or
- * @max characters.
- *
- * If the newline character is encountered, then it will be
- * included in the buffer @buf.  The buffer will be #NUL terminated.
- * 
- * Return value: The number of characters read, or 0 for end of file or
- * file error.
- **/
-int camel_stream_buffer_gets(CamelStreamBuffer *sbf, char *buf, int max)
-{
-	register char *outptr, *inptr, *inend, c, *outend;
-	int bytes_read;
-
-	outptr = buf;
-	inptr = sbf->ptr;
-	inend = sbf->end;
-	outend = buf+max-1;	/* room for NUL */
-
-	do {
-		while (inptrptr = inptr;
-				return outptr-buf;
-			}
-		}
-		if (outptr == outend)
-			break;
-
-		bytes_read = camel_stream_read(sbf->stream, sbf->buf, sbf->size);
-		if (bytes_read>0) {
-			inptr = sbf->ptr = sbf->buf;
-			inend = sbf->end = sbf->buf + bytes_read;
-		}
-	} while (bytes_read>0);
-
-	sbf->ptr = inptr;
-	if (outptr<=outend)
-		*outptr = 0;
-
-	return outptr-buf;
-}
-
-/**
- * camel_stream_buffer_read_line: read a complete line from the stream
- * @sbf: A CamelStreamBuffer
- *
- * This function reads a complete newline-terminated line from the stream
- * and returns it in allocated memory. The trailing newline (and carriage
- * return if any) are not included in the returned string.
- *
- * Return value: the line read, which the caller must free when done with,
- * or NULL on eof or error.
- **/
-char *
-camel_stream_buffer_read_line (CamelStreamBuffer *sbf)
-{
-	char *buf, *p;
-	int bufsiz, nread;
-
-	bufsiz = 80;
-	p = buf = g_malloc (bufsiz);
-
-	while (1) {
-		nread = camel_stream_buffer_gets (sbf, p, bufsiz - (p - buf));
-		if (nread == 0) {
-			g_free (buf);
-			return NULL;
-		}
-
-		p += nread;
-		if (*(p - 1) == '\n')
-			break;
-
-		nread = p - buf;
-		bufsiz *= 2;
-		buf = g_realloc (buf, bufsiz);
-		p = buf + nread;
-	}
-
-	*--p = '\0';
-	if (*(p - 1) == '\r')
-		*--p = '\0';
-	return buf;
-}
diff --git a/camel/camel-stream-buffer.h b/camel/camel-stream-buffer.h
deleted file mode 100644
index 967c33e553..0000000000
--- a/camel/camel-stream-buffer.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-buffer.h :stream which buffers another stream */
-
-/* 
- *
- * Author : 
- *  Michael Zucchi 
- *
- * Copyright 2000 Helix Code Inc. (http://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_STREAM_BUFFER_H
-#define CAMEL_STREAM_BUFFER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include "camel-seekable-stream.h"
-
-#define CAMEL_STREAM_BUFFER_TYPE     (camel_stream_buffer_get_type ())
-#define CAMEL_STREAM_BUFFER(obj)     (GTK_CHECK_CAST((obj), CAMEL_STREAM_BUFFER_TYPE, CamelStreamBuffer))
-#define CAMEL_STREAM_BUFFER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_STREAM_BUFFER_TYPE, CamelStreamBufferClass))
-#define CAMEL_IS_STREAM_BUFFER(o)    (GTK_CHECK_TYPE((o), CAMEL_STREAM_BUFFER_TYPE))
-
-typedef enum 
-{
-	CAMEL_STREAM_BUFFER_BUFFER = 0,
-	CAMEL_STREAM_BUFFER_NEWLINE,
-	CAMEL_STREAM_BUFFER_NONE,
-	CAMEL_STREAM_BUFFER_READ = 0x00,
-	CAMEL_STREAM_BUFFER_WRITE = 0x80,
-	CAMEL_STREAM_BUFFER_MODE = 0x80
-} CamelStreamBufferMode;
-
-struct _CamelStreamBuffer
-{
-	CamelStream parent_object;
-
-	/* these are all of course, private */
-	CamelStream *stream;
-
-	unsigned char *buf,
-		*ptr,
-		*end;
-	int size;
-
-	CamelStreamBufferMode mode;
-	unsigned int flags;	/* internal flags */
-};
-
-
-
-typedef struct {
-	CamelStreamClass parent_class;
-	
-	/* Virtual methods */	
-	void (*init) (CamelStreamBuffer *stream_buffer, CamelStream *stream, CamelStreamBufferMode mode);
-	void (*init_vbuf) (CamelStreamBuffer *stream_buffer, CamelStream *stream, CamelStreamBufferMode mode, char *buf, guint32 size);
-
-} CamelStreamBufferClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_stream_buffer_get_type (void);
-
-
-/* public methods */
-CamelStream *camel_stream_buffer_new (CamelStream *s, CamelStreamBufferMode mode);
-CamelStream *camel_stream_buffer_new_with_vbuf (CamelStream *s, CamelStreamBufferMode mode, char *buf, guint32 size);
-
-CamelStream *camel_stream_buffer_set_vbuf (CamelStreamBuffer *b, CamelStreamBufferMode mode, char *buf, guint32 size);
-
-/* read a line of characters */
-int camel_stream_buffer_gets(CamelStreamBuffer *b, char *buf, int max);
-
-char *camel_stream_buffer_read_line (CamelStreamBuffer *sbf);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STREAM_BUFFER_H */
diff --git a/camel/camel-stream-data-wrapper.c b/camel/camel-stream-data-wrapper.c
deleted file mode 100644
index 085f051e67..0000000000
--- a/camel/camel-stream-data-wrapper.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* camel-stream-data-wrapper.c
- *
- * Copyright 1999, 2000 HelixCode (http://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.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include 
-#endif
-
-#include 
-
-#include "camel-stream-data-wrapper.h"
-
-
-static CamelDataWrapperClass *parent_class = NULL;
-
-
-/* CamelDataWrapper methods.  */
-
-static void
-write_to_stream (CamelDataWrapper *data_wrapper,
-		 CamelStream *output_stream)
-{
-#define BUFFER_SIZE 4096
-	gchar buffer[BUFFER_SIZE];
-	CamelStreamDataWrapper *stream_data_wrapper;
-	CamelStream *input_stream;
-
-	stream_data_wrapper = CAMEL_STREAM_DATA_WRAPPER (data_wrapper);
-	input_stream = stream_data_wrapper->stream;
-
-	while (TRUE) {
-		gchar *p;
-		gint read, written;
-
-		read = camel_stream_read (input_stream, buffer, BUFFER_SIZE);
-		if (read == 0)
-			break;
-
-		p = buffer;
-		while (read > 0) {
-			written = camel_stream_write (output_stream, p, read);
-
-			/* FIXME no way to report an error?!  */
-			if (written == -1)
-				break;
-
-			p += written;
-			read -= written;
-		}
-	}
-#undef BUFFER_SIZE
-}
-
-
-/* GtkObject methods.  */
-
-static void
-destroy (GtkObject *object)
-{
-	CamelStreamDataWrapper *stream_data_wrapper;
-	GtkObject *stream_object;
-
-	stream_data_wrapper = CAMEL_STREAM_DATA_WRAPPER (object);
-
-	stream_object = GTK_OBJECT (object);
-	stream_data_wrapper->stream = NULL;
-
-	gtk_object_unref (stream_object);
-}
-
-
-/* This handles destruction of the associated CamelDataWrapper outside
-   CamelStreamDataWrapper, for debuggin purposes (this should never happen).  */
-static void
-stream_destroy_cb (GtkObject *object,
-		   gpointer data)
-{
-	CamelStreamDataWrapper *wrapper;
-
-	wrapper = CAMEL_STREAM_DATA_WRAPPER (data);
-
-	/* Hack: when we destroy the stream ourselves, we set the `stream'
-           member to NULL first, so that we can recognize when this is done out
-           of our control.  */
-	if (wrapper->stream != NULL) {
-		g_warning ("CamelSimpleDataWrapperStream: associated CamelSimpleDataWrapper was destroyed.");
-		wrapper->stream = NULL;
-	}
-}
-
-
-static void
-class_init (CamelStreamDataWrapperClass *class)
-{
-	GtkObjectClass *object_class;
-	CamelDataWrapperClass *data_wrapper_class;
-
-	object_class = GTK_OBJECT_CLASS (class);
-	object_class->destroy = destroy;
-
-	data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (class);
-	data_wrapper_class->write_to_stream = write_to_stream;
-
-	parent_class = gtk_type_class (camel_data_wrapper_get_type ());
-}
-
-static void
-init (CamelStreamDataWrapper *wrapper)
-{
-	wrapper->stream = NULL;
-}
-
-
-GtkType
-camel_stream_data_wrapper_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (type == 0) {
-		static const GtkTypeInfo info = {
-			"CamelStreamDataWrapper",
-			sizeof (CamelStreamDataWrapper),
-			sizeof (CamelStreamDataWrapperClass),
-			(GtkClassInitFunc) class_init,
-			(GtkObjectInitFunc) init,
-			/* reserved_1 */ NULL,
-			/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		type = gtk_type_unique (camel_data_wrapper_get_type (), &info);
-	}
-
-	return type;
-}
-
-/**
- * camel_stream_data_wrapper_construct:
- * @wrapper: A CamelStreamDataWrapper object
- * @stream: A Camel stream object
- * 
- * Construct @wrapper associating @stream to it.  Notice that, after this call,
- * @stream is conceptually owned by @wrapper and will be destroyed when
- * @wrapper is destroyed.
- **/
-void
-camel_stream_data_wrapper_construct (CamelStreamDataWrapper *wrapper,
-				     CamelStream *stream)
-{
-	g_return_if_fail (wrapper != NULL);
-	g_return_if_fail (CAMEL_IS_STREAM_DATA_WRAPPER (wrapper));
-	g_return_if_fail (stream != NULL);
-	g_return_if_fail (CAMEL_IS_STREAM (stream));
-
-	wrapper->stream = stream;
-	gtk_signal_connect (GTK_OBJECT (stream), "destroy",
-			    GTK_SIGNAL_FUNC (stream_destroy_cb), wrapper);
-}
-
-/**
- * camel_stream_data_wrapper_new:
- * @stream: A Camel stream object
- * 
- * Create a new stream data wrapper object for @stream.  Notice that, after
- * this call, @stream is conceptually owned by the new wrapper and will be
- * destroyed when the wrapper is destroyed.
- * 
- * Return value: A pointer to the new CamelStreamDataWrapper object.
- **/
-CamelDataWrapper *
-camel_stream_data_wrapper_new (CamelStream *stream)
-{
-	CamelDataWrapper *wrapper;
-
-	wrapper = gtk_type_new (camel_stream_data_wrapper_get_type ());
-	camel_stream_data_wrapper_construct
-		(CAMEL_STREAM_DATA_WRAPPER (wrapper), stream);
-
-	return wrapper;
-}
diff --git a/camel/camel-stream-data-wrapper.h b/camel/camel-stream-data-wrapper.h
deleted file mode 100644
index 55ca93ba42..0000000000
--- a/camel/camel-stream-data-wrapper.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* camel-stream-data-wrapper.h
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __CAMEL_STREAM_DATA_WRAPPER_H__
-#define __CAMEL_STREAM_DATA_WRAPPER_H__
-
-#include 
-#include "camel-types.h"
-#include "camel-data-wrapper.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-
-#define CAMEL_TYPE_STREAM_DATA_WRAPPER \
-	(camel_stream_data_wrapper_get_type ())
-#define CAMEL_STREAM_DATA_WRAPPER(obj) \
-	(GTK_CHECK_CAST ((obj), CAMEL_TYPE_STREAM_DATA_WRAPPER, CamelStreamDataWrapper))
-#define CAMEL_STREAM_DATA_WRAPPER_CLASS(klass) \
-	(GTK_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_STREAM_DATA_WRAPPER, CamelStreamDataWrapperClass))
-#define CAMEL_IS_STREAM_DATA_WRAPPER(obj) \
-	(GTK_CHECK_TYPE ((obj), CAMEL_TYPE_STREAM_DATA_WRAPPER))
-#define CAMEL_IS_STREAM_DATA_WRAPPER_CLASS(klass) \
-	(GTK_CHECK_CLASS_TYPE ((obj), CAMEL_TYPE_STREAM_DATA_WRAPPER))
-
-
-typedef struct _CamelStreamDataWrapperClass  CamelStreamDataWrapperClass;
-
-struct _CamelStreamDataWrapper {
-	CamelDataWrapper parent;
-
-	CamelStream *stream;
-};
-
-struct _CamelStreamDataWrapperClass {
-	CamelDataWrapperClass parent_class;
-};
-
-
-GtkType camel_stream_data_wrapper_get_type (void);
-CamelDataWrapper *camel_stream_data_wrapper_new (CamelStream *stream);
-void camel_stream_data_wrapper_construct (CamelStreamDataWrapper *wrapper,
-					  CamelStream *stream);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __CAMEL_STREAM_DATA_WRAPPER_H__ */
diff --git a/camel/camel-stream-filter.c b/camel/camel-stream-filter.c
deleted file mode 100644
index 7a8491c1f8..0000000000
--- a/camel/camel-stream-filter.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-stream-filter.h"
-
-struct _filter {
-	struct _filter *next;
-	int id;
-	CamelMimeFilter *filter;
-};
-
-struct _CamelStreamFilterPrivate {
-	struct _filter *filters;
-	int filterid;		/* next filter id */
-	
-	char *realbuffer;	/* buffer - READ_PAD */
-	char *buffer;		/* READ_SIZE bytes */
-
-	char *filtered;		/* the filtered data */
-	size_t filteredlen;
-};
-
-#define READ_PAD (64)		/* bytes padded before buffer */
-#define READ_SIZE (4096)
-
-#define _PRIVATE(o) (((CamelStreamFilter *)(o))->priv)
-
-static void camel_stream_filter_class_init (CamelStreamFilterClass *klass);
-static void camel_stream_filter_init       (CamelStreamFilter *obj);
-
-static	gint      do_read       (CamelStream *stream, gchar *buffer, gint n);
-static	gint      do_write      (CamelStream *stream, const gchar *buffer, gint n);
-static	void      do_flush      (CamelStream *stream);
-static	gboolean  do_available  (CamelStream *stream);
-static	gboolean  do_eos        (CamelStream *stream);
-static	void      do_close      (CamelStream *stream);
-static	void      do_reset      (CamelStream *stream);
-
-static CamelStreamClass *camel_stream_filter_parent;
-
-enum SIGNALS {
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-guint
-camel_stream_filter_get_type (void)
-{
-	static guint type = 0;
-	
-	if (!type) {
-		GtkTypeInfo type_info = {
-			"CamelStreamFilter",
-			sizeof (CamelStreamFilter),
-			sizeof (CamelStreamFilterClass),
-			(GtkClassInitFunc) camel_stream_filter_class_init,
-			(GtkObjectInitFunc) camel_stream_filter_init,
-			(GtkArgSetFunc) NULL,
-			(GtkArgGetFunc) NULL
-		};
-		
-		type = gtk_type_unique (camel_stream_get_type (), &type_info);
-	}
-	
-	return type;
-}
-
-static void
-finalise(GtkObject *o)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)o;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *fn, *f;
-
-	f = p->filters;
-	while (f) {
-		fn = f->next;
-		gtk_object_unref((GtkObject *)f->filter);
-		g_free(f);
-		f = fn;
-	}
-	g_free(p->realbuffer);
-	g_free(p);
-	gtk_object_unref((GtkObject *)filter->source);
-
-	GTK_OBJECT_CLASS (camel_stream_filter_parent)->finalize (o);
-}
-
-
-static void
-camel_stream_filter_class_init (CamelStreamFilterClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-	CamelStreamClass *camel_stream_class = (CamelStreamClass *) klass;
-
-	camel_stream_filter_parent = gtk_type_class (camel_stream_get_type ());
-
-	object_class->finalize = finalise;
-
-	camel_stream_class->read = do_read;
-	camel_stream_class->write = do_write;
-	camel_stream_class->flush = do_flush;
-	camel_stream_class->available = do_available;
-	camel_stream_class->eos = do_eos; 
-	camel_stream_class->close = do_close;
-	camel_stream_class->reset = do_reset;
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-camel_stream_filter_init (CamelStreamFilter *obj)
-{
-	struct _CamelStreamFilterPrivate *p;
-	
-	_PRIVATE(obj) = p = g_malloc0(sizeof(*p));
-	p->realbuffer = g_malloc(READ_SIZE + READ_PAD);
-	p->buffer = p->realbuffer + READ_PAD;
-}
-
-/**
- * camel_stream_filter_new:
- *
- * Create a new CamelStreamFilter object.
- * 
- * Return value: A new CamelStreamFilter object.
- **/
-CamelStreamFilter *
-camel_stream_filter_new_with_stream(CamelStream *stream)
-{
-	CamelStreamFilter *new = CAMEL_STREAM_FILTER ( gtk_type_new (camel_stream_filter_get_type ()));
-
-	new->source = stream;
-	return new;
-}
-
-
-/**
- * camel_stream_filter_add:
- * @filter: Initialised CamelStreamFilter.
- * @mf:  Filter to perform processing on stream.
- * 
- * Add a new CamelMimeFilter to execute during the processing of this
- * stream.  Each filter added is processed after the previous one.
- *
- * Note that a filter should only be added to a single stream
- * at a time, otherwise unpredictable results may occur.
- * 
- * Return value: A filter id for this CamelStreamFilter.
- **/
-int
-camel_stream_filter_add(CamelStreamFilter *filter, CamelMimeFilter *mf)
-{
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *fn, *f;
-
-	fn = g_malloc(sizeof(*fn));
-	fn->id = p->filterid++;
-	fn->filter = mf;
-	gtk_object_ref((GtkObject *)mf);
-
-	/* sure, we could use a GList, but we wouldn't save much */
-	f = (struct _filter *)&p->filters;
-	while (f->next)
-		f = f->next;
-	f->next = fn;
-	fn->next = NULL;
-	return fn->id;
-}
-
-/**
- * camel_stream_filter_remove:
- * @filter: Initialised CamelStreamFilter.
- * @id: Filter id, as returned from camel_stream_filter_add().
- * 
- * Remove a processing filter from the stream, by id.
- **/
-void
-camel_stream_filter_remove(CamelStreamFilter *filter, int id)
-{
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *fn, *f;
-
-	f = (struct _filter *)&p->filters;
-	while (f && f->next) {
-		fn = f->next;
-		if (fn->id == id) {
-			f->next = fn->next;
-			gtk_object_unref((GtkObject *)fn->filter);
-			g_free(fn);
-		}
-		f = f->next;
-	}
-}
-
-static	gint      do_read       (CamelStream *stream, gchar *buffer, gint n)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	int size;
-	struct _filter *f;
-
-	if (p->filteredlen<=0) {
-		int presize = READ_SIZE;
-
-		size = camel_stream_read(filter->source, p->buffer, READ_SIZE);
-		if (size<=0) {
-			/* this is somewhat untested */
-			if (camel_stream_eos(filter->source)) {
-				f = p->filters;
-				p->filtered = p->buffer;
-				p->filteredlen = 0;
-				while (f) {
-					camel_mime_filter_complete(f->filter, p->filtered, p->filteredlen, presize, &p->filtered, &p->filteredlen, &presize);
-					f = f->next;
-				}
-				size = p->filteredlen;
-			}
-			if (size<=0)
-				return size;
-		} else {
-			f = p->filters;
-			p->filtered = p->buffer;
-			p->filteredlen = size;
-			while (f) {
-				camel_mime_filter_filter(f->filter, p->filtered, p->filteredlen, presize, &p->filtered, &p->filteredlen, &presize);
-				f = f->next;
-			}
-		}
-	}
-
-	size = MIN(n, p->filteredlen);
-	memcpy(buffer, p->filtered, size);
-	p->filteredlen -= size;
-	p->filtered += size;
-
-	return size;
-}
-
-static	gint      do_write      (CamelStream *stream, const gchar *buffer, gint n)
-{
-	/* what semantics *should* this have?? */
-	g_warning("Writing to a non-writable stream");
-	return -1;
-}
-
-static	void      do_flush      (CamelStream *stream)
-{
-	/* NO OP */
-}
-
-static	gboolean  do_available  (CamelStream *stream)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-
-	if (p->filteredlen >0)
-		return TRUE;
-
-	return camel_stream_available(filter->source);
-}
-
-static	gboolean  do_eos        (CamelStream *stream)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-
-	if (p->filteredlen >0)
-		return FALSE;
-
-	return camel_stream_eos(filter->source);
-}
-
-static	void      do_close      (CamelStream *stream)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-
-	p->filteredlen = 0;
-	camel_stream_close(filter->source);
-}
-
-static	void      do_reset      (CamelStream *stream)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *f;
-
-	p->filteredlen = 0;
-	camel_stream_reset(filter->source);
-
-	/* and reset filters */
-	f = p->filters;
-	while (f) {
-		camel_mime_filter_reset(f->filter);
-		f = f->next;
-	}
-}
-
diff --git a/camel/camel-stream-filter.h b/camel/camel-stream-filter.h
deleted file mode 100644
index b63dae275a..0000000000
--- a/camel/camel-stream-filter.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_STREAM_FILTER_H
-#define _CAMEL_STREAM_FILTER_H
-
-#include 
-
-#include 
-#include 
-
-#define CAMEL_STREAM_FILTER(obj)         GTK_CHECK_CAST (obj, camel_stream_filter_get_type (), CamelStreamFilter)
-#define CAMEL_STREAM_FILTER_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, camel_stream_filter_get_type (), CamelStreamFilterClass)
-#define IS_CAMEL_STREAM_FILTER(obj)      GTK_CHECK_TYPE (obj, camel_stream_filter_get_type ())
-
-typedef struct _CamelStreamFilter      CamelStreamFilter;
-typedef struct _CamelStreamFilterClass CamelStreamFilterClass;
-
-struct _CamelStreamFilter {
-	CamelStream parent;
-
-	CamelStream *source;
-
-	struct _CamelStreamFilterPrivate *priv;
-};
-
-struct _CamelStreamFilterClass {
-	CamelStreamClass parent_class;
-};
-
-guint			camel_stream_filter_get_type	(void);
-
-CamelStreamFilter      *camel_stream_filter_new_with_stream	(CamelStream *stream);
-
-int camel_stream_filter_add	(CamelStreamFilter *filter, CamelMimeFilter *);
-void camel_stream_filter_remove	(CamelStreamFilter *filter, int id);
-
-#endif /* ! _CAMEL_STREAM_FILTER_H */
diff --git a/camel/camel-stream-fs.c b/camel/camel-stream-fs.c
deleted file mode 100644
index fa5766de48..0000000000
--- a/camel/camel-stream-fs.c
+++ /dev/null
@@ -1,513 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-fs.c : file system based stream */
-
-/* inspired by gnome-stream-fs.c in bonobo by Miguel de Icaza */
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-stream-fs.h"
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-static CamelSeekableStreamClass *parent_class=NULL;
-
-
-/* Returns the class for a CamelStreamFS */
-#define CSFS_CLASS(so) CAMEL_STREAM_FS_CLASS (GTK_OBJECT(so)->klass)
-
-static gint _read (CamelStream *stream, gchar *buffer, gint n);
-static gint _write (CamelStream *stream, const gchar *buffer, gint n);
-static void _flush (CamelStream *stream);
-static gboolean _available (CamelStream *stream);
-static gboolean _eos (CamelStream *stream);
-static void _close (CamelStream *stream);
-static gint _seek (CamelSeekableStream *stream, gint offset, CamelStreamSeekPolicy policy);
-
-static void _finalize (GtkObject *object);
-static void _destroy (GtkObject *object);
-
-static void _init_with_fd (CamelStreamFs *stream_fs, int fd);
-static void _init_with_fd_and_bounds (CamelStreamFs *stream_fs, int fd, guint32 inf_bound, gint32 sup_bound);
-static void _init_with_name (CamelStreamFs *stream_fs, const gchar *name, CamelStreamFsMode mode);
-static void _init_with_name_and_bounds (CamelStreamFs *stream_fs, const gchar *name, CamelStreamFsMode mode,
-					guint32 inf_bound, gint32 sup_bound);
-
-static void
-camel_stream_fs_class_init (CamelStreamFsClass *camel_stream_fs_class)
-{
-	CamelSeekableStreamClass *camel_seekable_stream_class = CAMEL_SEEKABLE_STREAM_CLASS (camel_stream_fs_class);
-	CamelStreamClass *camel_stream_class = CAMEL_STREAM_CLASS (camel_stream_fs_class);
-	GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_stream_fs_class);
-
-	parent_class = gtk_type_class (camel_seekable_stream_get_type ());
-	
-	/* virtual method definition */
-	camel_stream_fs_class->init_with_fd = _init_with_fd;
-	camel_stream_fs_class->init_with_fd_and_bounds = _init_with_fd_and_bounds;
-	camel_stream_fs_class->init_with_name = _init_with_name;
-	camel_stream_fs_class->init_with_name_and_bounds = _init_with_name_and_bounds;
-	
-	/* virtual method overload */
-	camel_stream_class->read = _read;
-	camel_stream_class->write = _write;
-	camel_stream_class->flush = _flush;
-	camel_stream_class->available = _available;
-	camel_stream_class->eos = _eos;
-	camel_stream_class->close = _close;
-
-	camel_seekable_stream_class->seek = _seek;
-
-	gtk_object_class->finalize = _finalize;
-	gtk_object_class->destroy = _destroy;
-
-}
-
-static void
-camel_stream_fs_init (gpointer   object,  gpointer   klass)
-{
-	CamelStreamFs *stream = CAMEL_STREAM_FS (object);
-
-	stream->name = NULL;
-	stream->eof = FALSE;
-}
-
-
-GtkType
-camel_stream_fs_get_type (void)
-{
-	static GtkType camel_stream_fs_type = 0;
-	
-	if (!camel_stream_fs_type)	{
-		GtkTypeInfo camel_stream_fs_info =	
-		{
-			"CamelStreamFs",
-			sizeof (CamelStreamFs),
-			sizeof (CamelStreamFsClass),
-			(GtkClassInitFunc) camel_stream_fs_class_init,
-			(GtkObjectInitFunc) camel_stream_fs_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_stream_fs_type = gtk_type_unique (camel_seekable_stream_get_type (), &camel_stream_fs_info);
-	}
-	
-	return camel_stream_fs_type;
-}
-
-
-static void           
-_destroy (GtkObject *object)
-{
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (object);
-	gint close_error;
-	
-	close_error = close (stream_fs->fd);
-	if (close_error) {
-		g_warning ("CamelStreamFs::destroy Error while closing "
-			   "file descriptor\n  Full error text is : %s\n",
-			   strerror (errno));
-	}
-	GTK_OBJECT_CLASS (parent_class)->destroy (object);
-}
-
-
-static void           
-_finalize (GtkObject *object)
-{
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (object);
-
-	g_free (stream_fs->name);
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-static void 
-_set_bounds (CamelStreamFs *stream_fs, guint32 inf_bound, guint32 sup_bound)
-{
-	
-	/* store the bounds */
-	stream_fs->inf_bound = inf_bound;
-	stream_fs->sup_bound = sup_bound;
-
-	/* go to the first position */
-	lseek (stream_fs->fd, inf_bound, SEEK_SET);
-
-	CAMEL_SEEKABLE_STREAM (stream_fs)->cur_pos = 0;
-}
-
-
-
-
-static void
-_init_with_fd (CamelStreamFs *stream_fs, int fd)
-{
-	stream_fs->fd = fd;
-	stream_fs->inf_bound = 0;
-	stream_fs->sup_bound = -1;
-	CAMEL_SEEKABLE_STREAM (stream_fs)->cur_pos = 0;
-}
-
-
-
-
-static void
-_init_with_fd_and_bounds (CamelStreamFs *stream_fs, int fd, guint32 inf_bound, gint32 sup_bound)
-{
-	
-	CSFS_CLASS (stream_fs)->init_with_fd (stream_fs, fd);
-	_set_bounds (stream_fs, inf_bound, sup_bound);
-	
-}
-
-
-
-static void
-_init_with_name (CamelStreamFs *stream_fs, const gchar *name, CamelStreamFsMode mode)
-{
-	struct stat s;
-	int v, fd;
-	int flags;
-	
-	g_assert (name);
-
-	v = stat (name, &s);
-	
-	if (mode & CAMEL_STREAM_FS_READ){
-		if (mode & CAMEL_STREAM_FS_WRITE)
-			flags = O_RDWR | O_CREAT | O_NONBLOCK;
-		else
-			flags = O_RDONLY | O_NONBLOCK;
-	} else {
-		if (mode & CAMEL_STREAM_FS_WRITE)
-			flags = O_WRONLY | O_CREAT | O_NONBLOCK;
-		else
-			return;
-	}
-
-	if ( (mode & CAMEL_STREAM_FS_READ) && !(mode & CAMEL_STREAM_FS_WRITE) )
-		if (v == -1) {
-			stream_fs->fd = -1;
-			return;
-		}
-	
-
-	fd = open (name, flags, 0600);
-	if (fd==-1) {
-		g_warning ("CamelStreamFs::new_with_name can not obtain "
-			   "fd for file \"%s\"\n", name);
-		return;
-	}
-	
-	stream_fs->name = g_strdup (name);
-	CSFS_CLASS (stream_fs)->init_with_fd (stream_fs, fd);
-	
-	gtk_signal_emit_by_name (GTK_OBJECT (stream_fs), "data_available");
-	
-}
-
-
-
-static void
-_init_with_name_and_bounds (CamelStreamFs *stream_fs, const gchar *name, CamelStreamFsMode mode,
-			    guint32 inf_bound, gint32 sup_bound)
-{
-	CSFS_CLASS (stream_fs)->init_with_name (stream_fs, name, mode);
-	_set_bounds (stream_fs, inf_bound, (gint32)sup_bound);
-}
-
-
-
-
-CamelStream *
-camel_stream_fs_new_with_name (const gchar *name, CamelStreamFsMode mode)
-{
-	CamelStreamFs *stream_fs;
-	stream_fs = gtk_type_new (camel_stream_fs_get_type ());
-	CSFS_CLASS (stream_fs)->init_with_name (stream_fs, name, mode);
-	if (stream_fs->fd == -1) {
-		gtk_object_destroy (GTK_OBJECT (stream_fs));
-		return NULL;
-	}
-	
-	return CAMEL_STREAM (stream_fs);
-}
- 
-
-CamelStream *
-camel_stream_fs_new_with_name_and_bounds (const gchar *name, CamelStreamFsMode mode,
-					  guint32 inf_bound, gint32 sup_bound)
-{
-	CamelStreamFs *stream_fs;
-	stream_fs = gtk_type_new (camel_stream_fs_get_type ());
-	CSFS_CLASS (stream_fs)->init_with_name_and_bounds (stream_fs, name, mode, inf_bound, sup_bound);
-	
-	return CAMEL_STREAM (stream_fs);
-	
-}
-
-
-
-
-
-
-CamelStream *
-camel_stream_fs_new_with_fd (int fd)
-{
-	CamelStreamFs *stream_fs;
-	
-	stream_fs = gtk_type_new (camel_stream_fs_get_type ());
-	CSFS_CLASS (stream_fs)->init_with_fd (stream_fs, fd);
-	
-	return CAMEL_STREAM (stream_fs);
-}
-
-
-
-CamelStream *
-camel_stream_fs_new_with_fd_and_bounds (int fd, guint32 inf_bound, gint32 sup_bound)
-{
-	CamelStreamFs *stream_fs;
-	
-	stream_fs = gtk_type_new (camel_stream_fs_get_type ());
-	CSFS_CLASS (stream_fs)->init_with_fd_and_bounds (stream_fs, fd, inf_bound, sup_bound);
-	
-	return CAMEL_STREAM (stream_fs);
-}
-
-
-
-/**
- * _read: read bytes from a stream
- * @stream: stream
- * @buffer: buffer where bytes are stored
- * @n: max number of bytes to read
- * 
- * 
- * 
- * Return value: number of bytes actually read.
- **/
-static gint
-_read (CamelStream *stream, gchar *buffer, gint n)
-{
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (stream);
-	gint v = 0;
-	gint nb_to_read;
-	
-	g_assert (n);
-	
-	if (stream_fs->sup_bound != -1)
-		nb_to_read = MIN (stream_fs->sup_bound - CAMEL_SEEKABLE_STREAM (stream)->cur_pos - stream_fs->inf_bound , n);
-	else 
-		nb_to_read = n;
-	
-	do {
-		v = read ( (CAMEL_STREAM_FS (stream))->fd, buffer, nb_to_read);
-	} while (v == -1 && errno == EINTR);
-
-	if (v>0)
-		CAMEL_SEEKABLE_STREAM (stream)->cur_pos += v;
-
-	if (v == 0)
-		stream_fs->eof = TRUE;
-
-	return v;
-}
-
-
-/**
- * _write: write bytes to a stream
- * @stream: the stream
- * @buffer: byte buffer
- * @n: number of bytes to write
- * 
- * 
- * 
- * Return value: the number of bytes actually written
- *  in the stream.
- **/
-static gint
-_write (CamelStream *stream, const gchar *buffer, gint n)
-{
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (stream);
-	int v;
-	gint nb_bytes_written = 0;
-	
-	if (n <= 0)
-		return 0;
-
-	g_assert (stream);
-	g_assert (stream_fs->fd);
-
-	/* we do not take the end bounds into account as it does not
-	   really make any sense in the case of a write operation */
-	do {
-		v = write ( stream_fs->fd, buffer, n);
-		if (v>0) nb_bytes_written += v;
-	} while (v == -1 && errno == EINTR);
-	
-	if (nb_bytes_written>0)
-		CAMEL_SEEKABLE_STREAM (stream)->cur_pos += nb_bytes_written;
-
-	return nb_bytes_written;
-
-}
-
-
-
-/**
- * _flush: flush pending changes 
- * @stream: the stream
- * 
- * 
- **/
-static void
-_flush (CamelStream *stream)
-{
-	fsync ((CAMEL_STREAM_FS (stream))->fd);
-}
-
-
-
-/**
- * _available: return the number of bytes available for reading
- * @stream: the stream
- * 
- * Return the number of bytes available without blocking.
- * 
- * Return value: the number of bytes available
- **/
-static gboolean
-_available (CamelStream *stream)
-{
-	g_warning ("Not implemented yet");
-	return FALSE;
-}
-
-
-/**
- * _eos: test if there are bytes left to read
- * @stream: the stream
- * 
- * 
- * 
- * Return value: true if all stream has been read
- **/
-static gboolean
-_eos (CamelStream *stream)
-{
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (stream);
-
-	g_assert (stream_fs);
-	return stream_fs->eof;
-}
-
-
-/**
- * _close: close a stream
- * @stream: the stream
- * 
- * 
- **/
-static void
-_close (CamelStream *stream)
-{
-	close ((CAMEL_STREAM_FS (stream))->fd);
-}
-
-
-static gint
-_seek (CamelSeekableStream *stream, gint offset, CamelStreamSeekPolicy policy)
-{
-	int whence;
-	gint return_position;
-	gint real_offset; 
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (stream);
-
-
-	switch  (policy) {
-	case CAMEL_STREAM_SET:
-		real_offset = MAX (stream_fs->inf_bound + offset, stream_fs->inf_bound);
-		if (stream_fs->sup_bound > 0)
-			real_offset = MIN (real_offset, stream_fs->sup_bound);
-		whence = SEEK_SET;		
-		break;
-
-	case CAMEL_STREAM_CUR:
-		if ((stream_fs->sup_bound != -1) && ((CAMEL_SEEKABLE_STREAM (stream)->cur_pos + stream_fs->inf_bound + offset) > stream_fs->sup_bound)) {
-			real_offset = stream_fs->sup_bound;
-			whence = SEEK_SET;	
-		} else if ((CAMEL_SEEKABLE_STREAM (stream)->cur_pos + stream_fs->inf_bound + offset) < stream_fs->inf_bound) {
-			real_offset = stream_fs->inf_bound;
-			whence = SEEK_SET;	
-		} else 
-			{
-				real_offset = offset;
-				whence = SEEK_CUR;
-			}
-		break;
-
-	case CAMEL_STREAM_END:
-		if (stream_fs->sup_bound != -1) {
-			real_offset = stream_fs->sup_bound - offset;
-			whence = SEEK_SET;
-		} else {
-			real_offset = offset;
-			whence = SEEK_END;
-		}
-		
-		
-		break;
-	default:
-		return -1;
-	}
-		
-	
-		
-	return_position =  lseek (stream_fs->fd, real_offset, whence) - stream_fs->inf_bound;
-	if (((CAMEL_SEEKABLE_STREAM (stream)->cur_pos) != return_position) && stream_fs->eof) 
-		stream_fs->eof = FALSE;
-
-	CAMEL_SEEKABLE_STREAM (stream)->cur_pos = return_position;
-	
-	
-	return return_position;
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/camel/camel-stream-fs.h b/camel/camel-stream-fs.h
deleted file mode 100644
index 7d39c5f382..0000000000
--- a/camel/camel-stream-fs.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-fs.h :stream based on unix filesystem */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_STREAM_FS_H
-#define CAMEL_STREAM_FS_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-seekable-stream.h"
-
-#define CAMEL_STREAM_FS_TYPE     (camel_stream_fs_get_type ())
-#define CAMEL_STREAM_FS(obj)     (GTK_CHECK_CAST((obj), CAMEL_STREAM_FS_TYPE, CamelStreamFs))
-#define CAMEL_STREAM_FS_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_STREAM_FS_TYPE, CamelStreamFsClass))
-#define CAMEL_IS_STREAM_FS(o)    (GTK_CHECK_TYPE((o), CAMEL_STREAM_FS_TYPE))
-
-typedef enum 
-{
-	CAMEL_STREAM_FS_READ   =   1,
-	CAMEL_STREAM_FS_WRITE  =   2
-
-} CamelStreamFsMode;
-
-
-struct _CamelStreamFs
-{
-
-	CamelSeekableStream parent_object;
-
-	gchar *name;         /* name of the underlying file */
-	gboolean eof;        /* are we at the end of the file ? */
-	gint fd;             /* file descriptor on the underlying file */
-	guint32 inf_bound;   /* first valid position */
-	gint32 sup_bound;    /* last valid position, -1 means, no sup bound */
-	
-};
-
-
-
-typedef struct {
-	CamelSeekableStreamClass parent_class;
-	
-	/* Virtual methods */	
-	void (*init_with_fd)              (CamelStreamFs *stream_fs, 
-					   int fd);
-	void (*init_with_fd_and_bounds)   (CamelStreamFs *stream_fs, 
-					   int fd, guint32 inf_bound, 
-					   gint32 sup_bound);
-
-	void (*init_with_name)            (CamelStreamFs *stream_fs, 
-					   const gchar *name, 
-					   CamelStreamFsMode mode);
-	void (*init_with_name_and_bounds) (CamelStreamFs *stream_fs, 
-					   const gchar *name, 
-					   CamelStreamFsMode mode, 
-					   guint32 inf_bound, 
-					   gint32 sup_bound);
-
-} CamelStreamFsClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_stream_fs_get_type (void);
-
-
-/* public methods */
-CamelStream *   camel_stream_fs_new_with_name              (const gchar *name, 
-							    CamelStreamFsMode mode);
-CamelStream *   camel_stream_fs_new_with_name_and_bounds   (const gchar *name, 
-							    CamelStreamFsMode mode,
-							    guint32 inf_bound, 
-							    gint32 sup_bound);
-
-CamelStream *   camel_stream_fs_new_with_fd                (int fd);
-CamelStream *   camel_stream_fs_new_with_fd_and_bounds     (int fd,
-							    guint32 inf_bound, 
-							    gint32 sup_bound);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STREAM_FS_H */
diff --git a/camel/camel-stream-mem.c b/camel/camel-stream-mem.c
deleted file mode 100644
index 3e33f18f08..0000000000
--- a/camel/camel-stream-mem.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-mem.c : memory buffer based stream */
-
-/* inspired by gnome-stream-mem.c in bonobo by Miguel de Icaza */
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-stream-mem.h"
-#include 
-#include 
-#include 
-#include 
-
-static CamelStreamClass *parent_class=NULL;
-
-
-/* Returns the class for a CamelStreamMEM */
-#define CSM_CLASS(so) CAMEL_STREAM_MEM_CLASS (GTK_OBJECT(so)->klass)
-
-static gint _read (CamelStream *stream, gchar *buffer, gint n);
-static gint _write (CamelStream *stream, const gchar *buffer, gint n);
-static void _flush (CamelStream *stream);
-static gint _available (CamelStream *stream);
-static gboolean _eos (CamelStream *stream);
-static void _close (CamelStream *stream);
-static gint _seek (CamelSeekableStream *stream, gint offset, CamelStreamSeekPolicy policy);
-
-static void _finalize (GtkObject *object);
-
-static void
-camel_stream_mem_class_init (CamelStreamMemClass *camel_stream_mem_class)
-{
-	CamelSeekableStreamClass *camel_seekable_stream_class = CAMEL_SEEKABLE_STREAM_CLASS (camel_stream_mem_class);
-	CamelStreamClass *camel_stream_class = CAMEL_STREAM_CLASS (camel_stream_mem_class);
-	GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_stream_mem_class);
-	
-	parent_class = gtk_type_class (gtk_object_get_type ());
-	
-	/* virtual method definition */
-	
-	/* virtual method overload */
-	camel_stream_class->read = _read;
-	camel_stream_class->write = _write;
-	camel_stream_class->flush = _flush;
-	camel_stream_class->available = _available;
-	camel_stream_class->eos = _eos;
-	camel_stream_class->close = _close;
-
-	camel_seekable_stream_class->seek = _seek;
-	
-	gtk_object_class->finalize = _finalize;
-	
-}
-
-static void
-camel_stream_mem_init (gpointer   object,  gpointer   klass)
-{
-	CamelStreamMem *camel_stream_mem = CAMEL_STREAM_MEM (object);
-	camel_stream_mem->position = 0;
-}
-
-GtkType
-camel_stream_mem_get_type (void)
-{
-	static GtkType camel_stream_mem_type = 0;
-	
-	if (!camel_stream_mem_type)	{
-		GtkTypeInfo camel_stream_mem_info =	
-		{
-			"CamelStreamMem",
-			sizeof (CamelStreamMem),
-			sizeof (CamelStreamMemClass),
-			(GtkClassInitFunc) camel_stream_mem_class_init,
-			(GtkObjectInitFunc) camel_stream_mem_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_stream_mem_type = gtk_type_unique (camel_seekable_stream_get_type (), &camel_stream_mem_info);
-	}
-	
-	return camel_stream_mem_type;
-}
-
-
-CamelStream *
-camel_stream_mem_new (CamelStreamMemMode mode)
-{
-	return camel_stream_mem_new_with_byte_array (g_byte_array_new (),
-						     mode);
-}
-
-CamelStream *
-camel_stream_mem_new_with_buffer (const char *buffer, unsigned int len,
-				  CamelStreamMemMode mode)
-{
-	GByteArray *ba;
-
-	ba = g_byte_array_new ();
-	g_byte_array_append (ba, (const guint8 *)buffer, len);
-	return camel_stream_mem_new_with_byte_array (ba, mode);
-}
-
-CamelStream *
-camel_stream_mem_new_with_byte_array (GByteArray *byte_array,
-				      CamelStreamMemMode mode)
-{
-	CamelStreamMem *stream_mem;
-	
-	stream_mem = gtk_type_new (camel_stream_mem_get_type ());
-	stream_mem->mode = mode;
-	stream_mem->buffer = byte_array;
-	
-	return CAMEL_STREAM (stream_mem);
-}
-
-
-
-static void           
-_finalize (GtkObject *object)
-{
-	CamelStreamMem *stream_mem = CAMEL_STREAM_MEM (object);
-
-	if (stream_mem->buffer)
-		g_byte_array_free (stream_mem->buffer, TRUE);
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-/**
- * _read: read bytes from a stream
- * @stream: stream
- * @buffer: buffer where bytes are stored
- * @n: max number of bytes to read
- * 
- * 
- * 
- * Return value: number of bytes actually read.
- **/
-static gint
-_read (CamelStream *stream, gchar *buffer, gint n)
-{
-	CamelStreamMem *camel_stream_mem = CAMEL_STREAM_MEM (stream);
-	gint nb_bytes_to_read;
-
-	g_assert (stream);
-	nb_bytes_to_read = MIN (n, (camel_stream_mem->buffer)->len - camel_stream_mem->position);
-	if (nb_bytes_to_read>0) {
-		memcpy (buffer, (camel_stream_mem->buffer)->data + camel_stream_mem->position, nb_bytes_to_read);
-		camel_stream_mem->position += nb_bytes_to_read;
-	} else nb_bytes_to_read = -1;
-
-	return nb_bytes_to_read;
-}
-
-
-/**
- * _write: read bytes to a stream
- * @stream: the stream
- * @buffer: byte buffer
- * @n: number of bytes to write
- * 
- * 
- * 
- * Return value: the number of bytes actually written
- *  in the stream.
- **/
-static gint
-_write (CamelStream *stream, const gchar *buffer, gint n)
-{
-	CamelStreamMem *camel_stream_mem = CAMEL_STREAM_MEM (stream);
-
-	g_assert (stream);
-	g_return_val_if_fail (camel_stream_mem->position>=0, -1);
-	camel_stream_mem->buffer = g_byte_array_append (camel_stream_mem->buffer, (const guint8 *)buffer, n);
-	camel_stream_mem->position += n;
-	
-	return n;
-}
-
-
-
-/**
- * _flush: flush pending changes 
- * @stream: the stream
- * 
- * 
- **/
-static void
-_flush (CamelStream *stream)
-{
-	/* Nothing to do. */
-	return;
-}
-
-
-
-/**
- * _available: return the number of bytes available for reading
- * @stream: the stream
- * 
- * Return the number of bytes available without blocking.
- * 
- * Return value: the number of bytes available
- **/
-static gint 
-_available (CamelStream *stream)
-{
-	CamelStreamMem *camel_stream_mem = CAMEL_STREAM_MEM (stream);
-
-	return camel_stream_mem->buffer->len - camel_stream_mem->position;
-}
-
-
-/**
- * _eos: test if there are bytes left to read
- * @stream: the stream
- * 
- * Return value: true if all stream has been read
- **/
-static gboolean
-_eos (CamelStream *stream)
-{
-	return _available (stream) == 0;
-}
-
-
-/**
- * _close: close a stream
- * @stream: the stream
- * 
- * 
- **/
-static void
-_close (CamelStream *stream)
-{
-	CamelStreamMem *stream_mem = CAMEL_STREAM_MEM (stream);
-
-	if (stream_mem->buffer)
-		g_byte_array_free (stream_mem->buffer, TRUE);
-	stream_mem->buffer = NULL;
-}
-
-
-
-static gint
-_seek (CamelSeekableStream *stream, gint offset, CamelStreamSeekPolicy policy)
-{
-	gint position;
-	CamelStreamMem *camel_stream_mem = CAMEL_STREAM_MEM (stream);
-
-	switch  (policy) {
-	case CAMEL_STREAM_SET:
-		position = offset;
-		break;
-	case CAMEL_STREAM_CUR:
-		position = camel_stream_mem->position + offset;
-		break;
-	case CAMEL_STREAM_END:
-		position = (camel_stream_mem->buffer)->len + offset;
-		break;
-	default:
-		return -1;
-	}
-		
-	position = MIN (position, (camel_stream_mem->buffer)->len);
-	position = MAX (position, 0);
-
-	camel_stream_mem->position = position;
-
-	return position;
-}
diff --git a/camel/camel-stream-mem.h b/camel/camel-stream-mem.h
deleted file mode 100644
index 65b9748715..0000000000
--- a/camel/camel-stream-mem.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-mem.h :stream based on memory buffer */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_STREAM_MEM_H
-#define CAMEL_STREAM_MEM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-seekable-stream.h"
-
-#define CAMEL_STREAM_MEM_TYPE     (camel_stream_mem_get_type ())
-#define CAMEL_STREAM_MEM(obj)     (GTK_CHECK_CAST((obj), CAMEL_STREAM_MEM_TYPE, CamelStreamMem))
-#define CAMEL_STREAM_MEM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_STREAM_MEM_TYPE, CamelStreamMemClass))
-#define CAMEL_IS_STREAM_MEM(o)    (GTK_CHECK_TYPE((o), CAMEL_STREAM_MEM_TYPE))
-
-typedef enum 
-{
-	CAMEL_STREAM_MEM_READ   =   1,
-	CAMEL_STREAM_MEM_WRITE  =   2,
-	CAMEL_STREAM_MEM_RW     =   3
-} CamelStreamMemMode;
-
-
-struct _CamelStreamMem
-{
-	CamelSeekableStream parent_object;
-
-	GByteArray *buffer;
-	gint position;
-	CamelStreamMemMode mode;
-
-};
-
-
-
-typedef struct {
-	CamelSeekableStreamClass parent_class;
-	
-	/* Virtual methods */	
-
-} CamelStreamMemClass;
-
-
-
-/* Standard Gtk function */
-GtkType camel_stream_mem_get_type (void);
-
-
-/* public methods */
-CamelStream *camel_stream_mem_new (CamelStreamMemMode mode);
-CamelStream *camel_stream_mem_new_with_byte_array (GByteArray *buffer, 
-						   CamelStreamMemMode mode);
-CamelStream *camel_stream_mem_new_with_buffer (const char *buffer,
-					       unsigned int len,
-					       CamelStreamMemMode mode);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STREAM_MEM_H */
diff --git a/camel/camel-stream.c b/camel/camel-stream.c
deleted file mode 100644
index aaa782620e..0000000000
--- a/camel/camel-stream.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream.c : abstract class for a stream */
-
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-stream.h"
-
-
-enum {
-  DATA_AVAILABLE,
-  LAST_SIGNAL
-};
-
-static guint camel_stream_signals[LAST_SIGNAL] = { 0 };
-
-static GtkObjectClass *parent_class = NULL;
-
-
-/* Returns the class for a CamelStream */
-#define CS_CLASS(so) CAMEL_STREAM_CLASS (GTK_OBJECT(so)->klass)
-
-static void
-default_camel_flush (CamelStream *stream)
-{
-	/* nothing */
-}
-
-static void
-default_camel_close (CamelStream *stream)
-{
-	/* nothing */
-}
-
-
-static void
-camel_stream_class_init (CamelStreamClass *camel_stream_class)
-{
-	GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_stream_class);
-
-	parent_class = gtk_type_class (gtk_object_get_type ());
-
-	/* virtual method definition */
-	camel_stream_class->read = NULL;
-	camel_stream_class->write = NULL;
-	camel_stream_class->flush = default_camel_flush;
-	camel_stream_class->available = NULL;
-	camel_stream_class->eos = NULL; 
-	camel_stream_class->close = default_camel_close;
-	camel_stream_class->close = NULL;
-
-	/* virtual method overload */
-	
-	/* signal definition */
-	camel_stream_signals[DATA_AVAILABLE] =
-		gtk_signal_new ("data_available",
-				GTK_RUN_LAST,
-				gtk_object_class->type,
-				GTK_SIGNAL_OFFSET (CamelStreamClass, data_available),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-	
-	gtk_object_class_add_signals (gtk_object_class, camel_stream_signals, LAST_SIGNAL);
-	
-}
-
-GtkType
-camel_stream_get_type (void)
-{
-	static GtkType camel_stream_type = 0;
-	
-	if (!camel_stream_type)	{
-		GtkTypeInfo camel_stream_info =	
-		{
-			"CamelStream",
-			sizeof (CamelStream),
-			sizeof (CamelStreamClass),
-			(GtkClassInitFunc) camel_stream_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_stream_type = gtk_type_unique (gtk_object_get_type (), &camel_stream_info);
-	}
-	
-	return camel_stream_type;
-}
-
-/**
- * camel_stream_read: 
- * @stream: a CamelStream.
- * @buffer: buffer where bytes pulled from the stream are stored.
- * @n: max number of bytes to read.
- * 
- * Read at most @n bytes from the @stream object and stores them
- * in the buffer pointed at by @buffer.
- * 
- * Return value: number of bytes actually read.
- **/
-gint 
-camel_stream_read (CamelStream *stream, gchar *buffer, gint n)
-{
-	return CS_CLASS (stream)->read (stream, buffer, n);
-}
-
-/**
- * camel_stream_write: 
- * @stream: a CamelStream object.
- * @buffer: buffer to write.
- * @n: number of bytes to write
- *
- * Write @n bytes from the buffer pointed at by @buffer into @stream.
- *
- * Return value: the number of bytes actually written
- *  in the stream.
- **/
-gint
-camel_stream_write (CamelStream *stream, const gchar *buffer, gint n)
-{
-	return CS_CLASS (stream)->write (stream, buffer, n);
-}
-
-/**
- * camel_stream_flush:
- * @stream: a CamelStream object
- * 
- * Flushes the contents of the stream to its backing store.
- **/
-void
-camel_stream_flush (CamelStream *stream)
-{
-	CS_CLASS (stream)->flush (stream);
-}
-
-/**
- * camel_stream_available: 
- * @stream: a CamelStream object
- * 
- * Return value: %TRUE if some data is available for reading, %FALSE otherwise
- **/
-gboolean
-camel_stream_available (CamelStream *stream)
-{
-	return CS_CLASS (stream)->available (stream);
-}
-
-/**
- * camel_stream_eos: 
- * @stream: a CamelStream object
- * 
- * Test if there are bytes left to read on the @stream object.
- * 
- * Return value: %TRUE if all the contents on the stream has been read, or
- * %FALSE if information is still available.
- **/
-gboolean
-camel_stream_eos (CamelStream *stream)
-{
-	return CS_CLASS (stream)->eos (stream);
-}
-
-
-/**
- * camel_stram_close: 
- * @stream: a CamelStream object.
- * 
- * Close the @stream object.
- **/
-void
-camel_stream_close (CamelStream *stream)
-{
-	CS_CLASS (stream)->close (stream);
-}
-
-
-
-
-/**
- * camel_stream_reset: reset a stream
- * @stream: the stream object
- * 
- * Reset a stream, that is put it in a state
- * where it can be read from the begining. 
- * All streams in camel are not seekable, 
- * but they must all be resettable. 
- * 
- **/
-void 
-camel_stream_reset (CamelStream *stream)
-{	
-	CS_CLASS (stream)->reset (stream);
-}
-
-
-
-
-/***************** Utility functions ********************/
-
-/**
- * came_stream_write_strings:
- * @stream: a CamelStream object.
- * @...: A %NULL terminated list of strings.
- *
- * This is a utility function that writes the list of
- * strings into the @stream object.
- */
-void
-camel_stream_write_strings (CamelStream *stream, ... )
-{
-	va_list args;
-	const char *string;
-	
-	va_start(args, stream);
-	string = va_arg (args, const char *);
-	
-	while (string) {
-		camel_stream_write_string (stream, string);
-		string = va_arg (args, char *);
-	}
-	va_end (args);
-}
-
-/**
- * camel_stream_write_to_stream:
- * @stream: Source CamelStream.
- * @output_stream: Destination CamelStream.
- * 
- * Write all of a stream (until eos) into another stream, in a blocking
- * fashion.
- *
- * FIXME: This really needs to return an error code.
- **/
-void
-camel_stream_write_to_stream (CamelStream *stream,
-			      CamelStream *output_stream)
-{
-	gchar tmp_buf[4096];
-	gint nb_read;
-	gint nb_written;
-
-	/* 
-	 * default implementation that uses the input 
-	 * stream and stream it in a blocking way
-	 * to an output stream.
-	 */
-	g_assert (output_stream);
-	g_assert (stream);
-	
-	while (!camel_stream_eos (CAMEL_STREAM (stream))) {
-		nb_read = camel_stream_read (CAMEL_STREAM (stream), tmp_buf, 4096);
-		if (nb_read>0) {
-			nb_written = 0;
-		
-			while (nb_written < nb_read) {
-				int len = camel_stream_write (output_stream, tmp_buf + nb_written, nb_read - nb_written);
-				/* FIXME: what about length 0? */
-				if (len<0)
-					return;
-				nb_written += len;
-			}
-		}
-	}	
-}
diff --git a/camel/camel-stream.h b/camel/camel-stream.h
deleted file mode 100644
index bd1123c1c8..0000000000
--- a/camel/camel-stream.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream.h : class for an abstract stream */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_STREAM_H
-#define CAMEL_STREAM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-
-#define CAMEL_STREAM_TYPE     (camel_stream_get_type ())
-#define CAMEL_STREAM(obj)     (GTK_CHECK_CAST((obj), CAMEL_STREAM_TYPE, CamelStream))
-#define CAMEL_STREAM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_STREAM_TYPE, CamelStreamClass))
-#define CAMEL_IS_STREAM(o)    (GTK_CHECK_TYPE((o), CAMEL_STREAM_TYPE))
-
-
-struct _CamelStream
-{
-	GtkObject parent_object;
-
-};
-
-
-
-typedef struct {
-	GtkObjectClass parent_class;
-	
-	/* Virtual methods */	
-	
-	void  (*data_available) (CamelStream *stream); /* default "data_available" signal handler */
-
-	gint      (*read)       (CamelStream *stream, gchar *buffer, gint n);
-	gint      (*write)      (CamelStream *stream, const gchar *buffer, gint n);
-	void      (*flush)      (CamelStream *stream);
-	gboolean  (*available)  (CamelStream *stream);
-	gboolean  (*eos)        (CamelStream *stream);
-	void      (*close)      (CamelStream *stream);
-	void      (*reset)      (CamelStream *stream);
-} CamelStreamClass;
-
-
-
-
-
-
-/* Standard Gtk function */
-GtkType camel_stream_get_type (void);
-
-
-
-
-/* public methods */
-gint       camel_stream_read      (CamelStream *stream, gchar *buffer, gint n);
-gint       camel_stream_write     (CamelStream *stream, const gchar *buffer, gint n);
-void       camel_stream_flush     (CamelStream *stream);
-gboolean   camel_stream_available (CamelStream *stream);
-gboolean   camel_stream_eos       (CamelStream *stream);
-void       camel_stream_close     (CamelStream *stream);
-void       camel_stream_reset     (CamelStream *stream);
-
-
-
-
-/* utility macros and funcs */
-#define camel_stream_write_string(stream, string) camel_stream_write ((stream), (string), strlen (string))
-
-void       camel_stream_write_strings (CamelStream *stream, ... );
-/* write a whole stream to another stream, until eof */
-/* FIXME: this should definetly have an error return code */
-void	   camel_stream_write_to_stream (CamelStream *stream, CamelStream *output_stream);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STREAM_H */
-
-
-
-
-
-
diff --git a/camel/camel-thread-proxy.c b/camel/camel-thread-proxy.c
deleted file mode 100644
index 9553499e8f..0000000000
--- a/camel/camel-thread-proxy.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-folder-pt-proxy.c : proxy folder using posix threads */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel-marshal-utils.h"
-#include "camel-thread-proxy.h"
-#include 
-#include 
-#include 
-#include 
-
-
-
-/* vocabulary: 
- *  operation: commanded by the main thread, executed by the child thread
- *  callback: commanded by the child thread, generally when an operation is 
- *    completed. Executed in the main thread, 
- */
-
-/* needed for proper casts of async funcs when 
- * calling pthreads_create
- */
-typedef void * (*thread_call_func) (void *);
-
-/* forward declarations */
-static gboolean  
-_thread_notification_catch (GIOChannel *source,
-			    GIOCondition condition,
-			    gpointer data);
-
-static void
-_notify_availability (CamelThreadProxy *proxy, gchar op_name);
-
-static int
-_init_notify_system (CamelThreadProxy *proxy);
-
-
-
-/**
- * camel_thread_proxy_new: create a new proxy object
- *  
- * Create a new proxy object. This proxy object can be used 
- * to run async operations and this operations can trigger 
- * callbacks. It can also be used to proxy signals.
- * 
- * Return value: The newly created proxy object
- **/
-CamelThreadProxy *
-camel_thread_proxy_new (void)
-{
-	CamelThreadProxy *proxy;
-	
-	proxy = g_new (CamelThreadProxy, 1);
-	if (!proxy)
-		return NULL;
-
-	proxy->server_op_queue = camel_op_queue_new ();
-	proxy->client_op_queue = camel_op_queue_new ();
-	proxy->signal_data_cond = g_cond_new();
-	proxy->signal_data_mutex = g_mutex_new();
-	if (_init_notify_system (proxy) < 0) {
-		g_free (proxy);
-		return NULL;
-	}
-	return proxy;
-}
-
-
-/**
- * camel_thread_proxy_free: free a proxy object
- * @proxy: proxy object to free
- * 
- * free a proxy object
- **/
-void 
-camel_thread_proxy_free (CamelThreadProxy *proxy)
-{
-	g_cond_free (proxy->signal_data_cond);
-	g_mutex_free (proxy->signal_data_mutex);
-	camel_op_queue_free (proxy->server_op_queue);
-	camel_op_queue_free (proxy->client_op_queue);
-}
-
-
-
-
-
-/* Operations handling */
-
-
-/**
- * _op_run_free_notify:
- * @folder: folder to notify when the operation is completed. 
- * @op: operation to run. 
- * 
- * run an operation, free the operation field
- * and then notify the main thread of the op
- * completion.
- * 
- * this routine is intended to be called 
- * in a new thread (in _run_next_op_in_thread)
- * 
- **/
-void
-_op_run_free_and_notify (CamelOp *op)
-{
-	CamelThreadProxy *th_proxy;
-	
-	camel_op_run (op);
-	camel_op_free (op);
-	th_proxy = camel_op_get_user_data (op);
-	_notify_availability (th_proxy, 'a');
-}
-
-
-/**
- * _run_next_op_in_thread:  
- * @proxy_object: 
- * 
- * run the next operation pending in the proxy 
- * operation queue
- **/
-static void 
-_run_next_op_in_thread (CamelThreadProxy *proxy)
-{
-	CamelOp *op;
-	CamelOpQueue *server_op_queue;
-	pthread_t thread;
-
-	server_op_queue = proxy->server_op_queue;
-	/* get the next pending operation */
-	op = camel_op_queue_pop_op (server_op_queue);
-	if (!op) {
-		camel_op_queue_set_service_availability (server_op_queue, TRUE);
-		return;
-	}
-	
-	/* run the operation in a child thread */
-	pthread_create (&thread, NULL, (thread_call_func) _op_run_free_and_notify, op);
-}
-
-
-
-/**
- * camel_thread_proxy_push_op: push an operation in the proxy operation queue
- * @proxy: proxy object 
- * @op: operation to push in the execution queue
- * 
- * if no thread is currently running, executes the 
- * operation directly, otherwise push the operation 
- * in the proxy operation queue.
- **/
-void 
-camel_thread_proxy_push_op (CamelThreadProxy *proxy, CamelOp *op)
-{
-	CamelOpQueue *server_op_queue;
-	
-	g_assert (proxy);
-	server_op_queue = proxy->server_op_queue;
-	
-	/* put the proxy object in the user data
-	   so that it can be notified when the 
-	   operation is completed */
-	camel_op_set_user_data (op, (gpointer)proxy);
-	
-	/* get next operation */
-	camel_op_queue_push_op (server_op_queue, op);
-	
-	if (camel_op_queue_get_service_availability (server_op_queue)) {
-		/* no thread is currently running, run 
-		 * the next operation. */
-		camel_op_queue_set_service_availability (server_op_queue, FALSE);
-		/* when the operation is completed in the 
-		   child thread the main thread gets 
-		   notified and executes next operation 
-		   (see _thread_notification_catch, case 'a')
-		   so there is no need to set the service
-		   availability to FALSE except here 
-		*/
-		_run_next_op_in_thread (proxy);		
-	}
-}
-/**
- * _op_run_and_free: Run an operation and free it
- * @op: Operation object
- * 
- * Run an operation object in the current thread 
- * and free it.
- **/
-static void
-_op_run_and_free (CamelOp *op)
-{
-	camel_op_run (op);
-	camel_op_free (op);
-}
-
-
-
-
-
-
-/* Callbacks handling */
-
-/**
- * _run_next_cb: Run next callback pending in a proxy object 
- * @proxy: Proxy object 
- * 
- * Run next callback in the callback queue of a proxy object 
- **/
-static void 
-_run_next_cb (CamelThreadProxy *proxy)
-{
-	CamelOp *op;
-	CamelOpQueue *client_op_queue;
-
-	client_op_queue = proxy->client_op_queue;
-
-	/* get the next pending operation */
-	op = camel_op_queue_pop_op (client_op_queue);
-	if (!op) return;
-	
-	/* run the operation in the main thread */
-	_op_run_and_free (op);
-}
-
-
-/**
- * camel_thread_proxy_push_cb: push a callback in the client queue
- * @proxy: proxy object concerned by the callback
- * @cb: callback to push
- * 
- * Push an operation in the client queue, ie the queue 
- * containing the operations (callbacks) intended to be
- * executed in the main thread.
- **/
-void 
-camel_thread_proxy_push_cb (CamelThreadProxy *proxy, CamelOp *cb)
-{
-	CamelOpQueue *client_op_queue;
-	
-	client_op_queue = proxy->client_op_queue;
-
-	/* put the proxy object in the user data
-	   so that it can be notified when the 
-	   operation is completed */
-	camel_op_set_user_data (cb, (gpointer)proxy);
-	
-	/* push the callback in the client queue */
-	camel_op_queue_push_op (client_op_queue, cb);
-	
-	/* tell the main thread a new callback is there */
-	_notify_availability (proxy, 'c');
-}  
-
-
-
-/**
- * _init_notify_system: set the notify channel up
- * @proxy: proxy object 
- * 
- * called once to set the notification channel up
- **/
-static int
-_init_notify_system (CamelThreadProxy *proxy)
-{
-	int filedes[2];
-
-	/* set up the notification channel */
-	if (pipe (filedes) < 0) {
-		g_warning ("could not create pipe in "
-			   "CamelThreadProxy::_init_notify_system\n");
-		return -1;
-	}
-	
-	
-	proxy->pipe_client_fd = filedes [0];
-	proxy->pipe_server_fd = filedes [1];
-	proxy->notify_source =  g_io_channel_unix_new (filedes [0]);
-	proxy->notify_channel =  g_io_channel_unix_new (filedes [1]);
-	
-	/* the _thread_notification_catch function 
-	* will be called in the main thread when the 
-	* child thread writes some data in the channel */ 
-	g_io_add_watch (proxy->notify_source, G_IO_IN,
-			_thread_notification_catch, 
-			proxy);
-	
-	return 1;
-}
-
-/**
- * _notify_availability: notify the main thread from an event
- * @proxy: proxy object
- * @op_name: operation name
- *
- * called by child thread  to notify the main 
- * thread  something is available for him.
- * What this thing is depends on  @op_name:
- *
- * 'a' : thread available. That means the thread is ready 
- *       to process an operation. 
- * 's' : a signal is available. Used by the signal proxy.
- *
- */
-static void
-_notify_availability (CamelThreadProxy *proxy, gchar op_name)
-{
-	GIOChannel *notification_channel;
-	guint bytes_written;
-
-	notification_channel = proxy->notify_channel;	
-
-	do {
-		/* the write operation will trigger the
-		 * watch on the main thread side */
-		g_io_channel_write  (notification_channel,
-				     &op_name,
-				     1,
-				     &bytes_written);	
-	} while (bytes_written < 1);
-}
-
-
-
-/* signal proxying */
-
-
-
-/**
- * _signal_marshaller_server_side: called in the child thread to proxy a signal    
- * @object: 
- * @data: 
- * @n_args: 
- * @args: 
- * 
- * 
- **/
-static void
-_signal_marshaller_server_side (GtkObject *object,
-				gpointer data,
-				guint n_args,
-				GtkArg *args)
-{
-	CamelThreadProxy *proxy;
-	guint signal_id;
-	
-	proxy = CAMEL_THREAD_PROXY (gtk_object_get_data (object, "__proxy__"));
-	signal_id = (guint)data;
-	g_assert (proxy);
-
-	g_mutex_lock (proxy->signal_data_mutex);
-	
-	/* we are going to wait for the main client thread 
-	 * to have emitted the last signal we asked him
-	 * to proxy.
-	 */
-	while (proxy->signal_data.args)
-		g_cond_wait (proxy->signal_data_cond,
-			     proxy->signal_data_mutex);
-
-	proxy->signal_data.signal_id = signal_id;
-	proxy->signal_data.args = args;
-
-	
-	g_mutex_unlock (proxy->signal_data_mutex);
-
-	/* tell the main thread there is a signal pending */
-	_notify_availability (proxy, 's');
-}
-
-
-static void
-_signal_marshaller_client_side (CamelThreadProxy *proxy)
-{
-	g_mutex_lock (proxy->signal_data_mutex);
-	g_assert (proxy->signal_data.args);
-	
-	/* emit the pending signal */
-	gtk_signal_emitv (GTK_OBJECT (proxy), 
-			  proxy->signal_data.signal_id,
-			  proxy->signal_data.args);
-
-	proxy->signal_data.args = NULL;
-
-	/* if waiting for the signal to be treated,
-	 * awake the client thread up 
-	 */ 
-	g_cond_signal (proxy->signal_data_cond);
-	g_mutex_unlock (proxy->signal_data_mutex);	
-}
-
-
-/**
- * camel_thread_proxy_add_signals: init the signal proxy
- * @proxy: proxy 
- * @proxy_object: Proxy Gtk Object 
- * @real_object: Real Gtk Object 
- * @signal_to_proxy: NULL terminated array of signal name 
- * 
- * Add some signals to the list of signals to be 
- * proxied by the proxy object.
- * The signals emitted by the real object in the child
- * thread are reemited by the proxy object in the 
- * main thread.
- **/
-void 
-camel_thread_proxy_add_signals (CamelThreadProxy *proxy, 
-				GtkObject *proxy_object,
-				GtkObject *real_object,
-				char *signal_to_proxy[])
-{
-	guint i;
- 
-	for (i=0; signal_to_proxy[i]; i++) {
-		/* connect the signal to the signal marshaller
-		 * user_data is the signal id */
-		gtk_signal_connect_full (GTK_OBJECT (real_object),
-					 signal_to_proxy[i],
-					 NULL,
-					 _signal_marshaller_server_side,
-					 (gpointer)gtk_signal_lookup (signal_to_proxy[i], 
-								      GTK_OBJECT_CLASS (real_object)->type),
-					 NULL,
-					 TRUE,
-					 FALSE);
-	}
-}
-
-/****   catch notification from child thread ****/
-/**
- * _thread_notification_catch: call by glib loop when data is available on the thread io channel
- * @source: 
- * @condition: 
- * @data: 
- * 
- * called by watch set on the IO channel
- * 
- * Return value: TRUE because we don't want the watch to be removed
- **/
-static gboolean  
-_thread_notification_catch (GIOChannel *source,
-			    GIOCondition condition,
-			    gpointer data)
-{
-	CamelThreadProxy *proxy = CAMEL_THREAD_PROXY (data);	
-	gchar op_name;
-	guint bytes_read;
-	GIOError error;
-
-	error = g_io_channel_read (source,
-				   &op_name,
-				   1,
-				   &bytes_read);
-	
-	while ((!error) && (bytes_read == 1)) {
-		
-		switch (op_name) { 		
-		case 'a': /* the thread is OK for a new operation */
-			_run_next_op_in_thread (proxy);		
-			break;
-		case 's': /* there is a pending signal to proxy */
-			_signal_marshaller_client_side (proxy);
-			break;
-		case 'c': /* there is a cb pending in the main thread */
-			_run_next_cb (proxy);
-			break;
-		}
-		
-		error = g_io_channel_read (source,
-					   &op_name,
-					   1,
-					   &bytes_read);
-
-	}
-
-	/* do not remove the io watch */
-	return TRUE;
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/camel/camel-thread-proxy.h b/camel/camel-thread-proxy.h
deleted file mode 100644
index 2608e08878..0000000000
--- a/camel/camel-thread-proxy.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-folder-pt-proxy.h : proxy folder using posix threads */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_THREAD_PROXY_H
-#define CAMEL_THREAD_PROXY_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-op-queue.h"
-
-#define CAMEL_THREAD_PROXY(o)  (CamelThreadProxy *)(o)
-
-
-typedef struct {
-	guint signal_id;
-	GtkArg *args;
-} CamelThreadProxySignalData;
-
-
-typedef struct {
-
-	GtkObject *real_object;
-	GtkObject *proxy_object;
-	
-	CamelOpQueue *server_op_queue;
-	CamelOpQueue *client_op_queue;
-
-  
-	gint pipe_client_fd;
-	gint pipe_server_fd;
-	GIOChannel *notify_source;
-	GIOChannel *notify_channel;
-
-	/* signal proxy */
-	GMutex *signal_data_mutex;
-	GCond *signal_data_cond;
-	CamelThreadProxySignalData signal_data;
-
-} CamelThreadProxy;
-
-
-CamelThreadProxy *camel_thread_proxy_new (void);
-void camel_thread_proxy_free (CamelThreadProxy *proxy);
-
-void camel_thread_proxy_push_op (CamelThreadProxy *proxy, CamelOp *op);
-void camel_thread_proxy_push_cb (CamelThreadProxy *proxy, CamelOp *cb);
-
-void camel_thread_proxy_add_signals (CamelThreadProxy *proxy, 
-				     GtkObject *proxy_object,
-				     GtkObject *real_object,
-				     char *signal_to_proxy[]);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_THREAD_PROXY_H */
-
-
diff --git a/camel/camel-transport.c b/camel/camel-transport.c
deleted file mode 100644
index 849248a6e7..0000000000
--- a/camel/camel-transport.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-transport.c : Abstract class for an email transport */
-
-/* 
- *
- * Author : 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://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 
-#include "camel-transport.h"
-#include "camel-exception.h"
-
-/* Returns the class for a CamelTransport */
-#define CT_CLASS(so) CAMEL_TRANSPORT_CLASS (GTK_OBJECT(so)->klass)
-
-GtkType
-camel_transport_get_type (void)
-{
-	static GtkType camel_transport_type = 0;
-	
-	if (!camel_transport_type)	{
-		GtkTypeInfo camel_transport_info =	
-		{
-			"CamelTransport",
-			sizeof (CamelTransport),
-			sizeof (CamelTransportClass),
-			(GtkClassInitFunc) NULL,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_transport_type = gtk_type_unique (CAMEL_SERVICE_TYPE, &camel_transport_info);
-	}
-	
-	return camel_transport_type;
-}
-
-
-/**
- * camel_transport_can_send: Determine if a message is send-able on a transport
- * @transport: the transport
- * @message: the message
- *
- * Determines if a CamelMedium is of an appropriate subclass to send
- * via the given @transport. (Mail transports are not able to send
- * netnews articles, and vice versa.)
- *
- * Return value: TRUE or FALSE
- **/
-gboolean
-camel_transport_can_send (CamelTransport *transport, CamelMedium *message)
-{
-	return CT_CLASS (transport)->can_send (transport, message);
-}
-
-/**
- * camel_transport_send: Send a message via a transport
- * @transport: the transport
- * @message: the message
- * @ex: a CamelException
- *
- * Sends the message to the recipients indicated in the message.
- *
- * Return value: success or failure.
- **/
-gboolean
-camel_transport_send (CamelTransport *transport, CamelMedium *message,
-		      CamelException *ex)
-{
-	return CT_CLASS (transport)->send (transport, message, ex);
-}
-
-/**
- * camel_transport_send_to: Send a message non-standard recipients
- * @transport: the transport
- * @message: the message
- * @recipients: the recipients
- * @ex: a CamelException
- *
- * Sends the message to the given recipients, rather than to the
- * recipients indicated in the message.
- *
- * Return value: success or failure.
- **/
-gboolean
-camel_transport_send_to (CamelTransport *transport, CamelMedium *message,
-			 GList *recipients, CamelException *ex)
-{
-	return CT_CLASS (transport)->send_to (transport, message,
-					      recipients, ex);
-}
diff --git a/camel/camel-transport.h b/camel/camel-transport.h
deleted file mode 100644
index 1e41f4ac71..0000000000
--- a/camel/camel-transport.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-transport.h : Abstract class for an email transport */
-
-/* 
- *
- * Author : 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://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_TRANSPORT_H
-#define CAMEL_TRANSPORT_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-service.h"
-
-#define CAMEL_TRANSPORT_TYPE     (camel_transport_get_type ())
-#define CAMEL_TRANSPORT(obj)     (GTK_CHECK_CAST((obj), CAMEL_TRANSPORT_TYPE, CamelTransport))
-#define CAMEL_TRANSPORT_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_TRANSPORT_TYPE, CamelTransportClass))
-#define CAMEL_IS_TRANSPORT(o)    (GTK_CHECK_TYPE((o), CAMEL_TRANSPORT_TYPE))
-
-
-struct _CamelTransport
-{
-	CamelService parent_object;
-
-};
-
-
-
-typedef struct {
-	CamelServiceClass parent_class;
-
-	gboolean (*can_send) (CamelTransport *transport, CamelMedium *message);
-	gboolean (*send) (CamelTransport *transport, CamelMedium *message,
-			  CamelException *ex);
-	gboolean (*send_to) (CamelTransport *transport,
-			     CamelMedium *message, GList *recipients,
-			     CamelException *ex);
-} CamelTransportClass;
-
-
-/* public methods */
-gboolean camel_transport_can_send (CamelTransport *transport,
-				   CamelMedium *message);
-
-gboolean camel_transport_send (CamelTransport *transport,
-			       CamelMedium *message,
-			       CamelException *ex);
-
-gboolean camel_transport_send_to (CamelTransport *transport,
-				  CamelMedium *message,
-				  GList *recipients,
-				  CamelException *ex);
-
-/* Standard Gtk function */
-GtkType camel_transport_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_TRANSPORT_H */
diff --git a/camel/camel-types.h b/camel/camel-types.h
deleted file mode 100644
index a94e5b614b..0000000000
--- a/camel/camel-types.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- * Copyright 2000 Helix Code, Inc. (http://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_TYPES_H
-#define CAMEL_TYPES_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-typedef struct _CamelDataWrapper CamelDataWrapper;
-typedef struct _CamelException CamelException;
-typedef struct _CamelFolder CamelFolder;
-typedef struct _CamelFolderSummary CamelFolderSummary;
-typedef struct _CamelMedium CamelMedium;
-typedef struct _CamelMimeBodyPart CamelMimeBodyPart;
-typedef struct _CamelMimeMessage CamelMimeMessage;
-typedef struct _CamelMimePart CamelMimePart;
-typedef struct _CamelMultipart CamelMultipart;
-typedef struct _CamelSeekableStream CamelSeekableStream;
-typedef struct _CamelSeekableSubstream CamelSeekableSubstream;
-typedef struct _CamelService CamelService;
-typedef struct _CamelSession CamelSession;
-typedef struct _CamelSimpleDataWrapper CamelSimpleDataWrapper;
-typedef struct _CamelSimpleDataWrapperStream CamelSimpleDataWrapperStream;
-typedef struct _CamelStore CamelStore;
-typedef struct _CamelStream CamelStream;
-typedef struct _CamelStreamBuffer CamelStreamBuffer;
-typedef struct _CamelStreamDataWrapper CamelStreamDataWrapper;
-typedef struct _CamelStreamFs CamelStreamFs;
-typedef struct _CamelStreamMem CamelStreamMem;
-typedef struct _CamelTransport CamelTransport;
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_TYPES_H */
diff --git a/camel/camel-url.c b/camel/camel-url.c
deleted file mode 100644
index bb4c6f0810..0000000000
--- a/camel/camel-url.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-url.c : utility functions to parse URLs */
-
-
-/* 
- * Authors:
- *  Bertrand Guiheneuf 
- *  Dan Winship 
- *  Tiago Antào 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-
-#include 
-#include 
-#include 
-#include 
-#include "camel-url.h"
-#include "camel-exception.h"
-
-static char *url_encode (char *part, gboolean escape_unsafe,
-			 char *escape_extra);
-static void url_decode (char *part);
-
-/**
- * camel_url_new: create a CamelURL object from a string
- * @url_string: The string containing the URL to scan
- * 
- * This routine takes a string and parses it as a URL of the form:
- *
- *   protocol://user;AUTH=mech:password@host:port/path
- *
- * The protocol, followed by a ":" is required. If it is followed by
- * "//", there must be an "authority" containing at least a host,
- * which ends at the end of the string or at the next "/". If there
- * is an "@" in the authority, there must be a username before it,
- * and the host comes after it. The authmech, password, and port are
- * optional, and the punctuation that preceeds them is omitted if
- * they are. Everything after the authority (or everything after the
- * protocol if there was no authority) is the path. We consider the
- * "/" between the authority and the path to be part of the path,
- * although this is incorrect according to RFC 1738.
- *
- * The port, if present, must be numeric.
- * 
- * Return value: a CamelURL structure containing the URL items.
- **/
-CamelURL *
-camel_url_new (const char *url_string, CamelException *ex)
-{
-	CamelURL *url;
-	char *semi, *colon, *at, *slash;
-	char *p;
-
-	/* Find protocol: initial substring until ":" */
-	colon = strchr (url_string, ':');
-	if (!colon) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "URL string `%s' contains no protocol",
-				      url_string);
-		return NULL;
-	}
-
-	url = g_new0 (CamelURL, 1);
-	url->protocol = g_strndup (url_string, colon - url_string);
-	g_strdown (url->protocol);
-
-	/* Check protocol */
-	p = url->protocol;
-	while (*p) {
-		if (!((*p >= 'a' && *p <= 'z') ||
-		      (*p == '-') || (*p == '+') || (*p == '.'))) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-					      "URL string `%s' contains an invalid protocol",
-					      url_string);
-			return NULL;
-		}
-		p++;
-	}
-
-	if (strncmp (colon, "://", 3) != 0) {
-		if (*(colon + 1)) {
-			url->path = g_strdup (colon + 1);
-			url_decode (url->path);
-		}
-		return url;
-	}
-
-	url_string = colon + 3;
-
-	/* If there is an @ sign in the authority, look for user,
-	 * authmech, and password before it.
-	 */
-	slash = strchr (url_string, '/');
-	at = strchr (url_string, '@');
-	if (at && (!slash || at < slash)) {
-		colon = strchr (url_string, ':');
-		if (colon && colon < at) {
-			url->passwd = g_strndup (colon + 1, at - colon - 1);
-			url_decode (url->passwd);
-		} else {
-			url->passwd = NULL;
-			colon = at;
-		}
-
-		semi = strchr(url_string, ';');
-		if (semi && (semi < colon || (!colon && semi < at)) &&
-		    !strncasecmp (semi, ";auth=", 6)) {
-			url->authmech = g_strndup (semi + 6,
-						     colon - semi - 6);
-			url_decode (url->authmech);
-		} else {
-			url->authmech = NULL;
-			semi = colon;
-		}
-
-		url->user = g_strndup (url_string, semi - url_string);
-		url_decode (url->user);
-		url_string = at + 1;
-	} else
-		url->user = url->passwd = url->authmech = NULL;
-
-	/* Find host and port. */
-	slash = strchr (url_string, '/');
-	colon = strchr (url_string, ':');
-	if (slash && colon > slash)
-		colon = NULL;
-
-	if (colon) {
-		url->host = g_strndup (url_string, colon - url_string);
-		url->port = strtoul (colon + 1, &colon, 10);
-		if (*colon && colon != slash) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-					      "Port number in URL `%s' is non-"
-					      "numeric", url_string);
-			camel_url_free (url);
-			return NULL;
-		}
-	} else if (slash) {
-		url->host = g_strndup (url_string, slash - url_string);
-		url_decode (url->host);
-		url->port = 0;
-	} else {
-		url->host = g_strdup (url_string);
-		url_decode (url->host);
-		url->port = 0;
-	}
-
-	if (!slash)
-		slash = "/";
-	url->path = g_strdup (slash);
-	url_decode (url->path);
-
-	return url;
-}
-
-char *
-camel_url_to_string (CamelURL *url, gboolean show_passwd)
-{
-	char *return_result;
-	char *user = NULL, *authmech = NULL, *passwd = NULL;
-	char *host = NULL, *path = NULL;
-	char port[20];
-
-	if (url->user)
-		user = url_encode (url->user, TRUE, ":;@/");
-	if (url->authmech)
-		authmech = url_encode (url->authmech, TRUE, ":@/");
-	if (show_passwd && url->passwd)
-		passwd = url_encode (url->passwd, TRUE, "@/");
-	if (url->host)
-		host = url_encode (url->host, TRUE, ":/");
-	if (url->port)
-		g_snprintf (port, sizeof (port), "%d", url->port);
-	else
-		*port = '\0';
-	if (url->path)
-		path = url_encode (url->path, FALSE, NULL);
-
-	return_result = g_strdup_printf ("%s:%s%s%s%s%s%s%s%s%s%s%s",
-				url->protocol,
-				host ? "//" : "",
-				user ? user : "",
-				authmech ? ";auth=" : "",
-				authmech ? authmech : "",
-				passwd ? ":" : "",
-				passwd ? passwd : "",
-				user ? "@" : "",
-				host ? host : "",
-				*port ? ":" : "",
-				port,
-				path ? path : "");
-	g_free (user);
-	g_free (authmech);
-	g_free (passwd);
-	g_free (host);
-	g_free (path);
-
-	return return_result;
-}
-
-void
-camel_url_free (CamelURL *url)
-{
-	g_assert (url);
-
-	g_free (url->protocol);
-	g_free (url->user);
-	g_free (url->authmech);
-	g_free (url->passwd);
-	g_free (url->host);
-	g_free (url->path);
-
-	g_free (url);
-}
-
-
-static char *
-url_encode (char *part, gboolean escape_unsafe, char *escape_extra)
-{
-	char *work, *p;
-
-	/* worst case scenario = 3 times the initial */
-	p = work = g_malloc (3 * strlen (part) + 1);
-
-	while (*part) {
-		if (((guchar) *part >= 127) || ((guchar) *part <= ' ') ||
-		    (escape_unsafe && strchr ("\"%#<>{}|\\^~[]`", *part)) ||
-		    (escape_extra && strchr (escape_extra, *part))) {
-			sprintf (p, "%%%.02hX", (guchar) *part++);
-			p += 3;
-		} else
-			*p++ = *part++;
-	}
-	*p = '\0';
-
-	return work;
-}
-
-#define HEXVAL(c) (isdigit (c) ? (c) - '0' : tolower (c) - 'a' + 10)
-
-/* We decode URLs in place because: (a) the data passed in is always
- * private to CamelURL, (b) we never want to keep the encoded version,
- * (c) the decoded version is never longer than the encoded version,
- * so it's safe to rewrite in place.
- */
-static void
-url_decode (char *part)
-{
-	guchar *s, *d;
-
-	s = d = (guchar *)part;
-	while (*s) {
-		if (*s == '%') {
-			if (isxdigit (s[1]) && isxdigit (s[2])) {
-				*d++ = HEXVAL (s[1]) * 16 + HEXVAL (s[2]);
-				s += 3;
-			} else
-				*d++ = *s++;
-		} else
-			*d++ = *s++;
-	}
-	*d = '\0';
-}
diff --git a/camel/camel-url.h b/camel/camel-url.h
deleted file mode 100644
index 6b7d32aef1..0000000000
--- a/camel/camel-url.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-url.h : utility functions to parse URLs */
-
-/* 
- * Authors:
- *  Bertrand Guiheneuf 
- *  Dan Winship 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_URL_H
-#define CAMEL_URL_H 1
-
-#include 
-#include "camel-types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-typedef struct {
-	char *protocol;
-	char *user;
-	char *authmech;
-	char *passwd;
-	char *host;
-	int   port;
-	char *path;
-
-} CamelURL;
-
-CamelURL *camel_url_new (const char *url_string, CamelException *ex);
-char *camel_url_to_string (CamelURL *url, gboolean show_password);
-void camel_url_free (CamelURL *url);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* URL_UTIL_H */
diff --git a/camel/camel.c b/camel/camel.c
deleted file mode 100644
index 56d2056db0..0000000000
--- a/camel/camel.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "camel.h"
-
-gint
-camel_init(void)
-{
-
-
-#ifdef ENABLE_THREADS
-#ifdef G_THREADS_ENABLED	
-	g_thread_init (NULL);
-#else  /* G_THREADS_ENABLED */
-	printf ("Threads are not supported by your version of glib\n");
-#endif /* G_THREADS_ENABLED */
-#endif /* ENABLE_THREADS */
-
-	unicode_init ();
-
-	return data_wrapper_repository_init (); 
-}
diff --git a/camel/camel.h b/camel/camel.h
deleted file mode 100644
index 92cc475557..0000000000
--- a/camel/camel.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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_H
-#define CAMEL_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-gint camel_init (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_H */
diff --git a/camel/data-wrapper-repository.c b/camel/data-wrapper-repository.c
deleted file mode 100644
index f433383b85..0000000000
--- a/camel/data-wrapper-repository.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 "data-wrapper-repository.h"
-#include "camel-simple-data-wrapper.h"
-#include "camel-mime-message.h"
-#include "camel-multipart.h"
-#include 
-#include "hash-table-utils.h"
-
-static DataWrapperRepository _repository;
-static int _initialized = -1;
-GMimeContentField *_content_field;
-
-
-/**
- * data_wrapper_repository_init: initialize data wrapper repository 
- * 
- * initialize the data wrapper repository. When the repository has
- * already been initialized, returns -1. 
- * 
- * Return value: 1 if correctly initialized returns -1.
- **/
-gint 
-data_wrapper_repository_init ()
-{
-	if (_initialized != -1) return -1;
-	_repository.mime_links = g_hash_table_new (g_strcase_hash, g_strcase_equal);
-	data_wrapper_repository_set_data_wrapper_type ("multipart", camel_multipart_get_type());
-
-	/* this is a temporary default so that Michael can use get_stream on text messages  */
-	data_wrapper_repository_set_data_wrapper_type ("text", camel_simple_data_wrapper_get_type());
-
-	/* this is for matt the great lopper */
-	data_wrapper_repository_set_data_wrapper_type ("message/rfc822", camel_mime_message_get_type());
-	_content_field = gmime_content_field_new (NULL, NULL);
-	_initialized = 1;
-	return 1;
-}
-
-/**
- * data_wrapper_repository_set_data_wrapper_type: associate a data wrapper object type to a mime type
- * @mime_type: mime type
- * @object_type: object type
- * 
- * Associate an object type to a mime type. 
- **/
-void
-data_wrapper_repository_set_data_wrapper_type (const gchar *mime_type, GtkType object_type)
-{
-	gboolean already_exists;
-	gchar *old_mime_type;
-	GtkType old_gtk_type;
-	
-	already_exists = g_hash_table_lookup_extended (_repository.mime_links, (gpointer)mime_type,
-						       (gpointer)&old_mime_type, (gpointer)&old_gtk_type);
-	if (already_exists) 
-		g_hash_table_insert (_repository.mime_links, (gpointer)old_mime_type, (gpointer)object_type);
-	else
-		g_hash_table_insert (_repository.mime_links, (gpointer)g_strdup (mime_type), (gpointer)object_type);
-}
-
-
-
-/**
- * data_wrapper_repository_get_data_wrapper_type: get the gtk type object associated to a mime type
- * @mime_type: mime type
- * 
- * returns the GtkType of the data wrapper object associated to 
- * a particular mime type. The mime type must be a character string
- * of the form "type/subtype" or simply "type". When the complete
- * mime type ("type/subtype") is not associated to any particular 
- * data wrapper object, this routine looks for a default data wrapper
- * for the main mime type ("type"). When no particular association is
- * found for this mime type, the type of the SimpleDataWrapper is 
- * returned. 
- * 
- * 
- * Return value: the associated data wrapper object type.
- **/
-GtkType 
-data_wrapper_repository_get_data_wrapper_type (const gchar *mime_type)
-{
-	gboolean exists;
-	gchar *old_mime_type;
-	GtkType gtk_type;
-
-	/* find if the complete mime type exists */
-	exists = g_hash_table_lookup_extended (_repository.mime_links, (gpointer)mime_type,
-						       (gpointer)&old_mime_type, (gpointer)>k_type);
-	if (exists) { /* the complete mime type exists, return it */
-		return gtk_type;
-	} else { 
-		/* the complete mime type association does not exists */
-		/* is there an association for the main mime type ?   */
-		gmime_content_field_construct_from_string (_content_field, mime_type);
-		exists = g_hash_table_lookup_extended (_repository.mime_links, (gpointer)(_content_field->type),
-						       (gpointer)&old_mime_type, (gpointer)>k_type);
-		
-		if (exists) /* the main mime type association exists */
-			return gtk_type;
-		else
-			return camel_simple_data_wrapper_get_type();
-	}
-
-			
-		
-
-}
-
diff --git a/camel/data-wrapper-repository.h b/camel/data-wrapper-repository.h
deleted file mode 100644
index a6c560859d..0000000000
--- a/camel/data-wrapper-repository.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 DATA_WRAPPER_REPOSITORY_H
-#define DATA_WRAPPER_REPOSITORY_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-data-wrapper.h"
-
-
-
-typedef struct {
-	GHashTable *mime_links;
-} DataWrapperRepository;
-
-
-gint data_wrapper_repository_init ();
-void data_wrapper_repository_set_data_wrapper_type (const gchar *mime_type, GtkType object_type);
-GtkType data_wrapper_repository_get_data_wrapper_type (const gchar *mime_type);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* DATA_WRAPPER_REPOSITORY_H */
diff --git a/camel/gmime-content-field.c b/camel/gmime-content-field.c
deleted file mode 100644
index 53d5135c23..0000000000
--- a/camel/gmime-content-field.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* mime-content_field.c : mime content type field utilities  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include 
-#include "camel-mime-utils.h"
-
-/**
- * gmime_content_field_new: Creates a new GMimeContentField object
- * @type: mime type
- * @subtype: mime subtype 
- * 
- * Creates a GMimeContentField object and initialize it with
- * a mime type and a mime subtype. For example, 
- * gmime_content_field_new ("application", "postcript");
- * will create a content field with complete mime type 
- * "application/postscript"
- * 
- * Return value: The newly created GMimeContentField object
- **/
-GMimeContentField *
-gmime_content_field_new (const gchar *type, const gchar *subtype)
-{
-	GMimeContentField *ctf;
-
-	ctf = g_new (GMimeContentField, 1);
-	ctf->content_type = header_content_type_new(type, subtype);
-	ctf->type = ctf->content_type->type;
-	ctf->subtype = ctf->content_type->subtype;
-	ctf->ref = 1;
-	return ctf;
-} 
-
-/**
- * gmime_content_field_ref: add a reference to a GMimeContentField object
- * @content_field: GMimeContentField object
- * 
- * Tell a GMimeContentField object that something holds a reference
- * on him. This, coupled with the corresponding 
- * gmime_content_field_unref() method allow several 
- * objects to use the same GMimeContentField object.
- **/
-void 
-gmime_content_field_ref (GMimeContentField *content_field)
-{
-	content_field->ref += 1;
-	header_content_type_ref (content_field->content_type);
-}
-
-/**
- * gmime_content_field_unref: remove a reference to a GMimeContentField object
- * @content_field: GMimeContentField object
- * 
- * Tell a GMimeContentField object that something which 
- * was holding a reference to him does not need it anymore.
- * When no more reference exist, the GMimeContentField object
- * is freed using gmime_content_field_free().
- *
- **/
-void 
-gmime_content_field_unref (GMimeContentField *content_field)
-{
-	if (!content_field) return;
-	
-	content_field->ref -= 1;
-	header_content_type_unref (content_field->content_type);
-	if (content_field->ref <= 0)
-		g_free (content_field);
-}
-
-
-
-/**
- * gmime_content_field_set_parameter: set a parameter for a GMimeContentField object
- * @content_field: content field
- * @attribute: parameter name 
- * @value: paramteter value
- * 
- * set a parameter (called attribute in RFC 2045) of a content field. Meaningfull
- * or valid parameters name depend on the content type object. For example, 
- * gmime_content_field_set_parameter (cf, "charset", "us-ascii");
- * will make sense for a "text/plain" content field but not for a 
- * "image/gif". This routine does not check parameter validity.
- **/
-void 
-gmime_content_field_set_parameter (GMimeContentField *content_field, const gchar *attribute, const gchar *value)
-{
-	header_content_type_set_param(content_field->content_type, attribute, value);
-}
-
-/**
- * gmime_content_field_write_to_stream: write a mime content type to a stream
- * @content_field: content type object
- * @stream: the stream
- * 
- * 
- **/
-void
-gmime_content_field_write_to_stream (GMimeContentField *content_field, CamelStream *stream)
-{
-	char *txt;
-
-	if (!content_field)
-		return;
-
-	txt = header_content_type_format(content_field->content_type);
-	if (txt) {
-		camel_stream_write_strings (stream, "Content-Type: ", txt, "\n", NULL);
-		g_free(txt);
-	}
-}
-
-/**
- * gmime_content_field_get_mime_type: return the mime type of the content field object
- * @content_field: content field object
- * 
- * A RFC 2045 content type field contains the mime type in the
- * form "type/subtype" (example : "application/postscript") and some
- * parameters (attribute/value pairs). This routine returns the mime type 
- * in a gchar object. THIS OBJECT MUST BE FREED BY THE CALLER.
- * 
- * Return value: the mime type in the form "type/subtype" or NULL if not defined.
- **/
-gchar * 
-gmime_content_field_get_mime_type (GMimeContentField *content_field)
-{
-	gchar *mime_type;
-
-	if (!content_field->content_type->type) return NULL;
-
-	if (content_field->content_type->subtype) 
-		mime_type = g_strdup_printf ("%s/%s", content_field->content_type->type, content_field->content_type->subtype);
-	else 
-		mime_type = g_strdup (content_field->content_type->type);
-	return mime_type;
-}
-
-/**
- * gmime_content_field_get_parameter: return the value of a mime type parameter
- * @content_field: content field object
- * @name: name of the parameter
- * 
- * Returns the value of a parameter contained in the content field 
- * object. The content type is formed of a mime type, a mime subtype,
- * and a parameter list. Each parameter is a name/value pair. This 
- * routine returns the value assiciated to a given name. 
- * When the parameter does not exist, NULL is returned. 
- * 
- * Return value: parameter value, or NULL if not found.
- **/
-const gchar *
-gmime_content_field_get_parameter (GMimeContentField *content_field, const gchar *name)
-{
-	g_assert (content_field);
-
-	g_assert (name);
-	return header_content_type_param(content_field->content_type, name);
-}
-
-
-
-
-/**
- * gmime_content_field_construct_from_string: construct a ContentType object by parsing a string.
- *
- * @content_field: content type object to construct 
- * @string: string containing the content type field 
- * 
- * Parse a string containing a content type field as defined in
- * RFC 2045, and construct the corresponding ContentType object.
- * The string is not modified and not used in the ContentType 
- * object. It can and must be freed by the calling part.
- **/
-void
-gmime_content_field_construct_from_string (GMimeContentField *content_field, const gchar *string)
-{
-	struct _header_content_type *new;
-
-	g_assert (string);
-	g_assert (content_field);
-
-	new = header_content_type_decode(string);
-	if (content_field->content_type)
-		header_content_type_unref(content_field->content_type);
-
-	if (new == NULL) {
-		new = header_content_type_new(NULL, NULL);
-		g_warning("Cannot parse content-type string: %s", string);
-	}
-	content_field->content_type = new;
-	content_field->type = new->type;
-	content_field->subtype = new->subtype;
-}
-
-/**
- * gmime_content_field_is_type:
- * @content_field: An initialised GMimeContentField.
- * @type: MIME Major type name.
- * @subtype: MIME subtype.
- * 
- * Returns true if the content_field is of the type @type and subtype @subtype.
- * If @subtype is the special wildcard "*", then it will match any type.
- *
- * If the @content_field is empty, then it will match "text/plain", or "text/ *".
- * 
- * Return value: 
- **/
-int
-gmime_content_field_is_type (GMimeContentField *content_field, const char *type, const char *subtype)
-{
-	return header_content_type_is(content_field->content_type, type, subtype);
-}
diff --git a/camel/gmime-content-field.h b/camel/gmime-content-field.h
deleted file mode 100644
index 5a28d0fedb..0000000000
--- a/camel/gmime-content-field.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* mime-content_field.h : mime content type field utilities  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 GMIME_CONTENT_FIELD_H
-#define GMIME_CONTENT_FIELD_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-#include 
-
-typedef struct {
-	struct _header_content_type *content_type;
-
-	/* these should be deprecated (use the accessors) */
-	char *type;		/* these are only copies of the ones in content_type */
-	char *subtype;
-
-	gint ref;
-
-} GMimeContentField;
-
-GMimeContentField *gmime_content_field_new (const gchar *type, const gchar *subtype);
-void gmime_content_field_ref (GMimeContentField *content_field);
-void gmime_content_field_unref (GMimeContentField *content_field);
-
-void gmime_content_field_set_parameter (GMimeContentField *content_field, const gchar *attribute, const gchar *value);
-void gmime_content_field_write_to_stream (GMimeContentField *content_field, CamelStream *stream);
-void gmime_content_field_construct_from_string (GMimeContentField *content_field, const gchar *string);
-void gmime_content_field_free (GMimeContentField *content_field);
-gchar * gmime_content_field_get_mime_type (GMimeContentField *content_field);
-const gchar *gmime_content_field_get_parameter (GMimeContentField *content_field, const gchar *name);
-
-int gmime_content_field_is_type (GMimeContentField *content_field, const char *type, const char *subtype);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GMIME_CONTENT_FIELD_H */
diff --git a/camel/gmime-utils.c b/camel/gmime-utils.c
deleted file mode 100644
index 170fb667bb..0000000000
--- a/camel/gmime-utils.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* mime-utils.c : misc utilities for mime  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include 
-#include "gmime-utils.h"
-#include "string-utils.h"
-#include "camel-stream.h"
-
-void
-gmime_write_header_pair_to_stream (CamelStream *stream, const gchar* name, const gchar *value)
-{
-
-	gchar *strtmp;
-
-	g_assert(name);
-
-	if (!value) return; 
-	strtmp = g_strdup_printf ("%s: %s\n", name, value);
-	
-	camel_stream_write_string (stream, strtmp);
-	
-	g_free (strtmp);
-}
-
-
-static void
-_write_one_header_to_stream (gpointer key, gpointer value, gpointer user_data)
-{
-	gchar *header_name = (gchar *)key;
-	gchar *header_value = (gchar *)value;
-	CamelStream *stream = (CamelStream *)user_data;
-
-	if ((header_name) && (header_value))
-		gmime_write_header_pair_to_stream (stream, header_name, header_value);		
-}
-
-void 
-gmime_write_header_table_to_stream (CamelStream *stream, GHashTable *header_table)
-{
-	g_hash_table_foreach (header_table, 
-			      _write_one_header_to_stream, 
-			      (gpointer)stream);
-}
-
-
-void 
-gmime_write_header_with_glist_to_stream (CamelStream *stream, 
-					 const gchar *header_name, 
-					 GList *header_values, 
-					 const gchar *separator)
-{
-	
-	gchar *current;
-
-	if ( (header_name) && (header_values) )
-		{
-			gboolean first;
-			
-			camel_stream_write (stream, header_name, strlen (header_name) );
-			camel_stream_write (stream, ": ", 2);
-			first = TRUE;
-			while (header_values) {
-				current = (gchar *)header_values->data;
-				if (current) {
-					if (!first) camel_stream_write_string (stream, separator);
-					else first = FALSE;
-					camel_stream_write (stream, current, strlen (current));
-				}
-				header_values = g_list_next (header_values);
-			}
-			camel_stream_write (stream, "\n", 1);
-		}
-}	
-
-
-
-
-
-/* * * * * * * * * * * */
-/* scanning functions  */
-
-static void
-_store_header_pair_from_string (GArray *header_array, gchar *header_line)
-{
-#if 0
-	gchar dich_result;
-	gchar *header_name, *header_value;
-#endif
-	Rfc822Header header;
-
-	g_assert (header_array);
-	g_return_if_fail (header_line);
-
-
-	if (header_line) {
-#if 1
-		char *p = strchr(header_line, ':');
-		if (p) {
-			header.name = g_strndup(header_line, p-header_line);
-			header.value = g_strdup(p+1);
-			string_trim (header.value, " \t",
-				     STRING_TRIM_STRIP_LEADING | STRING_TRIM_STRIP_TRAILING);
-			g_array_append_val (header_array, header);
-		}
-#else
-		dich_result = string_dichotomy ( header_line, ':', 
-						   &header_name, &header_value,
-						   STRING_DICHOTOMY_NONE);
-		if (dich_result != 'o') {
-			g_warning ("** WARNING **\n"
-				   "store_header_pair_from_string : "
-				   "dichotomy result is '%c'\n"
-				   "header line is :\n--\n%s\n--\n"
-				   "** \n", dich_result, header_line);	
-			if (header_name) 
-				g_free (header_name);
-			if (header_value) 
-				g_free (header_value);
-			
-		} else {
-			string_trim (header_value, " \t",
-				     STRING_TRIM_STRIP_LEADING | STRING_TRIM_STRIP_TRAILING);
-
-			header.name = header_name;
-			header.value = header_value;
-			g_array_append_val (header_array, header);
-			printf("adding header '%s' : '%s'\n", header_name, header_value);
-		}
-#endif
-	}
-}
-
-
-	
-/* 
-   this is a blocking version of the 
-   header parsing. Need to change when 
-   fs streams are non blocking
-*/
-GArray *
-get_header_array_from_stream (CamelStream *stream)
-{
-#warning Correct Lazy Implementation 
-	/* should not use GString. */
-	/* should read the header line by line */
-	/* and not char by char */
-	gchar next_char;
-	gint nb_char_read;
-
-	gboolean crlf = FALSE;
-	gboolean end_of_header_line = FALSE;
-	gboolean end_of_headers = FALSE;
-	gboolean end_of_file = FALSE;
-
-	GString *header_line=NULL;
-	GArray *header_array;
-
-
-	header_array = g_array_new (FALSE, FALSE, sizeof (Rfc822Header));
-
-	nb_char_read = camel_stream_read (stream, &next_char, 1);
-	do {
-		header_line = g_string_new ("");
-		end_of_header_line = FALSE;
-		crlf = FALSE;
-		
-		/* read a whole header line */
-		do {
-			if (nb_char_read>0) {
-				switch (next_char) {
-					
-				case '\r':
-				case '\n': /* a blank line means end of headers */
-					if (crlf) {
-						end_of_headers=TRUE;
-						end_of_header_line = TRUE;
-					}
-					else crlf = TRUE;
-					break;
-				case ' ':
-				case '\t':
-					if (crlf) {
-						crlf = FALSE; 
-						next_char = ' ';
-					}
-					
-				default:
-					if (!crlf) header_line = g_string_append_c (header_line, next_char);					
-					else end_of_header_line = TRUE;
-
-				}
-			} else {
-				
-				if (camel_stream_eos (stream)) {
-
-					end_of_file=TRUE;
-					end_of_header_line = TRUE;
-					
-				}
-			}
-			
-			/* if we have read a whole header line, we have also read
-			   the first character of the next line to be sure the 
-			   crlf was not followed by a space or a tab char */
-			if (!end_of_header_line) nb_char_read = camel_stream_read (stream, &next_char, 1);
-			
-		} while ( !end_of_header_line );
-		if ( strlen(header_line->str) ) {
-			/*  str_header_line = g_strdup (header_line->str); */
-			/*printf("got header line: %s\n", header_line->str);*/
-			_store_header_pair_from_string (header_array, header_line->str);			
-		}
-		g_string_free (header_line, TRUE);
-		
-	} while ( (!end_of_headers) && (!end_of_file) );
-	
-	return header_array;
-}
-		
-		
-
-gchar *
-gmime_read_line_from_stream (CamelStream *stream)
-{
-	GString *new_line;
-	gchar *result;
-	gchar next_char;
-	gboolean end_of_line = FALSE;
-	gboolean end_of_stream = FALSE;
-	gint nb_char_read;
-
-	new_line = g_string_new ("");
-	do {
-		nb_char_read = camel_stream_read (stream, &next_char, 1);
-		
-		if (nb_char_read>0) {
-			
-			switch (next_char) {
-			case '\n':				
-				end_of_line = TRUE;
-				/*  g_string_append_c (new_line, next_char); */
-				break;
-			default:
-				g_string_append_c (new_line, next_char);
-
-			}
-		} else {
-
-			if (camel_stream_eos (stream)) 
-				end_of_stream = TRUE;
-
-		}
-	} while (!end_of_line && !end_of_stream);
-
-
-	if (!end_of_stream)
-		result = g_strdup (new_line->str);
-	else result=NULL;
-
-	g_string_free (new_line, TRUE);
-
-	return result;
-}
diff --git a/camel/gmime-utils.h b/camel/gmime-utils.h
deleted file mode 100644
index 99f240bebc..0000000000
--- a/camel/gmime-utils.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* mime-utils.h : misc utilities for mime  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 GMIME_UTILS_H
-#define GMIME_UTILS_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-
-typedef struct 
-{
-	gchar *name;
-	gchar *value;	
-
-} Rfc822Header;
-
-
-void gmime_write_header_pair_to_stream (CamelStream *stream, 
-					const gchar* name, 
-					const gchar *value);
-
-void gmime_write_header_table_to_stream (CamelStream *stream, 
-					 GHashTable *header_table);
-
-void gmime_write_header_with_glist_to_stream (CamelStream *stream, 
-					      const gchar *header_name, 
-					      GList *header_values, 
-					      const gchar *separator);
-
-GArray *get_header_array_from_stream (CamelStream *stream);
-gchar *gmime_read_line_from_stream (CamelStream *stream);
-
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GMIME_UTILS_H */
diff --git a/camel/gstring-util.c b/camel/gstring-util.c
deleted file mode 100644
index ebfd569e8e..0000000000
--- a/camel/gstring-util.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* gstring-util : utilities for gstring object  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "gstring-util.h"
-#include 
-
-/**
- * g_string_equals : test if two string are equal
- *
- * @string1 : first string
- * @string2 : second string
- *
- * @Return Value : true if the strings equal, false otherwise
- **/
-gboolean
-g_string_equals (GString *string1, GString *string2)
-{
-	g_assert (string1);
-	g_assert (string2);
-	return !strcmp (string1->str, string2->str);
-}
-
-
-
-
-/**
- * g_string_clone : clone a GString
- *
- * @string : the string to clone
- *
- * @Return Value : the clone ...
- **/
-GString *
-g_string_clone (GString *string)
-{
-	return g_string_new (g_strdup (string->str) );
-}
-
-
-
-
-/**
- * g_string_dichotomy:
- * @sep : separator
- * @prefix: pointer to be field by the prefix object
- *   the prefix is not returned when the given pointer is NULL
- * @suffix: pointer to be field by the suffix object
- *   the suffix is not returned when the given pointer is NULL
- *
- * Return the strings before and/or after 
- * the last occurence of the specified separator
- *
- * This routine returns the string before and/or after
- * a character given as an argument. 
- * if the separator is the last character, prefix and/or
- * suffix is set to NULL and result is set to 'l'
- * if the separator is not in the list, prefix and/or
- * suffix is set to NULL and result is set to 'n'
- * When the operation succedeed, the return value is 'o'
- *
- * @Return Value : result of the operation ('o', 'l' or 'n')
- *
- **/
-gchar
-g_string_dichotomy (GString *string, gchar sep, GString **prefix, GString **suffix,
-		    GStringDichotomyOption options)
-{
-	gchar *str, *tmp;
-	gint pos, len, first;
-	
-	g_assert (tmp=string->str);
-	len = strlen (tmp);
-	if (!len) {
-		if (prefix)
-			*prefix=NULL;
-		if (suffix)
-			*suffix=NULL;
-		return 'n';
-	}
-	first = 0;
-	
-	if ((options & GSTRING_DICHOTOMY_STRIP_LEADING ) && (tmp[first] == sep) )
-	    do {first++;} while ( (first=first) && (tmp[pos]!=sep));
-	} else {
-		pos = first;
-		do {
-			pos++;
-		} while ((pos=len) ) 
-		{
-			if (suffix) *suffix=NULL;
-			if (prefix) *prefix=NULL;
-			return 'n';
-		}
-	
-	/* if we have stripped trailing separators, we should */
-	/* never enter here */
-	if (pos==len-1) 
-		{
-			if (suffix) *suffix=NULL;
-			if (prefix) *prefix=NULL;
-			return 'l';
-		}
-	/* if we have stripped leading separators, we should */
-	/* never enter here */
-	if (pos==first)
-		{
-			if (suffix) *suffix=NULL;
-			if (prefix) *prefix=NULL;
-			return 'l';
-		}
-	
-	if (prefix) /* return the prefix */
-	{
-		str = g_strndup(tmp,pos);
-		*prefix = g_string_new(str);
-		g_free(str);
-	}
-	if (suffix) /* return the suffix */
-		{
-			str = g_strdup(tmp+pos+1);
-			*suffix = g_string_new(str);
-			g_free(str);
-	}
-	
-	return 'o';
-}
-
-
-/**
- * g_string_append_g_string : append a GString to another  GString
- *
- * @dest_string : string which will be appended
- * @other_string : string to append
- *
- **/
-void 
-g_string_append_g_string(GString *dest_string, GString *other_string)
-{
-	g_assert(other_string);
-	g_assert(dest_string);
-	g_assert(other_string->str);
-
-	g_string_append(dest_string, other_string->str);
-}
-
-
-
-/**
- * g_string_equal_for_hash: test equality of two GStrings for hash tables
- * @v: string 1
- * @v2: string 2
- * 
- * 
- * 
- * Return value: 
- **/
-gint
-g_string_equal_for_hash (gconstpointer v, gconstpointer v2)
-{
-  return strcmp ( ((const GString*)v)->str, ((const GString*)v2)->str) == 0;
-}
-
-gint
-g_string_equal_for_glist (gconstpointer v, gconstpointer v2)
-{
-  return !strcmp ( ((const GString*)v)->str, ((const GString*)v2)->str) == 0;
-}
-
-
-/**
- * g_string_hash: computes a hash value for a Gstring
- * @v: Gstring object
- * 
- * 
- * 
- * Return value: 
- **/
-guint 
-g_string_hash (gconstpointer v)
-{
-	return g_str_hash(((const GString*)v)->str);
-}
-
-
-
-
-/* utility func : frees a GString element in a GList */
-static void 
-__g_string_list_free_string (gpointer data, gpointer user_data)
-{
-	GString *string = (GString *)data;
-	g_string_free(string, TRUE);
-}
-
-
-void 
-g_string_list_free (GList *string_list)
-{
-	g_list_foreach(string_list, __g_string_list_free_string, NULL);
-	g_list_free(string_list);
-}
-
-
-
-
-
-
-GList *
-g_string_split (GString *string, char sep, gchar *trim_chars, GStringTrimOption trim_options)
-{
-	GList *result = NULL;
-	gint first, last, pos;
-	gchar *str;
-	gchar *new_str;
-	GString *new_gstring;
-
-	g_assert (string);
-	str = string->str;
-	if (!str) return NULL;
-
-	first = 0;
-	last = strlen(str) - 1;
-	
-	/* strip leading and trailing separators */
-	while ( (first<=last) && (str[first]==sep) )
-		first++;
-	while ( (first<=last) && (str[last]==sep) )
-		last--;
-
-	
-	while (first<=last)  {
-		pos = first;
-		/* find next separator */
-		while ((pos<=last) && (str[pos]!=sep)) pos++;
-		if (first != pos) {
-			new_str = g_strndup (str+first, pos-first);
-			new_gstring = g_string_new (new_str);
-			g_free (new_str);
-			/* could do trimming in line to speed up this code */
-			if (trim_chars) g_string_trim (new_gstring, trim_chars, trim_options);
-			result = g_list_append (result, new_gstring);
-		}	
-		first = pos + 1;
-	}
-
-	return result;
-}
-
-
-void 
-g_string_trim (GString *string, gchar *chars, GStringTrimOption options)
-{
-	gint first_ok;
-	gint last_ok;
-	guint length;
-	gchar *str;
-
-	if ((!string) || (!string->str))
-		return; 
-	str = string->str;
-	length = strlen (str);
-	if (!length)
-		return;
-
-	first_ok = 0;
-	last_ok = length - 1;
-	
-	if (options & GSTRING_TRIM_STRIP_LEADING)
-		while  ( (first_ok <= last_ok) && (strchr (chars, str[first_ok])) )
-			first_ok++;
-
-	if (options & GSTRING_TRIM_STRIP_TRAILING)
-		while  ( (first_ok <= last_ok) && (strchr (chars, str[last_ok])) )
-			last_ok++;
-
-	if (first_ok > 0)
-		g_string_erase (string, 0, first_ok);
-
-	if (last_ok < length-1)
-		g_string_truncate (string, last_ok - first_ok +1);
-	
-}
diff --git a/camel/gstring-util.h b/camel/gstring-util.h
deleted file mode 100644
index 01cdeffd76..0000000000
--- a/camel/gstring-util.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* gstring-util : utilities for gstring object  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 GSTRING_UTIL_H
-#define GSTRING_UTIL_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-typedef enum {
-    GSTRING_DICHOTOMY_NONE            =     0,
-    GSTRING_DICHOTOMY_RIGHT_DIR       =     1,
-    GSTRING_DICHOTOMY_STRIP_TRAILING  =     2,
-    GSTRING_DICHOTOMY_STRIP_LEADING   =     4
-    
-} GStringDichotomyOption;
-
-typedef enum {
-    GSTRING_TRIM_NONE            =     0,
-    GSTRING_TRIM_STRIP_TRAILING  =     1,
-    GSTRING_TRIM_STRIP_LEADING   =     2
-} GStringTrimOption;
-
-
-gboolean g_string_equals          (GString *string1, GString *string2);
-GString *g_string_clone           (GString *string);
-gchar    g_string_dichotomy       (GString *string, gchar sep,
-				   GString **prefix, GString **suffix,
-				   GStringDichotomyOption options);
-void     g_string_append_g_string (GString *dest_string,
-				   GString *other_string);
-
-gboolean g_string_equal_for_hash  (gconstpointer v, gconstpointer v2);
-gboolean g_string_equal_for_glist (gconstpointer v, gconstpointer v2);
-guint    g_string_hash            (gconstpointer v);
-void     g_string_list_free       (GList *string_list);
-
-GList   *g_string_split           (GString *string, char sep,
-				   gchar *trim_chars, GStringTrimOption trim_options);
-void     g_string_trim            (GString *string, gchar *chars,
-				   GStringTrimOption options);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GSTRING_UTIL_H */
diff --git a/camel/hash-table-utils.c b/camel/hash-table-utils.c
deleted file mode 100644
index b04eaa3ce7..0000000000
--- a/camel/hash-table-utils.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* generic utilities for hash tables */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "glib.h"
-#include "hash-table-utils.h"
-
-
-/* 
- * free a (key/value) hash table pair.
- * to be called in a g_hash_table_foreach()
- * before g_hash_table_destroy().
- */
-void
-g_hash_table_generic_free (gpointer key, gpointer value, gpointer user_data)
-{
-	g_free (key);
-	g_free (value);
-}
-
-
-
-/***/
-/* use these two funcs for case insensitive hash table */
-
-gint 
-g_strcase_equal (gconstpointer a, gconstpointer b)
-{
-	return (g_strcasecmp ((gchar *)a, (gchar *)b) == 0);
-}
-
-
-/* modified g_str_hash from glib/gstring.c
-   because it would have been too slow to
-   us g_strdown() on the string */
-/* a char* hash function from ASU */
-guint
-g_strcase_hash (gconstpointer v)
-{
-	const char *s = (char*)v;
-	const char *p;
-	guint h=0, g;
-	
-	for(p = s; *p != '\0'; p += 1) {
-		h = ( h << 4 ) + toupper(*p);
-		if ( ( g = h & 0xf0000000 ) ) {
-			h = h ^ (g >> 24);
-			h = h ^ g;
-		}
-  }
-
-  return h /* % M */;
-}
-
-
-
-/***/
diff --git a/camel/hash-table-utils.h b/camel/hash-table-utils.h
deleted file mode 100644
index 2904991848..0000000000
--- a/camel/hash-table-utils.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* generic utilities for hash tables */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 HASH_TABLE_UTILS_H
-#define HASH_TABLE_UTILS_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-void g_hash_table_generic_free (gpointer key, gpointer value, gpointer user_data);
-
-gint g_strcase_equal (gconstpointer a, gconstpointer b);
-guint g_strcase_hash (gconstpointer v);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* HASH_TABLE_UTILS_H */
diff --git a/camel/md5-utils.c b/camel/md5-utils.c
deleted file mode 100644
index 7363eaec40..0000000000
--- a/camel/md5-utils.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest.  This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to md5_init, call md5_update as
- * needed on buffers full of bytes, and then call md5_Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-/* parts of this file are :
- * Written March 1993 by Branko Lankester
- * Modified June 1993 by Colin Plumb for altered md5.c.
- * Modified October 1995 by Erik Troan for RPM
- */
-
-
-#include "md5-utils.h"
-#include 
-
-static void md5_transform (guint32 buf[4], const guint32 in[16]);
-
-static gint _ie = 0x44332211;
-static union _endian { gint i; gchar b[4]; } *_endian = (union _endian *)&_ie;
-#define	IS_BIG_ENDIAN()		(_endian->b[0] == '\x44')
-#define	IS_LITTLE_ENDIAN()	(_endian->b[0] == '\x11')
-
-
-/*
- * Note: this code is harmless on little-endian machines.
- */
-static void 
-_byte_reverse (guchar *buf, guint32 longs)
-{
-	guint32 t;
-	do {
-		t = (guint32) ((guint32) buf[3] << 8 | buf[2]) << 16 |
-			((guint32) buf[1] << 8 | buf[0]);
-		*(guint32 *) buf = t;
-		buf += 4;
-	} while (--longs);
-}
-
-/**
- * md5_init: Initialise an md5 context object
- * @ctx: md5 context 
- * 
- * Initialise an md5 buffer. 
- *
- **/
-void 
-md5_init (MD5Context *ctx)
-{
-	ctx->buf[0] = 0x67452301;
-	ctx->buf[1] = 0xefcdab89;
-	ctx->buf[2] = 0x98badcfe;
-	ctx->buf[3] = 0x10325476;
-	
-	ctx->bits[0] = 0;
-	ctx->bits[1] = 0;
-	
-	if (IS_BIG_ENDIAN())	
-		ctx->doByteReverse = 1;		
-	else 
-		ctx->doByteReverse = 0;	
-}
-
-
-
-/**
- * md5_update: add a buffer to md5 hash computation
- * @ctx: conetxt object used for md5 computaion
- * @buf: buffer to add
- * @len: buffer length
- * 
- * Update context to reflect the concatenation of another buffer full
- * of bytes. Use this to progressively construct an md5 hash.
- **/
-void 
-md5_update (MD5Context *ctx, const guchar *buf, guint32 len)
-{
-	guint32 t;
-	
-	/* Update bitcount */
-	
-	t = ctx->bits[0];
-	if ((ctx->bits[0] = t + ((guint32) len << 3)) < t)
-		ctx->bits[1]++;		/* Carry from low to high */
-	ctx->bits[1] += len >> 29;
-	
-	t = (t >> 3) & 0x3f;	/* Bytes already in shsInfo->data */
-	
-	/* Handle any leading odd-sized chunks */
-	
-	if (t) {
-		guchar *p = (guchar *) ctx->in + t;
-		
-		t = 64 - t;
-		if (len < t) {
-			memcpy (p, buf, len);
-			return;
-		}
-		memcpy (p, buf, t);
-		if (ctx->doByteReverse)
-			_byte_reverse (ctx->in, 16);
-		md5_transform (ctx->buf, (guint32 *) ctx->in);
-		buf += t;
-		len -= t;
-	}
-	/* Process data in 64-byte chunks */
-	
-	while (len >= 64) {
-		memcpy (ctx->in, buf, 64);
-		if (ctx->doByteReverse)
-			_byte_reverse (ctx->in, 16);
-		md5_transform (ctx->buf, (guint32 *) ctx->in);
-		buf += 64;
-		len -= 64;
-	}
-	
-	/* Handle any remaining bytes of data. */
-	
-	memcpy (ctx->in, buf, len);
-}
-
-
-
-
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern 
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-/**
- * md5_final: copy the final md5 hash to a bufer
- * @digest: 16 bytes buffer
- * @ctx: context containing the calculated md5
- * 
- * copy the final md5 hash to a bufer
- **/
-void 
-md5_final (MD5Context *ctx, guchar digest[16])
-{
-	guint32 count;
-	guchar *p;
-	
-	/* Compute number of bytes mod 64 */
-	count = (ctx->bits[0] >> 3) & 0x3F;
-	
-	/* Set the first char of padding to 0x80.  This is safe since there is
-	   always at least one byte free */
-	p = ctx->in + count;
-	*p++ = 0x80;
-	
-	/* Bytes of padding needed to make 64 bytes */
-	count = 64 - 1 - count;
-	
-	/* Pad out to 56 mod 64 */
-	if (count < 8) {
-		/* Two lots of padding:  Pad the first block to 64 bytes */
-		memset (p, 0, count);
-		if (ctx->doByteReverse)
-			_byte_reverse (ctx->in, 16);
-		md5_transform (ctx->buf, (guint32 *) ctx->in);
-		
-		/* Now fill the next block with 56 bytes */
-		memset (ctx->in, 0, 56);
-	} else {
-		/* Pad block to 56 bytes */
-		memset (p, 0, count - 8);
-	}
-	if (ctx->doByteReverse)
-		_byte_reverse (ctx->in, 14);
-	
-	/* Append length in bits and transform */
-	((guint32 *) ctx->in)[14] = ctx->bits[0];
-	((guint32 *) ctx->in)[15] = ctx->bits[1];
-	
-	md5_transform (ctx->buf, (guint32 *) ctx->in);
-	if (ctx->doByteReverse)
-		_byte_reverse ((guchar *) ctx->buf, 4);
-	memcpy (digest, ctx->buf, 16);
-}
-
-
-
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
-	( w += f(x, y, z) + data,  w = w<>(32-s),  w += x )
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data.  md5_Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-static void 
-md5_transform (guint32 buf[4], const guint32 in[16])
-{
-	register guint32 a, b, c, d;
-	
-	a = buf[0];
-	b = buf[1];
-	c = buf[2];
-	d = buf[3];
-	
-	MD5STEP (F1, a, b, c, d, in[0] + 0xd76aa478, 7);
-	MD5STEP (F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
-	MD5STEP (F1, c, d, a, b, in[2] + 0x242070db, 17);
-	MD5STEP (F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
-	MD5STEP (F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
-	MD5STEP (F1, d, a, b, c, in[5] + 0x4787c62a, 12);
-	MD5STEP (F1, c, d, a, b, in[6] + 0xa8304613, 17);
-	MD5STEP (F1, b, c, d, a, in[7] + 0xfd469501, 22);
-	MD5STEP (F1, a, b, c, d, in[8] + 0x698098d8, 7);
-	MD5STEP (F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
-	MD5STEP (F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
-	MD5STEP (F1, b, c, d, a, in[11] + 0x895cd7be, 22);
-	MD5STEP (F1, a, b, c, d, in[12] + 0x6b901122, 7);
-	MD5STEP (F1, d, a, b, c, in[13] + 0xfd987193, 12);
-	MD5STEP (F1, c, d, a, b, in[14] + 0xa679438e, 17);
-	MD5STEP (F1, b, c, d, a, in[15] + 0x49b40821, 22);
-	
-	MD5STEP (F2, a, b, c, d, in[1] + 0xf61e2562, 5);
-	MD5STEP (F2, d, a, b, c, in[6] + 0xc040b340, 9);
-	MD5STEP (F2, c, d, a, b, in[11] + 0x265e5a51, 14);
-	MD5STEP (F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
-	MD5STEP (F2, a, b, c, d, in[5] + 0xd62f105d, 5);
-	MD5STEP (F2, d, a, b, c, in[10] + 0x02441453, 9);
-	MD5STEP (F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
-	MD5STEP (F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
-	MD5STEP (F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
-	MD5STEP (F2, d, a, b, c, in[14] + 0xc33707d6, 9);
-	MD5STEP (F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
-	MD5STEP (F2, b, c, d, a, in[8] + 0x455a14ed, 20);
-	MD5STEP (F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
-	MD5STEP (F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
-	MD5STEP (F2, c, d, a, b, in[7] + 0x676f02d9, 14);
-	MD5STEP (F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-	
-	MD5STEP (F3, a, b, c, d, in[5] + 0xfffa3942, 4);
-	MD5STEP (F3, d, a, b, c, in[8] + 0x8771f681, 11);
-	MD5STEP (F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
-	MD5STEP (F3, b, c, d, a, in[14] + 0xfde5380c, 23);
-	MD5STEP (F3, a, b, c, d, in[1] + 0xa4beea44, 4);
-	MD5STEP (F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
-	MD5STEP (F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
-	MD5STEP (F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
-	MD5STEP (F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
-	MD5STEP (F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
-	MD5STEP (F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
-	MD5STEP (F3, b, c, d, a, in[6] + 0x04881d05, 23);
-	MD5STEP (F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
-	MD5STEP (F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
-	MD5STEP (F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
-	MD5STEP (F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-	
-	MD5STEP (F4, a, b, c, d, in[0] + 0xf4292244, 6);
-	MD5STEP (F4, d, a, b, c, in[7] + 0x432aff97, 10);
-	MD5STEP (F4, c, d, a, b, in[14] + 0xab9423a7, 15);
-	MD5STEP (F4, b, c, d, a, in[5] + 0xfc93a039, 21);
-	MD5STEP (F4, a, b, c, d, in[12] + 0x655b59c3, 6);
-	MD5STEP (F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
-	MD5STEP (F4, c, d, a, b, in[10] + 0xffeff47d, 15);
-	MD5STEP (F4, b, c, d, a, in[1] + 0x85845dd1, 21);
-	MD5STEP (F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
-	MD5STEP (F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
-	MD5STEP (F4, c, d, a, b, in[6] + 0xa3014314, 15);
-	MD5STEP (F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
-	MD5STEP (F4, a, b, c, d, in[4] + 0xf7537e82, 6);
-	MD5STEP (F4, d, a, b, c, in[11] + 0xbd3af235, 10);
-	MD5STEP (F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
-	MD5STEP (F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-	
-	buf[0] += a;
-	buf[1] += b;
-	buf[2] += c;
-	buf[3] += d;
-}
-
-
-
-
-/**
- * md5_get_digest: get the md5 hash of a buffer
- * @buffer: byte buffer
- * @buffer_size: buffer size (in bytes)
- * @digest: 16 bytes buffer receiving the hash code.
- * 
- * Get the md5 hash of a buffer. The result is put in 
- * the 16 bytes buffer @digest .
- **/
-void
-md5_get_digest (const gchar *buffer, gint buffer_size, guchar digest[16])
-{	
-	MD5Context ctx;
-
-	md5_init (&ctx);
-	md5_update (&ctx, buffer, buffer_size);
-	md5_final (&ctx, digest);
-	
-}
-
-
-/**
- * md5_get_digest_from_stream: get the md5 hash of a stream
- * @stream: stream
- * @digest: 16 bytes buffer receiving the hash code.
- * 
- * Get the md5 hash of a stream. The result is put in 
- * the 16 bytes buffer @digest .
- **/
-void
-md5_get_digest_from_stream (CamelStream *stream, guchar digest[16])
-{	
-	MD5Context ctx;
-	guchar tmp_buf[1024];
-	gint nb_bytes_read;
-
-	md5_init (&ctx);
-	
-	nb_bytes_read = camel_stream_read (stream, tmp_buf, 1024);
-	while (nb_bytes_read) {
-		md5_update (&ctx, tmp_buf, nb_bytes_read);
-		nb_bytes_read = camel_stream_read (stream, tmp_buf, 1024);
-	}
-	
-	md5_final (&ctx, digest);
-	
-}
-
-
-
-
-/**
- * md5_get_digest_from_file: get the md5 hash of a file
- * @filename: file name
- * @digest: 16 bytes buffer receiving the hash code.
- * 
- * Get the md5 hash of a file. The result is put in 
- * the 16 bytes buffer @digest .
- **/
-void
-md5_get_digest_from_file (const gchar *filename, guchar digest[16])
-{	
-	MD5Context ctx;
-	guchar tmp_buf[1024];
-	gint nb_bytes_read;
-	FILE *fp;
-
-	printf("generating checksum\n");
-
-	md5_init (&ctx);
-	fp = fopen(filename, "r");
-	if (!fp) {
-	return;
-	}
-	
-	while ((nb_bytes_read = fread (tmp_buf, sizeof (guchar), 1024, fp)) > 0)
-		md5_update (&ctx, tmp_buf, nb_bytes_read);
-	
-	if (ferror(fp)) {
-		fclose(fp);
-		return;
-	}
-
-	
-	md5_final (&ctx, digest);
-	
-	printf("checksum done\n");
-}
-
-
-
-
diff --git a/camel/md5-utils.h b/camel/md5-utils.h
deleted file mode 100644
index e4569dd54a..0000000000
--- a/camel/md5-utils.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest.  This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to rpmMD5Init, call rpmMD5Update as
- * needed on buffers full of bytes, and then call rpmMD5Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-/* parts of this file are :
- * Written March 1993 by Branko Lankester
- * Modified June 1993 by Colin Plumb for altered md5.c.
- * Modified October 1995 by Erik Troan for RPM
- */
-
-
-#ifndef MD5_UTILS_H
-#define MD5_UTILS_H
-
-#include 
-#include "camel-stream.h"
-
-typedef struct {
-	guint32 buf[4];
-	guint32 bits[2];
-	guchar in[64];
-	gint doByteReverse;
-
-} MD5Context ;
-
-
-void md5_get_digest (const gchar *buffer, gint buffer_size, guchar digest[16]);
-void md5_get_digest_from_stream (CamelStream *stream, guchar digest[16]);
-
-/* use this one when speed is needed */
-/* for use in provider code only */
-void md5_get_digest_from_file (const gchar *filename, guchar digest[16]);
-
-/* raw routines */
-void md5_init (MD5Context *ctx);
-void md5_update (MD5Context *ctx, const guchar *buf, guint32 len);
-void md5_final (MD5Context *ctx, guchar digest[16]);
-
-
-#endif	/* MD5_UTILS_H */
diff --git a/camel/providers/.cvsignore b/camel/providers/.cvsignore
deleted file mode 100644
index 3dda72986f..0000000000
--- a/camel/providers/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile.in
-Makefile
diff --git a/camel/providers/MH/.cvsignore b/camel/providers/MH/.cvsignore
deleted file mode 100644
index 2e7b174532..0000000000
--- a/camel/providers/MH/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile.in
-Makefile
-.deps
-*.lo
-*.la
-.libs
diff --git a/camel/providers/MH/Makefile.am b/camel/providers/MH/Makefile.am
deleted file mode 100644
index dab6bec199..0000000000
--- a/camel/providers/MH/Makefile.am
+++ /dev/null
@@ -1,33 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = 
-
-libcamelmhincludedir = $(includedir)/camel
-
-
-lib_LTLIBRARIES = libcamelmh.la
-
-INCLUDES = -I.. -I$(srcdir)/.. -I$(includedir)	\
-	-I$(top_srcdir)/intl			\
-	$(GTK_INCLUDEDIR) -I$(top_srcdir)/camel
-
-libcamelmh_la_SOURCES = 			\
-	camel-mh-folder.c			\
-	camel-mh-provider.c			\
-	camel-mh-store.c			\
-	mh-summary.c				\
-	mh-uid.c				\
-	mh-utils.c
-
-libcamelmhinclude_HEADERS =			\
-	camel-mh-folder.h			\
-	camel-mh-store.h			\
-	mh-summary.c				\
-	mh-uid.h				\
-	mh-utils.h
-
-
-libcamelmh_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir)
-
-
-EXTRA_DIST = 
diff --git a/camel/providers/MH/camel-mh-folder.c b/camel/providers/MH/camel-mh-folder.c
deleted file mode 100644
index f4ff8f305a..0000000000
--- a/camel/providers/MH/camel-mh-folder.c
+++ /dev/null
@@ -1,1022 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mh-folder.c : Abstract class for an email folder */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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  
-#include  
-#include  
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "camel-mh-folder.h"
-#include "camel-mh-store.h"
-#include "gstring-util.h"
-#include "camel-log.h"
-#include "camel-stream-fs.h"
-#include "camel-stream-buffered-fs.h"
-#include "camel-folder-summary.h"
-#include "gmime-utils.h"
-#include "mh-utils.h"
-#include "mh-uid.h"
-#include "mh-summary.h"
-
-
-static CamelFolderClass *parent_class=NULL;
-
-/* Returns the class for a CamelMhFolder */
-#define CMHF_CLASS(so) CAMEL_MH_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CMHS_CLASS(so) CAMEL_STORE_CLASS (GTK_OBJECT(so)->klass)
-
-
-static void _set_name(CamelFolder *folder, const gchar *name, CamelException *ex);
-static void _init_with_store (CamelFolder *folder, CamelStore *parent_store, CamelException *ex);
-static gboolean _exists (CamelFolder *folder, CamelException *ex);
-static gboolean _create(CamelFolder *folder, CamelException *ex);
-static gboolean _delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
-static gboolean _delete_messages (CamelFolder *folder, CamelException *ex);
-static GList *_list_subfolders (CamelFolder *folder, CamelException *ex);
-static CamelMimeMessage *_get_message (CamelFolder *folder, gint number, CamelException *ex);
-static gint _get_message_count (CamelFolder *folder, CamelException *ex);
-static gint _append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
-static void _expunge (CamelFolder *folder, CamelException *ex);
-static void _copy_message_to (CamelFolder *folder, CamelMimeMessage *message, CamelFolder *dest_folder, CamelException *ex);
-static void _open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex);
-static void _close (CamelFolder *folder, gboolean expunge, CamelException *ex);
-
-static const gchar *_get_message_uid (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
-static CamelMimeMessage *_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex);
-static GList *_get_uid_list  (CamelFolder *folder, CamelException *ex);
-
-/* some utility functions */
-static int copy_reg (const char *src_path, const char *dst_path, CamelException *ex);
-
-static void
-camel_mh_folder_class_init (CamelMhFolderClass *camel_mh_folder_class)
-{
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_mh_folder_class);
-
-	parent_class = gtk_type_class (camel_folder_get_type ());
-		
-	/* virtual method definition */
-	/* virtual method overload */
-	camel_folder_class->init_with_store = _init_with_store;
-	camel_folder_class->set_name = _set_name;
-	camel_folder_class->exists = _exists;
-	camel_folder_class->delete = _delete;
-	camel_folder_class->delete_messages = _delete_messages;
-	camel_folder_class->list_subfolders = _list_subfolders;
-	camel_folder_class->get_message = _get_message;
-	camel_folder_class->get_message_count = _get_message_count;
-	camel_folder_class->append_message = _append_message;
-	camel_folder_class->expunge = _expunge;
-	camel_folder_class->copy_message_to = _copy_message_to;
-	camel_folder_class->open = _open;
-	camel_folder_class->close = _close;
-	camel_folder_class->get_message_uid = _get_message_uid;
-	camel_folder_class->get_message_by_uid = _get_message_by_uid;
-	camel_folder_class->get_uid_list = _get_uid_list;
-
-}
-
-
-
-
-
-
-
-GtkType
-camel_mh_folder_get_type (void)
-{
-	static GtkType camel_mh_folder_type = 0;
-	
-	if (!camel_mh_folder_type)	{
-		GtkTypeInfo camel_mh_folder_info =	
-		{
-			"CamelMhFolder",
-			sizeof (CamelMhFolder),
-			sizeof (CamelMhFolderClass),
-			(GtkClassInitFunc) camel_mh_folder_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_mh_folder_type = gtk_type_unique (CAMEL_FOLDER_TYPE, &camel_mh_folder_info);
-	}
-	
-	return camel_mh_folder_type;
-}
-
-
-
-static gint
-_message_name_compare (gconstpointer a, gconstpointer b)
-{
-	gchar *m1 = (gchar *)a;
-	gchar *m2 = (gchar *)b;
-	gint len_diff;
-
-	return (atoi (m1) - atoi (m2));
-}
-
-
-static void 
-_init_with_store (CamelFolder *folder, CamelStore *parent_store, CamelException *ex)
-{
-	/* call parent method */
-	parent_class->init_with_store (folder, parent_store, ex);
-	
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = TRUE;
-	folder->has_summary_capability = TRUE;
-	folder->has_uid_capability = TRUE;
- 
-	folder->summary = NULL;
-	
-}
-
-
-
-static void
-_open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER (folder);
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-	
-	
-	if (folder->open_state == FOLDER_OPEN) return;
-
-	
-	/* create message list */
-	/* read the whole folder and sort message names */
-	dir_handle = opendir (mh_folder->directory_path);
-	/* read first entry in the directory */
-	dir_entry = readdir (dir_handle);
-	while (dir_entry != NULL) {
-		/* tests if the entry correspond to a message file */
-		if (mh_is_a_message_file (dir_entry->d_name, mh_folder->directory_path))
-			/* add the file name to the list */
-			mh_folder->file_name_list = g_list_insert_sorted (mh_folder->file_name_list, 
-									  g_strdup (dir_entry->d_name), 
-									  _message_name_compare);
-	/* read next entry */
-		dir_entry = readdir (dir_handle);
-	}		
-
-	closedir (dir_handle);
-	
-	/* get (or create) uid list */
-	if (!(mh_load_uid_list (mh_folder) > 0))
-		mh_generate_uid_list (mh_folder);
-
-	/* get or create summary */
-	/* it is important that it comes after uid list reading/generation */
-	if (!(mh_load_summary (mh_folder) > 0))
-		mh_generate_summary (folder);
-	printf ("**** summary = %p\n", folder->summary);
-
-}
-
-
-
-static void
-_close (CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER (folder);
-
-	/* save uid list, if any */
-	if (mh_folder->uid_array)
-		mh_save_uid_list (mh_folder);
-	
-	/* save summary, if any */
-	if (folder->summary)
-		mh_save_summary (mh_folder);
-	
-	/* call parent implementation */
-	parent_class->close (folder, expunge, ex);
-}
-
-
-
-
-
-/**
- * camel_mh_folder_set_name: set the name of an MH folder
- * @folder: the folder to set the name
- * @name: a string representing the (short) name
- * 
- * 
- * 
- **/
-static void
-_set_name (CamelFolder *folder, const gchar *name, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER (folder);
-	const gchar *root_dir_path;
-	gchar *full_name;
-	const gchar *parent_full_name;
-	gchar separator;
-	
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMhFolder::set_name\n");
-	g_assert (folder);
-	g_assert (name);
-	g_assert (folder->parent_store);
-
-	/* call default implementation */
-	parent_class->set_name (folder, name, ex);
-	
-	if (mh_folder->directory_path) g_free (mh_folder->directory_path);
-	
-	separator = camel_store_get_separator (folder->parent_store);
-	root_dir_path = camel_mh_store_get_toplevel_dir (CAMEL_MH_STORE(folder->parent_store));
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::set_name full_name is %s\n", folder->full_name);
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::set_name root_dir_path is %s\n", root_dir_path);
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::separator is %c\n", separator);
-
-	mh_folder->directory_path = g_strdup_printf ("%s%c%s", root_dir_path, separator, folder->full_name);
-	
-	if (!camel_folder_exists (folder, ex)) return;
-	
-	
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::set_name mh_folder->directory_path is %s\n", 
-			      mh_folder->directory_path);
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMhFolder::set_name\n");
-}
-
-
-
-static gboolean
-_exists (CamelFolder *folder, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	struct stat stat_buf;
-	gint stat_error;
-	gboolean exists;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMhFolder::exists\n");
-	g_assert (folder);
-	
-	if (!mh_folder->directory_path)  return FALSE;
-	
-	stat_error = stat (mh_folder->directory_path, &stat_buf);
-	if (stat_error == -1)  {
-		CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::exists when executing stat on %s, stat_error = %d\n", 
-				      mh_folder->directory_path, stat_error);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is : %s\n", strerror(errno));
-		return FALSE;
-	}
-	exists = S_ISDIR (stat_buf.st_mode);
-
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMhFolder::exists\n");
-	return exists;
-}
-
-
-static gboolean
-_create (CamelFolder *folder, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	const gchar *directory_path;
-	mode_t dir_mode = S_IRWXU;
-	gint mkdir_error;
-
-	g_assert(folder);
-
-	/* call default implementation */
-	parent_class->create (folder, ex);
-
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) return FALSE;
-	
-	if (camel_folder_exists (folder, ex)) return TRUE;
-	
-	mkdir_error = mkdir (directory_path, dir_mode);
-	return (mkdir_error == -1);
-}
-
-
-
-static gboolean
-_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
-{
-
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	const gchar *directory_path;
-	gint rmdir_error = 0;
-
-	g_assert(folder);
-
-	/* call default implementation */
-	parent_class->delete (folder, recurse, ex);
-	/* the default implementation will care about deleting 
-	   messages first and recursing the operation if 
-	   necessary */
-	
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) return FALSE;
-	
-	if (!camel_folder_exists (folder, ex)) return TRUE;
-	
-	/* physically delete the directory */
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::delete removing directory %s\n", directory_path);
-	rmdir_error = rmdir (directory_path);
-	if (rmdir_error == -1) {
-		CAMEL_LOG_WARNING ("CamelMhFolder::delete Error when removing directory %s\n", directory_path);
-		CAMEL_LOG_FULL_DEBUG ( "  Full error text is : %s\n", strerror(errno));
-	}
-
-	return (rmdir_error != -1);
-}
-
-
-static gboolean 
-_delete_messages (CamelFolder *folder, CamelException *ex)
-{
-	
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	const gchar *directory_path;
-	struct stat stat_buf;
-	gint stat_error = 0;
-	gchar *entry_name;
-	struct dirent *dir_entry;
-	gint unlink_error = 0;
-	DIR *dir_handle;
-
-	g_assert(folder);
-
-	/* call default implementation */
-	parent_class->delete_messages (folder, ex);
-
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) return FALSE;
-	
-	if (!camel_folder_exists (folder, ex)) return TRUE;
-	
-	dir_handle = opendir (directory_path);
-	
-	/* read first entry in the directory */
-	dir_entry = readdir (dir_handle);
-	while ((stat_error != -1) && (unlink_error != -1) && (dir_entry != NULL)) {
-
-		/* get the name of the next entry in the dir */
-		entry_name = dir_entry->d_name;
-		stat_error = stat (mh_folder->directory_path, &stat_buf);
-
-		/* is it a regular file ? */
-		if ((stat_error != -1) && S_ISREG(stat_buf.st_mode)) {
-			/* yes, delete it */
-			CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::delete_messages removing file %s\n", entry_name);
-			unlink_error = unlink(entry_name);
-
-			if (unlink_error == -1) {
-				CAMEL_LOG_WARNING ("CamelMhFolder::delete_messages Error when deleting file %s\n", 
-						   entry_name);
-				CAMEL_LOG_FULL_DEBUG ( "  Full error text is : %s\n", strerror(errno));
-			}
-		}
-		/* read next entry */
-		dir_entry = readdir (dir_handle);
-	}
-
-	closedir (dir_handle);
-
-	return ((stat_error != -1) && (unlink_error != -1));
-
-}
-
-
-
-static GList *
-_list_subfolders (CamelFolder *folder, CamelException *ex)
-{
-	GList *subfolder_name_list = NULL;
-
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	const gchar *directory_path;
-	struct stat stat_buf;
-	gint stat_error = 0;
-	GList *file_list;
-	gchar *entry_name;
-	gchar *full_entry_name;
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-
-	g_assert(folder);
-
-	/* call default implementation */
-	parent_class->delete_messages (folder, ex);
-
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) return NULL;
-	
-	if (!camel_folder_exists (folder, ex)) return NULL;
-	
-	dir_handle = opendir (directory_path);
-	
-	/* read first entry in the directory */
-	dir_entry = readdir (dir_handle);
-	while ((stat_error != -1) && (dir_entry != NULL)) {
-
-		/* get the name of the next entry in the dir */
-		entry_name = dir_entry->d_name;
-		full_entry_name = g_strdup_printf ("%s/%s", mh_folder->directory_path, entry_name);
-		stat_error = stat (full_entry_name, &stat_buf);
-		g_free (full_entry_name);
-
-		/* is it a directory ? */
-		if ((stat_error != -1) && S_ISDIR (stat_buf.st_mode)) {
-			/* yes, add it to the list */
-			if (entry_name[0] != '.') {
-				CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::list_subfolders adding  %s\n", entry_name);
-				subfolder_name_list = g_list_append (subfolder_name_list, g_strdup (entry_name));
-			}
-		}
-		/* read next entry */
-		dir_entry = readdir (dir_handle);
-	}
-
-	closedir (dir_handle);
-
-	return subfolder_name_list;
-}
-
-
-
-
-
-static void
-_filename_free (gpointer data)
-{
-	g_free ((gchar *)data);
-}
-
-
-/* slow routine, may be optimixed, or we should use
-   caches if users complain */
-static CamelMimeMessage *
-_get_message (CamelFolder *folder, gint number, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	const gchar *directory_path;
-	gchar *message_name;
-	gchar *message_file_name;
-	CamelStream *input_stream = NULL;
-	CamelMimeMessage *message = NULL;
-	GList *message_list = NULL;
-	
-	g_assert(folder);
-	
-	
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) return NULL;	
-
-		
-	
-	message_name = g_list_nth_data (mh_folder->file_name_list, number);
-	
-	if (message_name != NULL) {
-		CAMEL_LOG_FULL_DEBUG  ("CanelMhFolder::get_message message number = %d, name = %s\n", 
-				       number, message_name);
-		message_file_name = g_strdup_printf ("%s/%s", directory_path, message_name);
-		input_stream = camel_stream_buffered_fs_new_with_name (message_file_name, CAMEL_STREAM_BUFFERED_FS_READ);
-		
-		if (input_stream != NULL) {
-#warning use session field here
-			message = camel_mime_message_new ();
-			camel_data_wrapper_construct_from_stream ( CAMEL_DATA_WRAPPER (message), input_stream);
-			gtk_object_unref (GTK_OBJECT (input_stream));
-			message->message_number = number;
-			gtk_object_set_data_full (GTK_OBJECT (message), "filename", 
-						  g_strdup (message_name), _filename_free);
-			
-#warning Set flags and all this stuff here
-		}
-		g_free (message_file_name);
-	} else 
-		CAMEL_LOG_FULL_DEBUG  ("CanelMhFolder::get_message message number = %d, not found\n", number);
-	
-	
-	return message;   
-}
-
-
-
-static gint
-_get_message_count (CamelFolder *folder, CamelException *ex)
-{
-	
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	const gchar *directory_path;
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-	guint message_count = 0;
-
-	g_assert(folder);
-
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) return -1;
-	
-	if (!camel_folder_exists (folder, ex)) return 0;
-	
-	dir_handle = opendir (directory_path);
-	
-	/* read first entry in the directory */
-	dir_entry = readdir (dir_handle);
-	while (dir_entry != NULL) {
-		/* tests if the entry correspond to a message file */
-		if (mh_is_a_message_file (dir_entry->d_name, directory_path)) 
-			message_count++;	
-		/* read next entry */
-		dir_entry = readdir (dir_handle);
-	}
-
-	closedir (dir_handle);
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::get_message_count found %d messages\n", message_count);
-	return message_count;
-}
-
-
-
-static gboolean
-_find_next_free_message_file (CamelFolder *folder, gint *new_msg_number, gchar **new_msg_filename, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	const gchar *directory_path;
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-	gint last_max_message_number = 0;
-	gint current_message_number;
-
-	g_assert(folder);
-
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) return FALSE;
-	
-	if (!camel_folder_exists (folder, ex)) return FALSE;
-	
-	dir_handle = opendir (directory_path);
-	
-	/* read first entry in the directory */
-	dir_entry = readdir (dir_handle);
-	while (dir_entry != NULL) {
-		/* tests if the entry correspond to a message file */
-		if (mh_is_a_message_file (dir_entry->d_name, directory_path)) {
-			/* see if the message number is the biggest found */
-			current_message_number = atoi (dir_entry->d_name);
-			if (current_message_number > last_max_message_number)
-				last_max_message_number = current_message_number;
-		}
-		/* read next entry */
-		dir_entry = readdir (dir_handle);
-	}
-	closedir (dir_handle);
-	
-	*new_msg_number = last_max_message_number + 1;
-	*new_msg_filename = g_strdup_printf ("%s/%d", directory_path, *new_msg_number);
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::find_next_free_message_file new message path is %s\n", 
-			      *new_msg_filename);
-	return TRUE;
-	
-	
-}
-static gint
-_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex)
-{
-	guint new_msg_number;
-	gchar *new_msg_filename;
-	CamelStream *output_stream;
-	gboolean error;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMhFolder::append_message\n");
-	if (!_find_next_free_message_file (folder, &new_msg_number, &new_msg_filename, ex))
-		return -1;
-
-	output_stream = camel_stream_fs_new_with_name (new_msg_filename, CAMEL_STREAM_FS_WRITE);
-	if (output_stream != NULL) {
-		camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), output_stream);
-		camel_stream_close (output_stream);
-	} else {
-		CAMEL_LOG_WARNING ("CamelMhFolder::append_message could not open %s for writing\n", 
-				   new_msg_filename);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is : %s\n", strerror(errno));
-		error = TRUE;
-	}
-
-	g_free (new_msg_filename);
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMhFolder::append_message\n");
-	if (error) return -1;
-	else return new_msg_number;
-}
-
-
-
-
-
-static void
-_expunge (CamelFolder *folder, CamelException *ex)
-{
-	/* For the moment, we look in the folder active message
-	 * list. I did not make my mind for the moment, should 
-	 * the gtk_object->destroy signal be used to expunge
-	 * freed messages objects marked DELETED ? 
-	 */
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	CamelMimeMessage *message;
-	GList *message_node;
-	gchar *fullpath;
-	gchar *filename;
-	gint unlink_error;
-	const gchar *directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelFolder::expunge\n");
-	
-	message_node = folder->message_list;
-
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) return;
-
-	/* look in folder message list which messages
-	 * need to be expunged  */
-	while ( message_node) {
-		message = CAMEL_MIME_MESSAGE (message_node->data);
-		
-		if (message && camel_mime_message_get_flag (message, "DELETED")) {
-			CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::expunge, expunging  message %d\n", message->message_number);
-			/* expunge the message */
-			filename = gtk_object_get_data (GTK_OBJECT (message), "filename");
-			fullpath = g_strdup_printf ("%s/%s", directory_path, filename);
-			CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::expunge, message fullpath is %s\n", 
-					      fullpath);
-			unlink_error = unlink(fullpath);
-			if (unlink_error != -1) {
-				message->expunged = TRUE;
-			} else {
-				CAMEL_LOG_WARNING ("CamelMhFolder:: could not unlink %s (message %d)\n", 
-						   fullpath, message->message_number);
-				CAMEL_LOG_FULL_DEBUG ("  Full error text is : %s\n", strerror(errno));
-			}
-		}
-		message_node = message_node->next;
-		CAMEL_LOG_FULL_DEBUG ("CamelFolder::expunge, examined message node %p\n", message_node);
-	}
-	
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelFolder::expunge\n");
-}
-
-
-static void
-_copy_message_to (CamelFolder *folder, CamelMimeMessage *message, CamelFolder *dest_folder, CamelException *ex)
-{
-	gchar *src_msg_filename;
-	guint dest_msg_number;
-	gchar *dest_msg_filename;
-
-	if (IS_CAMEL_MH_FOLDER (dest_folder)) {
-		/*g_return_if_fail (message->parent_folder == folder);*/
-		
-		if (!_find_next_free_message_file (dest_folder, &dest_msg_number, &dest_msg_filename, ex))
-			return;
-		src_msg_filename = gtk_object_get_data (GTK_OBJECT (message), "fullpath");
-		CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::copy_to copy file %s to %s\n", src_msg_filename, dest_msg_filename);
-		copy_reg (src_msg_filename, dest_msg_filename, ex);
-		
-	} else 
-		parent_class->copy_message_to (folder, message, dest_folder, ex);
-}
-
-
-
-/** UID **/
-
-static const gchar *
-_get_message_uid (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER (folder);
-	GArray *uid_array;
-	gboolean found = FALSE;
-	MhUidCouple *uid_couple;
-	gchar *filename;
-	guint file_number;
-	gint i;
-
-	/* if the message already has its uid stored, 
-	   return it */
-	if (message->message_uid)
-		return (message->message_uid);
-
-	/* else, it has a filename associated to it */
-	filename = gtk_object_get_data (GTK_OBJECT (message), "filename");
-	file_number = atoi (file_number);
-	
-	uid_array = mh_folder->uid_array;
-	uid_couple = (MhUidCouple *)uid_array->data;
-	
-	/* look in the uid array for the file number */
-	found = (uid_couple->file_number == file_number);
-	for (i=0; (ilen) && (!found); i++) {		
-		uid_couple++;
-		found = (uid_couple->file_number == file_number);
-	}
-	
-	if (found) return uid_couple->uid;
-	else return NULL;
-
-}
-
-
-static CamelMimeMessage *
-_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER (folder);
-	GArray *uid_array;
-	gboolean found = FALSE;
-	MhUidCouple *uid_couple;
-	gint file_number;
-	gchar *filename;
-	CamelMimeMessage *message = NULL;
-	CamelStream *input_stream;
-	int i;
-
-	/* 
-	 * because they are constructed with md5
-	 * signatures, all MH uids are 16 bytes long
-	 */
-	if (strlen (uid) != 16) return NULL;
-
-	uid_array = mh_folder->uid_array;
-	uid_couple = (MhUidCouple *)uid_array->data;
-	
-	found = !strncmp (uid, uid_couple->uid, 16 * sizeof (guchar));
-	for (i=0; (ilen) && (!found); i++) {		
-		uid_couple++;
-		found = !strncmp (uid, uid_couple->uid, 16 * sizeof (guchar));
-	}
-	if (found) {
-		/* physically retrieve the message */
-		file_number = uid_couple->file_number;
-		filename = g_strdup_printf ("%d", file_number);
-		input_stream = camel_stream_buffered_fs_new_with_name (filename, CAMEL_STREAM_BUFFERED_FS_READ);
-		
-		if (input_stream != NULL) {
-#warning use session field here
-			message = camel_mime_message_new ();
-			camel_data_wrapper_construct_from_stream ( CAMEL_DATA_WRAPPER (message), input_stream);
-			gtk_object_unref (GTK_OBJECT (input_stream));
-
-			/* set message UID in CamelMimeMessage */			 
-			message->message_uid = g_strdup (uid);
-			
-		}
-		g_free (filename);
-	}
-
-	return message;
-
-}
-
-static GList *
-_get_uid_list  (CamelFolder *folder, CamelException *ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER (folder);
-	GList *uid_list;
-	GArray *uid_array;
-	MhUidCouple *uid_couple;
-	int i;
-	
-	uid_array = mh_folder->uid_array;
-	uid_couple = (MhUidCouple *)uid_array->data;
-
-	for (i=0; ilen; i++) {
-		uid_list = g_list_prepend (uid_list, uid_couple->uid);
-		uid_couple++;
-	}
-
-	return uid_list;
-}
-
-
-
-
-
-
-
-
-/************************************************************************/
-
-/*** Took directly from GNU fileutils-4.0                             ***/
-/* Copyright (C) 89, 90, 91, 95, 96, 97, 1998 Free Software Foundation. */
-/* This may be rwritten soon. -Bertrand                                 */               
-
-    
-/* Write LEN bytes at PTR to descriptor DESC, retrying if interrupted.
-   Return LEN upon success, write's (negative) error code otherwise.  */
-int
-full_write (int desc, const char *ptr, size_t len)
-{
-  int total_written;
-
-  total_written = 0;
-  while (len > 0)
-    {
-      int written = write (desc, ptr, len);
-      if (written < 0)
-	{
-	  if (errno == EINTR)
-	    continue;
-	  return written;
-	}
-      total_written += written;
-      ptr += written;
-      len -= written;
-    }
-  return total_written;
-}
-
-
-
-
-static int
-copy_reg (const char *src_path, const char *dst_path, CamelException *ex)
-{
-  char *buf;
-  int buf_size;
-  int dest_desc;
-  int source_desc;
-  int n_read;
-  struct stat sb;
-  char *cp;
-  int *ip;
-  int return_val = 0;
-  off_t n_read_total = 0;
-  int last_write_made_hole = 0;
-  int make_holes = TRUE;
-
-  source_desc = open (src_path, O_RDONLY);
-  if (source_desc < 0)
-    {
-      /* If SRC_PATH doesn't exist, then chances are good that the
-	 user did something like this `cp --backup foo foo': and foo
-	 existed to start with, but copy_internal renamed DST_PATH
-	 with the backup suffix, thus also renaming SRC_PATH.  */
-      if (errno == ENOENT)
-	error (0, 0, "`%s' and `%s' are the same file",
-	       src_path, dst_path);
-      else
-	error (0, errno, "%s", src_path);
-
-      return -1;
-    }
-
-  /* Create the new regular file with small permissions initially,
-     to not create a security hole.  */
-
-  dest_desc = open (dst_path, O_WRONLY | O_CREAT | O_TRUNC, 0600);
-  if (dest_desc < 0)
-    {
-      error (0, errno, "cannot create regular file `%s'", dst_path);
-      return_val = -1;
-      goto ret2;
-    }
-
-  /* Find out the optimal buffer size.  */
-
-  if (fstat (dest_desc, &sb))
-    {
-      error (0, errno, "%s", dst_path);
-      return_val = -1;
-      goto ret;
-    }
-
-  buf_size = 8192;
-
-
-
-  /* Make a buffer with space for a sentinel at the end.  */
-
-  buf = (char *) alloca (buf_size + sizeof (int));
-
-  for (;;)
-    {
-      n_read = read (source_desc, buf, buf_size);
-      if (n_read < 0)
-	{
-	  if (errno == EINTR)
-	    continue;
-	  error (0, errno, "%s", src_path);
-	  return_val = -1;
-	  goto ret;
-	}
-      if (n_read == 0)
-	break;
-
-      n_read_total += n_read;
-
-      ip = 0;
-      if (make_holes)
-	{
-	  buf[n_read] = 1;	/* Sentinel to stop loop.  */
-
-	  /* Find first nonzero *word*, or the word with the sentinel.  */
-
-	  ip = (int *) buf;
-	  while (*ip++ == 0)
-	    ;
-
-	  /* Find the first nonzero *byte*, or the sentinel.  */
-
-	  cp = (char *) (ip - 1);
-	  while (*cp++ == 0)
-	    ;
-
-	  /* If we found the sentinel, the whole input block was zero,
-	     and we can make a hole.  */
-
-	  if (cp > buf + n_read)
-	    {
-	      /* Make a hole.  */
-	      if (lseek (dest_desc, (off_t) n_read, SEEK_CUR) < 0L)
-		{
-		  error (0, errno, "%s", dst_path);
-		  return_val = -1;
-		  goto ret;
-		}
-	      last_write_made_hole = 1;
-	    }
-	  else
-	    /* Clear to indicate that a normal write is needed. */
-	    ip = 0;
-	}
-      if (ip == 0)
-	{
-	  if (full_write (dest_desc, buf, n_read) < 0)
-	    {
-	      error (0, errno, "%s", dst_path);
-	      return_val = -1;
-	      goto ret;
-	    }
-	  last_write_made_hole = 0;
-	}
-    }
-
-  /* If the file ends with a `hole', something needs to be written at
-     the end.  Otherwise the kernel would truncate the file at the end
-     of the last write operation.  */
-
-  if (last_write_made_hole)
-    {
-#if HAVE_FTRUNCATE
-      /* Write a null character and truncate it again.  */
-      if (full_write (dest_desc, "", 1) < 0
-	  || ftruncate (dest_desc, n_read_total) < 0)
-#else
-      /* Seek backwards one character and write a null.  */
-      if (lseek (dest_desc, (off_t) -1, SEEK_CUR) < 0L
-	  || full_write (dest_desc, "", 1) < 0)
-#endif
-	{
-	  error (0, errno, "%s", dst_path);
-	  return_val = -1;
-	}
-    }
-
-ret:
-  if (close (dest_desc) < 0)
-    {
-      error (0, errno, "%s", dst_path);
-      return_val = -1;
-    }
-ret2:
-  if (close (source_desc) < 0)
-    {
-      error (0, errno, "%s", src_path);
-      return_val = -1;
-    }
-
-  return return_val;
-}
diff --git a/camel/providers/MH/camel-mh-folder.h b/camel/providers/MH/camel-mh-folder.h
deleted file mode 100644
index 40800375eb..0000000000
--- a/camel/providers/MH/camel-mh-folder.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mh-folder.h : Abstract class for an email folder */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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_MH_FOLDER_H
-#define CAMEL_MH_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-folder.h"
-/*  #include "camel-store.h" */
-
-#define CAMEL_MH_FOLDER_TYPE     (camel_mh_folder_get_type ())
-#define CAMEL_MH_FOLDER(obj)     (GTK_CHECK_CAST((obj), CAMEL_MH_FOLDER_TYPE, CamelMhFolder))
-#define CAMEL_MH_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MH_FOLDER_TYPE, CamelMhFolderClass))
-#define IS_CAMEL_MH_FOLDER(o)    (GTK_CHECK_TYPE((o), CAMEL_MH_FOLDER_TYPE))
-
-
-typedef struct {
-	CamelFolder parent_object;
-	
-	gchar *directory_path;
-	GList *file_name_list;
-	GArray *uid_array;
-
-} CamelMhFolder;
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-	
-} CamelMhFolderClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType camel_mh_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MH_FOLDER_H */
diff --git a/camel/providers/MH/camel-mh-provider.c b/camel/providers/MH/camel-mh-provider.c
deleted file mode 100644
index 316b8a0797..0000000000
--- a/camel/providers/MH/camel-mh-provider.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mh-provider.c: mh provider registration code */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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-mh-store.h"
-#include "camel-provider.h"
-#include "camel-log.h"
-
-
-static CamelProvider _mh_provider = {
-	(GtkType) 0,
-	PROVIDER_STORE,
-	"mh",
-	"Camel default mh provider",
-	"This is a very simple provider, mh is a bad protocol anyway",
-	(GModule *) NULL
-};
-
-
-
-CamelProvider *
-camel_provider_module_init ()
-{
-	_mh_provider.object_type = camel_mh_store_get_type();
-	return &_mh_provider;
-}
diff --git a/camel/providers/MH/camel-mh-store.c b/camel/providers/MH/camel-mh-store.c
deleted file mode 100644
index 60ba07f47b..0000000000
--- a/camel/providers/MH/camel-mh-store.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mh-store.c : class for an mh store */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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 "camel-mh-store.h"
-#include "camel-mh-folder.h"
-#include "url-util.h"
-
-static CamelStoreClass *parent_class=NULL;
-
-/* Returns the class for a CamelMhStore */
-#define CMHS_CLASS(so) CAMEL_MH_STORE_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CMHF_CLASS(so) CAMEL_MH_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-
-static void _init (CamelStore *store, CamelSession *session, const gchar *url_name);
-static CamelFolder *_get_folder (CamelStore *store, const gchar *folder_name);
-
-
-static void
-camel_mh_store_class_init (CamelMhStoreClass *camel_mh_store_class)
-{
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_mh_store_class);
-
-	parent_class = gtk_type_class (camel_store_get_type ());
-	
-	/* virtual method definition */
-	/* virtual method overload */
-	camel_store_class->init = _init;
-	camel_store_class->get_folder = _get_folder;
-}
-
-
-
-static void
-camel_mh_store_init (gpointer object, gpointer klass)
-{
-	CamelMhStore *mh_store = CAMEL_MH_STORE (object);
-	CamelStore *store = CAMEL_STORE (object);
-	
-	store->separator = '/';
-}
-
-
-
-
-GtkType
-camel_mh_store_get_type (void)
-{
-	static GtkType camel_mh_store_type = 0;
-	
-	if (!camel_mh_store_type)	{
-		GtkTypeInfo camel_mh_store_info =	
-		{
-			"CamelMhStore",
-			sizeof (CamelMhStore),
-			sizeof (CamelMhStoreClass),
-			(GtkClassInitFunc) camel_mh_store_class_init,
-			(GtkObjectInitFunc) camel_mh_store_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_mh_store_type = gtk_type_unique (CAMEL_STORE_TYPE, &camel_mh_store_info);
-	}
-	
-	return camel_mh_store_type;
-}
-
-
-
-
-/* These evil public functions are here for test only */
-void 
-camel_mh_store_set_toplevel_dir (CamelMhStore *store, const gchar *toplevel)
-{
-	store->toplevel_dir = g_strdup (toplevel);
-	CAMEL_STORE(store)->separator = '/';
-}
-
-
-const gchar *
-camel_mh_store_get_toplevel_dir (CamelMhStore *store)
-{
-	return store->toplevel_dir;
-}
-
-
-
-static void 
-_init (CamelStore *store, CamelSession *session, const gchar *url_name)
-{
-	CamelMhStore *mh_store = CAMEL_MH_STORE (store);
-	Gurl *store_url;
-	
-	g_assert (url_name);
-	/* call parent implementation */
-	parent_class->init (store, session, url_name);
-	
-	
-	/* find the path in the URL*/
-	store_url = g_url_new (url_name);
-
-	g_return_if_fail (store_url);
-	g_return_if_fail (store_url->path); 
-	
-	mh_store->toplevel_dir = g_strdup (store_url->path); 
-	g_url_free (store_url);
-
-	
-	
-}
-
-
-static CamelFolder *
-_get_folder (CamelStore *store, const gchar *folder_name)
-{
-	CamelMhFolder *new_mh_folder;
-	CamelFolder *new_folder;
-
-	/* check if folder has already been created */
-	/* call the standard routine for that when  */
-	/* it is done ... */
-
-	new_mh_folder =  gtk_type_new (CAMEL_MH_FOLDER_TYPE);
-	new_folder = CAMEL_FOLDER (new_mh_folder);
-
-	CF_CLASS (new_folder)->init_with_store (new_folder, store, NULL);
-	CF_CLASS (new_folder)->set_name (new_folder, folder_name, NULL);
-	
-	
-	return new_folder;
-}
diff --git a/camel/providers/MH/camel-mh-store.h b/camel/providers/MH/camel-mh-store.h
deleted file mode 100644
index 924a5a6fc5..0000000000
--- a/camel/providers/MH/camel-mh-store.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mhstore.h : class for an mh store */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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_MH_STORE_H
-#define CAMEL_MH_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-store.h"
-
-#define CAMEL_MH_STORE_TYPE     (camel_mh_store_get_type ())
-#define CAMEL_MH_STORE(obj)     (GTK_CHECK_CAST((obj), CAMEL_MH_STORE_TYPE, CamelMhStore))
-#define CAMEL_MH_STORE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MH_STORE_TYPE, CamelMhStoreClass))
-#define IS_CAMEL_MH_STORE(o)    (GTK_CHECK_TYPE((o), CAMEL_MH_STORE_TYPE))
-
-
-typedef struct {
-	CamelStore parent_object;	
-	
-	gchar *toplevel_dir;	
-} CamelMhStore;
-
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-
-} CamelMhStoreClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType camel_mh_store_get_type (void);
-
-void camel_mh_store_set_toplevel_dir (CamelMhStore *store, const gchar *toplevel);
-const gchar *camel_mh_store_get_toplevel_dir (CamelMhStore *store);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MH_STORE_H */
-
-
diff --git a/camel/providers/MH/mh-summary.c b/camel/providers/MH/mh-summary.c
deleted file mode 100644
index 5a964696e0..0000000000
--- a/camel/providers/MH/mh-summary.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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  
-
-#include "mh-uid.h"
-#include "camel-log.h"
-#include "camel-stream.h"
-#include "camel-stream-fs.h"
-#include "camel-stream-buffered-fs.h"
-#include "gmime-utils.h"
-#include "mh-utils.h"
-
-#include  
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-void 
-mh_generate_summary (CamelFolder *folder)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER (folder);
-	CamelFolderSummary *summary;
-	CamelMessageInfo *message_info;
-	CamelFolderInfo *subfolder_info;
-	CamelStream *message_stream;
-	guint file_number;
-	gchar *message_fullpath;
-	gchar *directory_path;
-	GArray *header_array;
-	MhUidCouple *uid_couple;
-	Rfc822Header *cur_header;
-	int i;
-	int n_file;
-	GArray *uid_array;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::generate_summary entering \n");
-
-	g_assert (folder);
-
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) {
-		CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::generate_summary folder has no directory path\n");
-		return;
-	}
-
-	summary = camel_folder_summary_new ();
-	folder->summary = summary;
-
-	uid_array = mh_folder->uid_array;
-	
-	if (!uid_array) {
-		CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::generate_summary "
-				      "no uid list, that probably means there is "
-				      "no message in this folder, exiting \n");
-		return;
-	}
-	uid_couple = (MhUidCouple *)uid_array->data;
-
-	for (n_file=0; n_filelen; n_file++) {
-
-		file_number = uid_couple->file_number;
-
-		message_info = g_new0 (CamelMessageInfo, 1);
-		message_info->uid = g_new0 (guchar, 17);
-		strncpy (message_info->uid, uid_couple->uid, 16);
-
-
-		message_fullpath = g_strdup_printf ("%s/%d", directory_path, file_number);
-		message_stream = camel_stream_buffered_fs_new_with_name (message_fullpath, 
-									 CAMEL_STREAM_BUFFERED_FS_READ);
-		if (!message_stream) {
-			CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::generate_summary "
-					      "could not open %d for reading\n", message_fullpath);
-			g_free (message_fullpath);
-			return;
-		}
-		g_free (message_fullpath);
-		
-		header_array = get_header_array_from_stream (message_stream);
-		gtk_object_unref (GTK_OBJECT (message_stream));
-		
-		for (i=0; ilen; i++) {
-			cur_header = (Rfc822Header *)header_array->data + i;
-			if (!g_strcasecmp (cur_header->name, "subject")) {
-				message_info->subject = cur_header->value;
-				g_free (cur_header->name);
-			} else if (!g_strcasecmp (cur_header->name, "sender")) {
-				message_info->date = cur_header->value;
-				g_free (cur_header->name);
-			} else if (!g_strcasecmp (cur_header->name, "date")) {
-				message_info->date = cur_header->value;
-				g_free (cur_header->name);
-			} else {
-				g_free (cur_header->name);
-				g_free (cur_header->value);
-			}
-		}		
-		g_array_free (header_array, TRUE);
-
-		summary->message_info_list = g_list_append (summary->message_info_list, message_info);
-
-		/* next message in the uid list */
-		uid_couple++;
-	}	
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::generate_summary leaving \n");
-
-}
-
-
-void 
-mh_save_summary (CamelMhFolder *mh_folder)
-{
-	GArray *uid_array;
-	MhUidCouple *first_uid_couple;
-	CamelFolderSummary *summary;
-	GList *msg_info_list;
-	CamelMessageInfo *msg_info;
-	gchar *directory_path = mh_folder->directory_path;
-	gchar *summary_file_path;
-	gint fd;
-	gint i;
-	gint field_lgth;
-	
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::save_summary entering \n");
-
-	summary = CAMEL_FOLDER (mh_folder)->summary;
-	if (!summary) return;
-	
-	summary_file_path = g_strdup_printf ("%s/%s", directory_path, ".camel-summary");
-	CAMEL_LOG_FULL_DEBUG ("In the process of writing %s\n", summary_file_path);
-	fd = open (summary_file_path, O_WRONLY | O_CREAT );
-	
-	if (!fd) {
-		CAMEL_LOG_FULL_DEBUG ("could not open file %s for writing. Exiting.\n", summary_file_path);
-		g_free (summary_file_path);
-		return;
-	}
-	g_free (summary_file_path);
-
-	msg_info_list = summary->message_info_list;
-	while (msg_info_list) {
-		msg_info = msg_info_list->data;
-		/* write subject */
-		field_lgth = msg_info->subject ? strlen (msg_info->subject) : 0;
-		write (fd, &field_lgth, sizeof (gint));
-		if (field_lgth)
-			write (fd, msg_info->subject, field_lgth);
-
-		/* write uid */
-		field_lgth = msg_info->uid ? strlen (msg_info->uid) : 0;
-		write (fd, &field_lgth, sizeof (gint));
-		if (field_lgth)
-			write (fd, msg_info->uid, field_lgth);
-
-		/* write date */
-		field_lgth = msg_info->date ? strlen (msg_info->date) : 0;
-		write (fd, &field_lgth, sizeof (gint));
-		if (field_lgth)
-			write (fd, msg_info->date, field_lgth);
-
-		/* write sender */
-		field_lgth = msg_info->sender ? strlen (msg_info->sender) : 0;
-		write (fd, &field_lgth, sizeof (gint));
-		if (field_lgth)
-			write (fd, msg_info->sender, field_lgth);
-
-		msg_info_list = msg_info_list->next;
-		
-	}
-			
-	close (fd);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::save_summary leaving \n");
-		
-}
-
-
-
-
-
-gint
-mh_load_summary (CamelMhFolder *mh_folder)
-{
-	GArray *uid_array;
-	MhUidCouple *first_uid_couple;
-	CamelFolderSummary *summary;
-	CamelMessageInfo *msg_info;
-	gchar *directory_path = mh_folder->directory_path;
-	gchar *summary_file_path;
-	gint fd;
-	gint i;
-	gint field_lgth;
-	gboolean file_eof;
-	gint stat_error;
-	struct stat stat_buf;
-
-	summary = CAMEL_FOLDER (mh_folder)->summary;
-	if (summary) return 1; /* should we regenerate it ? */
-	
-	summary_file_path = g_strdup_printf ("%s/%s", directory_path, ".camel-summary");
-	CAMEL_LOG_FULL_DEBUG ("In the process of reading %s\n", summary_file_path);
-	fd = open (summary_file_path, O_RDONLY);
-	/* tests if file exists */
-	stat_error = stat (summary_file_path, &stat_buf);
-
-	if (!((stat_error != -1) && S_ISREG (stat_buf.st_mode))) {		
-		CAMEL_LOG_FULL_DEBUG ("could not open file %s for reading. Exiting.\n", summary_file_path);
-		g_free (summary_file_path);
-		return -1;
-	}
-	g_free (summary_file_path);
-	
-	for (;;)  {
-		/* read subject */
-		file_eof = (read (fd, &field_lgth, sizeof (gint)) <= 0);
-		if (file_eof) break;
-		
-		
-		/* allcate a summary if needed */
-		if (!summary) 
-			summary = camel_folder_summary_new ();
-		/* allocate a message info struct */
-		msg_info = g_new0 (CamelMessageInfo, 1);	
-	
-		if (!file_eof && (field_lgth > 0)) {			
-			msg_info->subject = g_new0 (gchar, field_lgth + 1);
-			read (fd, msg_info->subject, field_lgth);
-		} else 
-			msg_info->subject = NULL;
-		
-		/* read uid */
-		if (!file_eof) file_eof = (read (fd, &field_lgth, sizeof (gint)) <= 0);
-		if (!file_eof && (field_lgth > 0)) {		
-			msg_info->uid = g_new0 (gchar, field_lgth + 1);
-			read (fd, msg_info->uid, field_lgth);
-		} else 
-			msg_info->uid = NULL;
-		
-		/* read date */
-		if (!file_eof) file_eof = (read (fd, &field_lgth, sizeof (gint)) <= 0);
-		if (!file_eof && (field_lgth > 0)) {			
-			msg_info->date = g_new0 (gchar, field_lgth + 1);
-			read (fd, msg_info->date, field_lgth);
-		} else 
-			msg_info->date = NULL;
-		
-		/* read sender */
-		if (!file_eof) file_eof = (read (fd, &field_lgth, sizeof (gint)) <= 0);
-		if (!file_eof && (field_lgth > 0)) {			
-			msg_info->sender = g_new0 (gchar, field_lgth + 1);
-			read (fd, msg_info->sender, field_lgth);
-		} else 
-			msg_info->sender = NULL;
-
-		summary->message_info_list = g_list_prepend (summary->message_info_list, 
-							     msg_info);
-	}		
-	
-	CAMEL_FOLDER (mh_folder)->summary = summary;
-			
-	close (fd);
-	return 1;
-}
-
-
diff --git a/camel/providers/MH/mh-summary.h b/camel/providers/MH/mh-summary.h
deleted file mode 100644
index 27c9a21f60..0000000000
--- a/camel/providers/MH/mh-summary.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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 MH_SUMMARY_H
-#define MH_SUMMARY_H 1
-
-#include 
-#include "camel-mh-folder.h"
-
-void mh_generate_summary (CamelFolder *folder);
-void mh_save_summary (CamelMhFolder *mh_folder);
-gint mh_load_summary (CamelMhFolder *mh_folder);
-
-#endif /* MH_SUMMARY_H */
diff --git a/camel/providers/MH/mh-uid.c b/camel/providers/MH/mh-uid.c
deleted file mode 100644
index ebcccacd23..0000000000
--- a/camel/providers/MH/mh-uid.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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  
-
-#include "mh-uid.h"
-#include "camel-log.h"
-#include "camel-stream.h"
-#include "camel-stream-fs.h"
-#include "camel-stream-buffered-fs.h"
-#include "gmime-utils.h"
-#include "md5-utils.h"
-#include "mh-utils.h"
-
-#include  
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-void
-mh_uid_get_for_file (gchar *filename, guchar uid[16])
-{
-	CamelStream *message_stream;
-	GArray *header_array;
-	Rfc822Header *cur_header;
-	int i;
-	MD5Context ctx;
-
-
-	message_stream = camel_stream_buffered_fs_new_with_name (filename, 
-								 CAMEL_STREAM_BUFFERED_FS_READ);
-	header_array = get_header_array_from_stream (message_stream);
-	gtk_object_unref (GTK_OBJECT (message_stream));
-	
-	md5_init (&ctx);
-	for (i=0; ilen; i++) {
-		cur_header = (Rfc822Header *)header_array->data + i;
-		if (!g_strcasecmp (cur_header->name, "subject")) {
-			md5_update (&ctx, cur_header->value, strlen (cur_header->value));
-		} else if (!g_strcasecmp (cur_header->name, "sender")) {
-			md5_update (&ctx, cur_header->value, strlen (cur_header->value));
-		} else if (!g_strcasecmp (cur_header->name, "date")) {
-			md5_update (&ctx, cur_header->value, strlen (cur_header->value));			
-		}
-		
-		g_free (cur_header->name);
-		g_free (cur_header->value);
-		
-	}
-	
-	g_array_free (header_array, TRUE);
-	
-	md5_final (&ctx, uid);
-}
-
-
-
-
-void 
-mh_save_uid_list (CamelMhFolder *mh_folder)
-{
-	GArray *uid_array;
-	MhUidCouple *first_uid_couple;
-	gchar *directory_path = mh_folder->directory_path;
-	gchar *uidfile_path;
-	int fd;
-	int i;
-	
-	
-	uidfile_path = g_strdup_printf ("%s/%s", directory_path, ".camel-uid-list");
-	CAMEL_LOG_FULL_DEBUG ("In the process of writing %s\n", uidfile_path);
-	fd = open (uidfile_path, O_WRONLY | O_CREAT );
-	
-	if (!fd) {
-		CAMEL_LOG_FULL_DEBUG ("could not open file %s for writing. Exiting.\n", uidfile_path);
-		g_free (uidfile_path);
-		return;
-	}
-	g_free (uidfile_path);
-
-	uid_array = mh_folder->uid_array;
-	first_uid_couple = (MhUidCouple *)uid_array->data;
-
-	/* write the number of uid contained in the file */
-	write (fd, &(uid_array->len), sizeof (guint));
-	CAMEL_LOG_FULL_DEBUG ("%d entrie present in the list\n", uid_array->len);
-	/* now write the array of uid self */
-	write (fd, first_uid_couple, sizeof (MhUidCouple) * uid_array->len);
-	
-	close (fd);
-}
-
-
-gint 
-mh_load_uid_list (CamelMhFolder *mh_folder)
-{
-	GArray *new_uid_array;
-	MhUidCouple *first_uid_couple;
-	gchar *directory_path = mh_folder->directory_path;
-	gchar *uidfile_path;
-	int fd;
-	guint uid_nb;
-	struct stat stat_buf;
-	gint stat_error = 0;
-	
-	uidfile_path = g_strdup_printf ("%s/%s", directory_path, ".camel-uid-list");
-
-	/* tests if file exists */
-	stat_error = stat (uidfile_path, &stat_buf);
-	
-
-	if (!((stat_error != -1) && S_ISREG (stat_buf.st_mode))) {
-		CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::load_uid_list "
-				      "file %s does not exist. Exiting.\n", uidfile_path);
-		g_free (uidfile_path);
-		return -1;
-	}
-
-	fd = open (uidfile_path, O_RDONLY);
-	g_free (uidfile_path);
-	if (!fd) return -1;
-	
-	if (mh_folder->uid_array) g_array_free (mh_folder->uid_array, FALSE);
-
-	/* read the number of uids in the file */
-	read (fd, &uid_nb, sizeof (guint));
-	CAMEL_LOG_FULL_DEBUG ("reading %d uid_entries\n", uid_nb);
-	new_uid_array = g_array_new (FALSE, FALSE, sizeof (MhUidCouple));
-	new_uid_array = g_array_set_size (new_uid_array, uid_nb);
-	first_uid_couple = (MhUidCouple *)new_uid_array->data;
-	
-	
-	read (fd, first_uid_couple, sizeof (MhUidCouple) * uid_nb);
-	
-	mh_folder->uid_array = new_uid_array;		
-
-	return 1;
-}
-
-
-gint 
-mh_generate_uid_list (CamelMhFolder *mh_folder)
-{	
-	GArray *new_uid_array;
-	const gchar *directory_path;
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-	gchar *msg_path;
-	guint msg_count;	
-	MhUidCouple *uid_couple;
-	guint file_number;
-
-	g_assert (mh_folder);
-	CAMEL_LOG_FULL_DEBUG ("in the process of creating uid list \n");
-	directory_path = mh_folder->directory_path;
-	if (!directory_path) {
-		CAMEL_LOG_FULL_DEBUG ("folder has no directory path. Exiting\n");
-		return -1;
-	}
-		
-	msg_count = camel_folder_get_message_count (CAMEL_FOLDER (mh_folder), NULL);
-	if (!msg_count) {
-		CAMEL_LOG_FULL_DEBUG ("no message in %s. Exiting\n", directory_path);
-		return -1;
-	}
-	
-	new_uid_array = g_array_new (FALSE, FALSE, sizeof (MhUidCouple));
-	new_uid_array = g_array_set_size (new_uid_array, msg_count);
-	uid_couple = (MhUidCouple *)new_uid_array->data;
-
-	dir_handle = opendir (directory_path);
-	
-	/* read first entry in the directory */
-	dir_entry = readdir (dir_handle);
-	while (dir_entry != NULL) {
-
-		/* tests if the entry correspond to a message file */
-		if (mh_is_a_message_file (dir_entry->d_name, directory_path)) {
-						
-			/* get the uid for this message */
-			msg_path = g_strdup_printf ("%s/%s", directory_path, dir_entry->d_name);
-			mh_uid_get_for_file (msg_path, uid_couple->uid);
-			g_free (msg_path);
-
-			/* convert filename into file number */
-			uid_couple->file_number = atoi (dir_entry->d_name);
-			uid_couple++;
-		}
-			
-		/* read next entry */
-		dir_entry = readdir (dir_handle);
-	}
-
-	closedir (dir_handle);
-	mh_folder->uid_array = new_uid_array;
-}
diff --git a/camel/providers/MH/mh-uid.h b/camel/providers/MH/mh-uid.h
deleted file mode 100644
index 63dfe5b159..0000000000
--- a/camel/providers/MH/mh-uid.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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 MH_UID_H
-#define MH_UID_H 1
-
-#include 
-#include "camel-mh-folder.h"
-
-
-typedef struct {
-	gchar uid[16];
-	guint file_number;
-} MhUidCouple;
-
-void mh_uid_get_for_file (gchar *filename, guchar uid[16]);
-void mh_save_uid_list (CamelMhFolder *mh_folder);
-gint mh_load_uid_list (CamelMhFolder *mh_folder);
-gint mh_generate_uid_list (CamelMhFolder *mh_folder);
-
-#endif /* MH_UID_H */
diff --git a/camel/providers/MH/mh-utils.c b/camel/providers/MH/mh-utils.c
deleted file mode 100644
index 51bb84bc65..0000000000
--- a/camel/providers/MH/mh-utils.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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 
-#include "mh-utils.h"
-
-#include  
-
-gboolean
-mh_is_a_message_file (const gchar *file_name, const gchar *file_path)
-{
-	struct stat stat_buf;
-	gint stat_error = 0;
-	gboolean ok;
-	gchar *full_file_name;
-	int i;
-	
-	/* test if the name is a number */
-	i=0;
-	while ((file_name[i] != '\0') && (file_name[i] >= '0') && (file_name[i] <= '9'))
-		i++;
-	if ((i==0) || (file_name[i] != '\0')) return FALSE;
-	
-	/* is it a regular file ? */
-	full_file_name = g_strdup_printf ("%s/%s", file_path, file_name);
-	stat_error = stat (full_file_name, &stat_buf);
-	g_free (full_file_name);
-
-	return  ((stat_error != -1) && S_ISREG (stat_buf.st_mode));
-}
-
diff --git a/camel/providers/MH/mh-utils.h b/camel/providers/MH/mh-utils.h
deleted file mode 100644
index 968228b0a3..0000000000
--- a/camel/providers/MH/mh-utils.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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 MH_UTILS_H
-#define MH_UTILS_H 1
-
-#include 
-
-gboolean mh_is_a_message_file (const gchar *file_name, const gchar *file_path);
-
-#endif /* MH_UTILS_H */
diff --git a/camel/providers/Makefile.am b/camel/providers/Makefile.am
deleted file mode 100644
index 7c520a8b8b..0000000000
--- a/camel/providers/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = mbox pop3 sendmail smtp
-
-# these ones are disabled for the moment.
-# MH maildir imap smtp
diff --git a/camel/providers/maildir/.cvsignore b/camel/providers/maildir/.cvsignore
deleted file mode 100644
index 2e7b174532..0000000000
--- a/camel/providers/maildir/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile.in
-Makefile
-.deps
-*.lo
-*.la
-.libs
diff --git a/camel/providers/maildir/Makefile.am b/camel/providers/maildir/Makefile.am
deleted file mode 100644
index 51a0d7327b..0000000000
--- a/camel/providers/maildir/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = 
-
-libcamelmaildirincludedir = $(includedir)/camel
-
-lib_LTLIBRARIES = libcamelmaildir.la
-
-INCLUDES = -I.. -I$(srcdir)/.. -I$(top_srcdir)/intl -I$(top_srcdir)/camel \
-	$(GTK_INCLUDEDIR) -I$(includedir)
-
-libcamelmaildir_la_SOURCES = \
-	camel-maildir-folder.c \
-	camel-maildir-provider.c \
-	camel-maildir-store.c
-
-libcamelmaildirinclude_HEADERS = \
-	camel-maildir-folder.h \
-	camel-maildir-store.h
-
-libcamelmaildir_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir)
-
-EXTRA_DIST = 
diff --git a/camel/providers/maildir/camel-maildir-folder.c b/camel/providers/maildir/camel-maildir-folder.c
deleted file mode 100644
index 2cb81f3e81..0000000000
--- a/camel/providers/maildir/camel-maildir-folder.c
+++ /dev/null
@@ -1,802 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildir-folder.c : camel-folder subclass for maildir folders */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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
- */
-
-/*
- * AUTHORS : Jukka Zitting 
- *  
- */
-
-
-#include  
-#include  
-#include  
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "camel-maildir-folder.h"
-#include "camel-maildir-store.h"
-#include "camel-stream-fs.h"
-#include "camel-log.h"
-
-static CamelFolderClass *parent_class=NULL;
-
-/* Returns the class for a CamelMaildirFolder */
-#define CMAILDIRF_CLASS(so) CAMEL_MAILDIR_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CMAILDIRS_CLASS(so) CAMEL_STORE_CLASS (GTK_OBJECT(so)->klass)
-
-static void _init_with_store (CamelFolder *folder, CamelStore *parent_store, CamelException *ex);
-static void _set_name (CamelFolder *folder, const gchar *name, CamelException *ex);
-static gboolean _exists (CamelFolder *folder, CamelException *ex);
-static gboolean _create (CamelFolder *folder, CamelException *ex);
-static gboolean _delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
-static gboolean _delete_messages (CamelFolder *folder, CamelException *ex);
-static CamelMimeMessage *_get_message (CamelFolder *folder, gint number, CamelException *ex);
-static gint _get_message_count (CamelFolder *folder, CamelException *ex);
-static void _expunge (CamelFolder *folder, CamelException *ex);
-static GList *_list_subfolders (CamelFolder *folder, CamelException *ex);
-
-/* fs utility functions */
-static DIR * _xopendir (const gchar *path);
-static gboolean _xstat (const gchar *path, struct stat *buf);
-static gboolean _xmkdir (const gchar *path);
-static gboolean _xrename (const gchar *from, const gchar *to);
-static gboolean _xunlink (const gchar *path);
-static gboolean _xrmdir (const gchar *path);
-/* ** */
-
-static void
-camel_maildir_folder_class_init (CamelMaildirFolderClass *camel_maildir_folder_class)
-{
-	CamelFolderClass *camel_folder_class =
-		CAMEL_FOLDER_CLASS (camel_maildir_folder_class);
-
-	parent_class = gtk_type_class (camel_folder_get_type ());
-
-	/* virtual method definition */
-	/* virtual method overload */
-	camel_folder_class->init_with_store   = _init_with_store;
-	camel_folder_class->set_name          = _set_name;
-	camel_folder_class->exists            = _exists;
-	camel_folder_class->create            = _create;
-	camel_folder_class->delete            = _delete;
-	camel_folder_class->delete_messages   = _delete_messages;
-	camel_folder_class->expunge           = _expunge;
-	camel_folder_class->get_message       = _get_message;
-	camel_folder_class->get_message_count = _get_message_count;
-	camel_folder_class->list_subfolders   = _list_subfolders;
-}
-
-GtkType
-camel_maildir_folder_get_type (void)
-{
-	static GtkType camel_maildir_folder_type = 0;
-	
-	if (!camel_maildir_folder_type)	{
-		GtkTypeInfo camel_maildir_folder_info =	
-		{
-			"CamelMaildirFolder",
-			sizeof (CamelMaildirFolder),
-			sizeof (CamelMaildirFolderClass),
-			(GtkClassInitFunc) camel_maildir_folder_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_maildir_folder_type =
-			gtk_type_unique (CAMEL_FOLDER_TYPE, &camel_maildir_folder_info);
-	}
-	
-	return camel_maildir_folder_type;
-}
-
-
-
-
-
-
-/**
- * CamelMaildirFolder::init_with_store: initializes the folder object
- * @folder:       folder object to initialize
- * @parent_store: parent store object of the folder
- *
- * Simply tells that the folder can contain messages but not subfolders.
- * Perhaps we'll later implement subfolders too...
- */
-static void 
-_init_with_store (CamelFolder *folder, CamelStore *parent_store, CamelException *ex)
-{
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::init_with_store\n");
-	g_assert (folder);
-	g_assert (parent_store);
-	
-	/* call parent method */
-	parent_class->init_with_store (folder, parent_store, ex);
-	
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = TRUE;
-	folder->has_summary_capability = FALSE;
-
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::init_with_store\n");
-}
-
-/**
- * CamelMaildirFolder::set_name: sets the name of the folder
- * @folder: folder object
- * @name:   name of the folder
- *
- * Sets the name of the folder object. The existence of a folder with
- * the given name is not checked in this function.
- */
-static void
-_set_name (CamelFolder *folder, const gchar *name, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder;
-	CamelMaildirStore *maildir_store;
-	
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::set_name\n");
-	g_assert (folder);
-	g_assert (name);
-	g_assert (folder->parent_store);
-
-	maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	maildir_store = CAMEL_MAILDIR_STORE (folder->parent_store);
-
-	/* call default implementation */
-	parent_class->set_name (folder, name, ex);
-	
-	if (maildir_folder->directory_path)
-		g_free (maildir_folder->directory_path);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::set_name full_name is %s\n", folder->full_name);
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::set_name toplevel_dir is %s\n", maildir_store->toplevel_dir);
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::set_name separator is %c\n", camel_store_get_separator (folder->parent_store));
-
-	if (folder->full_name && folder->full_name[0])
-		maildir_folder->directory_path =
-			g_strconcat (maildir_store->toplevel_dir, G_DIR_SEPARATOR_S,
-				     folder->full_name, NULL);
-	else
-		maildir_folder->directory_path = g_strdup (maildir_store->toplevel_dir);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::set_name: name set to %s\n", name);
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::set_name\n");
-}
-
-/**
- * CamelMaildirFolder::exists: tests whether the named maildir exists
- * @folder: folder object
- *
- * A created maildir folder object doesn't necessarily exist yet in the
- * filesystem. This function checks whether the maildir exists.
- * The structure of the maildir is stated in the maildir.5 manpage.
- *
- * maildir.5:
- *     A directory in maildir format  has  three  subdirectories,
- *     all on the same filesystem: tmp, new, and cur.
- *
- * Return value: TRUE if the maildir exists, FALSE otherwise
- */
-static gboolean
-_exists (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	static const gchar *dir[3] = { "new", "cur", "tmp" };
-	gint i;
-	struct stat statbuf;
-	const gchar *maildir;
-	gchar *path;
-	gboolean rv = TRUE;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::exists\n");
-	g_assert (folder);
-	g_return_val_if_fail (maildir_folder->directory_path, FALSE);
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMailFolder::exists: checking maildir %s\n",
-			      maildir);
-
-	/* check whether the toplevel directory exists */
-	rv = _xstat (maildir, &statbuf) && S_ISDIR (statbuf.st_mode);
-
-	/* check whether the maildir subdirectories exist */
-	for (i = 0; rv && i < 3; i++) {
-		path = g_strconcat (maildir, G_DIR_SEPARATOR_S, dir[i], NULL);
-
-		rv = _xstat (path, &statbuf) && S_ISDIR (statbuf.st_mode);
-
-		g_free (path);
-	}
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::exists: %s\n",
-			      (rv) ? "maildir found" : "maildir not found");
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::exists\n");
-	return rv;
-}
-
-/**
- * CamelMaildirFolder::create: creates the named maildir
- * @folder: folder object
- *
- * A created maildir folder object doesn't necessarily exist yet in the
- * filesystem. This function creates the maildir if it doesn't yet exist.
- * The structure of the maildir is stated in the maildir.5 manpage.
- *
- * maildir.5:
- *     A directory in maildir format  has  three  subdirectories,
- *     all on the same filesystem: tmp, new, and cur.
- *
- * Return value: TRUE if the maildir existed already or was created,
- *               FALSE otherwise
- */
-static gboolean
-_create (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	static const gchar *dir[3] = { "new", "cur", "tmp" };
-	gint i;
-	const gchar *maildir;
-	gchar *path;
-	gboolean rv = TRUE;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::create\n");
-	g_assert (folder);
-
-	/* check whether the maildir already exists */
-	if (camel_folder_exists (folder, ex)) return TRUE;
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMailFolder::create: creating maildir %s\n",
-			      maildir);
-
-	/* create the toplevel directory */
-	rv = _xmkdir (maildir);
-
-	/* create the maildir subdirectories */
-	for (i = 0; rv && i < 3; i++) {
-		path = g_strconcat (maildir, G_DIR_SEPARATOR_S, dir[i], NULL);
-
-		rv = _xmkdir (path);
-
-		g_free (path);
-	}
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::create: %s\n",
-			      rv ? "maildir created" : "an error occurred");
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::create\n");
-	return rv;
-}
-
-/**
- * CamelMaildirFolder::delete: delete the maildir folder
- * @folder: the folder object
- * @recurse:
- *
- * This function empties and deletes the maildir folder. The subdirectories
- * "tmp", "cur", and "new" are removed first and then the toplevel maildir
- * directory is deleted. All files from the directories are deleted as well, 
- * so you should be careful when using this function. If a subdirectory cannot
- * be deleted, then the operation it is stopped. Thus if an error occurs, the
- * maildir directory won't be removed, but it might no longer be a valid maildir.
- */
-static gboolean
-_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	static const gchar *dir[3] = { "new", "cur", "tmp" };
-	gint i;
-	const gchar *maildir;
-	gchar *path;
-	gboolean rv = TRUE;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::create\n");
-	g_assert (folder);
-
-	/* check whether the maildir already exists */
-	if (!camel_folder_exists (folder, ex)) return TRUE;
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMailFolder::delete: deleting maildir %s\n",
-			      maildir);
-
-	/* delete the maildir subdirectories */
-	for (i = 0; rv && i < 3; i++) {
-		path = g_strconcat (maildir, G_DIR_SEPARATOR_S, dir[i], NULL);
-
-		rv = _xrmdir (path);
-
-		g_free (path);
-	}
-
-	/* create the toplevel directory */
-	if (rv)
-		rv = _xrmdir (maildir);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::delete: %s\n",
-			      rv ? "maildir deleted" : "an error occurred");
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::delete\n");
-	return rv;
-}
-
-/**
- * CamelMaildirFolder::delete_messages: empty the maildir folder
- * @folder:  the folder object
- *
- * This function empties the maildir folder. All messages from the
- * "cur" subdirectory are deleted. If a message cannot be deleted, then
- * it is just skipped and the rest of the messages are still deleted.
- * Files with names starting with a dot are skipped as described in the
- * maildir.5 manpage.
- *
- * maildir.5:
- *     It is a good idea for readers to skip all filenames in new
- *     and cur starting with a dot. Other than this, readers
- *     should not attempt to parse filenames.
- *
- * Return value: FALSE on error and if some messages could not be deleted.
- *               TRUE otherwise.
- */
-static gboolean 
-_delete_messages (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	const gchar *maildir;
-	gchar *curdir, *file;
-	DIR *dir_handle;
-	struct dirent *dir_entry;
-	gboolean rv = TRUE;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::delete_messages\n");
-	g_assert (folder);
-
-	/* call default implementation */
-	parent_class->delete_messages (folder, ex);
-
-	/* Check if the folder didn't exist */
-	if (!camel_folder_exists (folder, ex)) return TRUE;
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::delete_messages: "
-			      "deleting messages from %s\n", maildir);
-
-	/* delete messages from the maildir subdirectory "cur" */
-	curdir = g_strconcat (maildir, G_DIR_SEPARATOR_S, "cur", NULL);
-
-	dir_handle = _xopendir (curdir);
-	if (dir_handle) {
-		while ((dir_entry = readdir (dir_handle))) {
-			if (dir_entry->d_name[0] == '.') continue;
-			file = g_strconcat (curdir, G_DIR_SEPARATOR_S,
-					    dir_entry->d_name, NULL);
-
-			if (!_xunlink (file)) rv = FALSE;
-
-			g_free (file);
-		}
-		closedir (dir_handle);
-	} else
-		rv = FALSE;
-
-	g_free (curdir);
-	
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::delete_messages: %s\n",
-			      rv ? "messages deleted" : "an error occurred");
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::delete_messages\n");
-	return rv;
-}
-
-/**
- * CamelMaildirFolder::get_message: get a message from maildir
- * @folder: the folder object
- * @number: number of the message within the folder
- *
- * Return value: the message, NULL on error
- */
-static CamelMimeMessage *
-_get_message (CamelFolder *folder, gint number, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER(folder);
-	DIR *dir_handle;
-	struct dirent *dir_entry;
-	CamelStream *stream;
-	CamelMimeMessage *message = NULL;
-	const gchar *maildir;
-	gchar *curdir, *file = NULL;
-	gint count = -1;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::get_message\n");
-	g_assert(folder);
-
-	/* Check if the folder exists */
-	if (!camel_folder_exists (folder, ex)) return NULL;
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message: "
-			      "getting message #%d from %s\n", number, maildir);
-
-	/* Count until the desired message is reached */
-	curdir = g_strconcat (maildir, G_DIR_SEPARATOR_S, "cur", NULL);
-	if ((dir_handle = _xopendir (curdir))) {
-		while ((count < number) && (dir_entry = readdir (dir_handle)))
-			if (dir_entry->d_name[0] != '.') count++;
-
-		if (count == number)
-			file = g_strconcat (curdir, G_DIR_SEPARATOR_S,
-					    dir_entry->d_name, NULL);
-
-		closedir (dir_handle);
-	}
-	g_free (curdir);
-	if (!file) return NULL;
-
-	/* Create the message object */
-	message = camel_mime_message_new ();
-	stream = camel_stream_fs_new_with_name (file, CAMEL_STREAM_FS_READ);
-
-	if (!message || !stream) {
-		g_free (file);
-		if (stream) gtk_object_unref (GTK_OBJECT (stream));
-		if (message) gtk_object_unref (GTK_OBJECT (message));
-		return NULL;
-	}
-
-	camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (message),
-						  stream);
-	gtk_object_unref (GTK_OBJECT (stream));
-	gtk_object_set_data_full (GTK_OBJECT (message),
-				  "fullpath", file, g_free);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message: "
-			      "message %p created from %s\n", message, file);
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::get_message\n");
-	return message;
-}
-
-/**
- * CamelMaildirFolder::get_message_count: count messages in maildir
- * @folder:  the folder object
- *
- * Returns the number of messages in the maildir folder. New messages
- * are included in this count. 
- *
- * Return value: number of messages in the maildir, -1 on error
- */
-static gint
-_get_message_count (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER(folder);
-	const gchar *maildir;
-	gchar *newdir, *curdir, *newfile, *curfile;
-	DIR *dir_handle;
-	struct dirent *dir_entry;
-	guint count = 0;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering "
-			      "CamelMaildirFolder::get_message_count\n");
-	g_assert(folder);
-
-	/* check if the maildir exists */
-	if (!camel_folder_exists (folder, ex)) return -1;
-
-	maildir = maildir_folder->directory_path;
-
-	newdir = g_strconcat (maildir, G_DIR_SEPARATOR_S, "new", NULL);
-	curdir = g_strconcat (maildir, G_DIR_SEPARATOR_S, "cur", NULL);
-
-	/* Check new messages */
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message_count: "
-			      "getting new messages from %s\n", newdir);
-	if ((dir_handle = _xopendir (newdir))) {
-		while ((dir_entry = readdir (dir_handle))) {
-			if (dir_entry->d_name[0] == '.') continue;
-			newfile = g_strconcat (newdir, G_DIR_SEPARATOR_S,
-					       dir_entry->d_name, NULL);
-			curfile = g_strconcat (curdir, G_DIR_SEPARATOR_S,
-					       dir_entry->d_name, ":2,", NULL);
-			
-			_xrename (newfile, curfile);
-			
-			g_free (curfile);
-			g_free (newfile);
-		}
-		closedir (dir_handle);
-	}
-
-	/* Count messages */
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message_count: "
-			      "counting messages in %s\n", curdir);
-	if ((dir_handle = _xopendir (curdir))) {
-		while ((dir_entry = readdir (dir_handle)))
-			if (dir_entry->d_name[0] != '.') count++;
-		closedir (dir_handle);
-	}
-
-	g_free (curdir);
-	g_free (newdir);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message_count: "
-			      " found %d messages\n", count);
-	CAMEL_LOG_FULL_DEBUG ("Leaving "
-			      "CamelMaildirFolder::get_message_count\n");
-	return count;
-}
-
-
-
-
-/**
- * CamelMaildirFolder::expunge: expunge messages marked as deleted
- * @folder:  the folder object
- *
- * Physically deletes the messages marked as deleted in the folder.
- */
-static void
-_expunge (CamelFolder *folder, CamelException *ex)
-{
-	CamelMimeMessage *message;
-	GList *node;
-	gchar *fullpath;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::expunge\n");
-	g_assert(folder);
-
-	/* expunge messages marked for deletion */
-	for (node = folder->message_list; node; node = g_list_next(node)) {
-		message = CAMEL_MIME_MESSAGE (node->data);
-		if (!message) {
-			CAMEL_LOG_WARNING ("CamelMaildirFolder::expunge: "
-					   "null message in node %p\n", node);
-			continue;
-		}
-				
-		if (camel_mime_message_get_flag (message, "DELETED")) {
-			CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::expunge: "
-					      "expunging message #%d\n",
-					      message->message_number);
-
-			/* expunge the message */
-			fullpath = gtk_object_get_data (GTK_OBJECT (message),
-							"fullpath");
-			CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::expunge: "
-					      "message fullpath is %s\n",
-					      fullpath);
-
-			if (_xunlink (fullpath))
-				message->expunged = TRUE;
-		} else {
-			CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::expunge: "
-					      "skipping message #%d\n",
-					      message->message_number);
-		}
-	}
-	
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::expunge\n");
-}
-
-
-
-
-/**
- * CamelMaildirFolder::list_subfolders: return a list of subfolders
- * @folder:  the folder object
- *
- * Returns the names of the maildir subfolders in a list.
- *
- * Return value: list of subfolder names
- */
-static GList *
-_list_subfolders (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	const gchar *maildir;
-	gchar *subdir;
-	struct stat statbuf;
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-	GList *subfolders = NULL;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::list_subfolders\n");
-	g_assert (folder);
-
-	/* check if the maildir exists */
-	if (!camel_folder_exists (folder, ex)) return NULL;
-
-	/* scan through the maildir toplevel directory */
-	maildir = maildir_folder->directory_path;
-	if ((dir_handle = _xopendir (maildir))) {
-		while ((dir_entry = readdir (dir_handle))) {
-			if (dir_entry->d_name[0] == '.') continue;
-			if (strcmp (dir_entry->d_name, "new") == 0) continue;
-			if (strcmp (dir_entry->d_name, "cur") == 0) continue;
-			if (strcmp (dir_entry->d_name, "tmp") == 0) continue;
-
-			subdir = g_strconcat (maildir, G_DIR_SEPARATOR_S,
-					      dir_entry->d_name, NULL);
-			
-			if (_xstat (subdir, &statbuf)
-			    && S_ISDIR (statbuf.st_mode))
-				subfolders =
-					g_list_append (
-						subfolders,
-						g_strdup (dir_entry->d_name));
-			
-			g_free (subdir);
-		}
-		closedir (dir_handle);
-	}
-
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::list_subfolders\n");
-	return subfolders;
-}
-
-
-
-
-
-
-
-/*
- * fs utility function 
- *
- */
-
-static DIR *
-_xopendir (const gchar *path)
-{
-	DIR *handle;
-	g_assert (path);
-
-	handle = opendir (path);
-	if (!handle) {
-		CAMEL_LOG_WARNING ("ERROR: opendir (%s);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-	}
-
-	return handle;
-}
-
-static gboolean
-_xstat (const gchar *path, struct stat *buf)
-{
-	gint stat_error;
-	g_assert (path);
-	g_assert (buf);
-
-	stat_error = stat (path, buf);
-	if (stat_error == 0) {
-		return TRUE;
-	} else if (errno == ENOENT) {
-		buf->st_mode = 0;
-		return TRUE;
-	} else {
-		CAMEL_LOG_WARNING ("ERROR: stat (%s, %p);\n", path, buf);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	}
-}
-
-static gboolean
-_xmkdir (const gchar *path)
-{
-	g_assert (path);
-
-	if (mkdir (path, S_IRWXU) == -1) {
-		CAMEL_LOG_WARNING ("ERROR: mkdir (%s, S_IRWXU);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	} 
-
-	return TRUE;
-}
-
-static gboolean
-_xrename (const gchar *from, const gchar *to)
-{
-	g_assert (from);
-	g_assert (to);
-
-	if (rename (from, to) == 0) {
-		return TRUE;
-	} else {
-		CAMEL_LOG_WARNING ("ERROR: rename (%s, %s);\n", from, to);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	}
-}
-
-static gboolean
-_xunlink (const gchar *path)
-{
-	g_assert (path);
-
-	if (unlink (path) == 0) {
-		return TRUE;
-	} else if (errno == ENOENT) {
-		return TRUE;
-	} else {
-		CAMEL_LOG_WARNING ("ERROR: unlink (%s);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	}
-}
-
-static gboolean
-_xrmdir (const gchar *path)
-{
-	DIR *dir_handle;
-	struct dirent *dir_entry;
-	gchar *file;
-	struct stat statbuf;
-	g_assert (path);
-
-	dir_handle = opendir (path);
-	if (!dir_handle && errno == ENOENT) {
-		return TRUE;
-	} else if (!dir_handle) {
-		CAMEL_LOG_WARNING ("ERROR: opendir (%s);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	}
-
-	while ((dir_entry = readdir (dir_handle))) {
-		file = g_strconcat (path, G_DIR_SEPARATOR_S, dir_entry->d_name,
-				    NULL);
-		if (_xstat (file, &statbuf) && S_ISREG (statbuf.st_mode))
-			_xunlink (file);
-		g_free (file);
-	}
-
-	closedir (dir_handle);
-
-	if (rmdir (path) == 0) {
-		return TRUE;
-	} else if (errno == ENOENT) {
-		return TRUE;
-	} else {
-		CAMEL_LOG_WARNING ("ERROR: rmdir (%s);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	} 
-}
-
-/** *** **/
-
diff --git a/camel/providers/maildir/camel-maildir-folder.h b/camel/providers/maildir/camel-maildir-folder.h
deleted file mode 100644
index 5997da2011..0000000000
--- a/camel/providers/maildir/camel-maildir-folder.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildir-folder.h : Abstract class for an email folder */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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_MAILDIR_FOLDER_H
-#define CAMEL_MAILDIR_FOLDER_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-folder.h"
-/*  #include "camel-store.h" */
-
-#define CAMEL_MAILDIR_FOLDER_TYPE     (camel_maildir_folder_get_type ())
-#define CAMEL_MAILDIR_FOLDER(obj)     (GTK_CHECK_CAST((obj), CAMEL_MAILDIR_FOLDER_TYPE, CamelMaildirFolder))
-#define CAMEL_MAILDIR_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MAILDIR_FOLDER_TYPE, CamelMaildirFolderClass))
-#define IS_CAMEL_MAILDIR_FOLDER(o)    (GTK_CHECK_TYPE((o), CAMEL_MAILDIR_FOLDER_TYPE))
-
-
-typedef struct {
-	CamelFolder parent_object;
-	
-	gchar *directory_path;
-} CamelMaildirFolder;
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-
-} CamelMaildirFolderClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType camel_maildir_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MAILDIR_FOLDER_H */
diff --git a/camel/providers/maildir/camel-maildir-provider.c b/camel/providers/maildir/camel-maildir-provider.c
deleted file mode 100644
index cd5521adc0..0000000000
--- a/camel/providers/maildir/camel-maildir-provider.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildir-provider.c: maildir provider registration code */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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-maildir-store.h"
-#include "camel-provider.h"
-#include "camel-log.h"
-
-
-static CamelProvider _maildir_provider = {
-	(GtkType) 0,
-	PROVIDER_STORE,
-	"maildir",
-	"Maildir provider for Camel",
-	"This maildir provider is based on the default MH provider of Camel",
-	(GModule *) NULL
-};
-
-
-
-CamelProvider *
-camel_provider_module_init ()
-{
-	_maildir_provider.object_type = camel_maildir_store_get_type();
-	return &_maildir_provider;
-}
diff --git a/camel/providers/maildir/camel-maildir-store.c b/camel/providers/maildir/camel-maildir-store.c
deleted file mode 100644
index 8f37494003..0000000000
--- a/camel/providers/maildir/camel-maildir-store.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildir-store.c : class for an maildir store */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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 "camel-maildir-store.h"
-#include "camel-maildir-folder.h"
-#include "url-util.h"
-
-static CamelStoreClass *parent_class=NULL;
-
-/* Returns the class for a CamelMaildirStore */
-#define CMAILDIRS_CLASS(so) CAMEL_MAILDIR_STORE_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CMAILDIRF_CLASS(so) CAMEL_MAILDIR_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-
-static void _init (CamelStore *store, CamelSession *session,
-		   const gchar *url_name);
-static CamelFolder *_get_folder (CamelStore *store, const gchar *folder_name);
-
-static void
-camel_maildir_store_class_init (
-	CamelMaildirStoreClass *camel_maildir_store_class)
-{
-	CamelStoreClass *camel_store_class =
-		CAMEL_STORE_CLASS (camel_maildir_store_class);
-
-	parent_class = gtk_type_class (camel_store_get_type ());
-	
-	/* virtual method definition */
-	/* virtual method overload */
-	camel_store_class->init = _init;
-	camel_store_class->get_folder = _get_folder;
-}
-
-static void
-camel_maildir_store_init (gpointer object, gpointer klass)
-{
-	CamelMaildirStore *maildir_store = CAMEL_MAILDIR_STORE (object);
-	CamelStore *store = CAMEL_STORE (object);
-	
-	store->separator = G_DIR_SEPARATOR;
-}
-
-GtkType
-camel_maildir_store_get_type (void)
-{
-	static GtkType camel_maildir_store_type = 0;
-	
-	if (!camel_maildir_store_type)	{
-		GtkTypeInfo camel_maildir_store_info =	
-		{
-			"CamelMaildirStore",
-			sizeof (CamelMaildirStore),
-			sizeof (CamelMaildirStoreClass),
-			(GtkClassInitFunc) camel_maildir_store_class_init,
-			(GtkObjectInitFunc) camel_maildir_store_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_maildir_store_type =
-			gtk_type_unique (CAMEL_STORE_TYPE,
-					 &camel_maildir_store_info);
-	}
-	
-	return camel_maildir_store_type;
-}
-
-static void 
-_init (CamelStore *store, CamelSession *session, const gchar *url_name)
-{
-	CamelMaildirStore *maildir_store = CAMEL_MAILDIR_STORE (store);
-	Gurl *store_url;
-	g_assert (url_name);
-
-	/* call parent implementation */
-	parent_class->init (store, session, url_name);
-	
-	/* find the path in the URL*/
-	store_url = g_url_new (url_name);
-
-	g_return_if_fail (store_url);
-	g_return_if_fail (store_url->path); 
-	
-	maildir_store->toplevel_dir = g_strdup (store_url->path); 
-
-	g_url_free (store_url);
-}
-
-static CamelFolder *
-_get_folder (CamelStore *store, const gchar *folder_name)
-{
-	CamelMaildirStore *maildir_store = CAMEL_MAILDIR_STORE (store);
-	CamelMaildirFolder *new_maildir_folder;
-	CamelFolder *new_folder;
-
-	new_maildir_folder = gtk_type_new (CAMEL_MAILDIR_FOLDER_TYPE);
-	new_folder = CAMEL_FOLDER (new_maildir_folder);
-
-	CF_CLASS (new_folder)->init_with_store (new_folder, store, NULL);
-	CF_CLASS (new_folder)->set_name (new_folder, folder_name, NULL);
-	
-	return new_folder;
-}
diff --git a/camel/providers/maildir/camel-maildir-store.h b/camel/providers/maildir/camel-maildir-store.h
deleted file mode 100644
index 1a95ed1436..0000000000
--- a/camel/providers/maildir/camel-maildir-store.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildirstore.h : class for an maildir store */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * 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_MAILDIR_STORE_H
-#define CAMEL_MAILDIR_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-store.h"
-
-#define CAMEL_MAILDIR_STORE_TYPE     (camel_maildir_store_get_type ())
-#define CAMEL_MAILDIR_STORE(obj)     (GTK_CHECK_CAST((obj), CAMEL_MAILDIR_STORE_TYPE, CamelMaildirStore))
-#define CAMEL_MAILDIR_STORE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MAILDIR_STORE_TYPE, CamelMaildirStoreClass))
-#define IS_CAMEL_MAILDIR_STORE(o)    (GTK_CHECK_TYPE((o), CAMEL_MAILDIR_STORE_TYPE))
-
-
-typedef struct {
-	CamelStore parent_object;	
-	
-	gchar *toplevel_dir;	
-} CamelMaildirStore;
-
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-
-} CamelMaildirStoreClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType camel_maildir_store_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MAILDIR_STORE_H */
-
-
diff --git a/camel/providers/mbox/.cvsignore b/camel/providers/mbox/.cvsignore
deleted file mode 100644
index fd6b811c68..0000000000
--- a/camel/providers/mbox/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.deps
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
diff --git a/camel/providers/mbox/Makefile.am b/camel/providers/mbox/Makefile.am
deleted file mode 100644
index 258c01a94e..0000000000
--- a/camel/providers/mbox/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 = libcamelmbox.la
-
-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)
-
-libcamelmbox_la_SOURCES = 			\
-	camel-mbox-folder.c			\
-	camel-mbox-provider.c			\
-	camel-mbox-store.c			\
-	camel-mbox-search.c			\
-	camel-mbox-summary.c
-
-libcamelmboxinclude_HEADERS =			\
-	camel-mbox-folder.h			\
-	camel-mbox-store.h			\
-	camel-mbox-search.h			\
-	camel-mbox-summary.h
-
-libcamelmbox_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir) 
-
-libcamelmbox_la_LIBADD = $(top_builddir)/e-util/libeutil.la $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-#libcamelmbox_la_LIBADD = $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-
-EXTRA_DIST = 
-
diff --git a/camel/providers/mbox/camel-mbox-folder.c b/camel/providers/mbox/camel-mbox-folder.c
deleted file mode 100644
index c1920bdd1c..0000000000
--- a/camel/providers/mbox/camel-mbox-folder.c
+++ /dev/null
@@ -1,893 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-folder.c : Abstract class for an email folder */
-
-/* 
- * Authors: Bertrand Guiheneuf  
- *          Michael Zucchi 
- *
- * Copyright (C) 1999, 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  
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-mbox-folder.h"
-#include "camel-mbox-store.h"
-#include "string-utils.h"
-#include "camel-stream-fs.h"
-#include "camel-mbox-summary.h"
-#include "gmime-utils.h"
-#include "camel-mbox-search.h"
-#include "camel-data-wrapper.h"
-#include "camel-mime-message.h"
-
-#include "camel-exception.h"
-
-#define d(x)
-
-static CamelFolderClass *parent_class=NULL;
-
-/* Returns the class for a CamelMboxFolder */
-#define CMBOXF_CLASS(so) CAMEL_MBOX_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CMBOXS_CLASS(so) CAMEL_STORE_CLASS (GTK_OBJECT(so)->klass)
-
-
-static void _init (CamelFolder *folder, CamelStore *parent_store,
-		   CamelFolder *parent_folder, const gchar *name,
-		   gchar separator, CamelException *ex);
-
-static void _open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex);
-static void _close (CamelFolder *folder, gboolean expunge, CamelException *ex);
-static gboolean _exists (CamelFolder *folder, CamelException *ex);
-static gboolean _create(CamelFolder *folder, CamelException *ex);
-static gboolean _delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
-static gboolean _delete_messages (CamelFolder *folder, CamelException *ex);
-static GList *_list_subfolders (CamelFolder *folder, CamelException *ex);
-static CamelMimeMessage *_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex);
-static gint _get_message_count (CamelFolder *folder, CamelException *ex);
-static void _append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
-static GList *_get_uid_list  (CamelFolder *folder, CamelException *ex);
-static CamelMimeMessage *_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex);
-#if 0
-static void _expunge (CamelFolder *folder, CamelException *ex);
-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
-
-GPtrArray *summary_get_message_info (CamelFolder *folder, int first, int count);
-
-static void _finalize (GtkObject *object);
-
-static void
-camel_mbox_folder_class_init (CamelMboxFolderClass *camel_mbox_folder_class)
-{
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_mbox_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 = _init;
-	camel_folder_class->open = _open;
-	camel_folder_class->close = _close;
-	camel_folder_class->exists = _exists;
-	camel_folder_class->create = _create;
-	camel_folder_class->delete = _delete;
-	camel_folder_class->delete_messages = _delete_messages;
-	camel_folder_class->list_subfolders = _list_subfolders;
-	camel_folder_class->get_message_by_number = _get_message_by_number;
-	camel_folder_class->get_message_count = _get_message_count;
-	camel_folder_class->append_message = _append_message;
-	camel_folder_class->get_uid_list = _get_uid_list;
-#if 0
-	camel_folder_class->expunge = _expunge;
-	camel_folder_class->copy_message_to = _copy_message_to;
-	camel_folder_class->get_message_uid = _get_message_uid;
-#endif
-	camel_folder_class->get_message_by_uid = _get_message_by_uid;
-
-	camel_folder_class->search_by_expression = camel_mbox_folder_search_by_expression;
-	camel_folder_class->search_complete = camel_mbox_folder_search_complete;
-	camel_folder_class->search_cancel = camel_mbox_folder_search_cancel;
-
-	camel_folder_class->get_message_info = summary_get_message_info;
-
-	gtk_object_class->finalize = _finalize;
-	
-}
-
-static void           
-_finalize (GtkObject *object)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (object);
-
-	g_free (mbox_folder->folder_file_path);
-	g_free (mbox_folder->folder_dir_path);
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-GtkType
-camel_mbox_folder_get_type (void)
-{
-	static GtkType camel_mbox_folder_type = 0;
-	
-	if (!camel_mbox_folder_type)	{
-		GtkTypeInfo camel_mbox_folder_info =	
-		{
-			"CamelMboxFolder",
-			sizeof (CamelMboxFolder),
-			sizeof (CamelMboxFolderClass),
-			(GtkClassInitFunc) camel_mbox_folder_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_mbox_folder_type = gtk_type_unique (CAMEL_FOLDER_TYPE, &camel_mbox_folder_info);
-	}
-	
-	return camel_mbox_folder_type;
-}
-
-static void 
-_init (CamelFolder *folder, CamelStore *parent_store,
-       CamelFolder *parent_folder, const gchar *name, gchar separator,
-       CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = (CamelMboxFolder *)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 = TRUE;
-	folder->has_uid_capability = TRUE;
-	folder->has_search_capability = TRUE;
-
- 	mbox_folder->summary = NULL;
-
-	/* now set the name info */
-	g_free (mbox_folder->folder_file_path);
-	g_free (mbox_folder->folder_dir_path);
-	g_free (mbox_folder->index_file_path);
-
-	root_dir_path = camel_mbox_store_get_toplevel_dir (CAMEL_MBOX_STORE(folder->parent_store));
-
-	mbox_folder->folder_file_path = g_strdup_printf ("%s/%s", root_dir_path, folder->full_name);
-	mbox_folder->summary_file_path = g_strdup_printf ("%s/%s-ev-summary", root_dir_path, folder->full_name);
-	mbox_folder->folder_dir_path = g_strdup_printf ("%s/%s.sdb", root_dir_path, folder->full_name);
-	mbox_folder->index_file_path = g_strdup_printf ("%s/%s.ibex", root_dir_path, folder->full_name);
-}
-
-static void
-_open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (folder);
-
-	/* call parent class */
-	parent_class->open (folder, mode, ex);
-	if (camel_exception_get_id(ex))
-		return;
-
-	mbox_folder->index = ibex_open(mbox_folder->index_file_path, O_CREAT|O_RDWR, 0600);
-	if (mbox_folder->index == NULL) {
-		g_warning("Could not open/create index file: %s: indexing will not function",
-			  strerror(errno));
-	}
-
-	mbox_folder->summary = camel_mbox_summary_new(mbox_folder->summary_file_path, mbox_folder->folder_file_path, mbox_folder->index);
-	if (mbox_folder->summary == NULL) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID, /* FIXME: right error code */
-				     "Could not create summary");
-		return;
-	}
-	camel_mbox_summary_load(mbox_folder->summary);
-}
-
-static void
-_close (CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (folder);
-
-	/* call parent implementation */
-	parent_class->close (folder, expunge, ex);
-
-	/* save index */
-	if (mbox_folder->index) {
-		ibex_close(mbox_folder->index);
-		mbox_folder->index = NULL;
-	}
-	camel_mbox_summary_save (mbox_folder->summary);
-	camel_mbox_summary_unref (mbox_folder->summary);
-	mbox_folder->summary = NULL;
-}
-
-
-/* FIXME: clean up this snot */
-static gboolean
-_exists (CamelFolder *folder, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder;
-	struct stat stat_buf;
-	gint stat_error;
-	gboolean exists;
-
-	g_assert(folder != NULL);
-
-	mbox_folder = CAMEL_MBOX_FOLDER (folder);
-
-	/* check if the mbox file path is determined */
-	if (!mbox_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 mbox dir path is determined */
-	if (!mbox_folder->folder_dir_path) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID,
-				     "undetermined folder directory path. Maybe use set_name ?");
-		return FALSE;
-	}
-
-
-	/* we should not check for that here */
-#if 0
-	/* check if the mbox directory exists */
-	access_result = access (mbox_folder->folder_dir_path, F_OK);
-	if (access_result < 0) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_SYSTEM,
-				     strerror(errno));
-		return FALSE;
-	}
-	stat_error = stat (mbox_folder->folder_dir_path, &stat_buf);
-	if (stat_error == -1)  {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_SYSTEM,
-				     strerror(errno));
-		return FALSE;
-	}
-	exists = S_ISDIR (stat_buf.st_mode);
-	if (!exists) return FALSE;
-#endif 
-
-
-	/* check if the mbox file exists */
-	stat_error = stat (mbox_folder->folder_file_path, &stat_buf);
-	if (stat_error == -1)
-		return FALSE;
-	
-	exists = S_ISREG (stat_buf.st_mode);
-	/* we should  check the rights here  */
-	
-	return exists;
-}
-
-/* FIXME: clean up this snot */
-static gboolean
-_create (CamelFolder *folder, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (folder);
-	const gchar *folder_file_path, *folder_dir_path;
-	mode_t dir_mode = S_IRWXU;
-	gint mkdir_error;
-	gboolean folder_already_exists;
-	int creat_fd;
-
-	g_assert(folder != NULL);
-
-	/* call default implementation */
-	parent_class->create (folder, ex);
-
-	/* get the paths of what we need to create */
-	folder_file_path = mbox_folder->folder_file_path;
-	folder_dir_path = mbox_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 subfolders */
-	mkdir_error = mkdir (folder_dir_path, dir_mode);
-	if (mkdir_error == -1)
-		goto io_error;
-	
-
-	/* create the mbox file */ 
-	/* it must be rw for the user and none for the others */
-	creat_fd = open (folder_file_path, 
-			 O_WRONLY | O_CREAT | O_APPEND,
-			 0600);
-	if (creat_fd == -1)
-		goto io_error;
-
-	close (creat_fd);
-
-	return TRUE;
-
-	/* exception handling for io errors */
-	io_error :
-		if (errno == EACCES) {
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-					     "You don't have the permission to create the mbox file.");
-			return FALSE;
-		} else {
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_SYSTEM,
-					     "Unable to create the mbox file.");
-			return FALSE;
-		}
-}
-
-
-/* FIXME: cleanup */
-static gboolean
-_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (folder);
-	const gchar *folder_file_path, *folder_dir_path;
-	gint rmdir_error = 0;
-	gint unlink_error = 0;
-	gboolean folder_already_exists;
-
-	g_assert(folder != NULL);
-
-	/* check if the folder object exists */
-
-	/* in the case where the folder does not exist, 
-	   return immediatly */
-	folder_already_exists = camel_folder_exists (folder, ex);
-	if (camel_exception_get_id (ex))
-		return FALSE;
-
-	if (!folder_already_exists)
-		return TRUE;
-
-
-	/* call default implementation.
-	   It should delete the messages in the folder
-	   and recurse the operation to subfolders */
-	parent_class->delete (folder, recurse, ex);
-	
-
-	/* get the paths of what we need to be deleted */
-	folder_file_path = mbox_folder->folder_file_path;
-	folder_dir_path = mbox_folder->folder_file_path;
-	
-	if (!(folder_file_path || folder_dir_path)) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID,
-				     "invalid folder path. Use set_name ?");
-		return FALSE;
-	}
-
-	
-	/* physically delete the directory */
-	rmdir_error = rmdir (folder_dir_path);
-	if (rmdir_error == -1) 
-		switch (errno) { 
-		case EACCES :
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-					     "Not enough permission to delete the mbox folder");
-			return FALSE;			
-			break;
-			
-		case ENOTEMPTY :
-				camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_FOLDER_NON_EMPTY,
-						     "mbox folder not empty. Cannot delete it. Maybe use recurse flag ?");
-				return FALSE;		
-				break;
-		default :
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_SYSTEM,
-					     "Unable to delete the mbox folder.");
-			return FALSE;
-	}
-	
-	/* physically delete the file */
-	unlink_error = unlink (folder_dir_path);
-	if (unlink_error == -1) 
-		switch (errno) { 
-		case EACCES :
-		case EPERM :
-		case EROFS :
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-					     "Not enough permission to delete the mbox file");
-			return FALSE;			
-			break;
-			
-		case EFAULT :
-		case ENOENT :
-		case ENOTDIR :
-		case EISDIR :
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
-					     "Invalid mbox file");
-			return FALSE;			
-			break;
-
-		default :
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_SYSTEM,
-					     "Unable to delete the mbox folder.");
-			return FALSE;
-	}
-
-
-	return TRUE;
-}
-
-/* TODO: remove this */
-gboolean
-_delete_messages (CamelFolder *folder, CamelException *ex)
-{
-	
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (folder);
-	const gchar *folder_file_path;
-	gboolean folder_already_exists;
-	int creat_fd;
-	g_assert(folder!=NULL);
-	
-	/* in the case where the folder does not exist, 
-	   return immediatly */
-	folder_already_exists = camel_folder_exists (folder, ex);
-	if (camel_exception_get_id (ex)) return FALSE;
-
-	if (!folder_already_exists) return TRUE;
-
-
-
-	/* get the paths of the mbox file we need to delete */
-	folder_file_path = mbox_folder->folder_file_path;
-	
-	if (!folder_file_path) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID,
-				     "invalid folder path. Use set_name ?");
-		return FALSE;
-	}
-
-		
-	/* create the mbox file */ 
-	/* it must be rw for the user and none for the others */
-	creat_fd = open (folder_file_path, 
-			 O_WRONLY | O_TRUNC,
-			 0600); 
-	if (creat_fd == -1)
-		goto io_error;
-	close (creat_fd);
-	
-	return TRUE;
-
-	/* exception handling for io errors */
-	io_error :
-		if (errno == EACCES) {
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-					     "You don't have the permission to write in the mbox file.");
-			return FALSE;
-		} else {
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_SYSTEM,
-					     "Unable to write in the mbox file.");
-			return FALSE;
-		}
-	
-
-}
-
-/* FIXME: cleanup */
-static GList *
-_list_subfolders (CamelFolder *folder, CamelException *ex)
-{
-	GList *subfolder_name_list = NULL;
-
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (folder);
-	const gchar *folder_dir_path;
-	gboolean folder_exists;
-
-	struct stat stat_buf;
-	gint stat_error = 0;
-	gchar *entry_name;
-	gchar *full_entry_name;
-	gchar *real_folder_name;
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-	gboolean folder_suffix_found;
-	
-
-	/* check if the folder object exists */
-	if (!folder) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_FOLDER_NULL,
-				     "folder object is NULL");
-		return FALSE;
-	}
-
-
-	/* in the case the folder does not exist, 
-	   raise an exception */
-	folder_exists = camel_folder_exists (folder, ex);
-	if (camel_exception_get_id (ex)) return FALSE;
-
-	if (!folder_exists) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID,
-				     "Inexistant folder.");
-		return FALSE;
-	}
-
-
-	/* get the mbox subfolders directories */
-	folder_dir_path = mbox_folder->folder_file_path;
-	if (!folder_dir_path) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID,
-				     "Invalid folder path. Use set_name ?");
-		return FALSE;
-	}
-
-		
-	dir_handle = opendir (folder_dir_path);
-	
-	/* read the first entry in the directory */
-	dir_entry = readdir (dir_handle);
-	while ((stat_error != -1) && (dir_entry != NULL)) {
-
-		/* get the name of the next entry in the dir */
-		entry_name = dir_entry->d_name;
-		full_entry_name = g_strdup_printf ("%s/%s", folder_dir_path, entry_name);
-		stat_error = stat (full_entry_name, &stat_buf);
-		g_free (full_entry_name);
-
-		/* is it a directory ? */
-		if ((stat_error != -1) && S_ISDIR (stat_buf.st_mode)) {
-			/* yes, add it to the list */
-			if (entry_name[0] != '.') {
-				/* if the folder is a netscape folder, remove the  
-				   ".sdb" from the name */
-				real_folder_name = string_prefix (entry_name, ".sdb", &folder_suffix_found);
-				/* stick here the tests for other folder suffixes if any */
-				
-				if (!folder_suffix_found) real_folder_name = g_strdup (entry_name);
-				
-				/* add the folder name to the list */
-				subfolder_name_list = g_list_append (subfolder_name_list, 
-								     real_folder_name);
-			}
-		}
-		/* read next entry */
-		dir_entry = readdir (dir_handle);
-	}
-
-	closedir (dir_handle);
-
-	return subfolder_name_list;
-
-	
-
-	/* io exception handling */
-		switch (errno) { 
-		case EACCES :
-			
-			camel_exception_setv (ex, 
-					      CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-					      "Unable to list the directory. Full Error text is : %s ", 
-					      strerror (errno));
-			break;
-			
-		case ENOENT :
-		case ENOTDIR :
-			camel_exception_setv (ex, 
-					      CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
-					      "Invalid mbox folder path. Full Error text is : %s ", 
-					      strerror (errno));
-			break;
-			
-		default :
-			camel_exception_set (ex, 
-					     CAMEL_EXCEPTION_SYSTEM,
-					     "Unable to delete the mbox folder.");
-			
-		}
-	
-	g_list_free (subfolder_name_list);
-	return NULL;
-}
-
-static gint
-_get_message_count (CamelFolder *folder, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = (CamelMboxFolder *)folder;
-
-	g_assert (folder);
-	g_assert (mbox_folder->summary);
-	
-	return camel_mbox_summary_message_count(mbox_folder->summary);
-}
-
-/*
-  This is a lazy append.
-
-  Basically, messages are appended to the end of the mbox, and probably assigned
-  a new uid (they wont be if copying from a source folder which doesn't have
-  a uid - which wont happen with the current summariser).
-
-  Indexing/summarising happens when the mbox is next queried.
-
-  Should this set a flag up for subsequent updating??
-*/
-
-/* FIXME: this may need some tweaking for performance? */
-static void
-_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (folder), *source_folder;
-	CamelStream *output_stream;
-	struct stat st;
-	off_t seek;
-	char *xev;
-	guint32 uid;
-
-	if (stat(mbox_folder->folder_file_path, &st) != 0) {
-		camel_exception_setv (ex, 
-				      CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION, /* FIXME: what code? */
-				      "Cannot append to mbox file: %s", strerror (errno));
-		return;
-	}
-
-	/* are we coming from an mbox folder?  then we can optimise somewhat ... */
-	if (message->folder && IS_CAMEL_MBOX_FOLDER(message->folder)) {
-		CamelMboxMessageInfo *info;
-		int sfd, dfd;
-		off_t pos;
-
-		/* FIXME: this is pretty ugly - we lookup the message info in the source folder, copy it,
-		   then go back and paste in its real uid. */
-		source_folder = (CamelMboxFolder *)message->folder;
-		info = camel_mbox_summary_uid(source_folder->summary, message->message_uid);
-
-		d(printf("Copying message directly from %s to %s\n", source_folder->folder_file_path, mbox_folder->folder_file_path));
-		d(printf("start = %d, xev = %d\n", ((CamelMboxMessageContentInfo *)info->info.content)->pos, info->xev_offset));
-
-		sfd = open(source_folder->folder_file_path, O_RDONLY);
-		dfd = open(mbox_folder->folder_file_path, O_RDWR|O_CREAT, 0600);
-		if (lseek(dfd, st.st_size, SEEK_SET) != st.st_size) {
-			camel_exception_setv (ex, 
-					      CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION, /* FIXME: what code? */
-					      "Cannot append to mbox file: %s", strerror (errno));
-			close(sfd);
-			close(dfd);
-			return;
-		}
-		write(dfd, "From - \n", strlen("From - \n"));
-		camel_mbox_summary_copy_block
-			(sfd, dfd, ((CamelMboxMessageContentInfo *)info->info.content)->pos,
-			 ((CamelMboxMessageContentInfo *)info->info.content)->endpos - ((CamelMboxMessageContentInfo *)info->info.content)->pos);
-		if (info->xev_offset != -1) {
-			pos = st.st_size + (info->xev_offset - ((CamelMboxMessageContentInfo *)info->info.content)->pos) + strlen("From - \n");
-			d(printf("Inserting new uid at %d\n", (int)pos));
-			if (pos != lseek(dfd, pos, SEEK_SET)) {
-				ftruncate(dfd, st.st_size);
-				camel_exception_setv (ex, 
-						      CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION, /* FIXME: what code? */
-						      "Cannot append to mbox file: %s", strerror (errno));
-				close(sfd);
-				close(dfd);
-				return;
-			}
-			uid = camel_mbox_summary_next_uid(mbox_folder->summary);
-			xev = g_strdup_printf("X-Evolution: %08x-%04x", uid, 0);
-			write(dfd, xev, strlen(xev)); /* FIXME: check return */
-			d(printf("header = %s\n", xev));
-			g_free(xev);
-		}
-		close(sfd);
-		close(dfd);
-		return;
-	}
-
-	/* its not an mbox folder, so lets do it the slow way ... */
-	output_stream = camel_stream_fs_new_with_name (mbox_folder->folder_file_path, CAMEL_STREAM_FS_WRITE);
-	if (output_stream == NULL) {
-		camel_exception_setv (ex, 
-				      CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION, /* FIXME: what code? */
-				      "Cannot append to mbox file: %s", strerror (errno));
-		return;
-	}
-
-	seek = camel_seekable_stream_seek((CamelSeekableStream *)output_stream, st.st_size, SEEK_SET);
-	if (seek != st.st_size) {
-		camel_exception_setv (ex, 
-				      CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION, /* FIXME: what code? */
-				      "Cannot seek to position in mbox file: %s", strerror (errno));
-		gtk_object_unref ((GtkObject *)output_stream);
-		return;
-	}
-
-	/* assign a new x-evolution header */
-	/* FIXME: save flags? */
-	camel_medium_remove_header((CamelMedium *)message, "X-Evolution");
-	uid = camel_mbox_summary_next_uid(mbox_folder->summary);
-	xev = g_strdup_printf("%08x-%04x", uid, 0);
-	camel_medium_add_header((CamelMedium *)message, "X-Evolution", xev);
-	g_free(xev);
-
-	camel_stream_write_string (output_stream, "From - \n");
-	/* FIXME: does this return an error?   IT HAS TO FOR THIS TO BE RELIABLE */
-	camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), output_stream);
-	camel_stream_close (output_stream);
-
-	/* TODO: update the summary so it knows a new message is there to summarise/index */
-	/* This is only a performance improvement, the summary is *only* a cache */
-
-	gtk_object_unref (GTK_OBJECT (output_stream));
-}
-
-
-
-
-static GList *
-_get_uid_list (CamelFolder *folder, CamelException *ex) 
-{
-	GList *uid_list = NULL;
-	CamelMboxFolder *mbox_folder = (CamelMboxFolder *)folder;
-	int i, count;
-
-	/* FIXME: how are these allocated strings ever free'd? */
-	count = camel_mbox_summary_message_count(mbox_folder->summary);
-	for (i=0;isummary, i);
-		uid_list = g_list_prepend(uid_list, g_strdup(info->info.uid));
-	}
-	
-	return uid_list;
-}
-
-static CamelMimeMessage *
-_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = (CamelMboxFolder *)folder;
-	CamelMboxMessageInfo *info;
-
-	g_warning("YOUR CODE SHOULD NOT BE GETTING MESSAGES BY NUMBER, CHANGE IT");
-
-	info = camel_mbox_summary_index(mbox_folder->summary, number);
-	if (info == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-				      "No such message %d in folder `%s'.",
-				      number, folder->name);
-		return NULL;
-	}
-
-	return _get_message_by_uid (folder, info->info.uid, ex);
-}
-
-static CamelMimeMessage *
-_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER (folder);
-	CamelStream *message_stream;
-	CamelMimeMessage *message = NULL;
-	CamelStore *parent_store;
-	CamelMboxMessageInfo *info;
-
-	/* get the parent store */
-	parent_store = camel_folder_get_parent_store (folder, ex);
-	if (camel_exception_get_id (ex)) {
-		return NULL;
-	}
-
-	/* get the message summary info */
-	info = camel_mbox_summary_uid(mbox_folder->summary, uid);
-
-	if (info == NULL) {
-		camel_exception_setv (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     "uid %s not found in the folder",
-				      uid);
-		return NULL;
-	}
-
-	/* if this has no content, its an error in the library */
-	g_assert(info->info.content);
-
-	/* FIXME: more checks below */
-        /* create a stream bound to the message position/size */
-	message_stream = camel_stream_fs_new_with_name_and_bounds (mbox_folder->folder_file_path, 
-								   CAMEL_STREAM_FS_READ,
-								   ((CamelMboxMessageContentInfo *)info->info.content)->pos,
-								   ((CamelMboxMessageContentInfo *)info->info.content)->endpos);
-	message = camel_mime_message_new();
-#if 1
-	{
-		CamelMimeParser *parser;
-
-		parser = camel_mime_parser_new();
-		camel_mime_parser_init_with_stream(parser, message_stream);
-		camel_data_wrapper_construct_from_parser(message, parser);
-		gtk_object_unref((GtkObject *)parser);
-		gtk_object_unref((GtkObject *)message_stream);
-	}
-#else
-	camel_data_wrapper_set_input_stream (CAMEL_DATA_WRAPPER (message), message_stream);
-#endif
-	/* init other fields? */
-	message->folder = folder;
-	gtk_object_ref((GtkObject *)folder);
-	message->message_uid = g_strdup(uid);
-
-	return message;
-}
-
-/* get message info for a range of messages */
-GPtrArray *summary_get_message_info (CamelFolder *folder, int first, int count)
-{
-	GPtrArray *array = g_ptr_array_new();
-	int i, maxcount;
-	CamelMboxFolder *mbox_folder = (CamelMboxFolder *)folder;
-
-        maxcount = camel_mbox_summary_message_count(mbox_folder->summary);
-	maxcount = MAX(count, maxcount);
-	for (i=first;isummary->messages, i));
-
-	return array;
-}
diff --git a/camel/providers/mbox/camel-mbox-folder.h b/camel/providers/mbox/camel-mbox-folder.h
deleted file mode 100644
index f74c51a6c3..0000000000
--- a/camel/providers/mbox/camel-mbox-folder.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-folder.h : Abstract class for an email folder */
-
-/* 
- *
- * Author : Bertrand Guiheneuf  
- *
- * Copyright (C) 1999 Helix Code .
- *
- * 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_MBOX_FOLDER_H
-#define CAMEL_MBOX_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-folder.h"
-#include "libibex/ibex.h"
-#include "camel-mbox-summary.h"
-
-/*  #include "camel-store.h" */
-
-#define CAMEL_MBOX_FOLDER_TYPE     (camel_mbox_folder_get_type ())
-#define CAMEL_MBOX_FOLDER(obj)     (GTK_CHECK_CAST((obj), CAMEL_MBOX_FOLDER_TYPE, CamelMboxFolder))
-#define CAMEL_MBOX_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MBOX_FOLDER_TYPE, CamelMboxFolderClass))
-#define IS_CAMEL_MBOX_FOLDER(o)    (GTK_CHECK_TYPE((o), CAMEL_MBOX_FOLDER_TYPE))
-
-typedef struct {
-	CamelFolder parent_object;
-
-	gchar *folder_file_path;   /* contains the messages */
-	gchar *summary_file_path;  /* contains the messages summary */
-	gchar *folder_dir_path;    /* contains the subfolders */
-	gchar *index_file_path;	   /* index of body contents */
-
-	ibex *index;		/* index for this folder */
-	int search_id;		/* next search id */
-	GList *searches;	/* current searches */
-
-	CamelMboxSummary *summary;
-} CamelMboxFolder;
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-	
-} CamelMboxFolderClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType camel_mbox_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MBOX_FOLDER_H */
diff --git a/camel/providers/mbox/camel-mbox-provider.c b/camel/providers/mbox/camel-mbox-provider.c
deleted file mode 100644
index 74c4345306..0000000000
--- a/camel/providers/mbox/camel-mbox-provider.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-provider.c: mbox provider registration code */
-
-/* 
- * Authors :
- *   Bertrand Guiheneuf 
- *
- * 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-mbox-store.h"
-#include "camel-provider.h"
-
-
-static CamelProvider _mbox_provider = {
-	(GtkType) 0,
-	PROVIDER_STORE,
-	0,
-
-	"mbox",
-	"UNIX mbox-format mail files",
-
-	"For reading mail delivered by the local system, and for "
-	"storing mail on local disk.",
-
-	(GModule *) NULL
-};
-
-CamelProvider *
-camel_provider_module_init (void);
-
-
-CamelProvider *
-camel_provider_module_init (void)
-{
-	_mbox_provider.object_type = camel_mbox_store_get_type();
-	return &_mbox_provider;
-}
-
-
-
diff --git a/camel/providers/mbox/camel-mbox-search.c b/camel/providers/mbox/camel-mbox-search.c
deleted file mode 100644
index 1e134476e5..0000000000
--- a/camel/providers/mbox/camel-mbox-search.c
+++ /dev/null
@@ -1,410 +0,0 @@
-/* 
- * Copyright 2000 HelixCode (http://www.helixcode.com).
- *
- * Author : 
- *  Michael Zucchi 
-
- * 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 
-#include 
-#include 
-#include 
-
-
-#include 
-#include "camel/camel-mime-message.h"
-#include "camel/camel-mime-part.h"
-#include "camel/camel-stream.h"
-#include "camel/camel-stream-fs.h"
-#include "camel/camel.h"
-#include "camel-mbox-folder.h"
-#include "camel-mbox-summary.h"
-
-#include "camel-mbox-search.h"
-#define HAVE_FILTER
-#ifdef HAVE_FILTER
-#include "e-sexp.h"
-
-#define HAVE_IBEX
-#ifdef HAVE_IBEX
-#include "ibex.h"
-#endif
-
-#define p(x)			/* parse debug */
-#define r(x)			/* run debug */
-#define d(x)			/* general debug */
-
-
-/*
-
-  Matching operators:
-
-  list = (body-contains string+)
-  bool = (body-contains string+)
-  	Returns a list of all messages containing any of the strings in the message.
-	If within a match-all, then returns true for the current message.
-
-  list = (match-all bool-expr)
-  	Returns a list of all messages for which the bool expression is true.
-	The bool-expr is evaluated for each message in turn.
-	It is more efficient not to perform body-content comparisons inside a
-	match-all operator.
-
-  int = (date-sent)
-  	Returns a time_t of the date-sent of the message.
-
-  bool = (header-contains string string+)
-  	Returns true if the current message (inside a match-all operator)
-	has a header 'string1', which contains any of the following strings.
-*/
-
-
-struct _searchcontext {
-	int id;			/* id of this search */
-	int cancelled;		/* search cancelled? */
-
-	CamelFolder *folder;
-
-#ifdef HAVE_IBEX
-	ibex *index;		/* index of content for this folder */
-#endif
-
-	CamelMboxSummary *summary;
-
-	CamelMboxMessageInfo *message_current;	/* when performing a (match  operation */
-};
-
-struct _glib_sux_donkeys {
-	int count;
-	GPtrArray *uids;
-};
-/* or, store all unique values */
-static void
-g_lib_sux_htor(char *key, int value, struct _glib_sux_donkeys *fuckup)
-{
-	g_ptr_array_add(fuckup->uids, key);
-}
-
-static ESExpResult *
-func_body_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	ESExpResult *r;
-	int i, j;
-	struct _searchcontext *ctx = data;
-
-	if (ctx->message_current) {
-		int truth = FALSE;
-
-		r = e_sexp_result_new(ESEXP_RES_BOOL);
-		if (ctx->index) {
-			for (i=0;itype == ESEXP_RES_STRING) {
-					truth = ibex_find_name(ctx->index, ctx->message_current->info.uid, argv[i]->value.string);
-				} else {
-					g_warning("Invalid type passed to body-contains match function");
-				}
-			}
-		} else {
-			g_warning("Cannot perform indexed query with no index");
-		}
-		r->value.bool = truth;
-	} else {
-		r = e_sexp_result_new(ESEXP_RES_ARRAY_PTR);
-
-		if (ctx->index) {
-			if (argc==1) {
-				/* common case */
-				r->value.ptrarray = ibex_find(ctx->index, argv[0]->value.string);
-			} else {
-				GHashTable *ht = g_hash_table_new(g_str_hash, g_str_equal);
-				GPtrArray *pa;
-				struct _glib_sux_donkeys lambdafoo;
-
-				/* this sux, perform an or operation on the result(s) of each word */
-				for (i=0;itype == ESEXP_RES_STRING) {
-						pa = ibex_find(ctx->index, argv[i]->value.string);
-						for (j=0;jlen;j++) {
-							g_hash_table_insert(ht, g_ptr_array_index(pa, j), (void *)1);
-						}
-						g_ptr_array_free(pa, FALSE);
-					}
-				}
-				lambdafoo.uids = g_ptr_array_new();
-				g_hash_table_foreach(ht, (GHFunc)g_lib_sux_htor, &lambdafoo);
-				r->value.ptrarray = lambdafoo.uids;
-			}
-		} else {
-			r->value.ptrarray = g_ptr_array_new();
-		}
-	}
-
-	return r;
-}
-
-static ESExpResult *
-func_date_sent(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	ESExpResult *r;
-	struct _searchcontext *ctx = data;
-
-	r = e_sexp_result_new(ESEXP_RES_INT);
-
-	if (ctx->message_current) {
-		g_warning("FIXME: implement date parsing ...");
-		/* r->value.number = get_date(ctx->message_current); */
-	} else {
-		r->value.number = time(0);
-	}
-	return r;
-}
-
-
-static ESExpResult *
-func_match_all(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
-{
-	int i;
-	ESExpResult *r, *r1;
-	struct _searchcontext *ctx = data;
-
-	if (argc>1) {
-		g_warning("match-all only takes a single argument, other arguments ignored");
-	}
-	r = e_sexp_result_new(ESEXP_RES_ARRAY_PTR);
-	r->value.ptrarray = g_ptr_array_new();
-
-	for (i=0;isummary->messages->len;i++) {
-		if (argc>0) {
-			ctx->message_current = g_ptr_array_index(ctx->summary->messages, i);
-			r1 = e_sexp_term_eval(f, argv[0]);
-			if (r1->type == ESEXP_RES_BOOL) {
-				if (r1->value.bool)
-					g_ptr_array_add(r->value.ptrarray, ctx->message_current->info.uid);
-			} else {
-				g_warning("invalid syntax, matches require a single bool result");
-			}
-			e_sexp_result_free(r1);
-		} else {
-			g_ptr_array_add(r->value.ptrarray, ctx->message_current->info.uid);
-		}
-	}
-	ctx->message_current = NULL;
-
-	return r;
-}
-
-static ESExpResult *
-func_header_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	ESExpResult *r;
-	struct _searchcontext *ctx = data;
-	int truth = FALSE;
-
-	r(printf("executing header-contains\n"));
-
-	/* are we inside a match-all? */
-	if (ctx->message_current && argc>1
-	    && argv[0]->type == ESEXP_RES_STRING) {
-		char *headername, *header = NULL;
-		char strbuf[32];
-		int i;
-
-		/* only a subset of headers are supported .. */
-		headername = argv[0]->value.string;
-		if (!strcasecmp(headername, "subject")) {
-			header = ctx->message_current->info.subject;
-		} else if (!strcasecmp(headername, "date")) {
-			sprintf(strbuf, "%d", (int)ctx->message_current->info.date_sent);
-			header = strbuf;
-		} else if (!strcasecmp(headername, "from")) {
-			header = ctx->message_current->info.from;
-		} else {
-			g_warning("Performing query on unknown header: %s", headername);
-		}
-
-		if (header) {
-			for (i=1;itype == ESEXP_RES_STRING
-				    && strstr(header, argv[i]->value.string)) {
-					printf("%s got a match with %s of %s\n", ctx->message_current->info.uid, header, argv[i]->value.string);
-					truth = TRUE;
-					break;
-				}
-			}
-		}
-	}
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = truth;
-
-	return r;
-}
-
-
-/* 'builtin' functions */
-static struct {
-	char *name;
-	ESExpFunc *func;
-	int type;		/* set to 1 if a function can perform shortcut evaluation, or
-				   doesn't execute everything, 0 otherwise */
-} symbols[] = {
-	{ "body-contains", func_body_contains, 0 },
-	{ "date-sent", func_date_sent, 0 },
-	{ "match-all", (ESExpFunc *)func_match_all, 1 },
-	{ "header-contains", func_header_contains, 0 },
-};
-
-int camel_mbox_folder_search_by_expression(CamelFolder *folder, const char *expression,
-					   CamelSearchFunc *func, void *data, CamelException *ex)
-{
-	int i;
-	struct _searchcontext *ctx;
-	GList *matches = NULL;
-	ESExp *f;
-	ESExpResult *r;
-	CamelMboxFolder *mbox_folder = (CamelMboxFolder *)folder;
-
-	/* setup our expression evaluator */
-	f = e_sexp_new();
-
-	ctx = g_malloc0(sizeof(*ctx));
-
-	ctx->id = ((CamelMboxFolder *)folder)->search_id++;
-
-	/* setup out context */
-	ctx->folder = folder;
-	ctx->summary = mbox_folder->summary;
-	
-	if (ctx->summary == NULL || camel_exception_get_id (ex)) {
-		printf ("Cannot get summary\n"
-			"Full description : %s\n", camel_exception_get_description (ex));
-		g_free(ctx);
-		gtk_object_unref((GtkObject *)f);
-		return -1;
-	}
-
-	/* FIXME: the index should be global to the folder */
-	ctx->message_current = NULL;
-	ctx->index = CAMEL_MBOX_FOLDER(folder)->index;
-	if (!ctx->index) {
-		g_warning("No folder index, searches will not function fully");
-	}
-
-	((CamelMboxFolder *)folder)->searches = g_list_append(((CamelMboxFolder *)folder)->searches, ctx);
-
-	for(i=0;itype == ESEXP_RES_ARRAY_PTR) {
-		d(printf("got result ...\n"));
-		for (i=0;ivalue.ptrarray->len;i++) {
-			d(printf("adding match: %s\n", (char *)g_ptr_array_index(r->value.ptrarray, i)));
-			matches = g_list_prepend(matches, g_strdup(g_ptr_array_index(r->value.ptrarray, i)));
-		}
-		if (!ctx->cancelled) {
-			func(folder, ctx->id, TRUE, matches, data);
-		}
-		g_list_free(matches);
-		e_sexp_result_free(r);
-	} else {
-		printf("no result!\n");
-	}
-
-	gtk_object_unref((GtkObject *)f);
-	i = ctx->id;
-
-	((CamelMboxFolder *)folder)->searches = g_list_remove(((CamelMboxFolder *)folder)->searches, ctx);
-
-	g_free(ctx);
-
-	return i;
-}
-
-static struct _searchcontext *
-find_context(CamelMboxFolder *f, int id)
-{
-	struct _searchcontext *ctx;
-	GList *l;
-
-	l = f->searches;
-	while (l) {
-		ctx = l->data;
-		if (ctx->id == id) {
-			return ctx;
-		}
-		l = g_list_next(l);
-	}
-
-	return NULL;
-}
-
-gboolean camel_mbox_folder_search_complete(CamelFolder *folder, int searchid, int wait, CamelException *ex)
-{
-	struct _searchcontext *ctx;
-
-	ctx = find_context((CamelMboxFolder *)folder, searchid);
-
-	if (ctx)
-		return ctx->cancelled;
-
-	/* if its been removed, its complete ... */
-	return TRUE;
-}
-
-void camel_mbox_folder_search_cancel(CamelFolder *folder, int searchid, CamelException *ex)
-{
-	struct _searchcontext *ctx;
-
-	ctx = find_context((CamelMboxFolder *)folder, searchid);
-	if (ctx) {
-		ctx->cancelled = TRUE;
-		return;
-	}
-
-	/* FIXME: set exception, return */
-}
-
-#else /* HAVE_FILTER */
-
-int camel_mbox_folder_search_by_expression(CamelFolder *folder, const char *expression,
-					   CamelSearchFunc *func, void *data, CamelException *ex)
-{
-	return -1;
-}
-
-gboolean camel_mbox_folder_search_complete(CamelFolder *folder, int searchid, int wait, CamelException *ex)
-{
-	return TRUE;
-}
-
-void camel_mbox_folder_search_cancel(CamelFolder *folder, int searchid, CamelException *ex)
-{
-	/* empty */
-}
-
-#endif /*! HAVE_FILTER */
diff --git a/camel/providers/mbox/camel-mbox-search.h b/camel/providers/mbox/camel-mbox-search.h
deleted file mode 100644
index d3fe328a2c..0000000000
--- a/camel/providers/mbox/camel-mbox-search.h
+++ /dev/null
@@ -1,14 +0,0 @@
-
-#ifndef _CAMEL_MBOX_SEARCH_H
-#define _CAMEL_MBOX_SEARCH_H
-
-#include 
-#include "camel-mbox-folder.h"
-
-int camel_mbox_folder_search_by_expression(CamelFolder *folder, const char *expression,
-					   CamelSearchFunc *func, void *data, CamelException *ex);
-gboolean camel_mbox_folder_search_complete(CamelFolder *folder, int searchid, gboolean wait, CamelException *ex);
-void camel_mbox_folder_search_cancel(CamelFolder *folder, int searchid, CamelException *ex);
-
-#endif /* ! _CAMEL_MBOX_SEARCH_H */
-
diff --git a/camel/providers/mbox/camel-mbox-store.c b/camel/providers/mbox/camel-mbox-store.c
deleted file mode 100644
index 8db2f9338e..0000000000
--- a/camel/providers/mbox/camel-mbox-store.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-store.c : class for an mbox store */
-
-/* 
- *
- * 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 
-
-#include "camel-mbox-store.h"
-#include "camel-mbox-folder.h"
-#include "camel-exception.h"
-#include "camel-url.h"
-
-/* Returns the class for a CamelMboxStore */
-#define CMBOXS_CLASS(so) CAMEL_MBOX_STORE_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CMBOXF_CLASS(so) CAMEL_MBOX_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-
-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_mbox_store_class_init (CamelMboxStoreClass *camel_mbox_store_class)
-{
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_mbox_store_class);
-	
-	/* virtual method overload */
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->get_folder_name = get_folder_name;
-}
-
-
-
-static void
-camel_mbox_store_init (gpointer object, gpointer klass)
-{
-	CamelService *service = CAMEL_SERVICE (object);
-	CamelStore *store = CAMEL_STORE (object);
-
-	service->url_flags = CAMEL_SERVICE_URL_NEED_PATH;
-
-	/* mbox names are filenames, so they are case-sensitive. */
-	store->folders = g_hash_table_new (g_str_hash, g_str_equal);
-}
-
-
-
-
-GtkType
-camel_mbox_store_get_type (void)
-{
-	static GtkType camel_mbox_store_type = 0;
-	
-	if (!camel_mbox_store_type)	{
-		GtkTypeInfo camel_mbox_store_info =	
-		{
-			"CamelMboxStore",
-			sizeof (CamelMboxStore),
-			sizeof (CamelMboxStoreClass),
-			(GtkClassInitFunc) camel_mbox_store_class_init,
-			(GtkObjectInitFunc) camel_mbox_store_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_mbox_store_type = gtk_type_unique (CAMEL_STORE_TYPE, &camel_mbox_store_info);
-	}
-	
-	return camel_mbox_store_type;
-}
-
-
-const gchar *
-camel_mbox_store_get_toplevel_dir (CamelMboxStore *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)
-{
-	CamelMboxFolder *new_mbox_folder;
-	CamelFolder *new_folder;
-
-	new_mbox_folder =  gtk_type_new (CAMEL_MBOX_FOLDER_TYPE);
-	new_folder = CAMEL_FOLDER (new_mbox_folder);
-	
-	/* XXX We shouldn't be passing NULL here, but it's equivalent to
-	 * what was there before, and there's no
-	 * CamelMboxFolder::get_subfolder yet anyway...
-	 */
-	CF_CLASS (new_folder)->init (new_folder, store, NULL,
-				     folder_name, '/', ex);
-	
-	return new_folder;
-}
-
-static char *
-get_folder_name (CamelStore *store, const char *folder_name,
-		 CamelException *ex)
-{
-	return g_strdup (folder_name);
-}
diff --git a/camel/providers/mbox/camel-mbox-store.h b/camel/providers/mbox/camel-mbox-store.h
deleted file mode 100644
index 06a971ada4..0000000000
--- a/camel/providers/mbox/camel-mbox-store.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-store.h : class for an mbox store */
-
-/* 
- *
- * 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_MBOX_STORE_H
-#define CAMEL_MBOX_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-store.h"
-
-#define CAMEL_MBOX_STORE_TYPE     (camel_mbox_store_get_type ())
-#define CAMEL_MBOX_STORE(obj)     (GTK_CHECK_CAST((obj), CAMEL_MBOX_STORE_TYPE, CamelMboxStore))
-#define CAMEL_MBOX_STORE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MBOX_STORE_TYPE, CamelMboxStoreClass))
-#define IS_CAMEL_MBOX_STORE(o)    (GTK_CHECK_TYPE((o), CAMEL_MBOX_STORE_TYPE))
-
-
-typedef struct {
-	CamelStore parent_object;	
-	
-} CamelMboxStore;
-
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-} CamelMboxStoreClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType camel_mbox_store_get_type (void);
-
-const gchar *camel_mbox_store_get_toplevel_dir (CamelMboxStore *store);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MBOX_STORE_H */
-
-
diff --git a/camel/providers/mbox/camel-mbox-summary.c b/camel/providers/mbox/camel-mbox-summary.c
deleted file mode 100644
index 22060bf8fe..0000000000
--- a/camel/providers/mbox/camel-mbox-summary.c
+++ /dev/null
@@ -1,1260 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include 
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#include "camel-mbox-summary.h"
-
-#include 
-#include 
-#include 
-
-#define d(x)
-
-#define CAMEL_MBOX_SUMMARY_VERSION 2
-
-static int safe_write(int fd, char *buffer, size_t towrite);
-static void camel_mbox_summary_add(CamelMboxSummary *s, CamelMboxMessageInfo *info);
-
-/*
-  Disk file format?
-
-  message uid
-message-block
-  date:
-  date received?
-
-  subject: (unicode encoded)
-  from: (unicode encoded)
-  to: (unicode)
-
-  content-block
-
-content-block
-  content-type: ; params;
-  content-id:
-  content-description:
-  content-transfer-encoding:
-  message-start:
-  header-size:
-  body-size:
-
-  message-block
-  multipart-block
-
- */
-
-/* pah, i dont care, its almost no code and it works, dont need a glist */
-struct _node {
-	struct _node *next;
-};
-
-static struct _node *
-my_list_append(struct _node **list, struct _node *n)
-{
-	struct _node *ln = (struct _node *)list;
-	while (ln->next)
-		ln = ln->next;
-	n->next = 0;
-	ln->next = n;
-	return n;
-}
-
-static int
-my_list_size(struct _node **list)
-{
-	int len = 0;
-	struct _node *ln = (struct _node *)list;
-	while (ln->next) {
-		ln = ln->next;
-		len++;
-	}
-	return len;
-}
-
-/* low-level io functions */
-static int
-encode_int (FILE *out, gint32 value)
-{
-	int i;
-
-	for (i=28;i>0;i-=7) {
-		if (value >= (1<>i) & 0x7f;
-			if (fputc(c, out) == -1)
-				return -1;
-		}
-	}
-	return fputc(value | 0x80, out);
-}
-
-static gint32
-decode_int (FILE *in)
-{
-        gint32 value=0, v;
-
-        /* until we get the last byte, keep decoding 7 bits at a time */
-        while ( ((v = fgetc(in)) & 0x80) == 0 && v!=EOF) {
-                value |= v;
-                value <<= 7;
-        }
-        value |= (v&0x7f);
-        return value;
-}
-
-static int
-encode_fixed_int (FILE *out, gint32 value)
-{
-	guint32 save;
-
-	save = htonl(value);
-	return fwrite(&save, sizeof(save), 1, out);
-}
-
-static gint32
-decode_fixed_int (FILE *out)
-{
-	guint32 save;
-
-	if (fread(&save, sizeof(save), 1, out) != -1) {
-		return ntohl(save);
-	} else {
-		return -1;
-	}
-}
-
-/* should be sorted, for binary search */
-/* This is a tokenisation mechanism for strings written to the
-   summary - to save space.
-   This list can have at most 31 words. */
-static char * tokens[] = {
-	"7bit",
-	"8bit",
-	"alternative",
-	"application",
-	"base64",
-	"boundary",
-	"charset",
-	"filename",
-	"html",
-	"image",
-	"iso-8859-1",
-	"iso-8859-8",
-	"message",
-	"mixed",
-	"multipart",
-	"name",
-	"octet-stream",
-	"parallel",
-	"plain",
-	"quoted-printable",
-	"rfc822",
-	"text",
-	"us-ascii",		/* 23 words */
-};
-
-#define tokens_len (sizeof(tokens)/sizeof(tokens[0]))
-
-/* baiscally ...
-    0 = null
-    1-tokens_len == tokens[id-1]
-    >=32 string, length = n-32
-*/
-
-static int
-encode_string (FILE *out, char *str)
-{
-	if (str == NULL) {
-		return encode_int(out, 0);
-	} else {
-		int len = strlen(str);
-		int i, token=-1;
-
-		if (len <= 16) {
-			char lower[32];
-
-			for (i=0;i 10240) {
-		g_warning("Got broken string header length: %d bytes", len);
-		ret = NULL;
-	} else {
-		len -= 32;
-		ret = g_malloc(len+1);
-		if (fread(ret, len, 1, in) == -1) {
-			g_free(ret);
-			return NULL;
-		}
-		ret[len]=0;
-	}
-
-	return ret;
-}
-
-
-
-/* allocation functions */
-
-static void
-body_part_dump(CamelMboxMessageContentInfo *bs, int depth)
-{
-	CamelMboxMessageContentInfo *c;
-	char *prefix;
-
-	if (bs == NULL)
-		return;
-
-	prefix = alloca(depth*2+1);
-	memset(prefix, ' ', depth*2);
-	prefix[depth*2]=0;
-	printf("%scontent-range: %d %d %d\n", prefix, (int)bs->pos, (int)bs->bodypos, (int)bs->endpos);
-	printf("%scontent-type: %s/%s\n", prefix, bs->info.type?bs->info.type->type:"?", bs->info.type?bs->info.type->subtype:"?");
-	printf("%scontent-id: %s\n", prefix, bs->info.id);
-	printf("%scontent-description: %s\n", prefix, bs->info.description);
-	printf("%scontent-transfer-encoding: %s\n", prefix, bs->info.encoding);
-	c = (CamelMboxMessageContentInfo *)bs->info.childs;
-	while (c) {
-		printf("%s -- \n", prefix);
-		body_part_dump(c, depth+1);
-		c = (CamelMboxMessageContentInfo *)c->info.next;
-	}
-}
-
-static void
-message_struct_dump(CamelMboxMessageInfo *ms)
-{
-	char *tmp;
-
-	if (ms == NULL) {
-		printf("Empty message?\n");
-		return;
-	}
-
-	printf("Subject: %s\n", ms->info.subject);
-	printf("From: %s\n", ms->info.from);
-	printf("To: %s\n", ms->info.to);
-	tmp = header_format_date(ms->info.date_sent, 0);
-	printf("Date: %s\n", tmp);
-	g_free(tmp);
-	tmp = header_format_date(ms->info.date_received, 0);
-	printf("Date-Received: %s\n", tmp);
-	g_free(tmp);
-	printf("UID: %08x-%04x\n", atoi(ms->info.uid), ms->info.flags);
-	printf(" -- content ->\n");
-	body_part_dump((CamelMboxMessageContentInfo *)ms->info.content, 1);
-}
-
-static CamelMboxMessageContentInfo *
-body_part_new(CamelMimeParser *mp, CamelMboxMessageContentInfo *parent, int start, int body)
-{
-	CamelMboxMessageContentInfo *bs;
-
-	bs = g_malloc0(sizeof(*bs));
-
-	bs->info.parent = (CamelMessageContentInfo *)parent;
-
-	bs->info.type = camel_mime_parser_content_type(mp);
-	header_content_type_ref(bs->info.type);
-
-	bs->info.id = header_msgid_decode(camel_mime_parser_header(mp, "content-id", NULL));
-	bs->info.description = header_decode_string(camel_mime_parser_header(mp, "content-description", NULL));
-	bs->info.encoding = header_content_encoding_decode(camel_mime_parser_header(mp, "content-transfer-encoding", NULL));
-
-	/* not sure what to set here? */
-	bs->pos = start;
-	bs->bodypos = body;
-	bs->endpos = -1;
-
-	if (parent)
-		my_list_append((struct _node **)&parent->info.childs, (struct _node *)bs);
-
-	return bs;
-}
-
-static CamelMboxMessageInfo *
-message_struct_new(CamelMimeParser *mp, CamelMboxMessageContentInfo *parent, int start, int body, off_t xev_offset)
-{
-	CamelMboxMessageInfo *ms;
-
-	ms = g_malloc0(sizeof(*ms));
-
-	/* FIXME: what about cc, sender vs from? */
-	ms->info.subject = header_decode_string(camel_mime_parser_header(mp, "subject", NULL));
-	ms->info.from = g_strdup(camel_mime_parser_header(mp, "from", NULL));
-	ms->info.to = g_strdup(camel_mime_parser_header(mp, "to", NULL));
-
-	ms->info.date_sent = header_decode_date(camel_mime_parser_header(mp, "date", NULL), NULL);
-	ms->info.date_received = 0;
-
-	ms->info.content = (CamelMessageContentInfo *)body_part_new(mp, parent, start, body);
-	ms->xev_offset = xev_offset;
-	return ms;
-}
-
-static void
-body_part_free(CamelMboxMessageContentInfo *bs)
-{
-	CamelMboxMessageContentInfo *c, *cn;
-
-	c = (CamelMboxMessageContentInfo *)bs->info.childs;
-	while (c) {
-		cn = (CamelMboxMessageContentInfo *)c->info.next;
-		body_part_free(c);
-		c = cn;
-	}
-	g_free(bs->info.id);
-	g_free(bs->info.description);
-	g_free(bs->info.encoding);
-	header_content_type_unref(bs->info.type);
-	g_free(bs);
-}
-
-static void
-message_struct_free(CamelMboxMessageInfo *ms)
-{
-	g_free(ms->info.subject);
-	g_free(ms->info.to);
-	g_free(ms->info.from);
-	body_part_free((CamelMboxMessageContentInfo *)ms->info.content);
-	g_free(ms);
-}
-
-
-/* IO functions */
-static CamelMboxMessageContentInfo *
-body_part_load(FILE *in)
-{
-	CamelMboxMessageContentInfo *bs = NULL, *c;
-	struct _header_content_type *ct;
-	char *type;
-	char *subtype;
-	int i, count;
-
-	d(printf("got content-block\n"));
-	bs = g_malloc0(sizeof(*bs));
-	bs->pos = decode_int(in);
-	bs->bodypos = bs->pos + decode_int(in);
-	bs->endpos = bs->pos + decode_int(in);
-
-	/* do content type */
-	d(printf("got content-type\n"));
-	type = decode_string(in);
-	subtype = decode_string(in);
-
-	ct = header_content_type_new(type, subtype);
-	bs->info.type = ct;
-	count = decode_int(in);
-	d(printf("getting %d params\n", count));
-	for (i=0;iinfo.id = decode_string(in);
-	d(printf("got content-description\n"));
-	bs->info.description = decode_string(in);
-	d(printf("got content-encoding\n"));
-	bs->info.encoding = decode_string(in);
-
-	count = decode_int(in);
-	d(printf("got children, %d\n", count));
-	for (i=0;iinfo.childs, (struct _node *)c);
-			c->info.parent = (CamelMessageContentInfo *)bs;
-		} else {
-			printf("Cannot load child\n");
-		}
-	}
-
-	return bs;
-}
-
-static int
-body_part_save(FILE *out, CamelMboxMessageContentInfo *bs)
-{
-	CamelMboxMessageContentInfo *c, *cn;
-	struct _header_content_type *ct;
-	struct _header_param *hp;
-
-	encode_int(out, bs->pos);
-	encode_int(out, bs->bodypos - bs->pos);
-	encode_int(out, bs->endpos - bs->pos);
-
-	ct = bs->info.type;
-	if (ct) {
-		encode_string(out, ct->type);
-		encode_string(out, ct->subtype);
-		encode_int(out, my_list_size((struct _node **)&ct->params));
-		hp = ct->params;
-		while (hp) {
-			encode_string(out, hp->name);
-			encode_string(out, hp->value);
-			hp = hp->next;
-		}
-	} else {
-		encode_string(out, NULL);
-		encode_string(out, NULL);
-		encode_int(out, 0);
-	}
-	encode_string(out, bs->info.id);
-	encode_string(out, bs->info.description);
-	encode_string(out, bs->info.encoding);
-
-	encode_int(out, my_list_size((struct _node **)&bs->info.childs));
-
-	c = (CamelMboxMessageContentInfo *)bs->info.childs;
-	while (c) {
-		cn = (CamelMboxMessageContentInfo *)c->info.next;
-		body_part_save(out, c);
-		c = cn;
-	}
-
-	return 0;
-}
-
-static CamelMboxMessageInfo *
-message_struct_load(FILE *in)
-{
-	CamelMboxMessageInfo *ms;
-
-	ms = g_malloc0(sizeof(*ms));
-
-	ms->info.uid = g_strdup_printf("%u", decode_int(in));
-	ms->info.flags = decode_int(in);
-	ms->info.date_sent = decode_int(in);
-	ms->info.date_received = decode_int(in);
-	ms->xev_offset = decode_int(in);
-	ms->info.subject = decode_string(in);
-	ms->info.from = decode_string(in);
-	ms->info.to = decode_string(in);
-	ms->info.content = (CamelMessageContentInfo *)body_part_load(in);
-
-	return ms;
-}
-
-static int
-message_struct_save(FILE *out, CamelMboxMessageInfo *ms)
-{
-	encode_int(out, strtoul(ms->info.uid, NULL, 10));
-	encode_int(out, ms->info.flags);
-	encode_int(out, ms->info.date_sent);
-	encode_int(out, ms->info.date_received);
-	encode_int(out, ms->xev_offset);
-	encode_string(out, ms->info.subject);
-	encode_string(out, ms->info.from);
-	encode_string(out, ms->info.to);
-	body_part_save(out, (CamelMboxMessageContentInfo *)ms->info.content);
-
-	return 0;
-}
-
-static unsigned int
-header_evolution_decode(const char *in, unsigned int *uid, unsigned int *flags)
-{
-	char *header;
-	if (in
-	    && (header = header_token_decode(in))) {
-		if (strlen(header) == strlen("00000000-0000")
-		    && sscanf(header, "%08x-%04x", uid, flags) == 2) {
-			g_free(header);
-			return *uid;
-		}
-		g_free(header);
-	}
-
-	return ~0;
-}
-
-static int
-safe_write(int fd, char *buffer, size_t towrite)
-{
-	size_t donelen;
-	size_t len;
-
-	donelen = 0;
-	while (donelen < towrite) {
-		len = write(fd, buffer + donelen, towrite - donelen);
-		if (len == -1) {
-			if (errno == EINTR || errno == EAGAIN)
-				continue;
-			return -1;
-		}
-		donelen += len;
-	}
-	return donelen;
-}
-
-static int
-header_write(int fd, struct _header_raw *header, unsigned int uid, unsigned int flags)
-{
-	struct iovec iv[4];
-	int outlen = 0;
-
-	iv[1].iov_base = ":";
-	iv[1].iov_len = 1;
-	iv[3].iov_base = "\n";
-	iv[3].iov_len = 1;
-
-	while (header) {
-		if (strcasecmp(header->name, "x-evolution")) {
-			int len;
-
-			iv[0].iov_base = header->name;
-			iv[0].iov_len = strlen(header->name);
-			iv[2].iov_base = header->value;
-			iv[2].iov_len = strlen(header->value);
-
-			do {
-				len = writev(fd, iv, 4);
-			} while (len == -1 && errno == EINTR);
-
-			if (len == -1)
-				return -1;
-			outlen += len;
-		}
-		header = header->next;
-	}
-
-	return outlen;
-}
-
-/* returns -1 on error, else number of bytes written */
-int
-camel_mbox_summary_copy_block(int fromfd, int tofd, off_t readpos, size_t bytes)
-{
-	char buffer[4096];
-	int written = 0;
-	off_t pos, newpos;
-
-	pos = lseek(fromfd, 0, SEEK_CUR);
-	if (pos == -1)
-		return -1;
-
-	newpos = lseek(fromfd, readpos, SEEK_SET);
-	if (newpos == -1 || newpos != readpos)
-		goto error;
-
-	d(printf("oldpos = %d;  copying %d from %d\n", (int)pos, (int)bytes, (int)readpos));
-
-	while (bytes>0) {
-		int toread, towrite, donelen;
-
-		toread = bytes;
-		if (bytes>4096)
-			toread = 4096;
-		else
-			toread = bytes;
-	reread:
-		towrite = read(fromfd, buffer, toread);
-		if (towrite == -1) {
-			if (errno == EINTR || errno == EAGAIN)
-				goto reread;
-			goto error;
-		}
-
-		/* check for 'end of file' */
-		if (towrite == 0)
-			break;
-
-		if ( (donelen = safe_write(tofd, buffer, towrite)) == -1)
-			goto error;
-
-		written += donelen;
-		bytes -= donelen;
-	}
-
-	d(printf("written %d bytes\n", written));
-
-	newpos = lseek(fromfd, pos, SEEK_SET);
-	if (newpos == -1 || newpos != pos);
-		return -1;
-
-	return written;
-
-error:
-	lseek(fromfd, pos, SEEK_SET);
-	return -1;
-}
-
-#define SAVEIT
-
-static int index_folder(CamelMboxSummary *s, int startoffset)
-{
-	CamelMimeParser *mp;
-	int fd;
-	int fdout;
-	int state;
-
-	int toplevel = FALSE;
-	const char *xev;
-	char *data;
-	int datalen;
-
-	int enc_id=-1;
-	int chr_id=-1;
-	int idx_id=-1;
-	struct _header_content_type *ct;
-	int doindex=FALSE;
-	CamelMimeFilterCharset *mfc = NULL;
-	CamelMimeFilterIndex *mfi = NULL;
-	CamelMimeFilterBasic *mf64 = NULL, *mfqp = NULL;
-
-	CamelMboxMessageContentInfo *body = NULL, *parent = NULL;
-	CamelMboxMessageInfo *message = NULL;
-
-	int from_end = 0;	/* start of message */
-	int from = 0;		/* start of headers */
-	int last_write = 0;	/* last written position */
-	int eof;
-	int write_offset = 0;	/* how much does the dest differ from the source pos */
-	int old_offset = 0;
-
-	guint32 newuid;
-	off_t xevoffset = -1;
-
-	char *tmpname;
-
-	printf("indexing %s (%s) from %d\n", s->folder_path, s->summary_path, startoffset);
-
-	fd = open(s->folder_path, O_RDONLY);
-	if (fd==-1) {
-		perror("Can't open folder");
-		return -1;
-	}
-
-	tmpname = g_strdup_printf("%s.tmp", s->folder_path);
-
-	fdout = open(tmpname, O_WRONLY|O_CREAT|O_TRUNC, 0600);
-	if (fdout==-1) {
-		perror("Can't open output");
-		g_free(tmpname);
-		return -1;
-	}
-
-	mp = camel_mime_parser_new();
-	camel_mime_parser_init_with_fd(mp, fd);
-	camel_mime_parser_scan_from(mp, TRUE);
-
-	/* FIXME: cleaner fail code */
-	if (startoffset > 0) {
-		if (camel_mime_parser_seek(mp, startoffset, SEEK_SET) != startoffset) {
-			g_free(tmpname);
-			gtk_object_unref((GtkObject *)mp);
-			return -1;
-		}
-	}
-
-	mfi = camel_mime_filter_index_new_ibex(s->index);
-
-	while ( (state = camel_mime_parser_step(mp, &data, &datalen)) != HSCAN_EOF ) {
-		switch(state) {
-		case HSCAN_FROM: /* starting a new message content */
-			/* save the current position */
-			d(printf("from = %d\n", (int)camel_mime_parser_tell(mp)));
-			toplevel = FALSE;
-			from = camel_mime_parser_tell(mp);
-			break;
-
-		case HSCAN_FROM_END:
-			d(printf("from-end = %d\n", (int)camel_mime_parser_tell(mp)));
-			d(printf("message from %d to %d\n", from_end, (int)camel_mime_parser_tell(mp)));
-			from_end = camel_mime_parser_tell(mp);
-			break;
-
-		case HSCAN_MESSAGE:
-		case HSCAN_MULTIPART:
-		case HSCAN_HEADER: /* starting a new header */
-			newuid=~0;
-			if (!toplevel) {
-				char name[32];
-				unsigned int olduid, oldflags;
-				int headerlen;
-				int docopy = FALSE;
-
-				/* check for X-Evolution header ... if its there, nothing to do (skip content) */
-				xev = camel_mime_parser_header(mp, "x-evolution", &xevoffset);
-				if (xev) {
-					d(printf("An x-evolution header exists at: %d = %s\n", xevoffset + write_offset, xev));
-					xevoffset = xevoffset + write_offset;
-					if (header_evolution_decode(xev, &olduid, &oldflags) != ~0) {
-						d(printf(" uid = %d = %x\n", olduid, olduid));
-						newuid = olduid;
-#if 0
-						while (camel_mime_parser_step(mp, &data, &datalen) != HSCAN_FROM_END)
-							;
-						break;
-#endif
-					} else {
-						printf("Invalid xev header?  I need to write out a new one ...\n");
-					}
-				}
-
-				toplevel = TRUE;
-
-				/* assign a new uid for this message */
-				if (newuid == ~0) {
-					newuid = s->nextuid++;
-					docopy = TRUE;
-				} else {
-					/* make sure we account for this uid when assigning uid's */
-					/* this really needs a pre-scan pass ... *sigh* */
-					camel_mbox_summary_set_uid(s, newuid);
-				}
-
-				/* setup index name for this uid */
-				sprintf(name, "%x", newuid);
-				camel_mime_filter_index_set_name(mfi, name);
-				/* remove all references to this name from the index */
-				if (s->index)
-					ibex_unindex(s->index, name);
-
-				d(printf("Message content starts at %d\n", camel_mime_parser_tell(mp)));
-				
-				if (docopy) {
-					/* now, copy over bits of mbox from last write, and insert the X-Evolution header (at the top of headers) */
-					/* if we already have a valid x-evolution header, use that, dont need to copy */
-					camel_mbox_summary_copy_block(fd, fdout, last_write, from-last_write);
-					last_write = from;
-
-					headerlen = header_write(fdout, camel_mime_parser_headers_raw(mp), newuid, 0);
-					sprintf(name, "X-Evolution: %08x-%04x\n\n", newuid, 0);
-					safe_write(fdout, name, strlen(name));
-					d(printf("new X-Evolution at %d\n", headerlen + from + write_offset));
-					xevoffset = headerlen + from + write_offset;
-					old_offset = write_offset;
-
-					write_offset += (headerlen - (camel_mime_parser_tell(mp)-from)) + strlen(name);
-					last_write = camel_mime_parser_tell(mp);
-				}
-			} else {
-				old_offset = write_offset;
-			}
-
-			/* we only care about the rest for actual content parts */
-			/* TODO: Cleanup, this is a huge mess */
-			if (state != HSCAN_HEADER) {
-				if (message == NULL) {
-					message = message_struct_new(mp, parent, camel_mime_parser_tell_start_headers(mp)+old_offset, camel_mime_parser_tell(mp)+write_offset, xevoffset);
-					parent = (CamelMboxMessageContentInfo *)message->info.content;
-					if (newuid != ~0) {
-						message->info.uid = g_strdup_printf("%u", newuid);
-					} else {
-						g_warning("This shouldn't happen?");
-					}
-				} else {
-					parent = body_part_new(mp, parent, camel_mime_parser_tell_start_headers(mp)+old_offset, camel_mime_parser_tell(mp)+write_offset);
-				}
-				break;
-			}
-
-			if (message == NULL) {
-				message = message_struct_new(mp, parent, camel_mime_parser_tell_start_headers(mp)+old_offset, camel_mime_parser_tell(mp)+write_offset, xevoffset);
-				body = (CamelMboxMessageContentInfo *)message->info.content;
-				if (newuid != ~0) {
-					message->info.uid = g_strdup_printf("%u", newuid);
-				} else {
-					g_warning("This shouldn't happen?");
-				}
-			} else {
-				body = body_part_new(mp, parent, camel_mime_parser_tell_start_headers(mp)+old_offset, camel_mime_parser_tell(mp)+write_offset);
-			}
-
-			/* check headers for types that we can index */
-			ct = camel_mime_parser_content_type(mp);
-			if (header_content_type_is(ct, "text", "*")) {
-				char *encoding;
-				const char *charset;
-				
-				/* TODO: The filters should all be cached, so they aren't recreated between
-				   messages/message parts */
-				encoding = header_content_encoding_decode(camel_mime_parser_header(mp, "content-transfer-encoding", NULL));
-				if (encoding) {
-					if (!strcasecmp(encoding, "base64")) {
-						d(printf("Adding decoding filter for base64\n"));
-						if (mf64 == NULL)
-							mf64 = camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_BASE64_DEC);
-						enc_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)mf64);
-					} else if (!strcasecmp(encoding, "quoted-printable")) {
-						d(printf("Adding decoding filter for quoted-printable\n"));
-						if (mfqp == NULL)
-							mfqp = camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_QP_DEC);
-						enc_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)mfqp);
-					}
-					g_free(encoding);
-				}
-				
-				charset = header_content_type_param(ct, "charset");
-				if (charset!=NULL
-				    && !(strcasecmp(charset, "us-ascii")==0
-					|| strcasecmp(charset, "utf-8")==0)) {
-					d(printf("Adding conversion filter from %s to utf-8\n", charset));
-					if (mfc == NULL)
-						mfc = camel_mime_filter_charset_new_convert(charset, "utf-8");
-					if (mfc) {
-						chr_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)mfc);
-					} else {
-						g_warning("Cannot convert '%s' to 'utf-8', message display may be corrupt", charset);
-					}
-				}
-
-				doindex = TRUE;
-
-				/* and this filter actually does the indexing */
-				idx_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)mfi);
-			} else {
-				doindex = FALSE;
-			}
-			break;
-
-			/* fixme, this needs thought *sigh* */
-		case HSCAN_MESSAGE_END:
-		case HSCAN_MULTIPART_END:
-			if (parent) {
-				parent->endpos = camel_mime_parser_tell(mp)+write_offset;
-				if (parent->info.parent == NULL) {
-					camel_mbox_summary_add(s, message);
-					message = NULL;
-					parent = NULL;
-				} else {
-					parent = (CamelMboxMessageContentInfo *)parent->info.parent;
-				}
-			}
-			break;
-
-		case HSCAN_BODY:
-			if (doindex) {
-				d(printf("Got content to index:\n%.*s", datalen, data));
-			}
-			break;
-
-		case HSCAN_BODY_END:
-			if (body) {
-				body->endpos = camel_mime_parser_tell(mp)+write_offset;
-				if (body->info.parent == NULL) {
-					camel_mbox_summary_add(s, message);
-					message = NULL;
-				}
-			}
-
-			d(printf("end of content, removing decoders\n"));
-			if (enc_id != -1) {
-				camel_mime_parser_filter_remove(mp, enc_id);
-				enc_id = -1;
-			}
-			if (chr_id != -1) {
-				camel_mime_parser_filter_remove(mp, chr_id);
-				chr_id = -1;
-			}
-			if (idx_id != -1) {
-				camel_mime_parser_filter_remove(mp, idx_id);
-				idx_id = -1;
-			}
-			break;
-		}
-	}
-
-	/* did we actually write anything out?   Then rename and be done with it. */
-	if (last_write>0) {
-		eof = camel_mime_parser_tell(mp);
-		camel_mbox_summary_copy_block(fd, fdout, last_write, eof-last_write);
-
-		if (close(fdout) == -1) {
-			perror("Could not close output file");
-			unlink(tmpname);
-		} else {
-			printf("renaming %s to %s\n", tmpname, s->folder_path);
-			if (rename(tmpname, s->folder_path) == -1) {
-				perror("Error renaming file");
-				unlink(tmpname);
-			}
-		}
-	} else {
-		/* no, then dont bother touching the inbox */
-		printf("No written changes to mbox, removing tmp file\n");
-		close(fdout);
-		unlink(tmpname);
-	}
-
-	close(fd);
-
-	if (mf64) gtk_object_unref((GtkObject *)mf64);
-	if (mfqp) gtk_object_unref((GtkObject *)mfqp);
-	if (mfc) gtk_object_unref((GtkObject *)mfc);
-	if (mfi) gtk_object_unref((GtkObject *)mfi);
-
-	/* force an index sync? */
-	if (s->index) {
-		ibex_write(s->index);
-	}
-
-        gtk_object_unref((GtkObject *)mp);
-
-	/* and finally ... update the summary sync info */
-	{
-		struct stat st;
-
-		if (stat(s->folder_path, &st) == 0) {
-			s->time = st.st_mtime;
-			s->size = st.st_size;
-		}
-	}
-
-	g_free(tmpname);
-
-	return 0;
-}
-
-CamelMboxSummary *camel_mbox_summary_new(const char *summary, const char *folder, ibex *index)
-{
-	CamelMboxSummary *s;
-
-	s = g_malloc0(sizeof(*s));
-
-	s->dirty = TRUE;
-	s->folder_path = g_strdup(folder);
-	s->summary_path = g_strdup(summary);
-	/* FIXME: refcount index? */
-	s->index = index;
-
-	s->messages = g_ptr_array_new();
-	s->message_uid = g_hash_table_new(g_str_hash, g_str_equal);
-
-	/* always force an update */
-	s->time = 0;
-	s->size = 0;
-
-	s->nextuid = 1;
-
-	/* TODO: force an initial load right now? */
-
-	return s;
-}
-
-void camel_mbox_summary_unref(CamelMboxSummary *s)
-{
-	g_warning("Unimplemented function, mbox_summary_unref");
-}
-
-/* check that the summary is uptodate, TRUE means it is uptodate */
-int camel_mbox_summary_check(CamelMboxSummary *s)
-{
-	struct stat st;
-
-	/* no folder at all? */
-	if (stat(s->folder_path, &st) != 0)
-		return FALSE;
-
-	return (st.st_size == s->size) && (st.st_mtime == s->time);
-}
-
-static void camel_mbox_summary_add(CamelMboxSummary *s, CamelMboxMessageInfo *info)
-{
-	if (info->info.uid == NULL) {
-		info->info.uid = g_strdup_printf("%u", s->nextuid++);
-	}
-	if (g_hash_table_lookup(s->message_uid, info->info.uid)) {
-		g_error("Trying to insert message with clashing uid's");
-	}
-	d(printf("adding %s\n", info->info.uid));
-	g_ptr_array_add(s->messages, info);
-	g_hash_table_insert(s->message_uid, info->info.uid, info);
-	s->dirty = TRUE;
-}
-
-static int summary_header_read(FILE *fp, guint32 *version, time_t *time, size_t *size, guint32 *nextuid)
-{
-	fseek(fp, 0, SEEK_SET);
-	*version = decode_fixed_int(fp);
-	*time = decode_fixed_int(fp);
-	*size = decode_fixed_int(fp);
-	*nextuid = decode_fixed_int(fp);
-	return ferror(fp);
-}
-
-static void
-summary_clear(CamelMboxSummary *s)
-{
-	int i;
-
-	for (i=0;imessages->len;i++) {
-		message_struct_free(g_ptr_array_index(s->messages, i));
-	}
-	g_ptr_array_free(s->messages, TRUE);
-	g_hash_table_destroy(s->message_uid);
-
-	s->messages = g_ptr_array_new();
-	s->message_uid = g_hash_table_new(g_str_hash, g_str_equal);
-}
-
-int camel_mbox_summary_load(CamelMboxSummary *s)
-{
-	struct stat st;
-	FILE *fp;
-	int i, total;
-	CamelMboxMessageInfo *info;
-
-	summary_clear(s);
-
-	if ((fp = fopen(s->summary_path, "r")) == NULL) {
-		g_warning("Loading non-existant summary, generating summary for folder: %s: %s", s->summary_path, strerror(errno));
-		index_folder(s, 0);
-		camel_mbox_summary_save(s);
-	} else {
-		guint32 version, nextuid;
-		time_t time;
-		size_t size;
-
-		if (stat(s->folder_path, &st) != 0) {
-			g_warning("Uh, no folder anyway, aborting");
-			fclose(fp);
-			return -1;
-		}
-
-		if (summary_header_read(fp, &version, &time, &size, &nextuid) != 0
-		    || version != CAMEL_MBOX_SUMMARY_VERSION) {
-			g_warning("Summary missing or version mismatch, reloading summary");
-			fclose(fp);
-			index_folder(s, 0);
-			camel_mbox_summary_save(s);
-			return 0;
-		}
-
-		s->nextuid = MAX(s->nextuid, nextuid);
-		s->time = time;
-		s->size = size;
-		total = decode_fixed_int(fp);
-			
-		if (time != st.st_mtime || size != st.st_size) {
-			/* if its grown, then just index the new stuff, and load the rest from the summary */
-			if (size < st.st_size) {
-				g_warning("Indexing/summarizing from start position: %d", size);
-
-				d(printf("loading %d items from summary file\n", total));
-				for (i=0;idirty = FALSE;
-				index_folder(s, size); /* if it adds any, it'll dirtify it */
-				camel_mbox_summary_save(s);
-			} else {
-				g_warning("Folder changed/smaller, reindexing everything");
-				index_folder(s, 0);
-				camel_mbox_summary_save(s);
-				fclose(fp);
-			}
-			return 0;
-		}
-
-		printf("loading %d items from summary file\n", total);
-		for (i=0;idirty = FALSE;
-	}
-	return 0;
-}
-
-static int summary_header_write(FILE *fp, CamelMboxSummary *s)
-{
-	fseek(fp, 0, SEEK_SET);
-	encode_fixed_int(fp, CAMEL_MBOX_SUMMARY_VERSION);
-	encode_fixed_int(fp, s->time);
-	/* if we're dirty, then dont *really* save it ... */
-	if (s->dirty)
-		encode_fixed_int(fp, 0);
-	else
-		encode_fixed_int(fp, s->size);
-	encode_fixed_int(fp, s->nextuid);
-	fflush(fp);
-	return ferror(fp);
-}
-
-static int summary_header_save(CamelMboxSummary *s)
-{
-	int fd;
-	FILE *fp;
-
-	fd = open(s->summary_path, O_WRONLY|O_CREAT, 0600);
-	if (fd == -1)
-		return -1;
-	fp = fdopen(fd, "w");
-	if (fp == NULL)
-		return -1;
-
-	summary_header_write(fp, s);
-	return fclose(fp);
-}
-
-int camel_mbox_summary_save(CamelMboxSummary *s)
-{
-	int i, fd;
-	FILE *fp;
-
-	printf("saving summary? %s\n", s->summary_path);
-
-	/* FIXME: error checking */
-	if (s->dirty) {
-		printf("yes\n");
-		fd = open(s->summary_path, O_WRONLY|O_CREAT|O_TRUNC, 0600);
-		if (fd == -1)
-			return -1;
-		fp = fdopen(fd, "w");
-		if (fp == NULL)
-			return -1;
-
-		s->dirty = FALSE;
-
-		summary_header_write(fp, s);
-		encode_fixed_int(fp, s->messages->len);
-
-		printf("message count = %d\n", s->messages->len);
-
-		for (i=0;imessages->len;i++) {
-			message_struct_save(fp, g_ptr_array_index(s->messages, i));
-		}
-		fclose(fp);
-	} else {
-		printf("no\n");
-	}
-	return 0;
-}
-
-CamelMboxMessageInfo *camel_mbox_summary_uid(CamelMboxSummary *s, const char *uid)
-{
-	return g_hash_table_lookup(s->message_uid, uid);
-}
-
-CamelMboxMessageInfo *camel_mbox_summary_index(CamelMboxSummary *s, int index)
-{
-	return g_ptr_array_index(s->messages, index);
-}
-
-int camel_mbox_summary_message_count(CamelMboxSummary *s)
-{
-	return s->messages->len;
-}
-
-guint32 camel_mbox_summary_next_uid(CamelMboxSummary *s)
-{
-	guint32 uid = s->nextuid++;
-
-	summary_header_save(s);
-	return uid;
-}
-
-guint32 camel_mbox_summary_set_uid(CamelMboxSummary *s, guint32 uid)
-{
-	if (s->nextuid <= uid) {
-		s->nextuid = uid+1;
-		summary_header_save(s);
-	}
-	return s->nextuid;
-}
-
-#if 0
-int main(int argc, char **argv)
-{
-	if (argc<2) {
-		printf("usage: %s mbox\n", argv[0]);
-		return 1;
-	}
-
-	gtk_init(&argc, &argv);
-
-	index_folder(argv[1]);
-
-	return 0;
-}
-#endif
diff --git a/camel/providers/mbox/camel-mbox-summary.h b/camel/providers/mbox/camel-mbox-summary.h
deleted file mode 100644
index 80b59ef54f..0000000000
--- a/camel/providers/mbox/camel-mbox-summary.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library 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 Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MBOX_SUMMARY_H
-#define _CAMEL_MBOX_SUMMARY_H
-
-#include 
-#include 
-#include 
-
-typedef struct {
-	CamelMessageContentInfo info;
-
-	/* position in stream of this part */
-	off_t pos;
-	off_t bodypos;
-	off_t endpos;
-} CamelMboxMessageContentInfo;
-
-typedef struct {
-	CamelMessageInfo info;
-
-	/* position of the xev header, if one exists */
-	off_t xev_offset;
-} CamelMboxMessageInfo;
-
-typedef struct {
-	int dirty;		/* if anything has changed */
-
-	char *folder_path;
-	char *summary_path;
-	ibex *index;
-
-	GPtrArray *messages;	/* array of messages matching mbox order */
-	GHashTable *message_uid; /* index to messages by uid */
-
-	int nextuid;
-
-	time_t time;		/* time/size of folder's last update */
-	size_t size;
-} CamelMboxSummary;
-
-CamelMboxSummary *camel_mbox_summary_new(const char *summary, const char *folder, ibex *index);
-void camel_mbox_summary_unref(CamelMboxSummary *);
-
-int camel_mbox_summary_load(CamelMboxSummary *);
-int camel_mbox_summary_save(CamelMboxSummary *);
-int camel_mbox_summary_check(CamelMboxSummary *);
-
-guint32 camel_mbox_summary_next_uid(CamelMboxSummary *);
-/* set the minimum uid */
-guint32 camel_mbox_summary_set_uid(CamelMboxSummary *s, guint32 uid);
-
-CamelMboxMessageInfo *camel_mbox_summary_uid(CamelMboxSummary *s, const char *uid);
-CamelMboxMessageInfo *camel_mbox_summary_index(CamelMboxSummary *, int index);
-int camel_mbox_summary_message_count(CamelMboxSummary *);
-
-/* TODO: should be in a utility library */
-int camel_mbox_summary_copy_block(int fromfd, int tofd, off_t readpos, size_t bytes);
-
-#endif /* ! _CAMEL_MBOX_SUMMARY_H */
diff --git a/camel/providers/nntp/.cvsignore b/camel/providers/nntp/.cvsignore
deleted file mode 100644
index fd6b811c68..0000000000
--- a/camel/providers/nntp/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.deps
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
diff --git a/camel/providers/nntp/Makefile.am b/camel/providers/nntp/Makefile.am
deleted file mode 100644
index 2aabff29ef..0000000000
--- a/camel/providers/nntp/Makefile.am
+++ /dev/null
@@ -1,31 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = 
-
-libcamelnntpincludedir = $(includedir)/camel
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelnntp.la
-
-INCLUDES = -I.. -I$(srcdir)/.. -I$(includedir)	\
-	-I$(top_srcdir)/intl			\
-	$(GTK_INCLUDEDIR) -I$(top_srcdir)/camel	\
-	-I$(srcdir)/../mbox
-
-libcamelnntp_la_SOURCES = 			\
-	camel-nntp-folder.c			\
-	camel-nntp-provider.c			\
-	camel-nntp-store.c			\
-	camel-nntp-summary.c			\
-	camel-nntp-utils.c
-
-libcamelnntpinclude_HEADERS =			\
-	camel-nntp-folder.h			\
-	camel-nntp-store.h			\
-	camel-nntp-summary.h
-
-
-libcamelnntp_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir) 
-
-EXTRA_DIST = 
diff --git a/camel/providers/nntp/camel-nntp-folder.c b/camel/providers/nntp/camel-nntp-folder.c
deleted file mode 100644
index 0c4ba1691d..0000000000
--- a/camel/providers/nntp/camel-nntp-folder.c
+++ /dev/null
@@ -1,686 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-folder.c : Abstract class for an email folder */
-
-/* 
- * Author : Chris Toshok  
- *
- * Copyright (C) 2000 Helix Code .
- *
- * 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  
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-nntp-store.h"
-#include "camel-nntp-folder.h"
-#include "camel-nntp-store.h"
-#include "camel-nntp-utils.h"
-#include "camel-nntp-summary.h"
-
-#include "string-utils.h"
-#include "camel-stream-mem.h"
-#include "camel-stream-buffer.h"
-#include "gmime-utils.h"
-#include "camel-data-wrapper.h"
-#include "camel-mime-message.h"
-
-#include "camel-exception.h"
-
-static CamelFolderClass *parent_class=NULL;
-
-/* Returns the class for a CamelNNTPFolder */
-#define CNNTPF_CLASS(so) CAMEL_NNTP_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CNNTPS_CLASS(so) CAMEL_STORE_CLASS (GTK_OBJECT(so)->klass)
-
-
-static void _init (CamelFolder *folder, CamelStore *parent_store,
-		   CamelFolder *parent_folder, const gchar *name,
-		   gchar separator, CamelException *ex);
-static void _set_name(CamelFolder *folder, const gchar *name, CamelException *ex);
-
-
-static void _open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex);
-static void _close (CamelFolder *folder, gboolean expunge, CamelException *ex);
-static gboolean _exists (CamelFolder *folder, CamelException *ex);
-static gboolean _create(CamelFolder *folder, CamelException *ex);
-static gboolean _delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
-static gboolean _delete_messages (CamelFolder *folder, CamelException *ex);
-static GList *_list_subfolders (CamelFolder *folder, CamelException *ex);
-static CamelMimeMessage *_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex);
-static gint _get_message_count (CamelFolder *folder, CamelException *ex);
-static void _append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
-static GList *_get_uid_list  (CamelFolder *folder, CamelException *ex);
-static CamelMimeMessage *_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex);
-#if 0
-static void _expunge (CamelFolder *folder, CamelException *ex);
-static void _copy_message_to (CamelFolder *folder, CamelMimeMessage *message, CamelFolder *dest_folder, CamelException *ex);
-#endif
-static const gchar *_get_message_uid (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
-
-static void _finalize (GtkObject *object);
-
-static void
-camel_nntp_folder_class_init (CamelNNTPFolderClass *camel_nntp_folder_class)
-{
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_nntp_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 = _init;
-	camel_folder_class->set_name = _set_name;
-	camel_folder_class->open = _open;
-	camel_folder_class->close = _close;
-	camel_folder_class->exists = _exists;
-	camel_folder_class->create = _create;
-	camel_folder_class->delete = _delete;
-	camel_folder_class->delete_messages = _delete_messages;
-	camel_folder_class->list_subfolders = _list_subfolders;
-	camel_folder_class->get_message_by_number = _get_message_by_number;
-	camel_folder_class->get_message_count = _get_message_count;
-	camel_folder_class->get_uid_list = _get_uid_list;
-	camel_folder_class->get_message_by_uid = _get_message_by_uid;
-#if 0 
-	camel_folder_class->append_message = _append_message;
-	camel_folder_class->expunge = _expunge;
-	camel_folder_class->copy_message_to = _copy_message_to;
-	camel_folder_class->get_message_uid = _get_message_uid;
-#endif
-
-	gtk_object_class->finalize = _finalize;
-	
-}
-
-
-
-static void           
-_finalize (GtkObject *object)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (object);
-
-	g_free (nntp_folder->summary_file_path);
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-
-
-GtkType
-camel_nntp_folder_get_type (void)
-{
-	static GtkType camel_nntp_folder_type = 0;
-	
-	if (!camel_nntp_folder_type)	{
-		GtkTypeInfo camel_nntp_folder_info =	
-		{
-			"CamelNNTPFolder",
-			sizeof (CamelNNTPFolder),
-			sizeof (CamelNNTPFolderClass),
-			(GtkClassInitFunc) camel_nntp_folder_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_nntp_folder_type = gtk_type_unique (CAMEL_FOLDER_TYPE, &camel_nntp_folder_info);
-	}
-	
-	return camel_nntp_folder_type;
-}
-
-
-
- 
-
-
-static void 
-_init (CamelFolder *folder, CamelStore *parent_store,
-       CamelFolder *parent_folder, const gchar *name, gchar separator,
-       CamelException *ex)
-{
-	/* 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 */
-
-	if (!strcmp(name, "/"))
-	  {
-	    folder->has_summary_capability = FALSE;
-	    folder->can_hold_messages = FALSE;
-	    folder->can_hold_folders = TRUE;
-	  }
-	else
-	  {
-	    folder->has_summary_capability = TRUE;
-	    folder->can_hold_messages = TRUE;
-	    folder->can_hold_folders = TRUE;
-	  }
-
-	folder->has_uid_capability = TRUE;
-	folder->has_search_capability = FALSE;
- 	folder->summary = NULL;
-}
-
-
-
-/* internal method used to : 
-   - test for the existence of a summary file 
-   - test the sync between the summary and the newsgroup
-   - load the summary or create it if necessary 
-*/ 
-static void
-_check_get_or_maybe_generate_summary_file (CamelNNTPFolder *nntp_folder,
-					   CamelException *ex)
-{
-	CamelFolder *folder = CAMEL_FOLDER (nntp_folder);
-	CamelNNTPSummary *summ = NULL;
-	GArray *message_info_array;
-
-	folder->summary = NULL;
-
-	/* Test for the existence and up-to-dateness of the summary file. */
-	if (access (nntp_folder->summary_file_path, F_OK) == 0) {
-		summ = camel_nntp_summary_load (CAMEL_FOLDER(nntp_folder)->name,
-						nntp_folder->summary_file_path, ex);
-		if (summ) {
-			folder->summary = CAMEL_FOLDER_SUMMARY (summ);
-		} else {
-			/* Bad summary file */
-			if (camel_exception_get_id (ex) !=
-			    CAMEL_EXCEPTION_FOLDER_SUMMARY_INVALID)
-				return;
-			camel_exception_clear (ex);
-		}
-	}
-
-	/* In the case where the summary does not exist (or was the
-	 * wrong version), or is not in sync with the nntp file,
-	 * regenerate it.
-	 */
-	if (folder->summary == NULL) {
-		message_info_array =
-			camel_nntp_get_headers (CAMEL_FOLDER( folder )->parent_store, nntp_folder, ex);
-		if (camel_exception_get_id (ex))
-			return;
-
-		summ = CAMEL_NNTP_SUMMARY (gtk_object_new (camel_nntp_summary_get_type (), NULL));
-		summ->message_info = message_info_array;
-		summ->nb_message = summ->message_info->len;
-
-		folder->summary = CAMEL_FOLDER_SUMMARY (summ);
-
-		camel_nntp_summary_save (summ, 
-					 nntp_folder->summary_file_path, ex);
-	}
-}
-
-
-static void
-_open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-
-	/* call parent class */
-	parent_class->open (folder, mode, ex);
-	if (camel_exception_get_id(ex))
-		return;
-
-#if 0
-	/* get (or create) uid list */
-	if (!(nntp_load_uid_list (nntp_folder) > 0))
-		nntp_generate_uid_list (nntp_folder);
-#endif
-	
-	_check_get_or_maybe_generate_summary_file (nntp_folder, ex);
-}
-
-
-static void
-_close (CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-	CamelNNTPSummary *nntp_summary = CAMEL_NNTP_SUMMARY (folder->summary);
-
-	/* call parent implementation */
-	parent_class->close (folder, expunge, ex);
-
-	camel_nntp_summary_save (nntp_summary,
-				 nntp_folder->summary_file_path, ex);
-}
-
-
-
-
-static void
-_set_name (CamelFolder *folder, const gchar *name, CamelException *ex)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-	const gchar *root_dir_path;
-	
-	/* call default implementation */
-	parent_class->set_name (folder, name, ex);
-	if (camel_exception_get_id (ex)) return;
-
-	root_dir_path = camel_nntp_store_get_toplevel_dir (CAMEL_NNTP_STORE(folder->parent_store));
-
-	nntp_folder->summary_file_path = g_strdup_printf ("%s/%s-ev-summary", root_dir_path, folder->name);
-}
-
-
-
-
-
-
-static gboolean
-_exists (CamelFolder *folder, CamelException *ex)
-{
-#if 0
-	CamelNNTPFolder *nntp_folder;
-	struct stat stat_buf;
-	gint stat_error;
-	gboolean exists;
-
-	g_assert(folder != NULL);
-
-	nntp_folder = CAMEL_NNTP_FOLDER (folder);
-
-	/* check if the nntp summary path is determined */
-	if (!nntp_folder->summary_file_path) {
-		camel_exception_set (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID,
-				     "undetermined folder summary path. Maybe use set_name ?");
-		return FALSE;
-	}
-
-	/* check if the nntp file exists */
-	stat_error = stat (nntp_folder->summary_file_path, &stat_buf);
-	if (stat_error == -1)
-		return FALSE;
-	
-	exists = S_ISREG (stat_buf.st_mode);
-	/* we should  check the rights here  */
-	
-	return exists;
-#endif
-	return TRUE;
-}
-
-
-
-
-
-
-
-
-static gboolean
-_create (CamelFolder *folder, CamelException *ex)
-{
-#if 0
-	CamelNNTPSummary *summary;
-	g_assert(folder != NULL);
-
-	/* call default implementation */
-	parent_class->create (folder, ex);
-
-	/* create the summary object */
-	summary = CAMEL_NNTP_SUMMARY (gtk_object_new (camel_nntp_summary_get_type (), NULL));
-	summary->nb_message = 0;
-	summary->next_uid = 1;
-	summary->nntp_file_size = 0;
-	summary->message_info = g_array_new (FALSE, FALSE, sizeof (CamelNNTPSummaryInformation));
-#endif
-
-	return TRUE;
-}
-
-
-
-static gboolean
-_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
-{
-#if 0
-	gboolean folder_already_exists;
-
-	g_assert(folder != NULL);
-
-	/* check if the folder object exists */
-
-	/* in the case where the folder does not exist, 
-	   return immediatly */
-	folder_already_exists = camel_folder_exists (folder, ex);
-	if (camel_exception_get_id (ex))
-		return FALSE;
-
-	if (!folder_already_exists)
-		return TRUE;
-
-
-	/* call default implementation.
-	   It should delete the messages in the folder
-	   and recurse the operation to subfolders */
-	parent_class->delete (folder, recurse, ex);
-#endif
-	return TRUE;
-}
-
-
-
-
-gboolean
-_delete_messages (CamelFolder *folder, CamelException *ex)
-{
-	
-	gboolean folder_already_exists;
-
-	g_assert(folder!=NULL);
-	
-	/* in the case where the folder does not exist, 
-	   return immediatly */
-	folder_already_exists = camel_folder_exists (folder, ex);
-	if (camel_exception_get_id (ex)) return FALSE;
-
-	if (!folder_already_exists) return TRUE;
-
-	return TRUE;
-}
-
-
-static GList *
-_list_subfolders (CamelFolder *folder, CamelException *ex)
-{
-	/* newsgroups don't have subfolders */
-	return NULL;
-}
-
-
-
-
-static gint
-_get_message_count (CamelFolder *folder, CamelException *ex)
-{
-	gint message_count = 0;
-
-	g_assert (folder);
-	g_assert (folder->summary);
-
-	message_count = CAMEL_NNTP_SUMMARY (folder->summary)->nb_message;
-
-	return message_count;
-}
-
-
-#if 0
-static void
-_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-#if 0
-	CamelNNTPSummary *summary = CAMEL_NNTP_SUMMARY (folder->summary);
-#endif
-	CamelStream *output_stream;
-	guint32 tmp_file_size;
-	guint32 next_uid;
-	gint tmp_file_fd;
-	GArray *message_info_array;
-#if 0
-	GArray *nntp_summary_info;
-#endif
-	gchar *tmp_message_filename;
-	gint fd1, fd2;
-	int i;
-
-	/* write the message itself */
-	output_stream = camel_stream_fs_new_with_name (tmp_message_filename,
-						       CAMEL_STREAM_FS_WRITE);
-	if (output_stream != NULL) {
-		camel_stream_write_string (output_stream, "From - \n");
-		camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), output_stream);
-	}
-	camel_stream_close (output_stream);
-	gtk_object_unref (GTK_OBJECT (output_stream));
-
-	/* at this point we have saved the message to a
-	   temporary file, now, we have to add the x-evolution 
-	   field and also update the main summary */
-
-	/* 
-	   First : parse the nntp file, but only from the 
-	   position where the message has been added, 
-	   wich happens to be the last postion in the 
-	   nntp file before we added the message.
-	   This position is still stored in the summary 
-	   for the moment 
-	*/
-	next_uid = summary->next_uid;
-	tmp_file_fd = open (tmp_message_filename, O_RDONLY);
-	message_info_array =
-		camel_nntp_parse_file (tmp_file_fd, "From - ", 0,
-				       &tmp_file_size, &next_uid, TRUE,
-				       NULL, 0, ex); 
-	
-	close (tmp_file_fd);
-
-	/* get the value of the last available UID
-	   as saved in the summary file, again */
-	next_uid = summary->next_uid;
-
-	/* make sure all our of message info's have 0 uid - ignore any
-	   set elsewhere */
-	for (i=0;ilen;i++) {
-		g_array_index(message_info_array, CamelNNTPParserMessageInfo, i).uid = 0;
-	}
-
-	/* 
-	   OK, this is not very efficient, we should not use the same
-	   method as for parsing an entire mail file, 
-	   but I have no time to write a simpler parser 
-	*/
-#if 0
-	next_uid = camel_nntp_write_xev (nntp_folder, tmp_message_filename, 
-					 message_info_array, &tmp_file_size, next_uid, ex);
-	
-#endif
-	if (camel_exception_get_id (ex)) { 
-		/* ** FIXME : free the preparsed information */
-		return;
-	}
-
-#if 0
-	nntp_summary_info =
-		parsed_information_to_nntp_summary (message_info_array);
-#endif
-
-	/* store the number of messages as well as the summary array */
-	summary->nb_message += 1;		
-	summary->next_uid = next_uid;	
-
-	((CamelNNTPSummaryInformation *)(nntp_summary_info->data))->position +=
-		summary->nntp_file_size;
-	summary->nntp_file_size += tmp_file_size;		
-
-	camel_nntp_summary_append_entries (summary, nntp_summary_info);
-	g_array_free (nntp_summary_info, TRUE); 
-	
-
-	/* append the temporary file message to the nntp file */
-	fd1 = open (tmp_message_filename, O_RDONLY);
-	fd2 = open (nntp_folder->folder_file_path, 
-		    O_WRONLY | O_CREAT | O_APPEND,
-		    0600);
-
-	if (fd2 == -1) {
-		camel_exception_setv (ex, 
-				      CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-				      "could not open the nntp folder file for appending the message\n"
-				      "\t%s\n"
-				      "Full error is : %s\n",
-				      nntp_folder->folder_file_path,
-				      strerror (errno));
-		return;
-	}
-
-	camel_nntp_copy_file_chunk (fd1,
-				    fd2, 
-				    tmp_file_size, 
-				    ex);
-	close (fd1);
-	close (fd2);
-
-	/* remove the temporary file */
-	unlink (tmp_message_filename);
-
-	g_free (tmp_message_filename);
-}
-#endif
-
-
-
-static GList *
-_get_uid_list (CamelFolder *folder, CamelException *ex) 
-{
-	GArray *message_info_array;
-	CamelNNTPSummaryInformation *message_info;
-	GList *uid_list = NULL;
-	int i;
-
-	message_info_array =
-		CAMEL_NNTP_SUMMARY (folder->summary)->message_info;
-	
-	for (i=0; ilen; i++) {
-		message_info = (CamelNNTPSummaryInformation *)(message_info_array->data) + i;
-		uid_list = g_list_prepend (uid_list, g_strdup (message_info->headers.uid));
-	}
-	
-	return uid_list;
-}
-
-
-
-static CamelMimeMessage *
-_get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
-{
-	GArray *message_info_array;
-	CamelNNTPSummaryInformation *message_info;
-
-	message_info_array =
-		CAMEL_NNTP_SUMMARY (folder->summary)->message_info;
-
-	if (number > message_info_array->len) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-				      "No such message %d in folder `%s'.",
-				      number, folder->name);
-		return NULL;
-	}
-
-	message_info =
-		(CamelNNTPSummaryInformation *)(message_info_array->data) +
-		(number - 1);
-
-	return _get_message_by_uid (folder, message_info->headers.uid, ex);
-}
-
-
-static CamelMimeMessage *
-_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	CamelStream *nntp_istream;
-	CamelStream *message_stream;
-	CamelMimeMessage *message = NULL;
-	CamelStore *parent_store;
-	char *buf;
-	int buf_len;
-	int buf_alloc;
-	int status;
-	gboolean done;
-
-	/* get the parent store */
-	parent_store = camel_folder_get_parent_store (folder, ex);
-	if (camel_exception_get_id (ex)) {
-		return NULL;
-	}
-
-	status = camel_nntp_command (CAMEL_NNTP_STORE( parent_store ), NULL, "ARTICLE %s", uid);
-
-	nntp_istream = CAMEL_NNTP_STORE (parent_store)->istream;
-
-	/* if the uid was not found, raise an exception and return */
-	if (status != CAMEL_NNTP_OK) {
-		camel_exception_setv (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     "message %s not found.",
-				      uid);
-		return NULL;
-	}
-
-	/* XXX ick ick ick.  read the entire message into a buffer and
-	   then create a stream_mem for it. */
-	buf_alloc = 2048;
-	buf_len = 0;
-	buf = malloc(buf_alloc);
-	done = FALSE;
-
-	buf[0] = 0;
-
-	while (!done) {
-		char *line = camel_stream_buffer_read_line ( CAMEL_STREAM_BUFFER ( nntp_istream ));
-		int line_length = strlen ( line );
-
-		if (!strcmp(line, ".")) {
-			done = TRUE;
-			g_free (line);
-		}
-		else {
-			if (buf_len + line_length > buf_alloc) {
-				buf_alloc *= 2;
-				buf = realloc (buf, buf_alloc);
-			}
-			strcat(buf, line);
-			strcat(buf, "\n");
-			buf_len += strlen(line) + 1;
-			g_free (line);
-		}
-	}
-
-	/* create a stream bound to the message */
-	message_stream = camel_stream_mem_new_with_buffer(buf,
-							  buf_len,
-							  CAMEL_STREAM_MEM_READ);
-
-	message = camel_mime_message_new ();
-	camel_data_wrapper_set_input_stream (CAMEL_DATA_WRAPPER (message), message_stream);
-	
-	return message;
-}
diff --git a/camel/providers/nntp/camel-nntp-folder.h b/camel/providers/nntp/camel-nntp-folder.h
deleted file mode 100644
index 7029023a62..0000000000
--- a/camel/providers/nntp/camel-nntp-folder.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-folder.h : NNTP group (folder) support. */
-
-/* 
- *
- * Author : Chris Toshok  
- *
- * Copyright (C) 2000 Helix Code .
- *
- * 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_NNTP_FOLDER_H
-#define CAMEL_NNTP_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-folder.h"
-#include "camel-nntp-summary.h"
-
-/*  #include "camel-store.h" */
-
-#define CAMEL_NNTP_FOLDER_TYPE     (camel_nntp_folder_get_type ())
-#define CAMEL_NNTP_FOLDER(obj)     (GTK_CHECK_CAST((obj), CAMEL_NNTP_FOLDER_TYPE, CamelNNTPFolder))
-#define CAMEL_NNTP_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_NNTP_FOLDER_TYPE, CamelNNTPFolderClass))
-#define IS_CAMEL_NNTP_FOLDER(o)    (GTK_CHECK_TYPE((o), CAMEL_NNTP_FOLDER_TYPE))
-
-
-typedef struct {
-	CamelFolder parent_object;
-
-	gchar *summary_file_path;  /* contains the messages summary */
-} CamelNNTPFolder;
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-	
-} CamelNNTPFolderClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType camel_nntp_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_NNTP_FOLDER_H */
diff --git a/camel/providers/nntp/camel-nntp-provider.c b/camel/providers/nntp/camel-nntp-provider.c
deleted file mode 100644
index 5ddda3f39d..0000000000
--- a/camel/providers/nntp/camel-nntp-provider.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-provider.c: nntp provider registration code */
-
-/* 
- * Authors :
- *   Dan Winship 
- *
- * 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
- */
-
-#include "config.h"
-#include "camel-nntp-store.h"
-#include "camel-provider.h"
-
-
-static CamelProvider _nntp_provider = {
-	(GtkType) 0,
-	PROVIDER_STORE,
-	PROVIDER_REMOTE,
-	"news",
-	"Camel default NNTP provider",
-	"This is a provider that reads from a NNTP server.",
-	(GModule *) NULL
-};
-
-CamelProvider *
-camel_provider_module_init (void);
-
-
-CamelProvider *
-camel_provider_module_init (void)
-{
-	_nntp_provider.object_type = camel_nntp_store_get_type();
-	return &_nntp_provider;
-}
-
-
-
diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
deleted file mode 100644
index c1a721d96c..0000000000
--- a/camel/providers/nntp/camel-nntp-store.c
+++ /dev/null
@@ -1,476 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-store.c : class for an nntp store */
-
-/* 
- *
- * 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 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "libgnome/libgnome.h"
-
-#include "camel-nntp-store.h"
-#include "camel-nntp-folder.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-fs.h"
-#include "camel-exception.h"
-#include "camel-url.h"
-#include "string-utils.h"
-
-#define NNTP_PORT 119
-
-static CamelServiceClass *service_class = NULL;
-
-/* Returns the class for a CamelNNTPStore */
-#define CNNTPS_CLASS(so) CAMEL_NNTP_STORE_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CNNTPF_CLASS(so) CAMEL_NNTP_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-
-static CamelFolder *_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex);
-static char *_get_folder_name (CamelStore *store, const char *folder_name,
-			       CamelException *ex);
-
-static gboolean nntp_connect (CamelService *service, CamelException *ex);
-static gboolean nntp_disconnect (CamelService *service, CamelException *ex);
-
-static void
-camel_nntp_store_class_init (CamelNNTPStoreClass *camel_nntp_store_class)
-{
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_nntp_store_class);
-
-	service_class = gtk_type_class (camel_service_get_type ());
-	
-	/* virtual method overload */
-	camel_store_class->get_folder = _get_folder;
-	camel_store_class->get_folder_name = _get_folder_name;
-}
-
-
-
-static void
-camel_nntp_store_init (gpointer object, gpointer klass)
-{
-	CamelService *service = CAMEL_SERVICE (object);
-
-	service->url_flags = CAMEL_SERVICE_URL_NEED_HOST;
-}
-
-GtkType
-camel_nntp_store_get_type (void)
-{
-	static GtkType camel_nntp_store_type = 0;
-	
-	if (!camel_nntp_store_type)	{
-		GtkTypeInfo camel_nntp_store_info =	
-		{
-			"CamelNNTPStore",
-			sizeof (CamelNNTPStore),
-			sizeof (CamelNNTPStoreClass),
-			(GtkClassInitFunc) camel_nntp_store_class_init,
-			(GtkObjectInitFunc) camel_nntp_store_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_nntp_store_type = gtk_type_unique (CAMEL_STORE_TYPE, &camel_nntp_store_info);
-	}
-	
-	return camel_nntp_store_type;
-}
-
-static CamelFolder *
-_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
-{
-	CamelNNTPFolder *new_nntp_folder;
-	CamelFolder *new_folder;
-
-	/* XXX */
-	folder_name = "netscape.public.mozilla.announce";
-
-	/* check if folder has already been created */
-	/* call the standard routine for that when  */
-	/* it is done ... */
-
-	new_nntp_folder =  gtk_type_new (CAMEL_NNTP_FOLDER_TYPE);
-	new_folder = CAMEL_FOLDER (new_nntp_folder);
-	
-	/* XXX We shouldn't be passing NULL here, but it's equivalent to
-	 * what was there before, and there's no
-	 * CamelNNTPFolder::get_subfolder yet anyway...
-	 */
-	CF_CLASS (new_folder)->init (new_folder, store, NULL,
-				     folder_name, '/', ex);
-	
-	return new_folder;
-}
-
-
-static char *
-_get_folder_name (CamelStore *store, const char *folder_name,
-		  CamelException *ex)
-{
-	return g_strdup (folder_name);
-}
-
-/**
- * camel_nntp_store_open: Connect to the server if we are currently
- * disconnected.
- * @store: the store
- * @ex: a CamelException
- *
- **/
-void
-camel_nntp_store_open (CamelNNTPStore *store, CamelException *ex)
-{
-	CamelService *service = CAMEL_SERVICE (store);
-
-	if (!camel_service_is_connected (service))
-		nntp_connect (service, ex);
-}
-
-/**
- * camel_nntp_store_close: Close the connection to the server
- * @store: the store
- * @ex: a CamelException
- *
- **/
-void
-camel_nntp_store_close (CamelNNTPStore *store, gboolean expunge,
-			CamelException *ex)
-{
-	camel_nntp_command (store, NULL, "QUIT");
-
-	nntp_disconnect (CAMEL_SERVICE (store), ex);
-}
-
-static gboolean
-nntp_connect (CamelService *service, CamelException *ex)
-{
-	struct hostent *h;
-	struct sockaddr_in sin;
-	int fd, status, apoplen;
-	char *buf, *apoptime, *pass;
-	CamelNNTPStore *store = CAMEL_NNTP_STORE (service);
-
-	if (!service_class->connect (service, ex))
-		return FALSE;
-
-	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 : NNTP_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);
-
-	/* Read the greeting */
-	buf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
-	if (!buf) {
-		return -1;
-	}
-
-	g_free (buf);
-
-	/* get a list of extensions that the server supports */
-
-	return TRUE;
-}
-
-static gboolean
-nntp_disconnect (CamelService *service, CamelException *ex)
-{
-	CamelNNTPStore *store = CAMEL_NNTP_STORE (service);
-
-	if (!service->connected)
-		return TRUE;
-
-	if (!service_class->disconnect (service, ex))
-		return FALSE;
-
-	/* Closing the buffered write stream will close the
-	 * unbuffered read stream wrapped inside it as well.
-	 */
-	camel_stream_close (store->ostream);
-	gtk_object_unref (GTK_OBJECT (store->ostream));
-	store->ostream = NULL;
-	store->istream = NULL;
-	return TRUE;
-}
-
-/**
- * camel_nntp_command: Send a command to a NNTP server.
- * @store: the NNTP 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 NNTP 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_nntp_command
- * will set it to point to an buffer containing the rest of the
- * response from the NNTP 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_NNTP_OK (command executed successfully),
- * CAMEL_NNTP_ERR (command encounted an error), or CAMEL_NNTP_FAIL
- * (a protocol-level error occurred, and Camel is uncertain of the
- * result of the command.)
- **/
-int
-camel_nntp_command (CamelNNTPStore *store, char **ret, char *fmt, ...)
-{
-	char *cmdbuf, *respbuf;
-	va_list ap;
-	int status;
-	int resp_code;
-	CamelException *ex;
-
-	va_start (ap, fmt);
-	cmdbuf = g_strdup_vprintf (fmt, ap);
-	va_end (ap);
-
-	ex = camel_exception_new();
-
-	/* make sure we're connected */
-	if (store->ostream == NULL)
-		nntp_connect (CAMEL_SERVICE (store), ex);
-
-	if (camel_exception_get_id (ex)) {
-		camel_exception_free (ex);
-		return CAMEL_NNTP_FAIL;
-	}
-
-	/* Send the command */
-	camel_stream_write (store->ostream, cmdbuf, strlen (cmdbuf));
-	g_free (cmdbuf);
-	camel_stream_write (store->ostream, "\r\n", 2);
-
-	/* Read the response */
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
-	resp_code = atoi (respbuf);
-
-	if (resp_code < 400)
-		status = CAMEL_NNTP_OK;
-	else if (resp_code < 500)
-		status = CAMEL_NNTP_ERR;
-	else
-		status = CAMEL_NNTP_FAIL;
-
-	if (ret) {
-		*ret = strchr (respbuf, ' ');
-		if (*ret)
-			*ret = g_strdup (*ret + 1);
-	}
-	g_free (respbuf);
-
-	return status;
-}
-
-/**
- * camel_nntp_command_get_additional_data: get "additional data" from
- * a NNTP command.
- * @store: the NNTP store
- *
- * This command gets the additional data returned by "multi-line" POP
- * commands, such as LIST, RETR, TOP, and UIDL. This command _must_
- * be called after a successful (CAMEL_NNTP_OK) call to
- * camel_nntp_command for a command that has a multi-line response.
- * The returned data is un-byte-stuffed, and has lines termined by
- * newlines rather than CR/LF pairs.
- *
- * Return value: the data, which the caller must free.
- **/
-char *
-camel_nntp_command_get_additional_data (CamelNNTPStore *store)
-{
-	CamelStreamBuffer *stream = CAMEL_STREAM_BUFFER (store->istream);
-	GPtrArray *data;
-	char *buf;
-	int i, status = CAMEL_NNTP_OK;
-
-	data = g_ptr_array_new ();
-	while (1) {
-		buf = camel_stream_buffer_read_line (stream);
-		if (!buf) {
-			status = CAMEL_NNTP_FAIL;
-			break;
-		}
-
-		if (!strcmp (buf, "."))
-			break;
-		if (*buf == '.')
-			memmove (buf, buf + 1, strlen (buf));
-		g_ptr_array_add (data, buf);
-	}
-
-	if (status == CAMEL_NNTP_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);
-		buf = g_strjoinv ("\n", (char **)data->pdata);
-	} else
-		buf = NULL;
-
-	for (i = 0; i < data->len - 2; i++)
-		g_free (data->pdata[i]);
-	g_ptr_array_free (data, TRUE);
-
-	return buf;
-}
-
-void
-camel_nntp_store_subscribe_group (CamelStore *store,
-				  const gchar *group_name)
-{
-	gchar *root_dir = camel_nntp_store_get_toplevel_dir(CAMEL_NNTP_STORE(store));
-	char *ret = NULL;
-	CamelException *ex = camel_exception_new();
-
-	camel_nntp_store_open(CAMEL_NNTP_STORE(store), ex);
-
-	if (camel_exception_get_id (ex)) {
-		g_free (root_dir);
-		camel_exception_free (ex);
-		return;
-	}
-
-	if (CAMEL_NNTP_OK  == camel_nntp_command ( CAMEL_NNTP_STORE (store),
-						   &ret, "GROUP %s", group_name)) {
-		gchar *summary_file;
-		summary_file = g_strdup_printf ("%s/%s-ev-summary", root_dir, group_name);
-	}
-	if (ret) g_free (ret);
-
-	g_free (root_dir);
-	camel_exception_free (ex);
-}
-
-void
-camel_nntp_store_unsubscribe_group (CamelStore *store,
-				    const gchar *group_name)
-{
-	gchar *root_dir = camel_nntp_store_get_toplevel_dir(CAMEL_NNTP_STORE(store));
-	gchar *summary_file;
-
-	summary_file = g_strdup_printf ("%s/%s-ev-summary", root_dir, group_name);
-	if (g_file_exists (summary_file))
-		unlink (summary_file);
-	g_free (summary_file);
-
-	g_free (root_dir);
-}
-
-GList *
-camel_nntp_store_list_subscribed_groups(CamelStore *store)
-{
-	GList *group_name_list = NULL;
-	struct stat stat_buf;
-	gint stat_error = 0;
-	gchar *entry_name;
-	gchar *full_entry_name;
-	gchar *real_group_name;
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-	gchar *root_dir = camel_nntp_store_get_toplevel_dir(CAMEL_NNTP_STORE(store));
-
-	dir_handle = opendir (root_dir);
-	
-	/* read the first entry in the directory */
-	dir_entry = readdir (dir_handle);
-	while ((stat_error != -1) && (dir_entry != NULL)) {
-
-		/* get the name of the next entry in the dir */
-		entry_name = dir_entry->d_name;
-		full_entry_name = g_strdup_printf ("%s/%s", root_dir, entry_name);
-		stat_error = stat (full_entry_name, &stat_buf);
-		g_free (full_entry_name);
-
-		/* is it a normal file ending in -ev-summary ? */
-		if ((stat_error != -1) && S_ISREG (stat_buf.st_mode)) {
-			gboolean summary_suffix_found;
-
-			real_group_name = string_prefix (entry_name, "-ev-summary",
-							 &summary_suffix_found);
-
-			if (summary_suffix_found)
-				/* add the folder name to the list */
-				group_name_list = g_list_append (group_name_list, 
-								 real_group_name);
-		}
-		/* read next entry */
-		dir_entry = readdir (dir_handle);
-	}
-
-	closedir (dir_handle);
-
-	return group_name_list;
-}
-
-gchar *
-camel_nntp_store_get_toplevel_dir (CamelNNTPStore *store)
-{
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	char *news_dir;
-	char *top_dir;
-
-	g_assert(url != NULL);
-
-	news_dir = gnome_util_prepend_user_home ("evolution/news");
-
-	top_dir = g_strdup_printf( "%s/%s",
-				   news_dir,
-				   url->host );
-
-	g_free (news_dir);
-
-	return top_dir;
-}
diff --git a/camel/providers/nntp/camel-nntp-store.h b/camel/providers/nntp/camel-nntp-store.h
deleted file mode 100644
index 257772d7cb..0000000000
--- a/camel/providers/nntp/camel-nntp-store.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-store.h : class for an nntp store */
-
-/* 
- *
- * 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_NNTP_STORE_H
-#define CAMEL_NNTP_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-store.h"
-
-#define CAMEL_NNTP_STORE_TYPE     (camel_nntp_store_get_type ())
-#define CAMEL_NNTP_STORE(obj)     (GTK_CHECK_CAST((obj), CAMEL_NNTP_STORE_TYPE, CamelNNTPStore))
-#define CAMEL_NNTP_STORE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_NNTP_STORE_TYPE, CamelNNTPStoreClass))
-#define IS_CAMEL_NNTP_STORE(o)    (GTK_CHECK_TYPE((o), CAMEL_NNTP_STORE_TYPE))
-
-
-typedef struct {
-	CamelStore parent_object;	
-
-#define CAMEL_NNTP_EXT_XOVER 0x01
-	guint32 extensions;
-
-	CamelStream *istream, *ostream;
-} CamelNNTPStore;
-
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-} CamelNNTPStoreClass;
-
-
-/* public methods */
-void camel_nntp_store_open (CamelNNTPStore *store, CamelException *ex);
-void camel_nntp_store_close (CamelNNTPStore *store, gboolean expunge,
-			     CamelException *ex);
-
-void camel_nntp_store_subscribe_group (CamelStore *store, const gchar *group_name);
-void camel_nntp_store_unsubscribe_group (CamelStore *store, const gchar *group_name);
-GList *camel_nntp_store_list_subscribed_groups(CamelStore *store);
-
-gchar *camel_nntp_store_get_toplevel_dir (CamelNNTPStore *store);
-
-/* support functions */
-enum { CAMEL_NNTP_OK, CAMEL_NNTP_ERR, CAMEL_NNTP_FAIL };
-int camel_nntp_command (CamelNNTPStore *store, char **ret, char *fmt, ...);
-char *camel_nntp_command_get_additional_data (CamelNNTPStore *store);
-
-/* Standard Gtk function */
-GtkType camel_nntp_store_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_NNTP_STORE_H */
-
-
diff --git a/camel/providers/nntp/camel-nntp-summary.c b/camel/providers/nntp/camel-nntp-summary.c
deleted file mode 100644
index dad88b6ca4..0000000000
--- a/camel/providers/nntp/camel-nntp-summary.c
+++ /dev/null
@@ -1,396 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-utils.c : summary support for nntp groups. */
-
-/* 
- * Author : Chris Toshok  
- *
- * Copyright (C) 2000 Helix Code .
-
- * 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  
-
-#include "camel-exception.h"
-#include "camel-nntp-folder.h"
-#include "camel-nntp-summary.h"
-#include "md5-utils.h"
-
-
-#include  
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-static CamelFolderSummaryClass *parent_class = NULL;
-
-static int count_messages (CamelFolderSummary *summary);
-static int count_subfolders (CamelFolderSummary *summary);
-static GPtrArray *get_subfolder_info (CamelFolderSummary *summary,
-				      int first, int count);
-static GPtrArray *get_message_info (CamelFolderSummary *summary,
-				    int first, int count);
-static void finalize (GtkObject *object);
-
-static void
-camel_nntp_summary_class_init (CamelNNTPSummaryClass *camel_nntp_summary_class)
-{
-	GtkObjectClass *gtk_object_class =
-		GTK_OBJECT_CLASS (camel_nntp_summary_class);
-	CamelFolderSummaryClass *camel_folder_summary_class =
-		CAMEL_FOLDER_SUMMARY_CLASS (camel_nntp_summary_class);
-
-	parent_class = gtk_type_class (camel_folder_summary_get_type ());
-
-	/* virtual method override */
-	camel_folder_summary_class->count_messages = count_messages;
-	camel_folder_summary_class->count_subfolders = count_subfolders;
-	camel_folder_summary_class->get_subfolder_info = get_subfolder_info;
-	camel_folder_summary_class->get_message_info = get_message_info;
-
-	gtk_object_class->finalize = finalize;
-}
-
-
-GtkType
-camel_nntp_summary_get_type (void)
-{
-	static GtkType camel_nntp_summary_type = 0;
-
-	if (!camel_nntp_summary_type) {
-		GtkTypeInfo camel_nntp_summary_info =	
-		{
-			"CamelNNTPSummary",
-			sizeof (CamelNNTPSummary),
-			sizeof (CamelNNTPSummaryClass),
-			(GtkClassInitFunc) camel_nntp_summary_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_nntp_summary_type = gtk_type_unique (camel_folder_summary_get_type (), &camel_nntp_summary_info);
-	}
-
-	return camel_nntp_summary_type;
-}
-
-static void
-finalize (GtkObject *object)
-{
-	CamelNNTPSummary *summary = CAMEL_NNTP_SUMMARY (object);
-	CamelNNTPSummaryInformation *info;
-	int i;
-
-	for (i = 0; i < summary->message_info->len; i++) {
-		info = &(((CamelNNTPSummaryInformation *)summary->message_info->data)[i]);
-		g_free (info->headers.subject);
-		g_free (info->headers.sender);
-		g_free (info->headers.to);
-		g_free (info->headers.sent_date);
-		g_free (info->headers.received_date);
-		g_free (info->headers.uid);
-	}
-	g_array_free (summary->message_info, TRUE);		
-
-	GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}	
-
-static int
-count_messages (CamelFolderSummary *summary)
-{
-	return CAMEL_NNTP_SUMMARY (summary)->nb_message;
-}
-
-static int
-count_subfolders (CamelFolderSummary *summary)
-{
-	return 0;
-}
-
-static GPtrArray *
-get_subfolder_info (CamelFolderSummary *summary, int first, int count)
-{
-	return NULL;
-}
-
-static GPtrArray *
-get_message_info (CamelFolderSummary *summary, int first, int count)
-{
-	CamelNNTPSummary *nntp_summary = CAMEL_NNTP_SUMMARY (summary);
-	CamelNNTPSummaryInformation *info;
-	GPtrArray *arr;
-
-	/* XXX bounds check */
-
-	arr = g_ptr_array_new ();
-	for (; count; count--) {
-		info = &((CamelNNTPSummaryInformation *)nntp_summary->message_info->data)[first++];
-		g_ptr_array_add (arr, info);
-	}
-
-	return arr;
-}
-
-/**
- * camel_nntp_summary_save:
- * @summary: 
- * @filename: 
- * @ex: 
- * 
- * save the summary into a file 
- **/
-void 
-camel_nntp_summary_save (CamelNNTPSummary *summary, const gchar *filename,
-			 CamelException *ex)
-{
-	CamelNNTPSummaryInformation *msg_info;
-	guint cur_msg;
-	guint field_length;
-	gint fd;
-	gint write_result; /* XXX use this */
-	guint32 data;
-
-	fd = open (filename, O_WRONLY | O_CREAT | O_TRUNC,
-		   S_IRUSR | S_IWUSR);
-	if (fd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-				      "could not create the nntp summary "
-				      "file\n\t%s\nFull error is : %s\n",
-				      filename,
-				      strerror (errno));
-		return;
-	}
-
-	/* We write the file out in network byte order, not because
-	 * that makes sense, but because it's easy.
-	 */
-
-	data = htonl (CAMEL_NNTP_SUMMARY_VERSION);
-	write (fd, &data, sizeof (data));
-
-	data = htonl (summary->nb_message);
-	write (fd, &data, sizeof (data));
-
-	for (cur_msg = 0; cur_msg < summary->nb_message; cur_msg++) {
-		msg_info = (CamelNNTPSummaryInformation *)
-			(summary->message_info->data) + cur_msg;
-
-		/* Write meta-info. */
-		data = htonl (msg_info->size);
-		write (fd, &data, sizeof (data));
-		write (fd, &msg_info->status, 1);
-
-		/* Write subject. */
-		if (msg_info->headers.subject)
-			field_length = strlen (msg_info->headers.subject);
-		else
-			field_length = 0;
-		data = htonl (field_length);
-		write (fd, &data, sizeof (data));
-		if (msg_info->headers.subject)
-			write (fd, msg_info->headers.subject, field_length);
-
-		/* Write sender. */
-		if (msg_info->headers.sender)
-			field_length = strlen (msg_info->headers.sender);
-		else
-			field_length = 0;
-		data = htonl (field_length);
-		write (fd, &data, sizeof (data));
-		if (msg_info->headers.sender)
-			write (fd, msg_info->headers.sender, field_length);
-
-		/* Write sent date. */
-		if (msg_info->headers.sent_date)
-			field_length = strlen (msg_info->headers.sent_date);
-		else
-			field_length = 0;
-		data = htonl (field_length);
-		write (fd, &data, sizeof (data));
-		if (msg_info->headers.sent_date)
-			write (fd, msg_info->headers.sent_date, field_length);
-
-		/* Write received date. */
-		if (msg_info->headers.received_date)
-			field_length = strlen (msg_info->headers.received_date);
-		else
-			field_length = 0;
-		data = htonl (field_length);
-		write (fd, &data, sizeof (data));
-		if (msg_info->headers.received_date)
-			write (fd, msg_info->headers.received_date, field_length);
-
-		/* Write uid date. */
-		if (msg_info->headers.uid)
-			field_length = strlen (msg_info->headers.uid);
-		else
-			field_length = 0;
-		data = htonl (field_length);
-		write (fd, &data, sizeof (data));
-		if (msg_info->headers.uid)
-			write (fd, msg_info->headers.uid, field_length);
-
-	}
-
-	close (fd);
-}
-
-
-
-/**
- * camel_nntp_summary_load:
- * @filename: 
- * @ex: 
- * 
- * load the summary from a file 
- * 
- * Return value: 
- **/
-CamelNNTPSummary *
-camel_nntp_summary_load (const gchar *newsgroup, const gchar *filename, CamelException *ex)
-{
-	CamelNNTPSummaryInformation *msg_info;
-	guint cur_msg;
-	guint field_length;
-	gint fd;
-	CamelNNTPSummary *summary;
-	gint read_result;
-	guint32 data;
-
-	fd = open (filename, O_RDONLY);
-	if (fd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-				      "could not open the nntp summary file\n"
-				      "\t%s\nFull error is : %s\n",
-				      filename, strerror (errno));
-		return NULL;
-	}
-
-	/* Verify version number. */
-	read (fd, &data, sizeof(data));
-	data = ntohl (data);
-
-	if (data != CAMEL_NNTP_SUMMARY_VERSION) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_SUMMARY_INVALID,
-				      "This folder summary was written by "
-				      "%s version of this software.",
-				      data < CAMEL_NNTP_SUMMARY_VERSION ?
-				      "an older" : "a newer");
-		return NULL;
-	}
-
-	summary = CAMEL_NNTP_SUMMARY (gtk_object_new (camel_nntp_summary_get_type (), NULL));
-
-	read (fd, &data, sizeof(data));
-	summary->nb_message = ntohl (data);
-
-	summary->message_info =
-		g_array_new (FALSE, FALSE,
-			     sizeof (CamelNNTPSummaryInformation));
-	g_array_set_size (summary->message_info, summary->nb_message);
-
-	for (cur_msg = 0; cur_msg < summary->nb_message; cur_msg++)  {
-		msg_info = (CamelNNTPSummaryInformation *)
-			(summary->message_info->data) + cur_msg;
-
-		/* Read the meta-info. */
-		read (fd, &data, sizeof(data));
-		msg_info->size = ntohl (data);
-		read (fd, &msg_info->status, 1);
-
-		/* Read the subject. */
-		read (fd, &field_length, sizeof (field_length));
-		field_length = ntohl (field_length);
-		if (field_length > 0) {			
-			msg_info->headers.subject =
-				g_new0 (gchar, field_length + 1);
-			read (fd, msg_info->headers.subject, field_length);
-		} else 
-			msg_info->headers.subject = NULL;
-		
-		/* Read the sender. */
-		read (fd, &field_length, sizeof (field_length));
-		field_length = ntohl (field_length);
-		if (field_length > 0) {			
-			msg_info->headers.sender =
-				g_new0 (gchar, field_length + 1);
-			read (fd, msg_info->headers.sender, field_length);
-		} else 
-			msg_info->headers.sender = NULL;
-
-		msg_info->headers.to = g_strdup (newsgroup);
-
-		/* Read the sent date field. */
-		read (fd, &field_length, sizeof (field_length));
-		field_length = ntohl (field_length);
-		if (field_length > 0) {			
-			msg_info->headers.sent_date =
-				g_new0 (gchar, field_length + 1);
-			read (fd, msg_info->headers.sent_date, field_length);
-		} else 
-			msg_info->headers.sent_date = NULL;
-
-		/* Read the received date field. */
-		read (fd, &field_length, sizeof (field_length));
-		field_length = ntohl (field_length);
-		if (field_length > 0) {			
-			msg_info->headers.received_date =
-				g_new0 (gchar, field_length + 1);
-			read (fd, msg_info->headers.received_date,
-			      field_length);
-		} else 
-			msg_info->headers.received_date = NULL;
-
-		/* Read the uid field. */
-		read (fd, &field_length, sizeof (field_length));
-		field_length = ntohl (field_length);
-		if (field_length > 0) {			
-			msg_info->headers.uid =
-				g_new0 (gchar, field_length + 1);
-			read (fd, msg_info->headers.uid,
-			      field_length);
-		} else 
-			msg_info->headers.uid = NULL;
-	}		
-
-	close (fd);
-	return summary;
-}
-
-
-/**
- * camel_nntp_summary_append_entries:
- * @summary: 
- * @entries: 
- * 
- * append an entry to a summary
- **/
-void
-camel_nntp_summary_append_entries (CamelNNTPSummary *summary, GArray *entries)
-{
-
-	summary->message_info = g_array_append_vals (summary->message_info,
-						     entries->data,
-						     entries->len);
-}
diff --git a/camel/providers/nntp/camel-nntp-summary.h b/camel/providers/nntp/camel-nntp-summary.h
deleted file mode 100644
index 6c54f6cb33..0000000000
--- a/camel/providers/nntp/camel-nntp-summary.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-utils.c : summary support for nntp groups. */
-
-/* 
- *
- * Author : Chris Toshok  
- *
- * Copyright (C) 2000 Helix Code (http://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 NNTP_SUMMARY_H
-#define NNTP_SUMMARY_H 1
-
-#include 
-
-#define CAMEL_NNTP_SUMMARY_TYPE     (camel_nntp_summary_get_type ())
-#define CAMEL_NNTP_SUMMARY(obj)     (GTK_CHECK_CAST((obj), CAMEL_NNTP_SUMMARY_TYPE, CamelNNTPSummary))
-#define CAMEL_NNTP_SUMMARY_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_NNTP_SUMMARY_TYPE, CamelNNTPSummaryClass))
-#define CAMEL_IS_NNTP_SUMMARY(o)    (GTK_CHECK_TYPE((o), CAMEL_NNTP_SUMMARY_TYPE))
-
-
-#define CAMEL_NNTP_SUMMARY_VERSION 1
-
-
-typedef struct {
-	CamelMessageInfo headers;
-
-	guint    size;
-	guchar   status;
-
-} CamelNNTPSummaryInformation;
-
-
-/* this contains informations about the whole nntp file */
-typedef struct {
-	CamelFolderSummary parent_object;
-
-	guint first_message;    /* the first message number in the summary */
-	guint nb_message;	/* number of messages in the summary	*/
-
-	GArray *message_info;	/* array of CamelNNTPSummaryInformation	*/
-
-} CamelNNTPSummary;
-
-typedef struct {
-	CamelFolderSummaryClass parent_class;
-
-} CamelNNTPSummaryClass;
-
-
-GtkType camel_nntp_summary_get_type (void);
-
-void camel_nntp_summary_save (CamelNNTPSummary *summary,
-			      const gchar *filename, CamelException *ex);
-CamelNNTPSummary *
-camel_nntp_summary_load (const gchar *newsgroup, const gchar *filename, CamelException *ex);
-
-gboolean camel_nntp_summary_check_sync (gchar *summary_filename,
-					gchar *nntp_filename,
-					CamelException *ex);
-
-void camel_nntp_summary_append_entries (CamelNNTPSummary *summary,
-					GArray *entries);
-
-
-#endif /* NNTP_SUMMARY_H */
diff --git a/camel/providers/nntp/camel-nntp-utils.c b/camel/providers/nntp/camel-nntp-utils.c
deleted file mode 100644
index 4ee93fc572..0000000000
--- a/camel/providers/nntp/camel-nntp-utils.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-utils.c : utilities used by the nntp code. */
-
-/* 
- * Author : Chris Toshok  
- *
- * Copyright (C) 2000 Helix Code .
- *
- * 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 "camel-nntp-folder.h"
-#include "camel-nntp-store.h"
-#include "camel-nntp-summary.h"
-#include "camel-nntp-utils.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-mem.h"
-#include "gmime-utils.h"
-
-#include 
-#include 
-
-static GArray*
-get_XOVER_headers(CamelNNTPStore *nntp_store, CamelFolder *folder,
-		  int first_message, int last_message)
-{
-	int status;
-
-	status = camel_nntp_command (nntp_store, NULL,
-				     "XOVER %d-%d",
-				     first_message,
-				     last_message);
-		
-	if (status == CAMEL_NNTP_OK) {
-		CamelStream *nntp_istream = nntp_store->istream;
-		GArray *array;
-		gboolean done = FALSE;
-
-		array = g_array_new(FALSE, FALSE, sizeof(CamelNNTPSummaryInformation));
-
-		while (!done) {
-			char *line;
-
-			line = camel_stream_buffer_read_line ( 
-					      CAMEL_STREAM_BUFFER ( nntp_istream ));
-
-			if (*line == '.') {
-				done = TRUE;
-			}
-			else {
-				CamelNNTPSummaryInformation new_info;
-				char **split_line = g_strsplit (line, "\t", 7);
-
-				memset (&new_info, 0, sizeof(new_info));
-					
-				new_info.headers.subject = g_strdup(split_line[1]);
-				new_info.headers.sender = g_strdup(split_line[2]);
-				new_info.headers.to = g_strdup(folder->name);
-				new_info.headers.sent_date = g_strdup(split_line[3]);
-				/* XXX do we need to fill in both dates? */
-				new_info.headers.received_date = g_strdup(split_line[3]);
-				new_info.headers.size = atoi(split_line[5]);
-				new_info.headers.uid = g_strdup(split_line[4]);
-				g_strfreev (split_line);
-
-				g_array_append_val(array, new_info);
-			}
-			g_free (line);
-		}
-
-		return array;
-	}
-
-	return NULL;
-}
-
-static GArray*
-get_HEAD_headers(CamelNNTPStore *nntp_store, CamelFolder *folder,
-		 int first_message, int last_message)
-{
-	int i;
-	int status;
-	GArray *array;
-	CamelNNTPSummaryInformation info;
-
-	array = g_array_new(FALSE, FALSE, sizeof(CamelNNTPSummaryInformation));
-
-	for (i = first_message; i < last_message; i ++) {
-		status = camel_nntp_command (nntp_store, NULL,
-					     "HEAD %d", i);
-
-		if (status == CAMEL_NNTP_OK) {
-			gboolean done = FALSE;
-			char *buf;
-			int buf_len;
-			int buf_alloc;
-			int h;
-			CamelStream *header_stream;
-			GArray *header_array;
-			CamelStream *nntp_istream;
-
-			buf_alloc = 2048;
-			buf_len = 0;
-			buf = malloc(buf_alloc);
-			done = FALSE;
-
-			buf[0] = 0;
-
-			nntp_istream = nntp_store->istream;
-
-			while (!done) {
-				char *line;
-				int line_length;
-
-				line = camel_stream_buffer_read_line ( 
-						      CAMEL_STREAM_BUFFER ( nntp_istream ));
-				line_length = strlen ( line );
-
-				if (*line == '.') {
-					done = TRUE;
-				}
-				else {
-					if (buf_len + line_length > buf_alloc) {
-						buf_alloc *= 2;
-						buf = realloc (buf, buf_alloc);
-					}
-					strcat(buf, line);
-					strcat(buf, "\n");
-					buf_len += strlen(line);
-					g_free (line);
-				}
-			}
-
-			/* create a stream from which to parse the headers */
-			header_stream = camel_stream_mem_new_with_buffer(buf,
-								 buf_len,
-								 CAMEL_STREAM_MEM_READ);
-
-			header_array = get_header_array_from_stream (header_stream);
-
-			memset (&info, 0, sizeof(info));
-
-			for (h = 0; h < header_array->len; h ++) {
-				Rfc822Header *header = &((Rfc822Header*)header_array->data)[h];
-				if (!strcasecmp(header->name, "From"))
-					info.headers.sender = g_strdup(header->value);
-				else if (!strcasecmp(header->name, "To"))
-					info.headers.to = g_strdup(header->value);
-				else if (!strcasecmp(header->name, "Subject"))
-					info.headers.subject = g_strdup(header->value);
-				else if (!strcasecmp(header->name, "Message-ID"))
-					info.headers.uid = g_strdup(header->value);
-				else if (!strcasecmp(header->name, "Date")) {
-					info.headers.sent_date = g_strdup(header->value);
-					info.headers.received_date = g_strdup(header->value);
-				}
-			}
-			g_array_append_val(array, info);
-		}
-		else if (status == CAMEL_NNTP_FAIL) {
-			/* nasty things are afoot */
-			g_warning ("failure doing HEAD\n");
-			break;
-		}
-	}
-	return array;
-}
-
-GArray *
-camel_nntp_get_headers (CamelStore *store,
-			CamelNNTPFolder *nntp_folder,
-			CamelException *ex)
-{
-	CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (store);
-	CamelFolder *folder = CAMEL_FOLDER (nntp_folder);
-	char *ret;
-	int first_message, nb_message, last_message;
-	int status;
-
-	status = camel_nntp_command (nntp_store, &ret,
-				     "GROUP %s", folder->name);
-
-	sscanf (ret, "%d %d %d", &nb_message, &first_message, &last_message);
-	g_free (ret);
-
-	if (status != CAMEL_NNTP_OK)
-		return NULL;
-
-	if (TRUE /* nntp_store->extensions & CAMEL_NNTP_EXT_XOVER */) {
-		return get_XOVER_headers (nntp_store, folder, first_message, last_message);
-	}
-	else {
-		return get_HEAD_headers (nntp_store, folder, first_message, last_message);
-	}
-}
-
diff --git a/camel/providers/nntp/camel-nntp-utils.h b/camel/providers/nntp/camel-nntp-utils.h
deleted file mode 100644
index 52617fa0ce..0000000000
--- a/camel/providers/nntp/camel-nntp-utils.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-utils.h : Utilities for the NNTP provider */
-
-/* 
- *
- * Author : Chris Toshok  
- *
- * Copyright (C) 1999 Helix Code .
- *
- * 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_NNTP_UTILS_H
-#define CAMEL_NNTP_UTILS_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-GArray *camel_nntp_get_headers (CamelStore *store, CamelNNTPFolder *nntp_folder, CamelException *ex);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_NNTP_UTILS_H */
diff --git a/camel/providers/pop3/.cvsignore b/camel/providers/pop3/.cvsignore
deleted file mode 100644
index 7d926a5545..0000000000
--- a/camel/providers/pop3/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
diff --git a/camel/providers/pop3/Makefile.am b/camel/providers/pop3/Makefile.am
deleted file mode 100644
index c587983ffc..0000000000
--- a/camel/providers/pop3/Makefile.am
+++ /dev/null
@@ -1,28 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = 
-
-libcamelpop3includedir = $(includedir)/camel
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelpop3.la
-
-INCLUDES = -I.. -I$(srcdir)/.. -I$(includedir)	\
-	-I$(top_srcdir)/intl			\
-	$(GTK_INCLUDEDIR) -I$(top_srcdir)/camel	\
-	-I$(srcdir)/../mbox
-
-libcamelpop3_la_SOURCES = 			\
-	camel-pop3-folder.c			\
-	camel-pop3-provider.c			\
-	camel-pop3-store.c
-
-libcamelpop3include_HEADERS =			\
-	camel-pop3-folder.h			\
-	camel-pop3-store.h
-
-
-libcamelpop3_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir) 
-
-EXTRA_DIST = 
diff --git a/camel/providers/pop3/camel-pop3-folder.c b/camel/providers/pop3/camel-pop3-folder.c
deleted file mode 100644
index cf0d1763d3..0000000000
--- a/camel/providers/pop3/camel-pop3-folder.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-folder.c : class for a pop3 folder */
-
-/* 
- * Authors:
- *   Dan Winship 
- *
- * 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
- */
-
-#include "camel-pop3-folder.h"
-#include "camel-pop3-store.h"
-#include "camel-exception.h"
-#include "camel-stream-mem.h"
-#include "camel-mime-message.h"
-
-#include 
-
-#define CF_CLASS(o) (CAMEL_FOLDER_CLASS (GTK_OBJECT (o)->klass))
-static CamelFolderClass *parent_class;
-
-static void pop3_open (CamelFolder *folder, CamelFolderOpenMode mode,
-		       CamelException *ex);
-static void pop3_close (CamelFolder *folder, gboolean expunge,
-			CamelException *ex);
-static gboolean delete_messages (CamelFolder *folder, CamelException *ex);
-static gboolean has_message_number_capability (CamelFolder *folder);
-static CamelMimeMessage *get_message_by_number (CamelFolder *folder, 
-						gint number, 
-						CamelException *ex);
-static void delete_message_by_number (CamelFolder *folder, gint number, 
-				      CamelException *ex);
-static gint get_message_count (CamelFolder *folder, CamelException *ex);
-
-
-static void
-camel_pop3_folder_class_init (CamelPop3FolderClass *camel_pop3_folder_class)
-{
-	CamelFolderClass *camel_folder_class =
-		CAMEL_FOLDER_CLASS (camel_pop3_folder_class);
-
-	parent_class = gtk_type_class (camel_folder_get_type ());
-
-	/* virtual method overload */
-	camel_folder_class->open = pop3_open;
-	camel_folder_class->close = pop3_close;
-	camel_folder_class->delete_messages = delete_messages;
-	camel_folder_class->has_message_number_capability =
-		has_message_number_capability;
-	camel_folder_class->get_message_by_number =
-		get_message_by_number;
-	camel_folder_class->delete_message_by_number =
-		delete_message_by_number;
-	camel_folder_class->get_message_count =
-		get_message_count;
-}
-
-
-
-static void
-camel_pop3_folder_init (gpointer object, gpointer klass)
-{
-	CamelFolder *folder = CAMEL_FOLDER (object);
-
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = FALSE;
-
-	/* Hi. I'm CamelPop3Folder. I'm useless. */
-	folder->has_summary_capability = FALSE;
-	folder->has_uid_capability = FALSE;
-	folder->has_search_capability = FALSE;
-}
-
-
-
-
-GtkType
-camel_pop3_folder_get_type (void)
-{
-	static GtkType camel_pop3_folder_type = 0;
-
-	if (!camel_pop3_folder_type) {
-		GtkTypeInfo camel_pop3_folder_info =	
-		{
-			"CamelPop3Folder",
-			sizeof (CamelPop3Folder),
-			sizeof (CamelPop3FolderClass),
-			(GtkClassInitFunc) camel_pop3_folder_class_init,
-			(GtkObjectInitFunc) camel_pop3_folder_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_pop3_folder_type = gtk_type_unique (CAMEL_FOLDER_TYPE, &camel_pop3_folder_info);
-	}
-
-	return camel_pop3_folder_type;
-}
-
-
-CamelFolder *camel_pop3_folder_new (CamelStore *parent, CamelException *ex)
-{
-	CamelFolder *folder =
-		CAMEL_FOLDER (gtk_object_new (camel_pop3_folder_get_type (),
-					      NULL));
-
-	CF_CLASS (folder)->init (folder, parent, NULL, "inbox", '/', ex);
-	return folder;
-}
-
-static void
-pop3_open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex)
-{
-	camel_pop3_store_open (CAMEL_POP3_STORE (folder->parent_store), ex);
-	if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_NONE)
-		parent_class->open (folder, mode, ex);
-}
-
-static void
-pop3_close (CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
-	camel_pop3_store_close (CAMEL_POP3_STORE (folder->parent_store),
-				expunge, ex);
-	if (camel_exception_get_id (ex) == CAMEL_EXCEPTION_NONE)
-		parent_class->close (folder, expunge, ex);
-}
-				
-static gboolean
-delete_messages (CamelFolder *folder, CamelException *ex)
-{
-	int msgs;
-	gboolean status;
-
-	msgs = get_message_count (folder, ex);
-	if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
-		return FALSE;
-
-	status = TRUE;
-	for (; msgs > 0; msgs--) {
-		status = status &&
-			(camel_pop3_command (CAMEL_POP3_STORE (folder->parent_store),
-					     NULL, "DELE %d", msgs) ==
-			 CAMEL_POP3_OK);
-	}
-
-	if (!status) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Unable to delete all messages.");
-	}
-
-	return status;
-}
-
-
-static gboolean
-has_message_number_capability (CamelFolder *folder)
-{
-	return TRUE;
-}
-
-static CamelMimeMessage *
-get_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
-{
-	int status;
-	char *result, *body;
-	CamelStream *msgstream;
-	CamelMimeMessage *msg;
-
-	status = camel_pop3_command (CAMEL_POP3_STORE (folder->parent_store),
-				     &result, "RETR %d", number);
-	if (status != CAMEL_POP3_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not retrieve message from POP "
-				      "server %s: %s.", service->url->host,
-				      status == CAMEL_POP3_ERR ? result :
-				      "Unknown error");
-		g_free (result);
-		return NULL;
-	}
-	g_free (result);
-
-	body = camel_pop3_command_get_additional_data (CAMEL_POP3_STORE (folder->parent_store));
-	if (!body) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not retrieve message from POP "
-				      "server %s.", service->url->host);
-		return NULL;
-	}
-
-	msgstream = camel_stream_mem_new_with_buffer (body, strlen (body),
-						      CAMEL_STREAM_MEM_READ);
-	msg = camel_mime_message_new ();
-	camel_data_wrapper_set_input_stream (CAMEL_DATA_WRAPPER (msg),
-					     msgstream);
-
-	return msg;
-}
-
-static void
-delete_message_by_number (CamelFolder *folder, gint number, CamelException *ex)
-{
-	int status;
-	char *resp;
-
-	status = camel_pop3_command (CAMEL_POP3_STORE (folder->parent_store),
-				     &resp, "DELE %d", number);
-	if (status != CAMEL_POP3_OK) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				      "Unable to delete message %d%s%s",
-				      number, resp ? ": " : "",
-				      resp ? resp : "");
-	}
-	g_free (resp);
-}
-
-static gint
-get_message_count (CamelFolder *folder, CamelException *ex)
-{
-	int status, count;
-	char *result;
-
-	status = camel_pop3_command (CAMEL_POP3_STORE (folder->parent_store),
-				     &result, "STAT");
-	if (status != CAMEL_POP3_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not get message count from POP "
-				      "server %s: %s.", service->url->host,
-				      status == CAMEL_POP3_ERR ? result :
-				      "Unknown error");
-		g_free (result);
-		return -1;
-	}
-
-	count = atoi (result);
-	g_free (result);
-	return count;
-}
diff --git a/camel/providers/pop3/camel-pop3-folder.h b/camel/providers/pop3/camel-pop3-folder.h
deleted file mode 100644
index 4199e30ead..0000000000
--- a/camel/providers/pop3/camel-pop3-folder.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-folder.h : Class for a POP3 folder */
-
-/* 
- * Author:
- *   Dan Winship 
- *
- * 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_POP3_FOLDER_H
-#define CAMEL_POP3_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-folder.h"
-
-#define CAMEL_POP3_FOLDER_TYPE     (camel_pop3_folder_get_type ())
-#define CAMEL_POP3_FOLDER(obj)     (GTK_CHECK_CAST((obj), CAMEL_POP3_FOLDER_TYPE, CamelPop3Folder))
-#define CAMEL_POP3_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_POP3_FOLDER_TYPE, CamelPop3FolderClass))
-#define IS_CAMEL_POP3_FOLDER(o)    (GTK_CHECK_TYPE((o), CAMEL_POP3_FOLDER_TYPE))
-
-
-typedef struct {
-	CamelFolder parent_object;
-
-} CamelPop3Folder;
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-	
-} CamelPop3FolderClass;
-
-
-/* public methods */
-CamelFolder *camel_pop3_folder_new (CamelStore *parent, CamelException *ex);
-
-/* Standard Gtk function */
-GtkType camel_pop3_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_POP3_FOLDER_H */
diff --git a/camel/providers/pop3/camel-pop3-provider.c b/camel/providers/pop3/camel-pop3-provider.c
deleted file mode 100644
index 8d9d4ac94d..0000000000
--- a/camel/providers/pop3/camel-pop3-provider.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-provider.c: pop3 provider registration code */
-
-/* 
- * Authors :
- *   Dan Winship 
- *
- * 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
- */
-
-#include "config.h"
-#include "camel-pop3-store.h"
-#include "camel-provider.h"
-
-
-static CamelProvider _pop3_provider = {
-	(GtkType) 0,
-	PROVIDER_STORE,
-	PROVIDER_REMOTE,
-
-	"pop",
-	"POP",
-
-	"For connecting to POP servers. The POP protocol can also be used "
-	"to retrieve mail from certain web mail providers and proprietary "
-	"email systems.",
-
-	(GModule *) NULL
-};
-
-CamelProvider *
-camel_provider_module_init (void);
-
-
-CamelProvider *
-camel_provider_module_init (void)
-{
-	_pop3_provider.object_type = camel_pop3_store_get_type();
-	return &_pop3_provider;
-}
-
-
-
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
deleted file mode 100644
index 3713c086a6..0000000000
--- a/camel/providers/pop3/camel-pop3-store.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-store.c : class for a pop3 store */
-
-/* 
- * Authors:
- *   Dan Winship 
- *
- * 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
- */
-
-#include "config.h"
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-pop3-store.h"
-#include "camel-pop3-folder.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-fs.h"
-#include "camel-session.h"
-#include "camel-exception.h"
-#include "camel-url.h"
-#include "md5-utils.h"
-
-/* Specified in RFC 1939 */
-#define POP3_PORT 110
-
-static CamelServiceClass *service_class = NULL;
-
-static void finalize (GtkObject *object);
-
-static gboolean pop3_connect (CamelService *service, CamelException *ex);
-static gboolean pop3_disconnect (CamelService *service, CamelException *ex);
-static GList *query_auth_types (CamelService *service);
-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 char *get_root_folder_name (CamelStore *store, CamelException *ex);
-
-
-static void
-camel_pop3_store_class_init (CamelPop3StoreClass *camel_pop3_store_class)
-{
-	GtkObjectClass *object_class =
-		GTK_OBJECT_CLASS (camel_pop3_store_class);
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_pop3_store_class);
-	CamelStoreClass *camel_store_class =
-		CAMEL_STORE_CLASS (camel_pop3_store_class);
-	
-	service_class = gtk_type_class (camel_service_get_type ());
-
-	/* virtual method overload */
-	object_class->finalize = finalize;
-
-	camel_service_class->connect = pop3_connect;
-	camel_service_class->disconnect = pop3_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;
-	camel_store_class->get_root_folder_name = get_root_folder_name;
-}
-
-
-
-static void
-camel_pop3_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_pop3_store_get_type (void)
-{
-	static GtkType camel_pop3_store_type = 0;
-
-	if (!camel_pop3_store_type) {
-		GtkTypeInfo camel_pop3_store_info =	
-		{
-			"CamelPop3Store",
-			sizeof (CamelPop3Store),
-			sizeof (CamelPop3StoreClass),
-			(GtkClassInitFunc) camel_pop3_store_class_init,
-			(GtkObjectInitFunc) camel_pop3_store_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_pop3_store_type = gtk_type_unique (CAMEL_STORE_TYPE, &camel_pop3_store_info);
-	}
-
-	return camel_pop3_store_type;
-}
-
-static void
-finalize (GtkObject *object)
-{
-	CamelException ex;
-
-	camel_exception_init (&ex);
-	pop3_disconnect (CAMEL_SERVICE (object), &ex);
-	camel_exception_clear (&ex);
-}
-
-
-static CamelServiceAuthType password_authtype = {
-	"Password/APOP",
-
-	"This option will connect to the POP server using the APOP "
-	"protocol if possible, or a plaintext password if not.",
-
-	"",
-	TRUE
-};
-
-static GList
-*query_auth_types (CamelService *service)
-{
-	GList *ret;
-
-	ret = g_list_append (NULL, &password_authtype);
-	return ret;
-}
-
-static void
-free_auth_types (CamelService *service, GList *authtypes)
-{
-	g_list_free (authtypes);
-}
-
-/**
- * camel_pop3_store_open: Connect to the server if we are currently
- * disconnected.
- * @store: the store
- * @ex: a CamelException
- *
- * The POP protocol does not allow deleted messages to be expunged
- * except by closing the connection. Thus, camel_pop3_folder_{open,close}
- * sometimes need to connect to or disconnect from the server. This
- * routine reconnects to the server if we have disconnected.
- *
- **/
-void
-camel_pop3_store_open (CamelPop3Store *store, CamelException *ex)
-{
-	CamelService *service = CAMEL_SERVICE (store);
-
-	if (!camel_service_is_connected (service))
-		pop3_connect (service, ex);
-}
-
-/**
- * camel_pop3_store_close: Close the connection to the server and
- * possibly expunge deleted messages.
- * @store: the store
- * @expunge: whether or not to expunge deleted messages
- * @ex: a CamelException
- *
- * See camel_pop3_store_open for an explanation of why this is needed.
- *
- **/
-void
-camel_pop3_store_close (CamelPop3Store *store, gboolean expunge,
-			CamelException *ex)
-{
-	if (expunge)
-		camel_pop3_command (store, NULL, "QUIT");
-	else
-		camel_pop3_command (store, NULL, "RSET");
-	pop3_disconnect (CAMEL_SERVICE (store), ex);
-}
-
-static gboolean
-pop3_connect (CamelService *service, CamelException *ex)
-{
-	struct hostent *h;
-	struct sockaddr_in sin;
-	int fd, status;
-	char *buf, *apoptime, *apopend;
-	CamelPop3Store *store = CAMEL_POP3_STORE (service);
-
-	h = camel_service_gethost (service, ex);
-	if (!h)
-		return FALSE;
-
-	if (!service->url->passwd) {
-		char *prompt = g_strdup_printf ("Please enter the POP3 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;
-	sin.sin_port = htons (service->url->port ? service->url->port : POP3_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);
-
-	/* Read the greeting, note APOP timestamp, if any. */
-	buf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
-	if (!buf) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				     "Could not read greeting from POP "
-				     "server.");
-		return FALSE;
-		camel_stream_close (store->ostream);
-		camel_stream_close (store->istream);
-	}
-	apoptime = strchr (buf, '<');
-	apopend = apoptime ? strchr (apoptime, '>') : NULL;
-	if (apoptime && apopend)
-		apoptime = g_strndup (apoptime, apopend - apoptime + 1);
-	else
-		apoptime = NULL;
-	g_free (buf);
-
-	/* Authenticate via APOP if we can, USER/PASS if we can't. */
-	status = CAMEL_POP3_FAIL;
-	if (apoptime) {
-		char *secret, md5asc[32], *d;
-		unsigned char md5sum[16], *s;
-
-		secret = g_strdup_printf ("%s%s", apoptime,
-					  service->url->passwd);
-		md5_get_digest (secret, strlen (secret), md5sum);
-		g_free (apoptime);
-		g_free (secret);
-
-		for (s = md5sum, d = md5asc; d < md5asc + 32; s++, d += 2)
-			sprintf (d, "%.2x", *s);
-
-		status = camel_pop3_command (store, NULL, "APOP %s %s",
-					     service->url->user, md5asc);
-	}
-
-	if (status != CAMEL_POP3_OK ) {
-		char *msg;
-
-		status = camel_pop3_command (store, &msg, "USER %s",
-					     service->url->user);
-		if (status != CAMEL_POP3_OK) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-					      "Unable to connect to POP "
-					      "server. Error sending username:"
-					      " %s", msg ? msg : "(Unknown)");
-			g_free (msg);
-			camel_stream_close (store->ostream);
-			camel_stream_close (store->istream);
-			return FALSE;
-		}
-
-		status = camel_pop3_command(store, &msg, "PASS %s",
-					    service->url->passwd);
-		if (status != CAMEL_POP3_OK) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-					      "Unable to authenticate to POP "
-					      "server. Error sending password:"
-					      " %s", msg ? msg : "(Unknown)");
-			g_free (msg);
-			camel_stream_close (store->ostream);
-			camel_stream_close (store->istream);
-			return FALSE;
-		}
-	}
-
-	service_class->connect (service, ex);
-	return TRUE;
-}
-
-static gboolean
-pop3_disconnect (CamelService *service, CamelException *ex)
-{
-	CamelPop3Store *store = CAMEL_POP3_STORE (service);
-
-	if (!service->connected)
-		return TRUE;
-
-	if (!service_class->disconnect (service, ex))
-		return FALSE;
-
-	/* Closing the buffered write stream will close the
-	 * unbuffered read stream wrapped inside it as well.
-	 */
-	camel_stream_close (store->ostream);
-	gtk_object_unref (GTK_OBJECT (store->ostream));
-	store->ostream = NULL;
-	store->istream = NULL;
-	return TRUE;
-}
-
-static CamelFolder *
-get_folder (CamelStore *store, const char *folder_name, CamelException *ex)
-{
-	return camel_pop3_folder_new (store, ex);
-}
-
-static char *
-get_folder_name (CamelStore *store, const char *folder_name,
-		 CamelException *ex)
-{
-	if (!strcasecmp (folder_name, "inbox"))
-		return g_strdup ("inbox");
-	else {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-				      "No such folder `%s'.", folder_name);
-		return NULL;
-	}
-}
-
-static char *
-get_root_folder_name (CamelStore *store, CamelException *ex)
-{
-	return g_strdup ("inbox");
-}
-
-
-/**
- * camel_pop3_command: Send a command to a POP3 server.
- * @store: the POP3 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 POP3 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_pop3_command
- * will set it to point to an buffer containing the rest of the
- * response from the POP3 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_POP3_OK (command executed successfully),
- * CAMEL_POP3_ERR (command encounted an error), or CAMEL_POP3_FAIL
- * (a protocol-level error occurred, and Camel is uncertain of the
- * result of the command.)
- **/
-int
-camel_pop3_command (CamelPop3Store *store, char **ret, char *fmt, ...)
-{
-	char *cmdbuf, *respbuf;
-	va_list ap;
-	int status;
-
-	va_start (ap, fmt);
-	cmdbuf = g_strdup_vprintf (fmt, ap);
-	va_end (ap);
-
-	/* Send the command */
-	camel_stream_write (store->ostream, cmdbuf, strlen (cmdbuf));
-	g_free (cmdbuf);
-	camel_stream_write (store->ostream, "\r\n", 2);
-
-	/* Read the response */
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
-	if (!strncmp (respbuf, "+OK", 3))
-		status = CAMEL_POP3_OK;
-	else if (!strncmp (respbuf, "-ERR", 4))
-		status = CAMEL_POP3_ERR;
-	else
-		status = CAMEL_POP3_FAIL;
-
-	if (ret) {
-		if (status != CAMEL_POP3_FAIL) {
-			*ret = strchr (respbuf, ' ');
-			if (*ret)
-				*ret = g_strdup (*ret + 1);
-		} else
-			*ret = NULL;
-	}
-	g_free (respbuf);
-
-	return status;
-}
-
-/**
- * camel_pop3_command_get_additional_data: get "additional data" from
- * a POP3 command.
- * @store: the POP3 store
- *
- * This command gets the additional data returned by "multi-line" POP
- * commands, such as LIST, RETR, TOP, and UIDL. This command _must_
- * be called after a successful (CAMEL_POP3_OK) call to
- * camel_pop3_command for a command that has a multi-line response.
- * The returned data is un-byte-stuffed, and has lines termined by
- * newlines rather than CR/LF pairs.
- *
- * Return value: the data, which the caller must free.
- **/
-char *
-camel_pop3_command_get_additional_data (CamelPop3Store *store)
-{
-	CamelStreamBuffer *stream = CAMEL_STREAM_BUFFER (store->istream);
-	GPtrArray *data;
-	char *buf;
-	int i, status = CAMEL_POP3_OK;
-
-	data = g_ptr_array_new ();
-	while (1) {
-		buf = camel_stream_buffer_read_line (stream);
-		if (!buf) {
-			status = CAMEL_POP3_FAIL;
-			break;
-		}
-
-		if (!strcmp (buf, "."))
-			break;
-		if (*buf == '.')
-			memmove (buf, buf + 1, strlen (buf));
-		g_ptr_array_add (data, buf);
-	}
-
-	if (status == CAMEL_POP3_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);
-		buf = g_strjoinv ("\n", (char **)data->pdata);
-	} else
-		buf = NULL;
-
-	for (i = 0; i < data->len - 2; i++)
-		g_free (data->pdata[i]);
-	g_ptr_array_free (data, TRUE);
-
-	return buf;
-}
diff --git a/camel/providers/pop3/camel-pop3-store.h b/camel/providers/pop3/camel-pop3-store.h
deleted file mode 100644
index a4373a884a..0000000000
--- a/camel/providers/pop3/camel-pop3-store.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-store.h : class for an pop3 store */
-
-/* 
- * Authors:
- *   Dan Winship 
- *
- * 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_POP3_STORE_H
-#define CAMEL_POP3_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-types.h"
-#include "camel-store.h"
-
-#define CAMEL_POP3_STORE_TYPE     (camel_pop3_store_get_type ())
-#define CAMEL_POP3_STORE(obj)     (GTK_CHECK_CAST((obj), CAMEL_POP3_STORE_TYPE, CamelPop3Store))
-#define CAMEL_POP3_STORE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_POP3_STORE_TYPE, CamelPop3StoreClass))
-#define IS_CAMEL_POP3_STORE(o)    (GTK_CHECK_TYPE((o), CAMEL_POP3_STORE_TYPE))
-
-
-typedef struct {
-	CamelStore parent_object;
-
-	CamelStream *istream, *ostream;
-	
-} CamelPop3Store;
-
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-} CamelPop3StoreClass;
-
-
-/* public methods */
-void camel_pop3_store_open (CamelPop3Store *store, CamelException *ex);
-void camel_pop3_store_close (CamelPop3Store *store, gboolean expunge,
-			     CamelException *ex);
-
-/* support functions */
-enum { CAMEL_POP3_OK, CAMEL_POP3_ERR, CAMEL_POP3_FAIL };
-int camel_pop3_command (CamelPop3Store *store, char **ret, char *fmt, ...);
-char *camel_pop3_command_get_additional_data (CamelPop3Store *store);
-
-/* Standard Gtk function */
-GtkType camel_pop3_store_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_POP3_STORE_H */
-
-
diff --git a/camel/providers/sendmail/.cvsignore b/camel/providers/sendmail/.cvsignore
deleted file mode 100644
index cacc3c5d5f..0000000000
--- a/camel/providers/sendmail/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-Makefile
-Makefile.in
-.deps
-.libs
-*.lo
-*.la
-*.o
diff --git a/camel/providers/sendmail/Makefile.am b/camel/providers/sendmail/Makefile.am
deleted file mode 100644
index aada24aee7..0000000000
--- a/camel/providers/sendmail/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = 
-
-libcamelsendmailincludedir = $(includedir)/camel
-
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelsendmail.la
-
-INCLUDES = -I.. -I$(srcdir)/.. -I$(includedir)	\
-	-I$(top_srcdir)/intl			\
-	$(GTK_INCLUDEDIR) -I$(top_srcdir)/camel
-
-libcamelsendmail_la_SOURCES = 			\
-	camel-sendmail-provider.c		\
-	camel-sendmail-transport.c
-
-libcamelsendmailinclude_HEADERS =		\
-	camel-sendmail-transport.h
-
-libcamelsendmail_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir) 
-
-EXTRA_DIST = 
diff --git a/camel/providers/sendmail/camel-sendmail-provider.c b/camel/providers/sendmail/camel-sendmail-provider.c
deleted file mode 100644
index 5d3809b6f0..0000000000
--- a/camel/providers/sendmail/camel-sendmail-provider.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-sendmail-provider.c: sendmail provider registration code */
-
-/* 
- * Authors :
- *   Dan Winship 
- *
- * 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
- */
-
-#include "config.h"
-#include "camel-provider.h"
-#include "camel-sendmail-transport.h"
-
-static CamelProvider _sendmail_provider = {
-	(GtkType) 0,
-	PROVIDER_TRANSPORT,
-	0,
-
-	"sendmail",
-	"Sendmail",
-
-	"For delivering mail by passing it to the \"sendmail\" program "
-	"on the local system.",
-
-	(GModule *) NULL
-};
-
-CamelProvider *
-camel_provider_module_init (void);
-
-
-CamelProvider *
-camel_provider_module_init (void)
-{
-	_sendmail_provider.object_type = camel_sendmail_transport_get_type();
-	return &_sendmail_provider;
-}
-
-
-
diff --git a/camel/providers/sendmail/camel-sendmail-transport.c b/camel/providers/sendmail/camel-sendmail-transport.c
deleted file mode 100644
index 15ba1f04e1..0000000000
--- a/camel/providers/sendmail/camel-sendmail-transport.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-sendmail-transport.c: Sendmail-based transport class. */
-
-/* 
- *
- * Author : 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://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 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-sendmail-transport.h"
-#include "camel-mime-message.h"
-#include "camel-data-wrapper.h"
-#include "camel-stream-fs.h"
-#include "camel-exception.h"
-
-static gboolean _can_send (CamelTransport *transport, CamelMedium *message);
-static gboolean _send (CamelTransport *transport, CamelMedium *message,
-		       CamelException *ex);
-static gboolean _send_to (CamelTransport *transport, CamelMedium *message,
-			  GList *recipients, CamelException *ex);
-
-
-static void
-camel_sendmail_transport_class_init (CamelSendmailTransportClass *camel_sendmail_transport_class)
-{
-	CamelTransportClass *camel_transport_class =
-		CAMEL_TRANSPORT_CLASS (camel_sendmail_transport_class);
-
-	/* virtual method overload */
-	camel_transport_class->can_send = _can_send;
-	camel_transport_class->send = _send;
-	camel_transport_class->send_to = _send_to;
-}
-
-GtkType
-camel_sendmail_transport_get_type (void)
-{
-	static GtkType camel_sendmail_transport_type = 0;
-	
-	if (!camel_sendmail_transport_type)	{
-		GtkTypeInfo camel_sendmail_transport_info =	
-		{
-			"CamelSendmailTransport",
-			sizeof (CamelSendmailTransport),
-			sizeof (CamelSendmailTransportClass),
-			(GtkClassInitFunc) camel_sendmail_transport_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_sendmail_transport_type = gtk_type_unique (CAMEL_TRANSPORT_TYPE, &camel_sendmail_transport_info);
-	}
-	
-	return camel_sendmail_transport_type;
-}
-
-
-static gboolean
-_can_send (CamelTransport *transport, CamelMedium *message)
-{
-	return CAMEL_IS_MIME_MESSAGE (message);
-}
-
-
-static gboolean
-_send_internal (CamelMedium *message, char **argv, CamelException *ex)
-{
-	int fd[2], nullfd, wstat;
-	sigset_t mask, omask;
-	CamelStream *out;
-	pid_t pid;
-
-	g_assert (CAMEL_IS_MIME_MESSAGE (message));
-
-	if (pipe (fd) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not create pipe to sendmail: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-
-	/* Block SIGCHLD so the calling application doesn't notice
-	 * sendmail exiting before we do.
-	 */
-	sigemptyset (&mask);
-	sigaddset (&mask, SIGCHLD);
-	sigprocmask (SIG_BLOCK, &mask, &omask);
-
-	pid = fork ();
-	switch (pid) {
-	case -1:
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not fork sendmail: "
-				      "%s: mail not sent", g_strerror (errno));
-		sigprocmask (SIG_SETMASK, &omask, NULL);
-		return FALSE;
-
-	case 0:
-		/* Child process */
-		nullfd = open ("/dev/null", O_RDWR);
-		dup2 (fd[0], STDIN_FILENO);
-		dup2 (nullfd, STDOUT_FILENO);
-		dup2 (nullfd, STDERR_FILENO);
-		close (nullfd);
-		close (fd[1]);
-
-		execv (SENDMAIL_PATH, argv);
-		_exit (255);
-	}
-
-	/* Parent process. Write the message out. */
-	close (fd[0]);
-	out = camel_stream_fs_new_with_fd (fd[1]);
-	camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), out);
-	camel_stream_close (out);
-
-	/* Wait for sendmail to exit. */
-	while (waitpid (pid, &wstat, 0) == -1 && errno == EINTR)
-		;
-	sigprocmask (SIG_SETMASK, &omask, NULL);
-
-	if (!WIFEXITED (wstat)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "sendmail exited with signal %s: "
-				      "mail not sent.",
-				      g_strsignal (WTERMSIG (wstat)));
-		return FALSE;
-	} else if (WEXITSTATUS (wstat) != 0) {
-		if (WEXITSTATUS (wstat) == 255) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
-					     "Could not execute "
-					     SENDMAIL_PATH ": mail not sent.");
-		} else {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "sendmail exited with status "
-					      "%d: mail not sent.",
-					      WEXITSTATUS (wstat));
-		}
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static gboolean
-_send_to (CamelTransport *transport, CamelMedium *message,
-	  GList *recipients, CamelException *ex)
-{
-	GList *r;
-	char **argv;
-	int i, len;
-	gboolean status;
-
-	len = g_list_length (recipients);
-	argv = g_malloc ((len + 4) * sizeof (char *));
-	argv[0] = "sendmail";
-	argv[1] = "-i";
-	argv[2] = "--";
-
-	for (i = 1, r = recipients; i <= len; i++, r = r->next)
-		argv[i + 2] = r->data;
-	argv[i + 2] = NULL;
-
-	status = _send_internal (message, argv, ex);
-	g_free (argv);
-	return status;
-}
-
-static gboolean
-_send (CamelTransport *transport, CamelMedium *message,
-       CamelException *ex)
-{
-	char *argv[4] = { "sendmail", "-t", "-i", NULL };
-
-	return _send_internal (message, argv, ex);
-}
diff --git a/camel/providers/sendmail/camel-sendmail-transport.h b/camel/providers/sendmail/camel-sendmail-transport.h
deleted file mode 100644
index 3f3714584a..0000000000
--- a/camel/providers/sendmail/camel-sendmail-transport.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-sendmail-transport.h: Sendmail-based transport class */
-
-/* 
- *
- * Author : 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://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_SENDMAIL_TRANSPORT_H
-#define CAMEL_SENDMAIL_TRANSPORT_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-transport.h"
-
-#define CAMEL_SENDMAIL_TRANSPORT_TYPE     (camel_sendmail_transport_get_type ())
-#define CAMEL_SENDMAIL_TRANSPORT(obj)     (GTK_CHECK_CAST((obj), CAMEL_SENDMAIL_TRANSPORT_TYPE, CamelSendmailTransport))
-#define CAMEL_SENDMAIL_TRANSPORT_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_SENDMAIL_TRANSPORT_TYPE, CamelSendmailTransportClass))
-#define CAMEL_IS_SENDMAIL_TRANSPORT(o)    (GTK_CHECK_TYPE((o), CAMEL_SENDMAIL_TRANSPORT_TYPE))
-
-
-typedef struct {
-	CamelTransport parent_object;
-
-} CamelSendmailTransport;
-
-
-typedef struct {
-	CamelTransportClass parent_class;
-
-} CamelSendmailTransportClass;
-
-
-/* Standard Gtk function */
-GtkType camel_sendmail_transport_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SENDMAIL_TRANSPORT_H */
diff --git a/camel/providers/smtp/.cvsignore b/camel/providers/smtp/.cvsignore
deleted file mode 100644
index 09980ae6ba..0000000000
--- a/camel/providers/smtp/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
-*.la
diff --git a/camel/providers/smtp/Makefile.am b/camel/providers/smtp/Makefile.am
deleted file mode 100644
index 25ee71b3c0..0000000000
--- a/camel/providers/smtp/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = 
-
-libcamelsmtpincludedir = $(includedir)/camel
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelsmtp.la
-
-INCLUDES = -I.. -I$(srcdir)/.. -I$(includedir)	\
-	-I$(top_srcdir)/intl			\
-	$(GTK_INCLUDEDIR) -I$(top_srcdir)/camel
-
-libcamelsmtp_la_SOURCES = 			\
-	camel-smtp-provider.c			\
-	camel-smtp-transport.c
-
-libcamelsmtpinclude_HEADERS =			\
-	camel-smtp-transport.h
-
-
-libcamelsmtp_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir) 
-
-EXTRA_DIST = 
diff --git a/camel/providers/smtp/camel-smtp-provider.c b/camel/providers/smtp/camel-smtp-provider.c
deleted file mode 100644
index 03ef1a9eb3..0000000000
--- a/camel/providers/smtp/camel-smtp-provider.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-smtp-provider.c: smtp provider registration code */
-
-/* 
- * Authors :
- *   Jeffrey Stedfast 
- *
- * 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
- */
-
-#include "config.h"
-#include "camel-smtp-transport.h"
-#include "camel-provider.h"
-
-
-static CamelProvider _smtp_provider = {
-	(GtkType) 0,
-	PROVIDER_TRANSPORT,
-	0,
-
-	"smtp",
-	"SMTP",
-
-	"For delivering mail by connecting to a remote mailhub using SMTP.",
-
-	(GModule *) NULL
-};
-
-CamelProvider *
-camel_provider_module_init (void);
-
-
-CamelProvider *
-camel_provider_module_init (void)
-{
-	_smtp_provider.object_type = camel_smtp_transport_get_type();
-	return &_smtp_provider;
-}
-
-
-
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
deleted file mode 100644
index cc57e29b1d..0000000000
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ /dev/null
@@ -1,662 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-smtp-transport.c : class for a smtp transport */
-
-/* 
- * Authors:
- *   Jeffrey Stedfast 
- *
- * 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
- */
-
-#include "config.h"
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-smtp-transport.h"
-#include "camel-mime-message.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-fs.h"
-#include "camel-session.h"
-#include "camel-exception.h"
-#include "md5-utils.h"
-
-/* Specified in RFC ???? */
-#define SMTP_PORT 25
-
-static CamelServiceClass *service_class = NULL;
-
-/* camel smtp transport class prototypes */
-static gboolean _can_send (CamelTransport *transport, CamelMedium *message);
-static gboolean _send (CamelTransport *transport, CamelMedium *message, CamelException *ex);
-static gboolean _send_to (CamelTransport *transport, CamelMedium *message, GList *recipients, CamelException *ex);
-
-/* support prototypes */
-static gboolean smtp_connect (CamelService *service, CamelException *ex);
-static gboolean smtp_disconnect (CamelService *service, CamelException *ex);
-static GList *esmtp_get_authtypes(gchar *buffer);
-static GList *query_auth_types (CamelService *service);
-static void free_auth_types (CamelService *service, GList *authtypes);
-static gchar *smtp_get_email_addr_from_text (gchar *text);
-static gboolean smtp_helo (CamelSmtpTransport *transport, CamelException *ex);
-static gboolean smtp_mail (CamelSmtpTransport *transport, gchar *sender, CamelException *ex);
-static gboolean smtp_rcpt (CamelSmtpTransport *transport, gchar *recipient, CamelException *ex);
-static gboolean smtp_data (CamelSmtpTransport *transport, CamelMedium *message, CamelException *ex);
-static gboolean smtp_rset (CamelSmtpTransport *transport, CamelException *ex);
-static gboolean smtp_quit (CamelSmtpTransport *transport, CamelException *ex);
-
-
-static gboolean smtp_is_esmtp = FALSE;
-
-static void
-camel_smtp_transport_class_init (CamelSmtpTransportClass *camel_smtp_transport_class)
-{
-	CamelTransportClass *camel_transport_class =
-		CAMEL_TRANSPORT_CLASS (camel_smtp_transport_class);
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_smtp_transport_class);
-
-	/* virtual method overload */
-	camel_service_class->connect = smtp_connect;
-	camel_service_class->disconnect = smtp_disconnect;
-	camel_service_class->query_auth_types = query_auth_types;
-	camel_service_class->free_auth_types = free_auth_types;
-
-	camel_transport_class->can_send = _can_send;
-	camel_transport_class->send = _send;
-	camel_transport_class->send_to = _send_to;
-}
-
-GtkType
-camel_smtp_transport_get_type (void)
-{
-	static GtkType camel_smtp_transport_type = 0;
-
-	if (!camel_smtp_transport_type)	{
-		GtkTypeInfo camel_smtp_transport_info =	
-		{
-			"CamelSmtpTransport",
-			sizeof (CamelSmtpTransport),
-			sizeof (CamelSmtpTransportClass),
-			(GtkClassInitFunc) camel_smtp_transport_class_init,
-			(GtkObjectInitFunc) NULL,
-			/* reserved_1 */ NULL,
-			/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		camel_smtp_transport_type = gtk_type_unique (CAMEL_TRANSPORT_TYPE, &camel_smtp_transport_info);
-	}
-
-	return camel_smtp_transport_type;
-}
-
-static gboolean
-smtp_connect (CamelService *service, CamelException *ex)
-{
-	struct hostent *h;
-	struct sockaddr_in sin;
-	gint fd;
-	gchar *pass = NULL, *respbuf = NULL;
-	CamelSmtpTransport *transport = CAMEL_SMTP_TRANSPORT (service);
-
-	if (!service_class->connect (service, ex))
-		return FALSE;
-
-	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 : SMTP_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);
-		g_free (pass);
-		return FALSE;
-	}
-
-	transport->ostream = camel_stream_fs_new_with_fd (fd);
-	transport->istream = camel_stream_buffer_new (transport->ostream, 
-						      CAMEL_STREAM_BUFFER_READ);
-
-	/* Read the greeting, note whether the server is ESMTP and if it requests AUTH. */
-	do {
-		/* Check for "220" */
-		g_free(respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-		if ( !respbuf || strncmp(respbuf, "220", 3) ) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Welcome response error: "
-					      "%s: possibly non-fatal",
-					      g_strerror (errno));
-			return FALSE;
-		}
-		if (strstr(respbuf, "ESMTP"))
-			smtp_is_esmtp = TRUE;
-		if (smtp_is_esmtp && strstr(respbuf, "AUTH")) {
-			/* parse for supported AUTH types */
-			esmtp_get_authtypes(respbuf);
-		}
-	} while ( *(respbuf+3) == '-' ); /* if we got "220-" then loop again */
-	g_free(respbuf);
-
-	/* send HELO */
-	smtp_helo(transport, ex);
-
-	return TRUE;
-}
-
-static gboolean
-smtp_disconnect (CamelService *service, CamelException *ex)
-{
-	CamelSmtpTransport *transport = CAMEL_SMTP_TRANSPORT (service);
-
-	if (!service->connected)
-		return TRUE;
-
-	/* send the QUIT command to the SMTP server */
-	smtp_quit(transport, ex);
-
-	if (!service_class->disconnect (service, ex))
-		return FALSE;
-
-	/* Closing the buffered write stream will close the
-	 * unbuffered read stream wrapped inside it as well.
-	 */
-	camel_stream_close (transport->ostream);
-	gtk_object_unref (GTK_OBJECT (transport->ostream));
-	transport->ostream = NULL;
-	transport->istream = NULL;
-
-	return TRUE;
-}
-
-static GList
-*esmtp_get_authtypes(gchar *buffer)
-{
-	GList *ret = NULL;
-
-	return ret;
-}
-
-static CamelServiceAuthType password_authtype = {
-	"Password/CRAM-MD5",
-
-	"This option will connect to the ESMTP server using the CRAM-MD5 "
-	"authentication if possible.",
-
-	"",
-	TRUE
-};
-
-static GList
-*query_auth_types (CamelService *service)
-{
-	GList *ret;
-
-	ret = g_list_append (NULL, &password_authtype);
-	return ret;
-}
-
-static void
-free_auth_types (CamelService *service, GList *authtypes)
-{
-	g_list_free (authtypes);
-}
-
-static gboolean
-_can_send (CamelTransport *transport, CamelMedium *message)
-{
-	return CAMEL_IS_MIME_MESSAGE (message);
-}
-
-static gboolean
-_send_to (CamelTransport *transport, CamelMedium *message,
-	  GList *recipients, CamelException *ex)
-{
-	GList *r;
-	gchar *recipient, *s, *sender;
-	guint i, len;
-	CamelService *service = CAMEL_SERVICE (transport);
-	CamelSmtpTransport *smtp_transport = CAMEL_SMTP_TRANSPORT(transport);
-
-	if (!camel_service_is_connected (service))
-		smtp_connect (service, ex);
-
-	s = camel_mime_message_get_from (CAMEL_MIME_MESSAGE(message));
-	if (!s) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Cannot send message: "
-				      "sender address not defined.");
-		return FALSE;
-	}
-
-	sender = smtp_get_email_addr_from_text(s);
-	smtp_mail(smtp_transport, sender, ex);
-	g_free(sender);
-	g_free(s);
-
-	if (!(len = g_list_length(recipients))) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Cannot send message: "
-				      "no recipients defined.");
-		return FALSE;
-	}
-	for (i = 0, r = recipients; i < len; i++, r = r->next) {
-		recipient = smtp_get_email_addr_from_text(r->data);
-		if (!smtp_rcpt(smtp_transport, recipient, ex)) {
-			g_free(recipient);
-			return FALSE;
-		}
-		g_free(recipient);
-	}
-
-	if (!smtp_data(smtp_transport, message, ex))
-		return FALSE;
-
-	/* reset the service for our next transfer session */
-	smtp_rset(smtp_transport, ex);
-
-	return TRUE;
-}
-
-static gboolean
-_send (CamelTransport *transport, CamelMedium *message,
-       CamelException *ex)
-{
-	GList *to, *cc, *bcc, *recipients;
-
-	to = camel_mime_message_get_recipients ((CamelMimeMessage *) message, "To");
-	cc = camel_mime_message_get_recipients ((CamelMimeMessage *) message, "Cc");
-	bcc = camel_mime_message_get_recipients ((CamelMimeMessage *) message, "Bcc");
-	recipients = g_list_concat(to, cc);
-	recipients = g_list_concat(recipients, bcc);
-	g_list_free(to);
-	g_list_free(cc);
-	g_list_free(bcc);
-
-	return _send_to (transport, message, recipients, ex);
-}
-
-static gchar
-*smtp_get_email_addr_from_text (gchar *text)
-{
-	/* get the actual email address from the string passed and place it in addr
-	 * we can assume the address will be in one of the following forms:
-	 * 1) The Name 
-	 * 2) 
-	 * 3) person@host.com
-	 * 4) person@host.com (The Name)
-	 */
-
-	gchar *tmp, *addr = NULL;
-	gchar *addr_strt;         /* points to start of addr */
-	gchar *addr_end;          /* points to end of addr */
-	gchar *ptr1;
-   
-   
-	/* check the incoming args */
-	if (!text || !*text)
-		return NULL;
-
-	/* scan the string for an open brace */
-	for (addr_strt = text; *addr_strt; addr_strt++) 
-		if (*addr_strt == '<')
-			break;
-
-	if (*addr_strt) {
-		/* we found an open brace, let's look for it's counterpart */
-		for (addr_end = addr_strt; *addr_end; addr_end++)
-			if (*addr_end == '>') 
-				break;
-
-		/* if we didn't find it, or braces are empty... */
-		if (!(*addr_end) || (addr_strt == addr_end - 1))
-			return NULL;
-			
-		/* addr_strt points to '<' and addr_end points to '>'.
-		 * Now let's adjust 'em slightly to point to the beginning
-		 * and ending of the email addy
-		 */
-		addr_strt++;
-		addr_end--;
-	} else {
-		/* no open brace...assume type 3 or 4? */
-		addr_strt = text;
-			
-		/* find the end of the email addr/string */
-		for (addr_end = addr_strt; *addr_end || *addr_end == ' '; addr_end++);
- 
-		addr_end--;       /* points to NULL, move it back one char */
-	}
-
-	/* now addr_strt & addr_end point to the beginning & ending of the email addy */
-
-	/* copy the string into addr */
-	addr = g_strndup(addr_strt, (gint)(addr_end - addr_strt));
-
-	for (ptr1 = addr_strt; ptr1 <= addr_end; ptr1++)    /* look for an '@' sign */
-		if (*ptr1 == '@')
-			break;
-
-	if (*ptr1 != '@') {
-		/* here we found out the name doesn't have an '@' part
-		 * let's figure out what machine we're on & stick it on the end
-		 */
-		gchar hostname[MAXHOSTNAMELEN];
-
-		if (gethostname(hostname, MAXHOSTNAMELEN)) {
-			g_free(addr);
-			return NULL;
-		}
-		tmp = addr;
-		addr = g_strconcat(tmp, "@", hostname, NULL);
-		g_free(tmp);
-	}
-
-	return addr;
-}
-
-static gboolean
-smtp_helo (CamelSmtpTransport *transport, CamelException *ex)
-{
-	/* say hello to the server */
-	gchar *cmdbuf, *respbuf = NULL;
-	gchar localhost[MAXHOSTNAMELEN + MAXHOSTNAMELEN + 2];
-	gchar domainname[MAXHOSTNAMELEN];
-
-	/* get the localhost name */
-	memset(localhost, 0, sizeof(localhost));
-	gethostname (localhost, MAXHOSTNAMELEN);
-	memset(domainname, 0, sizeof(domainname));
-	getdomainname(domainname, MAXHOSTNAMELEN);
-	if (*domainname && strcmp(domainname, "(none)")) {
-		strcat(localhost, ".");
-		strcat(localhost, domainname);
-	}
-
-	/* hiya server! how are you today? */
-	if (smtp_is_esmtp)
-		cmdbuf = g_strdup_printf ("EHLO %s\r\n", localhost);
-	else
-		cmdbuf = g_strdup_printf ("HELO %s\r\n", localhost);
-	if ( camel_stream_write (transport->ostream, cmdbuf, strlen(cmdbuf)) == -1) {
-		g_free(cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "HELO request timed out: "
-				      "%s: non-fatal",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free(cmdbuf);
-
-	do {
-		/* Check for "250" */
-		g_free(respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-		if ( !respbuf || strncmp(respbuf, "250", 3) ) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "HELO response error: "
-					      "%s: non-fatal",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while ( *(respbuf+3) == '-' ); /* if we got "250-" then loop again */
-	g_free(respbuf);
-
-	return TRUE;
-}
-
-static gboolean
-smtp_mail (CamelSmtpTransport *transport, gchar *sender, CamelException *ex)
-{
-	/* we gotta tell the smtp server who we are. (our email addy) */
-	gchar *cmdbuf, *respbuf = NULL;
-
-	/* enclose address in <>'s since some SMTP daemons *require* that */
-	cmdbuf = g_strdup_printf("MAIL FROM: <%s>\r\n", sender);
-	if ( camel_stream_write (transport->ostream, cmdbuf, strlen(cmdbuf)) == -1) {
-		g_free(cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "MAIL FROM request timed out: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free(cmdbuf);
-
-	do {
-		/* Check for "250 Sender OK..." */
-		g_free(respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-		if ( !respbuf || strncmp(respbuf, "250", 3) ) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "MAIL FROM response error: "
-					      "%s: mail not sent",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while ( *(respbuf+3) == '-' ); /* if we got "250-" then loop again */
-	g_free(respbuf);
-
-	return TRUE;
-}
-
-static gboolean
-smtp_rcpt (CamelSmtpTransport *transport, gchar *recipient, CamelException *ex)
-{
-	/* we gotta tell the smtp server who we are going to be sending
-	 * our email to */
-	gchar *cmdbuf, *respbuf = NULL;
-
-	/* enclose address in <>'s since some SMTP daemons *require* that */
-	cmdbuf = g_strdup_printf("RCPT TO: <%s>\r\n", recipient);
-	if ( camel_stream_write (transport->ostream, cmdbuf, strlen(cmdbuf)) == -1) {
-		g_free(cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "RCPT TO request timed out: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free(cmdbuf);
-
-	do {
-		/* Check for "250 Sender OK..." */
-		g_free(respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-		if ( !respbuf || strncmp(respbuf, "250", 3) ) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "RCPT TO response error: "
-					      "%s: mail not sent",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while ( *(respbuf+3) == '-' ); /* if we got "250-" then loop again */
-	g_free(respbuf);
-  
-	return TRUE;
-}
-
-static gboolean
-smtp_data (CamelSmtpTransport *transport, CamelMedium *message, CamelException *ex)
-{
-	/* now we can actually send what's important :p */
-	gchar *cmdbuf, *respbuf = NULL;
-	gchar *buf, *chunk;
-	CamelStream *message_stream; 
-
-	/* enclose address in <>'s since some SMTP daemons *require* that */
-	cmdbuf = g_strdup("DATA\r\n");
-	if ( camel_stream_write (transport->ostream, cmdbuf, strlen(cmdbuf)) == -1) {
-		g_free(cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "DATA request timed out: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free(cmdbuf);
-
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-	if ( !respbuf || strncmp(respbuf, "354", 3) ) {
-		/* we should have gotten instructions on how to use the DATA command:
-		 * 354 Enter mail, end with "." on a line by itself
-		 */
-		g_free(respbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "DATA response error: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	
-	/* now to send the actual data */
-	message_stream = camel_stream_buffer_new(CAMEL_DATA_WRAPPER (message)->output_stream, CAMEL_STREAM_BUFFER_READ);
-	while (1) {
-		/* send 1 line at a time */
-		buf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER(message_stream));
-		if (!buf)
-			break;
-
-		/* check for a lone '.' */
-		if (!strcmp(buf, "."))
-			chunk = g_strconcat(buf, ".\r\n", NULL);
-		else
-			chunk = g_strconcat(buf, "\r\n", NULL);
-
-		/* write the line */
-		if ( camel_stream_write (transport->ostream, chunk, strlen(chunk)) == -1) {
-			g_free(chunk);
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "DATA send timed out: message body: "
-					      "%s: mail not sent",
-					      g_strerror (errno));
-			return FALSE;
-		}
-		g_free(chunk);
-	}
-
-	/* terminate the message body */
-	if ( camel_stream_write (transport->ostream, "\r\n.\r\n", 5) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "DATA send timed out: message termination: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-
-	do {
-		/* Check for "250 Sender OK..." */
-		g_free(respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-		if ( !respbuf || strncmp(respbuf, "250", 3) ) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "DATA response error: message termination: "
-					      "%s: mail not sent",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while ( *(respbuf+3) == '-' ); /* if we got "250-" then loop again */
-	g_free(respbuf);
-
-	return TRUE;
-}
-
-static gboolean
-smtp_rset (CamelSmtpTransport *transport, CamelException *ex)
-{
-	/* we are going to reset the smtp server (just to be nice) */
-	gchar *cmdbuf, *respbuf = NULL;
-
-	cmdbuf = g_strdup ("RSET\r\n");
-	if ( camel_stream_write (transport->ostream, cmdbuf, strlen(cmdbuf)) == -1) {
-		g_free(cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "RSET request timed out: "
-				      "%s",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free(cmdbuf);
-
-	do {
-		/* Check for "250" */
-		g_free(respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-		if ( !respbuf || strncmp(respbuf, "250", 3) ) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "RSET response error: "
-					      "%s",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while ( *(respbuf+3) == '-' ); /* if we got "250-" then loop again */
-	g_free(respbuf);
-
-	return TRUE;
-}
-
-static gboolean
-smtp_quit (CamelSmtpTransport *transport, CamelException *ex)
-{
-	/* we are going to reset the smtp server (just to be nice) */
-	gchar *cmdbuf, *respbuf = NULL;
-
-	cmdbuf = g_strdup ("QUIT\r\n");
-	if ( camel_stream_write (transport->ostream, cmdbuf, strlen(cmdbuf)) == -1) {
-		g_free(cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "QUIT request timed out: "
-				      "%s: non-fatal",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free(cmdbuf);
-
-	do {
-		/* Check for "221" */
-		g_free(respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-		if ( !respbuf || strncmp(respbuf, "221", 3) ) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "QUIT response error: "
-					      "%s: non-fatal",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while ( *(respbuf+3) == '-' ); /* if we got "221-" then loop again */
-	g_free(respbuf);
-
-	return TRUE;
-}
diff --git a/camel/providers/smtp/camel-smtp-transport.h b/camel/providers/smtp/camel-smtp-transport.h
deleted file mode 100644
index 54343e59d8..0000000000
--- a/camel/providers/smtp/camel-smtp-transport.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-smtp-transport.h : class for an smtp transfer */
-
-/* 
- * Authors:
- *   Jeffrey Stedfast 
- *
- * 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_SMTP_TRANSPORT_H
-#define CAMEL_SMTP_TRANSPORT_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-transport.h"
-
-#define CAMEL_SMTP_TRANSPORT_TYPE     (camel_smtp_transport_get_type ())
-#define CAMEL_SMTP_TRANSPORT(obj)     (GTK_CHECK_CAST((obj), CAMEL_SMTP_TRANSPORT_TYPE, CamelSmtpTransport))
-#define CAMEL_SMTP_TRANSPORT_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_SMTP_TRANSPORT_TYPE, CamelSmtpTransportClass))
-#define IS_CAMEL_SMTP_TRANSPORT(o)    (GTK_CHECK_TYPE((o), CAMEL_SMTP_TRANSPORT_TYPE))
-
-
-typedef struct {
-	CamelTransport parent_object;
-
-	CamelStream *istream, *ostream;
-	
-} CamelSmtpTransport;
-
-
-
-typedef struct {
-	CamelTransportClass parent_class;
-
-} CamelSmtpTransportClass;
-
-
-/* Standard Gtk function */
-GtkType camel_smtp_transport_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SMTP_TRANSPORT_H */
-
-
diff --git a/camel/string-utils.c b/camel/string-utils.c
deleted file mode 100644
index 039aafe2b8..0000000000
--- a/camel/string-utils.c
+++ /dev/null
@@ -1,292 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* string-util : utilities for gchar* strings  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 
-#include "string-utils.h"
-#include "string.h"
-
-
-
-gboolean
-string_equal_for_glist (gconstpointer v, gconstpointer v2)
-{
-  return (!strcmp ( ((const gchar *)v), ((const gchar*)v2))) == 0;
-}
-
-/**
- * string_dichotomy:
- * @sep : separator
- * @prefix: pointer to be field by the prefix object
- *   the prefix is not returned when the given pointer is NULL
- * @suffix: pointer to be field by the suffix object
- *   the suffix is not returned when the given pointer is NULL
- *
- * Return the strings before and/or after 
- * the last occurence of the specified separator
- *
- * This routine returns the string before and/or after
- * a character given as an argument. 
- * if the separator is the last character, prefix and/or
- * suffix is set to NULL and result is set to 'l'
- * if the separator is not in the list, prefix and/or
- * suffix is set to NULL and result is set to 'n'
- * When the operation succedeed, the return value is 'o'
- *
- * @Return Value : result of the operation ('o', 'l' or 'n')
- *
- **/
-gchar
-string_dichotomy (const gchar *string, gchar sep, gchar **prefix, gchar **suffix,
-		    StringDichotomyOption options)
-{
-	gint sep_pos, first, last, len;
-	
-	g_assert (string);
-	len = strlen (string);
-	if (!len) {
-		if (prefix)
-			*prefix=NULL;
-		if (suffix)
-			*suffix=NULL;
-		return 'n';
-	}
-	first = 0;
-	last = len-1;
-	
-	if ( (options & STRING_DICHOTOMY_STRIP_LEADING ) && (string[first] == sep) )
-	    do {first++;} while ( (firstfirst))
-			last--;
-	
-	if (first==last) {
-		if (prefix) *prefix=NULL;
-		if (suffix) *suffix=NULL;
-		return 'n';
-	}
-	
-	if (options & STRING_DICHOTOMY_RIGHT_DIR) {
-		sep_pos = last;
-		while ((sep_pos>=first) && (string[sep_pos]!=sep)) {
-			sep_pos--;
-		}
-	} else {
-		sep_pos = first;
-		while ((sep_pos<=last) && (string[sep_pos]!=sep)) {
-			sep_pos++;
-		}
-		
-	}
-	
-	if ( (sep_poslast) ) 
-		{
-			if (suffix) *suffix=NULL;
-			if (prefix) *prefix=NULL;
-			return 'n';
-		}
-	
-	/* if we have stripped trailing separators, we should */
-	/* never enter here */
-	if (sep_pos==last) 
-		{
-			if (suffix) *suffix=NULL;
-			if (prefix) *prefix=NULL;
-			return 'l';
-		}
-	/* if we have stripped leading separators, we should */
-	/* never enter here */
-	if (sep_pos==first)
-		{
-			if (suffix) *suffix=NULL;
-			if (prefix) *prefix=NULL;
-			return 'l';
-		}
-	if (prefix)
-		*prefix = g_strndup (string+first,sep_pos-first);
-	if (suffix)
-		*suffix = g_strndup (string+sep_pos+1, last-sep_pos);
-	 
-	return 'o';
-}
-
-
-
-
-
-
-/* utility func : frees a gchar element in a GList */
-static void 
-__string_list_free_string (gpointer data, gpointer user_data)
-{
-	gchar *string = (gchar *)data;
-	g_free (string);
-}
-
-
-void 
-string_list_free (GList *string_list)
-{
-	if (string_list == NULL) return; 
-
-	g_list_foreach (string_list, __string_list_free_string, NULL);
-	g_list_free (string_list);
-}
-
-
-
-
-
-
-GList *
-string_split (const gchar *string, char sep, const gchar *trim_chars, StringTrimOption trim_options)
-{
-	GList *result = NULL;
-	gint first, last, pos;
-	gchar *new_string;
-
-	g_assert (string);
-	
-	first = 0;
-	last = strlen(string) - 1;
-	
-	/* strip leading and trailing separators */
-	while ( (first<=last) && (string[first]==sep) )
-		first++;
-	while ( (first<=last) && (string[last]==sep) )
-		last--;
-
-	
-	while (first<=last)  {
-		pos = first;
-		/* find next separator */
-		while ((pos<=last) && (string[pos]!=sep)) pos++;
-		if (first != pos) {
-			new_string = g_strndup (string+first, pos-first);
-			/* could do trimming in line to speed up this code */
-			if (trim_chars) string_trim (new_string, trim_chars, trim_options);
-			result = g_list_append (result, new_string);
-		}	
-		first = pos + 1;
-	}
-
-	return result;
-}
-
-
-void 
-string_trim (gchar *string, const gchar *trim_chars, StringTrimOption options)
-{
-	gint first_ok;
-	gint last_ok;
-	guint length;
-
-	g_return_if_fail (string);
-	length = strlen (string);
-	if (length==0)
-		return;
-	
-	first_ok = 0;
-	last_ok = length - 1;
-
-	if (options & STRING_TRIM_STRIP_LEADING)
-		while  ( (first_ok <= last_ok) && (strchr (trim_chars, string[first_ok])!=NULL) )
-			first_ok++;
-	
-	if (options & STRING_TRIM_STRIP_TRAILING)
-		while  ( (first_ok <= last_ok) && (strchr (trim_chars, string[last_ok])!=NULL) )
-			last_ok--;
-	
-	if (first_ok > 0)
-		memmove (string, string+first_ok, last_ok - first_ok + 1);
-	string[last_ok - first_ok +1] = '\0';
-	
-}
-
-
-
-
-
-/**
- * remove_suffix: remove a suffix from a string
- * @s: the string to remove the suffix from. 
- * @suffix: the suffix to remove
- * @suffix_found : suffix found flag
- *
- * Remove a suffix from a string. If the 
- * string ends with the full suffix, a copy 
- * of the string without the suffix is returned and
- * @suffix_found is set to %TRUE. 
- * Otherwise, NULL is returned and
- * @suffix_found is set to %FALSE. 
- * 
- * Return value: an allocated copy of the string without the suffix or NULL if the suffix was not found.
- **/
-gchar *
-string_prefix (const gchar *s, const gchar *suffix, gboolean *suffix_found)
-{
-	guint s_len, suf_len;
-	guint suffix_pos;
-	char *result_string;
-
-	g_assert (s);
-	g_assert (suffix);
-	g_assert (suffix_found);
-
-	s_len = strlen (s);
-	suf_len = strlen (suffix);
-
-	/* if the string is shorter than the suffix, do nothing */
-	if (s_len < suf_len) {
-		*suffix_found = FALSE;
-		return NULL;
-	}
-	
-	/* theoretical position of the prefix */
-	suffix_pos = s_len - suf_len;
-
-	/* compare the right hand side of the string with the suffix */
-	if (!strncmp (s+suffix_pos, suffix, suf_len)) {
-
-		/* if the suffix matches, check that there are 
-		   characters before */
-		if (suffix_pos == 0) {
-			result_string = NULL;
-			*suffix_found = TRUE;
-		} else { 
-			result_string = g_strndup (s, suffix_pos);
-			*suffix_found = TRUE;
-		}
-
-	} else { 
-		result_string = NULL;
-		*suffix_found = FALSE;
-	}
-
-	return result_string;
-}
diff --git a/camel/string-utils.h b/camel/string-utils.h
deleted file mode 100644
index e63c332897..0000000000
--- a/camel/string-utils.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* string-util : utilities for normal gchar * strings  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://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 STRING_UTIL_H
-#define STRING_UTIL_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-
-
-typedef enum {
-	STRING_DICHOTOMY_NONE            =     0,
-	STRING_DICHOTOMY_RIGHT_DIR       =     1,
-	STRING_DICHOTOMY_STRIP_TRAILING  =     2,
-	STRING_DICHOTOMY_STRIP_LEADING   =     4
-	
-} StringDichotomyOption;
-
-
-typedef enum {
-	STRING_TRIM_NONE            =     0,
-	STRING_TRIM_STRIP_TRAILING  =     1,
-	STRING_TRIM_STRIP_LEADING   =     2
-} StringTrimOption;
-
-
-
-gboolean string_equal_for_glist (gconstpointer v, gconstpointer v2);
-
-gchar    string_dichotomy       (const gchar *string, gchar sep,
-				 gchar **prefix, gchar **suffix,
-				 StringDichotomyOption options);
-void     string_list_free       (GList *string_list);
-
-GList   *string_split           (const gchar *string, char sep,
-				 const gchar *trim_chars, StringTrimOption trim_options);
-void     string_trim            (gchar *string, const gchar *chars,
-				 StringTrimOption options);
-
-gchar   *string_prefix (const gchar *s, const gchar *suffix, gboolean *suffix_found);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* STRING_UTIL_H */
-- 
cgit v1.2.3