/* $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 <hurtta+elm@posti.FMI.FI> (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:
*/
syntax highlighted by Code2HTML, v. 0.9.1