2001-07-13 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-utils.c (rfc2047_decode_word): Added a hack to
convert charsets in the format iso8859-1 to iso-8859-1 because it
seems to be more iconv friendly. It has been reported that on some
systems, iconv doesn't know about iso8859-1 while it *does* know
about iso-8859-1. See bug #4530.
svn path=/trunk/; revision=11094
2001-07-13 Peter Williams <peterw@ximian.com>
* Makefile.am (install-exec-local): Let people install as non-root,
but give them a bigass warning so they're not allowed to complain when
it doesn't work right.
* camel-remote-store.c (sync_remote_folder): New function:
hash table callback.
(remote_disconnect): If cleanly disconnecting, sync our folders. Fixes
deadlocks on exit (folders syncing after store disconnects) and also makes
sense.
svn path=/trunk/; revision=11090
2001-07-13 Jeffrey Stedfast <fejj@ximian.com>
* camel-uid-cache.c (camel_uid_cache_new): We now use a structure
as the bucket data rather than just a cache level so set the save
state to TRUE.
(maybe_write_uid): We only save the uid if the cache levels are
the same *and* if the save state is TRUE.
(free_uid): Free the state value.
(camel_uid_cache_get_new_uids): New uids that get added to the
cache start with a save state of FALSE.
(camel_uid_cache_save_uid): Set the save state of the uid to
TRUE. What should we do if the uid isn't already in the cache?
Currently I make it add the uid, but maybe it shouldn't?
* providers/imap/camel-imap-folder.c (imap_filter_timeout): Update
to reflect CamelFilterDriver API changes.
* camel-filter-driver.c (camel_filter_driver_filter_folder): Take
a cache argument so we can tell the cache whether or not the uid
should be saved (meaning we have successfully filtered it).
svn path=/trunk/; revision=11084
2001-07-12 Jeffrey Stedfast <fejj@ximian.com>
* camel-filter-driver.c (camel_filter_driver_filter_message):
Okay, I've decided that that user is just on crack. We don't want
to allow filtering of deleted messages or we could get some
unexpected behavior.
(do_move): Oops. My last fix needs to be after the if-statement,
not inside it.
(do_copy): And here too.
svn path=/trunk/; revision=11068
2001-07-12 Jeffrey Stedfast <fejj@ximian.com>
* camel-filter-driver.c (camel_filter_driver_filter_message):
Okay, I've decided that that user is just on crack. We don't want
to allow filtering of deleted messages or we could get some
unexpected behavior.
svn path=/trunk/; revision=11048
2001-07-12 Jeffrey Stedfast <fejj@ximian.com>
* camel-filter-driver.c (do_move): Only set p->copied and
p->deleted if the messages are copied without an exception.
(do_copy): Same - but obviously we don't set the p->deleted here
at all.
(camel_filter_driver_filter_message): Since users complained that
they couldn't filter deleted messages for "safe keeping" (WTF?
safe keeping? why were they deleted in the first place then??), I
have taken out the code that optimized filtering by not allowing
deleted messages to be filtered. This fixes bug #4473.
Note: Users have a warped sense of logic.
svn path=/trunk/; revision=11047
2001-07-12 Not Zed <NotZed@Ximian.com>
* camel-mime-part-utils.c (extract_metatag_charset): Removed.
(check_html_charset): Replaced with this.
(simple_data_wrapper_construct_from_parser): Call
check_html_charset if we dont have a charset on the content-type,
and we have text/html data.
(check_html_charset): We also need to do qp/base64 decoding
ourselves, sigh.
* camel-mime-utils.c (html_meta_param_list_decode): Removed. This
was very wrong, the rules for mail headers vastly different from
rules for decoding html elements.
(rfc2184_decode): Move the malloc inside the iconv_open worked,
otherwise we have a memleak.
* camel-mime-filter-html.c (camel_mime_filter_html_finalize, init,
run, reset): Changed to use camelhtmlparser, and fixed a tiny
memleak.
* camel-html-parser.c: Made the html indexer tokeniser re-usable.
ONLY TO BE USED INTERNAL TO CAMEL HOWEVER.
(tokenise_step): Slight fix to non-quoted values.
svn path=/trunk/; revision=11028
2001-07-12 Not Zed <NotZed@Ximian.com>
* camel-folder-summary.c
(camel_folder_summary_info_new_from_message): Removed some code i
wasn't supposed to commit.
* providers/local/camel-local-summary.c (local_summary_add): Only
set info->size if it is not zero.
(local_summary_add): If we dont get a size from the info passed
in, calculate it using a null stream write. Should do #4392.
svn path=/trunk/; revision=11025
2001-07-11 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-part-utils.c (extract_metatag_charset): New function
to extract a meta-tag charset value if it exists.
(simple_data_wrapper_construct_from_parser): Along the same lines
as the code I previously ripped out, but this time use the
mime-parser's seek ability to help us along. Currently I read up
to a 2k buffer size - this is probably overkill, 1k is probably
plenty.
* camel-mime-utils.c (html_meta_param_list_decode): When we get to
an `=', we must skip past it before trying to grab the param
value. duh.
svn path=/trunk/; revision=11021
2001-07-11 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-part-utils.c
(simple_data_wrapper_construct_from_parser): Ripped out my code
since it was never being used since the mime parser is not using a
seekable stream (ever?) which pretty much means my code needs to
be done someplace else.
svn path=/trunk/; revision=11016
2001-07-11 Peter Williams <peterw@ximian.com>
* providers/imap/camel-imap-folder.c (camel_imap_folder_changed):
Run the filter in its own thread to prevent locking issues.
(imap_filter_timeout): New function that does the filtering called
as a CamelSession timeout.
svn path=/trunk/; revision=11011
2001-07-11 Not Zed <NotZed@Ximian.com>
* camel-filter-driver.c (camel_filter_driver_filter_mbox): Create
the messageinfo itself, so we can properly set the size.
* camel-movemail.c (camel_movemail_solaris): Write out the from
line between each message.
2001-07-10 Not Zed <NotZed@Ximian.com>
* providers/local/camel-local-summary.c (local_summary_add): Copy
the size across from the source message info if supplied.
* camel-stream-null.c: Added a 'written' member which keeps track
of how much has been written to the stream.
* camel-movemail.c (camel_movemail): If we have BROKEN_SPOOL
defined, then use the solaris movemail to quote from lines that
sendmail didn't.
(camel_movemail_solaris): Compile this in if BROKEN_SPOOL defined.
svn path=/trunk/; revision=10989
2001-07-10 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-utils.c (html_meta_param_list_decode): New function
to parse an HTML meta-tag.
* camel-mime-part-utils.c
(simple_data_wrapper_construct_from_parser): If the Content-Type
did not contain a charset parameter and it's also a text/html
part, we have 1 last place to look - in the META html tags. *sigh*
* camel-mime-message.c (camel_mime_message_get_source):
s/gint/unsigned since that's what it should be.
svn path=/trunk/; revision=10976
2001-07-09 Jeffrey Stedfast <fejj@ximian.com>
* camel-pgp-context.c (pgp_sign): Forget the passphrase if the
user has set that option.
(pgp_clearsign): Same.
(pgp_encrypt): And here...
(pgp_decrypt): And finally here.
(camel_pgp_context_new): Take a `remember' argument.
svn path=/trunk/; revision=10932
2001-07-09 Not Zed <NotZed@Ximian.com>
* providers/local/camel-maildir-summary.c (maildir_summary_sync):
Oops, e_poolv_set free's it for us, so dont double-free here.
svn path=/trunk/; revision=10902
2001-07-06 Not Zed <NotZed@Ximian.com>
* camel-vee-folder.c (camel_vee_folder_finalise): Changed so we
dont have the list changing under us, just going to the next node
before we call a function that might change the list is
potentially dangerous (slight mod of peters fix). Hmm, i think it
would've double-unref'd it too(?)
svn path=/trunk/; revision=10900
2001-07-08 Chris Toshok <toshok@ximian.com>
* camel-tcp-stream-openssl.c (camel_tcp_stream_openssl_finalize):
openssl_table is gone. we now store/get the stream from the
SSL_CTX's app_data.
(stream_read): rework the non-blocking case to account for SSL
possibly buffering data (in which case select will block even
though data is ready to be read), and to account for FreeBSD's
strange behavior of returning -1/EAGAIN even though select said
the fd was ready to be read.
(ssl_verify): openssl_table is gone.
(open_ssl_connection): set the SSL_CTX's app_data to be the
stream, remove the openssl_table code.
svn path=/trunk/; revision=10894
2001-07-06 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-utils.c (header_encode_param): Don't allow in to be
NULL, so instead of doing if (in == NULL) return;, make it a
g_return_val_if_fail and later we can make it an assert or
something.
svn path=/trunk/; revision=10868
2001-07-06 Jeffrey Stedfast <fejj@ximian.com>
* providers/local/camel-mbox-summary.c
(camel_mbox_summary_build_from): Make the `day-of-month' digit
take up 2 chars by using "%2d". Fixes bug #3989 for lame mailers
like Pine.
svn path=/trunk/; revision=10858
2001-07-06 Peter Williams <peterw@ximian.com>
* camel-object.c (camel_object_unref): Make sure that after the
finalization event has happened and the finalization functions
have been called that the object still has a zero refcount.
svn path=/trunk/; revision=10844
2001-07-06 Joe Shaw <joe@ximian.com>
* providers/nntp/camel-nntp-grouplist.c: Add locking to
camel_nntp_get_grouplist_from_server().
* providers/nntp/camel-nntp-resp-codes.h: Added
NNTP_EXTENSIONS_SUPPORTED (202).
* providers/nntp/camel-nntp-store.c (camel_nntp_store_get_extensions):
Check for both NNTP_LIST_FOLLOWS and NNTP_EXTENSIONS_SUPPORTED from
a LIST EXTENSIONS request. (Dunno if NNTP_LIST_FOLLOWS ever comes
out of this, but that's what was already there...) Also, put some
locking around it.
(finalize): e_mutex_destroy() the command lock
(camel_nntp_store_init): e_mutex_new() the command lock.
* providers/nntp/camel-nntp-store.h: Add locking macros.
svn path=/trunk/; revision=10838
2001-07-05 Jeffrey Stedfast <fejj@ximian.com>
* camel-folder-summary.c (camel_message_info_string): Added an
assert to make sure that `mi' isn't NULL.
(camel_message_info_set_string): Same.
* providers/imap/camel-imap-command.c (camel_imap_response_free):
Create and use a temporary CamelException for use with
camel_imap_folder_changed.
svn path=/trunk/; revision=10834
2001-07-05 Jeffrey Stedfast <fejj@ximian.com>
* camel-pgp-context.c (pgp_verify): Send the
--no-auto-key-retrieve argument to gpg if we are in offline mode
so that we don't have to worry about gpg hanging if it can't
connect to the key servers, because now it shouldn't even attempt
to.
svn path=/trunk/; revision=10831
2001-07-05 Jeffrey Stedfast <fejj@ximian.com>
* camel-pgp-context.c (pgp_verify): Send the
--no-auto-key-retrieve argument to gpg so that we don't have to
worry about gpg hanging if it can't connect to the key servers,
because now it shouldn't even attempt to.
svn path=/trunk/; revision=10827
2001-07-05 Chris Toshok <toshok@ximian.com>
* camel-tcp-stream-openssl.c (ssl_verify): use
X509_STORE_CTX_get_ex_data to get at the SSL* - don't use the
X509_STORE_CTX to look up our stream, since it's not what we used
to insert our stream into the hashtable.
(open_ssl_connection): insert the stream into the hashtable before
calling SSL_connect, as this can cause ssl_verify to be called,
and we need to look up the stream there. remove the stream from
the hashtable if there's an error connecting.
(stream_connect): pass the CamelTcpStreamOpenSSL* to
open_ssl_connection since it handles the hashtable stuff. remove
hashtable stuff from here.
svn path=/trunk/; revision=10819
2001-07-05 Peter Williams <peterw@ximian.com>
* camel-vee-folder.c (camel_vee_folder_finalise): Move this before the
camel_vee_folder_remove_folder because that function modifies p->folders
messing up our iteration.
(camel_vee_folder_finalise): Don't unref our summary; camel-folder now
does this.
* camel-object.h (CamelObject): Add a 'destroying' flag to CamelObject.
* camel-object.c (obj_init): Clear 'destroying'.
(camel_object_unref): If 'destroying' then do not send the finalize
event and do not call finalize functions. Otherwise, set destroying
so just in case we get refed (eg event code) we don't get doubly
finalized.
svn path=/trunk/; revision=10811
2001-07-05 Not Zed <NotZed@Ximian.com>
* camel-mime-filter-basic.c (filter): Fix the assertion slightly,
if we have a little bit of input the output size could be larger,
since we store upto 3 chars in the state.
svn path=/trunk/; revision=10786
2001-07-05 Not Zed <NotZed@Ximian.com>
* camel-folder-summary.c
(camel_folder_summary_info_new_from_message): When indexing a new
record, create a pseudo word 'ibexindexed' so we can always tell
that a message has already been idnexed, even if it contains no
words of its own. Things like maildir use this check to see if
its already been processed, and it matters if it is incorrect in
this case (not just wasted cycles).
(camel_folder_summary_info_new_from_parser): And same here.
* providers/local/camel-maildir-summary.c (maildir_summary_sync):
Changed the logicfor epoolv code to be different, we dont need to
update hash references or any tricky stuff.
(maildir_summary_check): Samehere.
* camel-folder-summary.h: Removed include of e-memory.h.
svn path=/trunk/; revision=10785
2001-07-03 Joe Shaw <joe@ximian.com>
* providers/nntp/camel-nntp-resp-codes.h: Added NNTP_NO_PERMISSION
(502) to the list of response codes.
* providers/nntp/camel-nntp-store.c (nntp_store_connect): If we
receive a NNTP_NO_PERMISSION, don't get into an infinite loop trying
to reconnect, get extensions, etc. Just give up and return FALSE.
svn path=/trunk/; revision=10769
* providers/imap/camel-imap-message-cache.c
(camel_imap_message_cache_clear): Doh. Don't remove things from
the hash table while foreach'ing it. (And can't use foreach_remove
either because we have to remove them in a weird order). Fixes
#3618.
* providers/imap/camel-imap-folder.c (imap_get_message): If the
server returns OK from the FETCH BODY, but there's no parseable
BODY response, it's probably because there's an UN-parseable BODY
response, implying the message is badly formatted, MIMEwise. In
that case, fall back to fetching the message as a single part.
svn path=/trunk/; revision=10748
2001-07-02 Sam Creasey <sammy@oh.verio.com>
* providers/nntp/camel-nntp-folder.c: Implemented
nntp_folder_search_by_expression and
nntp_folder_search_free. Basic search functionality e.g. unread
marking now works for NNTP folders.
* camel_filter_search.c (get_size): Added get-size sexp directive
to get the size of a message for filters.
* providers/nntp/camel-nntp-folder.c (camel_nntp_folder_new):
Always check with the NNTP server after summary load -- this
function now always expires old summary entries and syncs with
the news server.
* providers/nntp/camel-nntp-utils.c (camel_nntp_get_headers):
Only fetch headers for articles not already logged in
the summary file.
* providers/nntp/camel-nntp-grouplist.c
(camel_nntp_get_grouplist_from_*): change from g_list_append()
to g_list_prepend() + g_list_reverse. Traversing 40,000
element linked lists sucks.
* providers/nntp/camel-nntp-store.c (camel_nntp_command):
Should the NNTP connection die with
CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED, make a single retry
attempt. Timing out the NNTP link is less painful this way.
svn path=/trunk/; revision=10716
2001-07-02 Peter Williams <peterw@ximian.com>
* README (Introduction): Add comment noting that Camel actually
exists now :-)
svn path=/trunk/; revision=10696
* camel-session.c (camel_session_get_filter_driver): new method to
get an application-initialized filter driver.
* camel-filter-driver.c (camel_filter_driver_new): Remove the
get_folder function and data args from here...
(camel_filter_driver_set_folder_func): ...and add this function to
set/change them.
* providers/imap/camel-imap-folder.c (camel_imap_folder_new): If
this folder is INBOX and we're filtering INBOX, set a flag on the
folder for later.
(imap_update_summary): Add another argument (GPtrArray *recents),
and if it's non-NULL, add the uids of any \Recent new messages to
it.
(camel_imap_folder_changed): If doing filtering in this folder,
create a recents array and pass it to imap_update_summary. Then
get a filter driver and use it to filter the recent messages.
* providers/imap/camel-imap-summary.h:
* providers/imap/camel-imap-utils.c (imap_parse_flag_list): Add
support for the \Recent flag.
* providers/imap/camel-imap-provider.c (imap_conf_entries): enable
the "filter" option.
* camel-types.h: add CamelFilterDriver typedef here
svn path=/trunk/; revision=10681
2001-06-29 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-utils.c: Added Originator: header as a header to look
for when looking for the mailing list.
svn path=/trunk/; revision=10603
2001-06-29 Jeffrey Stedfast <fejj@ximian.com>
* tests/mime-filter/Makefile.am: Build the test-crlf test program.
* tests/mime-filter/test-crlf.c: New test suite for the crlf
filter.
* camel-mime-filter-crlf.c (filter): Fixed to correctly encode and
decode dots.
svn path=/trunk/; revision=10602
by sendmail to strip the BCC from the email while still sending to the BCC
recipients.
camel:
2001-06-28 Peter Williams <peterw@ximian.com>
* camel-mime-filter-stripheader.c: New file. Filter that strips a
header from mime output.
* camel-mime-filter-stripheader.h: New file. Header for the above.
* providers/smtp/camel-smtp-transport.c (smtp_data): Use the stripheader
filter to remove the "Bcc" header.
* Makefile.am: Add the stripheader files.
* tests/lib/Makefile.am (INCLUDES): Get this to compile again.
* tests/mime-filter/test-stripheader.c: New file. Test suite for
the CamelMimeFilterStripHeader.
* tests/mime-filter/Makefile.am: New test section: mime filters.
mail:
2001-06-28 Peter Williams <peterw@ximian.com>
* mail-ops.c (mail_send_message): Revert fejj's Bcc header removal;
this unsets the BCC recipients and so doesn't send to the Bcc'd
people at all.
svn path=/trunk/; revision=10576
2001-06-28 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-utils.c (header_decode_param_list): Fix a memory
leak. Also if the decoded value is NULL, that means it wasn't
encoded so we don't want to toss the old value.
(header_param_list_format_append): Correctly wrap long parameter
values according to rfc2184.
svn path=/trunk/; revision=10566
* providers/imap/camel-imap-folder.c (imap_refresh_info): If the
folder is frozen, don't refresh, just record that we need to do it
later.
(imap_append_online): If the APPEND doesn't trigger an immediate
EXISTS response (because the folder isn't the selected folder, or
because the server doesn't do that until the next command), call
imap_refresh_info on the folder.
(imap_copy_online): Likewise. (Replacing the unconditional NOOP
that was there before, which absolutely killed filter performance
by forcing the IMAP provider to switch back and forth between
folders after every copy or move.)
(imap_thaw): If the folder needs a refresh, do it.
* camel-folder.c (camel_folder_is_frozen): New method
svn path=/trunk/; revision=10565
2001-06-27 Jeffrey Stedfast <fejj@ximian.com>
* tests/folder/test9.c (main): Updated to match the current API.
* tests/folder/test3.c: #include <gtk/gtk.h> since we use
gtk_init().
svn path=/trunk/; revision=10546
2001-06-27 Jeffrey Stedfast <fejj@ximian.com>
* camel-internet-address.c
(camel_internet_address_encode_address): Use the new
header_address_fold.
* camel-mime-utils.c: Removed some old #if 0'd code of mine.
(rfc2047_encode_word): If enclen is 0, don't write an encoded word
token (=?iso-8859-7?Q??= would be an invalid token).
(header_address_fold): New function to wrap address headers -
header_fold() was force-wrapping rfc2047 encoded words which was
making the test suite fail. The *real* solution, however, is to
not create rfc2047 encoded words longer than 72 chars.
svn path=/trunk/; revision=10545
2001-06-26 Jeffrey Stedfast <fejj@ximian.com>
* camel-filter-driver.c (open_folder): Since we want an error
opening a folder to result in the message being copied to Inbox
(assuming no other filters get a chance to `move` it), don't
record any exceptions that may occur in this function.
svn path=/trunk/; revision=10515