freeswitch/libs/libetpan/TODO
Michael Jerris 838eb8aaec add libetpan 0.48 to in tree libs
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3763 d0543943-73ff-0310-b7d9-9358b9ac24b2
2006-12-20 20:28:56 +00:00

189 lines
3.7 KiB
Plaintext

API documentation
-----------------
- doc for cache
- doc for mbox
- doc for MH
- doc for NNTP
- doc for POP3
- comments within code
mail drivers
------------
- bodystructure should be cached
- sort messages
- SMTP - recipient resolver
IMF
---
- rewrite efficient RFC 2822 message parser
IMAP
----
- rewrite efficient IMAP parser
MIME
----
- generate MIME-encoded headers (done in etpan)
binding
-------
- perl binding
- objective C binding
- C++ mapping
- python binding
- emacs-lisp binding
- ocaml binding
miscellaneous
-------------
- SASL authentification : cyrus-sasl
CRAM-MD5 / DIGEST-MD5
- S/MIME / GPG /PGP
- filtering / scoring / searching language
- generic tools for mail clients
- check SSL certificates
compilation
-----------
- improve autoconf / portability (header checks...)
new API
-------
wim delvaux
-- storage
struct storage {
void * data; /* storage dependant */
}
storage_bind(&storage, driver);
storage_release(&storage);
storage_commit(storage)
storage_get_folder_set(storage, pattern, &set) -> list of subfolders
list of pair (basename, path)
storage_get_folder_tree(storage, pattern, &tree) -> tree of folders
tree of pair (basename, path)
folder_list_cleanup(&list)
folder_tree_cleanup(&list)
storage_set_option(storage, option_id, value, ...)
storage_set_option_by_name(storage, option_name, value, ...)
storage_build_folder_name(storage, name, ...)
storage_create_folder(storage, name);
storage_delete_folder(storage, name);
storage_rename_folder(storage, folder, newname);
struct etpan_folder {
struct storage * storage;
}
one connection per storage,
a connection can be a set of TCP/IP socket
-- folder
folder_bind(&folder, storage, path);
folder_release(&folder);
folder_set_option(folder, option_id, value, ...)
folder_set_option_by_name(folder, option_name, value, ...)
folder_ctl(folder, function_id, param, ...)
folder_ctl_by_name(folder, function_name, param, ...)
folder_get_path(folder)
when an action is done on folder we have to query the storage state,
to see which folder we are manipulating and select the right folder.
one binding per folder.
several binding may be using one shared TCP/IP connection
or one TCP/IP connection for each binding.
folder_commit(folder) -- write all flags the data down for persistant
folder_expunge(folder) -- delete messages marked as deleted
folder_status(folder, &count, &unread_count, &new_count)
-- return messages number, unread messages number, new messages number
folder_append_message(folder, message) -- add a message
(message will already contain the new flags),
really add it after commit()
folder_get_envelopes_list(folder, &list) -- return list of message
binded to folder.
folder_fill_envelopes_list(folder, &list) -- fill the envelope info of the
list of messages.
switch_connection_to_binding()
struct connection {
struct current_binding * binding;
}
struct etpan_message {
struct etpan_folder * folder;
}
message_bind(&message, folder, msg_id) -- initializes the message structure
message_release(&message) -- release the message
message_commit(&message) -- let the folder structure knows the flags we changed
message_get_mime_tree(&message, &mime_tree) -- return the MIME structure of
the message
message_mime_tree_cleanup(mime_tree) -- free the mime structure returned
message_get_flags(&message, &flags) -- fetch the flags of the message
message_flags_cleanup(&message, flags) -- free the flags
struct etpan_mime {
struct etpan_message * message;
}
message_get_parsed_header(msg, &header)
message_get_raw_header(msg, &header)
message_get_header_set(msg, &headers)
message_get_body(msg, &Body)
standard headers
special headers
body
flags