/* $Id: mailer_imp.h,v 1.10 2006/04/09 07:37:05 hurtta Exp $ */ /****************************************************************************** * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $ * * Author: Kari Hurtta (was hurtta+elm@ozone.FMI.FI) *****************************************************************************/ #if ANSI_C struct mailer_config; struct mailer_option_list; struct mailer_info; #endif typedef int mailer_set_option P_((struct mailer_config *M, struct mailer_option_list *X, char *value)); typedef int mailer_init_hook P_((struct mailer_config *M, struct mail_send_state *C, struct mailer_info *I)); typedef void mailer_close_hook P_((struct mailer_config *M, struct mail_send_state *C)); typedef int mailer_backend_hook P_((struct mailer_config *M, struct mail_send_state **C, int encoding_top, char * title, sending_message_func *sm)); typedef int mailer_info_init_hook P_((struct mailer_config *M, struct mailer_info *I)); typedef void mailer_info_close_hook P_((struct mailer_config *M, struct mailer_info *I)); typedef int mailer_info_query_hook P_((struct mailer_config *M, struct mailer_info *I, enum MI_query query)); /* Return 1 == mailer restarted, reconnect succeed -- reask info 0 == mailer not disconnected -1 == mailer disconnected, reconnect failed */ typedef int mailer_info_restart_hook P_((struct mailer_config *M, struct mailer_info *I)); /* Return -1 if caller should result with default data (return 1) -2 if caller should just test passwd 0 if failure 1 is succees */ typedef int mailer_info_verify_addr P_((struct mailer_config *M, struct mailer_info *I, CONST char *text, struct addr_item *result)); typedef void mailer_info_gen_def_ef P_((struct mailer_config *M, struct mailer_info *I, struct mailer_env_from *X)); typedef void mailer_info_set_ef P_((struct mailer_config *M, struct mailer_info *I, struct mailer_env_from *X, const char *value)); typedef int MO_value_hook P_((struct mailer_config * M, struct mailer_option_list * L, char **value,int set)); struct mailer_option_list { CONST char * field; char ** value; MO_value_hook * value_func; int malloced; }; /* mailer_bits mask */ #define MB_DONT_ADD_FROM 1 #define MB_USE_DOMAIN 2 #define MB_ALLOW_SET_SENDER 4 #define MB_REQ_DEFAULT_SENDER 8 struct mailer_config { CONST char *mailer_type; struct mailer_option_list *list; /* {NULL, NULL} terminated */ mailer_set_option * m_set_option; mailer_init_hook * m_init_hook; mailer_close_hook * m_close_hook; mailer_backend_hook * m_backend_hook; char ** mailer_path; mailer_info_init_hook * mi_init_hook; mailer_info_close_hook * mi_close_hook; mailer_info_query_hook * mi_query_hook; mailer_info_verify_addr * mi_verify_addr; mailer_info_gen_def_ef * mi_def_env_from; mailer_info_set_ef * mi_set_env_from; mailer_info_restart_hook * mi_restart_hook; int mailer_bits; /* TODO: Add to this mailer specific data (if any) */ }; #define MAILER_magic 0xF200 struct mail_send_state { unsigned short magic; struct mailer_config *mailer_type; char **addrs; int addr_count; int dsn; int verbose; char * fname; out_state_t OUT; end_handler *orig_func; char * mail_from; /* From struct mailer_env_from */ /* TODO: Add mailer specific state to here ... */ struct mailer_info *head; struct mail_send_state *next; }; #define MAILER_INFO_magic 0xF201 struct mailer_info { unsigned short magic; struct mailer_config *mailer_type; int delete_pending; union any_mailer_info { void * ptr; struct mailer_info_1 * p1; struct mailer_info_2 * p2; } p; struct mail_send_state *first; struct mailer_env_from *first_e; }; int MO_default_value P_((struct mailer_config * M, struct mailer_option_list * L, char **value,int set)); int MO_allow_set_sender P_((struct mailer_config * M, struct mailer_option_list * L, char **value,int set)); #define MAILER_ef_magic 0xF202 #define MAILER_ef_can_set 1 #define MAILER_ef_need_default 2 #define MAILER_ef_changed 4 struct mailer_env_from { unsigned short magic; /* MAILER_ef_magic */ struct mailer_config *mailer_type; char * mail_from; unsigned int flags; struct mailer_info *head; struct mailer_env_from *next; }; /* * Local Variables: * mode:c * c-basic-offset:4 * buffer-file-coding-system: iso-8859-1 * End: */