2001-03-04 Jeffrey Stedfast <fejj@ximian.com>
* camel-internet-address.c
(camel_internet_address_encode_address): Make sure there is a
space between the name and the address tokens.
svn path=/trunk/; revision=8551
2001-03-04 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-utils.c (rfc2047_decode_word): encoded string
segments need to be at least 8 chars (7 doesn't leave room for an
ecoding value. To be more realistic, even 8 chars isn't enough as
this assumes there is no charset nor any encoded text. If the
encoding value is not 'Q' or 'B', then return NULL. This fixes bug
#1689.
svn path=/trunk/; revision=8550
2001-03-03 Not Zed <NotZed@Ximian.com>
* camel-vee-folder.c (vee_folder_remove_folder): New function to
remove a folder from a vfolder.
(camel_vee_folder_remove_folder): New public function to remove a
folder from a vfolder.
svn path=/trunk/; revision=8532
2001-03-02 Jeffrey Stedfast <fejj@ximian.com>
* providers/imap/camel-imap-store.c (try_auth): Don't forget to
unref the SASL object.
* providers/smtp/camel-smtp-transport.c (query_auth_types):
Implemented.
(smtp_auth): Implemented.
(smtp_helo): Don't bother parsing the authtypes if we already have
them.
(smtp_connect): call smtp_auth() here if we found any authtypes.
(smtp_disconnect): Updated as I now use a hash table for the
supported authtypes rather than a linked list.
(esmtp_get_authtypes): modify to use a hash table instead of a
linked list and also use isspace() rather than == ' '.
svn path=/trunk/; revision=8525
* providers/sendmail/camel-sendmail-transport.c (sendmail_send_to,
sendmail_send): Use "-f" to set the envelope from address so
bounces go to the right place. Also, pass "-U" since the man page
says we're supposed to...
svn path=/trunk/; revision=8521
2001-03-01 Jeffrey Stedfast <fejj@ximian.com>
* camel-sasl.c: #include "camel-sasl-digest-md5.h"
(camel_sasl_authtype_list): add DIGEST-MD5 stuff here.
(camel_sasl_authtype): And here too.
(camel_sasl_new): And here...
* camel-sasl-digest-md5.[c,h]: new SASL class for DIGEST-MD5 (has
been tested and proven to work).
svn path=/trunk/; revision=8513
* providers/imap/camel-imap-store.c: Add an "authtypes" hash table
to CamelImapStore recording the supported authtypes.
(connect_to_server): Record supported authtypes in the authtypes
hash rather than the capabilities bitmask, since now the IMAP code
is no longer responsible for keeping track of which authtypes we
support.
(query_auth_types): Use camel_sasl_authtype_list to get the
SASL-supported authtypes.
(try_auth): New function to try a SASL auth mechanism. Sort of
formerly imap_try_kerberos_v4_auth.
(imap_connect): Get rid of the krb4-specific bits and genericize
them for any SASL authtype.
* providers/imap/Makefile.am: Remove camel-imap-auth.[ch] (moved
into camel-imap-store.c since it's now constant size) and the
KRB4_CFLAGS and KRB4_LDFLAGS references.
svn path=/trunk/; revision=8463
* camel-sasl.c (camel_sasl_challenge): Take a GByteArray as input
as well. Comment that you can pass %NULL for @token to get the
initial auth data for mechanisms that are client-initiated.
(camel_sasl_challenge_base64): Convenience function for protocols
that use base64-encoded SASL.
(camel_sasl_authenticated): Implement this... (it was prototyped
already)
(camel_sasl_new): Function to take a service name, a mechanism
name, and a CamelService, and return a CamelSasl for it.
(camel_sasl_authtype, camel_sasl_authtype_list): Functions to
return CamelServiceAuthType information about SASL mechanisms, to
allow providers to deal with them generically.
* camel-sasl-anonymous.c, camel-sasl-plain.c: Update/simplify for
CamelSasl changes. Both of these are single-round
(client-initiated) mechanisms, so they don't need to keep state.
(camel_sasl_plain_new): Removed; use camel_sasl_new instead.
(Can't get rid of camel_sasl_anonymous_new though...)
* camel-sasl-cram-md5.c: Update/simplify for CamelSasl changes.
(camel_sasl_cram_md5_new): Removed; use camel_sasl_new instead.
(cram_md5_challenge): Use md5_get_digest where possible, and
various other minor simplifications. CRAM-MD5 only has a single
round, so there's no need to keep track of state. This code is now
tested (against Cyrus IMAPd) and known to work.
* camel-sasl-kerberos4.h: Update/simplify for CamelSasl changes.
Make only a single #ifdef HAVE_KRB4. Remove stuff from priv that
isn't needed between rounds.
(camel_sasl_kerberos4_new): Removed; use camel_sasl_new instead
(krb4_challenge): Fix up the logic I broke in my previous "at
least make it compile" fixes, update to match other changes, and
remove IMAP-isms that shouldn't be in the generic code. This still
isn't tested, because we're stuck behind a NAT right now...
svn path=/trunk/; revision=8462
2001-03-01 Jeffrey Stedfast <fejj@ximian.com>
* camel-sasl-anonymous.c (anon_challenge): Don't base64 encode the
data, leave that up to the provider to do if it needs to. Also
save on some memory allocations and stuff.
* camel-sasl-cram-md5.c (cram_md5_challenge): Same here. Also get
rid of the need for the temp buf as we can just write it to the
GByteArray.
svn path=/trunk/; revision=8456
2001-03-01 Jeffrey Stedfast <fejj@ximian.com>
* camel-sasl-anonymous.c (anon_challenge): Don't base64 encode the
data, leave that up to the provider to do if it needs to. Also
save on some memory allocations and stuff.
* camel-sasl-cram-md5.c (cram_md5_challenge): Same here.
svn path=/trunk/; revision=8454
2001-03-02 Not Zed <NotZed@Ximian.com>
* camel-mime-utils.c (rfc2047_encode_word, rfc2047_decode_word):
Reconstify variables to match iconv.
* camel-search-private.c (camel_ustrstrcase): Change some
assertions back into valid returns.
svn path=/trunk/; revision=8452
* Makefile.am (libcamel_la_LIBADD, INCLUDES): camel depends on
krb4 now (where available), for camel-sasl-kerberos4.c
* camel-sasl-kerberos4.[ch]: Make this at least compile. Dunno if
it works yet.
svn path=/trunk/; revision=8451
2001-02-28 Jeffrey Stedfast <fejj@ximian.com>
* Makefile.am: Added camel-sasl-anonymous.[c,h] to the build.
* camel-sasl-anonymous.[c,h]: new SASL class for ANONYMOUS
* camel-sasl-plain.c (plain_challenge): Oops, have a state for
setting sasl->authenticated = TRUE;
* camel-sasl-cram-md5.c (cram_md5_challenge): Same here.
svn path=/trunk/; revision=8433
* camel-remote-store.c (remote_recv_line): If we get back 0 bytes
from camel_stream_buffer_gets, that means the socket got
disconnected, so set an exception. (Noticed because of a message
that crashes our IMAP server when you try to look at it. :)
svn path=/trunk/; revision=8429
2001-02-28 Jeffrey Stedfast <fejj@ximian.com>
* Makefile.am: Added camel-sasl*.[c,h] to the build.
* camel-sasl.[c,h]: new "abstract" SASL class
* camel-sasl-kerberos4.[c,h]: new SASL class for KERBEROS_V4
* camel-sasl-cram-md5.[c,h]: new SASL class for CRAM-MD5
* camel-sasl-plain.[c,h]: new SASL class for PLAIN
* providers/imap/camel-imap-auth.c: Removed the base64 functions.
* camel-mime-utils.c (base64_encode_simple): Moved here from
camel-imap-auth.c
(base64_decode_simple): Same.
svn path=/trunk/; revision=8428
* providers/imap/camel-imap-folder.c (imap_sync): Group messages
into sets with the same flags and use the IMAP message set
notation rather than doing a separate STORE FLAGS for each one.
This cuts the network traffic down to just a handful of commands
per sync rather than one per changed message. Removed the progress
notification stuff since it's no longer meaningful and should
hopefully be unnecessary.
(imap_copy_message_to): move the former sync_message function
into here, since it's no longer shared with imap_sync.
svn path=/trunk/; revision=8396
2001-02-26 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-utils.c: Made thread-safe and moved to above the test
code.
* camel-mime-message.c (camel_mime_message_init): Set the
message_id to NULL.
(camel_mime_message_finalize): Free the message_id.
(camel_mime_message_set_message_id): New function to set the
Message-Id.
(camel_mime_message_get_message_id): New function to get the
Message-Id.
(process_header): Decode the message-id.
svn path=/trunk/; revision=8393
2001-02-24 Jeffrey Stedfast <fejj@ximian.com>
* camel-store.c (construct): init the vTrash folder here instead
of in store_init.
(camel_store_class_init): init service_class->construct.
(camel_store_finalize): We only need to unref the vtrash folder.
(init_trash): don't create a vstore since we don't need it.
svn path=/trunk/; revision=8378
* camel-folder-summary.c (camel_message_info_new_from_header):
Doh, cut and paste problem, use mlist not cc.
* camel-folder.c (move_message_to):
(copy_message_to): If the source folder doesn't support a
summary, dont try and get the message info from it.
svn path=/trunk/; revision=8361
2001-02-23 Not Zed <NotZed@Ximian.com>
* camel-filter-search.c (check_header): Implement a pseudo-header
"x-camel-mlist" which just looks up in the message info for a
match.
* camel-folder-search.c (check_header): Add pseudo-header
"x-camel-mlist" which can be used to match on mailing list.
svn path=/trunk/; revision=8355
2001-02-23 Not Zed <NotZed@Ximian.com>
* providers/imap/camel-imap-folder.c (imap_sync): Add some
internal progress reporting.
(imap_rescan): Do some progress reporting.
* camel-mime-part.c (init_header_name_table): Add the message-id
to the formatted table, so we dont try and wrap it, and break it.
svn path=/trunk/; revision=8350
2001-02-22 Jeffrey Stedfast <fejj@ximian.com>
* camel-folder.h: Remove the 'FIXME: remove because this isn't
required...' comment for copy_message_to since we now need and
cherish its existance in the filter-driver code ;-)
* camel-filter-driver.c (camel_filter_driver_filter_message): Now
takes a UID and CamelFolder arguments (which can be NULL) to allow
for possible optimizations when copying messages between folders
on the same store.
(camel_filter_driver_filter_mbox): Updated (passes NULL for both
since this case can't be optimized anyway).
(camel_filter_driver_filter_folder): Updated to pass in the uid
and folder of the message.
svn path=/trunk/; revision=8346
* providers/imap/camel-imap-summary.h (CAMEL_IMAP_SERVER_FLAGS):
#define this as the set of all IMAP system flags
* providers/imap/camel-imap-folder.c (sync_message): after syncing
flags, set server_flags to (flags & CAMEL_IMAP_SERVER_FLAGS)
rather than just "flags", since any other flags won't have been
synced. Prevents the CAMEL_MESSAGE_ATTACHMENTS flag from getting
lost.
svn path=/trunk/; revision=8344
2001-02-22 Not Zed <NotZed@Ximian.com>
* providers/vee/*: Removed all files.
* camel-private.h: Move camel-vee-private.h stuff into here.
* camel-session.c: Move the vee_provider here, and initialise it
always as part of a session. The vfolder provider is always
available.
* providers/Makefile.am: Remove "vee" from the build list, now
built as part of the main library.
* Makefile.am (libcamelinclude_HEADERS):
(libcamel_la_SOURCES): Added camel-vee-store.[ch],
camel-vee-folder.[ch].
svn path=/trunk/; revision=8340
2001-02-22 Not Zed <NotZed@Ximian.com>
* providers/vee/camel-vee-folder.c (vee_folder_build): Removed,
not used.
(camel_vee_folder_new): Removed call to build_folder.
(vee_get_message): Dont try and free the mi if we didn't get it.
* camel-folder.c (camel_folder_change_info_new): Added a hash
table of what we have in the lists, plus moved private things into
private pointer.
(camel_folder_change_info_add_source): Fixed up private accesses.
(camel_folder_change_info_add_uid): Changed to use a hashtable to
see if we already have the uid, etc.
(camel_folder_change_info_remove_uid): Similar.
(change_info_remove): Likewise.
(camel_folder_change_info_clear): Fixes for privatisations.
(camel_folder_change_info_free): "
svn path=/trunk/; revision=8339
2001-02-20 Not Zed <NotZed@Ximian.com>
* camel-mime-utils.c (mail_list_magic): Take the ^Header: part out
of the expression, since we look that up ourselves.
(header_raw_check_mailing_list): When getting the match, get match
1, not match 0, we dont want the full string match.
* camel-folder-summary.c (CAMEL_FOLDER_SUMMARY_VERSION): Bumped
for summary change.
(message_info_new): Extract the mlist info from the headers.
(message_info_load): Load mlist from summary.
(message_info_save): Save mlist to summary.
(message_info_free): Save the mlist entry.
(camel_message_info_new_from_header): Extract mailing list header.
(camel_message_info_dup_to): Copy the mlist entry.
(camel_message_info_free): Free mlist.
(message_info_dump): Dump the mlist.
* camel-folder-summary.h: Add an mlist (mailing list) string to
the summary.
svn path=/trunk/; revision=8295
2001-02-19 Not Zed <NotZed@Ximian.com>
* providers/vee/camel-vee-folder.c (camel_vee_folder_new): Added
flags argument.
(message_changed): Add support for the auto-update flag, in which
case we auto-match the content as it changes.
(camel_vee_folder_init): Remoive "DYNAMIC" optionality
(camel_vee_folder_finalise): "
(vee_expunge): As we expunge folders, re-sync their content by
rerunning the query.
* providers/vee/camel-vee-store.c (vee_get_folder): Pass flags to
folder new.
2001-02-18 Not Zed <NotZed@Ximian.com>
* providers/vee/Makefile.am (noinst_HEADERS): Added
camel-vee-private.h.
* providers/vee/camel-vee-private.h: New file to add locking stuff
for vee folders.
* providers/vee/camel-vee-folder.c (camel_vee_folder_new): Add
locking around unmatched setup.
(camel_vee_folder_init): Setup lock.
(camel_vee_folder_finalise): Free locks.
(folder_changed): Add locking.
(unmatched_finalise): "
(message_changed): "
(vee_folder_build): "
2001-02-17 Not Zed <NotZed@Ximian.com>
* providers/vee/camel-vee-folder.c (vee_folder_add): Check uid
doesn't exist before adding it.
2001-02-16 Not Zed <NotZed@Ximian.com>
* providers/vee/camel-vee-folder.c (camel_vee_folder_new): Create
a new virtual virtual folder UNMATCHED, to store all messages that
dont match other vfolders.
(unmatched_folder_changed): When a vfolder issues a changed event,
use its info to update the unmatched folder info.
(unmatched_finalise): When a vfolder is finalised, remove any uids
it has as if we had a removed event for it.
svn path=/trunk/; revision=8276
2001-02-16 Jeffrey Stedfast <fejj@ximian.com>
* camel-filter-driver.c (camel_filter_driver_finalise): Thaw the
defaultfolder.
(camel_filter_driver_set_default_folder): Thaw the defaultfolder
we're about to replace, and freeze the new defaultfolder.
svn path=/trunk/; revision=8259
2001-02-15 Jeffrey Stedfast <fejj@ximian.com>
* providers/vee/camel-vee-folder.c (camel_vee_folder_new): Emit
the folder_created signal here.
* providers/local/camel-local-folder.c
(camel_local_folder_construct): Emit the folder_created signal.
* providers/local/camel-local-store.c (delete_folder): On error,
free the 'name' string so we don't leak. Also emit the
folder_deleted signal.
* providers/imap/camel-imap-store.c (subscribe_folder): Emit the
folder_created signal.
(unsubscribe_folder): Emit the folder_deleted signal.
* camel-store.c (camel_store_class_init): Added folder_created and
folder_deleted signal defs.
svn path=/trunk/; revision=8246
* camel-folder-thread.c (container_parent_child): Deal with
out-of-order References headers so they don't cause messages to
disappear in threaded view.
svn path=/trunk/; revision=8245
* providers/imap/camel-imap-folder.c (fetch_medium): IMAP4
(pre-rev1) doesn't allow BODY.PEEK[], so use RFC822.PEEK instead
in that case.
svn path=/trunk/; revision=8244
2001-02-14 Christopher James Lahey <clahey@ximian.com>
* camel-mime-filter-charset.c (complete, filter),
camel-mime-utils.c (rfc2047_decode_word, rfc2047_encode_word):
Changed this code to match the glibc iconv signature.
svn path=/trunk/; revision=8238
* camel-store.c (camel_store_create_folder): New method to create
a folder when you don't know its full name.
* providers/imap/camel-imap-store.c (create_folder): Implement.
svn path=/trunk/; revision=8231
2001-02-12 Not Zed <NotZed@Ximian.com>
* camel-mime-part.c (init_header_name_table): Add address headers
to list that we dont fold when writing. The are properly
formatted as we build them.
(write_to_stream): DOH, lookup the header name in the formatted
hash table, not the value, that would never have worked.
* camel-internet-address.c
(camel_internet_address_encode_address): Changed to take a
parameter saying how much we've printed so far. We now fold the
header as we format it. We dont fold addresses, even if they are
too long, we simply put them on another line by themselves: this
should make the result more parsable by mailers that can't handle
split up addresses (which are legal).
(internet_encode): Fix for changes to above.
svn path=/trunk/; revision=8198
* camel-store.c: Rewrite a bunch. Replace the existing folder
cache stuff with much simpler code that still handles all the
existing cases. Now the folder hash table is always created by the
base class, using hash and compare functions provided by the class
implementation. (If they are set to NULL, CamelStore won't cache
folders.) lookup_folder, cache_folder, and uncache_folder are no
longer class methods, and get_name is gone completely.
(camel_store_get_inbox): Renamed from
camel_store_get_default_folder, since that wasn't being used, and
this is what we actually need.
(camel_store_get_root_folder): Removed, since it's not needed for
anything given get_folder_info.
* camel-remote-store.c:
* providers/local/camel-local-store.c:
* providers/local/camel-mbox-store.c:
* providers/local/camel-mh-store.c:
* providers/local/camel-maildir-store.c:
* providers/nntp/camel-nntp-store.c:
* providers/pop3/camel-pop3-store.c:
* providers/vee/camel-vee-store.c: Minor updates for CamelStore
changes
* providers/imap/camel-imap-store.c (camel_imap_store_class_init):
Update for CamelStore changes.
(hash_folder_name, compare_folder_name): treat INBOX
case-insensitively, otherwise use g_str_hash and g_str_equal.
* camel-service.c (camel_service_construct): Remove
camel_service_new and create camel_service_construct (as a class
method) in its place.
* camel-session.c (camel_session_get_service): Use
camel_object_new and camel_service_construct to replace
camel_service_new.
* providers/local/camel-local-store.c (construct): Append a '/' to
the URL path if it doesn't end with one
svn path=/trunk/; revision=8145
2001-01-31 Jeffrey Stedfast <fejj@helixcode.com>
* camel-tcp-stream-ssl.c: Oops, include the camel-tcp-stream-ssl
header instead of the raw one.
svn path=/trunk/; revision=8103
2001-02-07 Not Zed <NotZed@Ximian.com>
* camel-operation.c (camel_operation_start): Changed to push the
operation into a status stack.
(camel_operation_progress): Changed to only accept % complete.
(camel_operation_reset): Free status stack as well.
* providers/pop3/camel-pop3-folder.c (pop3_get_message): Get the
octect count from the return line, and pass it to
get_additional_data().
(pop3_refresh_info): Added status stuff.
* providers/pop3/camel-pop3-store.c
(camel_pop3_command_get_additional_data): Added a total bytes
expected argument for progress reporting & fixed callers.
(camel_pop3_command_get_additional_data): Added progress
reporting.
* providers/local/camel-mbox-summary.c (mbox_summary_sync_full):
(mbox_summary_sync_quick):
(summary_rebuild): Added progress reporting stuff.
svn path=/trunk/; revision=8095
2001-02-07 Jeffrey Stedfast <fejj@ximian.com>
* camel-search-private.c (CAMEL_SEARCH_COMPARE): Macro for making
comparisons easy.
(camel_ustrcasecmp): Use CAMEL_SEARCH_COMPARE and check for
end-of-string before the utf-8 error check.
(camel_ustrncasecmp): Same.
(camel_search_header_match): Strip leading spaces before doing
anything else. Also use vlen and mlen so as to not need to do 500
strlen()'s.
(camel_ustrcasecmp): Don't get_utf8() for the 2 strings in the
comparison part of the loop because of short-circuit expression
evaluation. (blame JPR if this is the wrong term!)
(camel_ustrncasecmp): Same.
svn path=/trunk/; revision=8057
2001-02-07 Jeffrey Stedfast <fejj@ximian.com>
* camel-search-private.c (CAMEL_SEARCH_COMPARE): Macro for making
comparisons easy.
(camel_ustrcasecmp): Use CAMEL_SEARCH_COMPARE and check for
end-of-string before the utf-8 error check.
(camel_ustrncasecmp): Same.
(camel_search_header_match): Strip leading spaces before doing
anything else. Also use vlen and mlen so as to not need to do 500
strlen()'s.
svn path=/trunk/; revision=8055
2001-02-06 Christopher James Lahey <clahey@ximian.com>
* camel-mime-filter-charset.c (complete, filter),
camel-mime-utils.c (rfc2047_decode_word, rfc2047_encode_word):
Made these pass char ** as the second parameter to iconv.
svn path=/trunk/; revision=8022