/* $Id: mailerlib.h,v 1.4 2006/04/09 07:37:05 hurtta Exp $ */

/******************************************************************************
 *  The Elm (ME+) Mail System  -  $Revision: 1.4 $   $State: Exp $
 *
 *  Author: Kari Hurtta <hurtta+elm@posti.FMI.FI>
 *      or  Kari Hurtta <elm@elmme-mailer.org>
 *****************************************************************************/

/* init.c */

extern void init_mailerlib P_((void));


/* mailer.c */

extern int mailerfunc P_((char **value, int enter,
			  int lineno, char *filename));

typedef void sending_message_func P_((int background));

extern struct mailer_info  *get_mailer_info P_((void));
extern void free_mailer_info P_((struct mailer_info **S));

enum MI_query { MI_HAVE_8BITMIME = 1, MI_HAVE_BINARYMIME = 2,
		MI_HAVE_DSN      = 3, MI_DONT_ADD_FROM  = 4,
		MI_USE_DOMAIN    = 5
};
	
		    
extern int query_mailer_info P_((struct mailer_info  *I,
				 enum MI_query query));

/* -1  if connection lost
    0  if OK
    1  if mailer reinitialized and  query_mailer_info()
          need to be called again
*/
extern int mailer_restarted P_((struct mailer_info  *I));

/* Should return 1 if verify succees and fields of result to be filled 
   -- caller should free fields of result
   Returns 0 on failure
*/

enum mailer_errcode {
    MAILER_OK = 0,                  /* Address OK */
    MAILER_NOT_AVAIL,               /* Address verify not available */
    MAILER_NOT_EXIST                /* Address not exists */
};

int verify_mailer_addr P_((struct mailer_info  *I,
			   CONST char *text,
			   struct addr_item *result,
			   enum mailer_errcode *errcode));
int verify_mailer_domaddr P_((struct mailer_info  *I,
			   CONST char *text,
			   struct addr_item *result,
			   enum mailer_errcode *errcode));



/* Return NULL if no editor (and no value either) */
extern struct mailer_env_from * mailer_get_env_from P_((struct mailer_info  *I));
extern void mailer_free_env_from P_((struct mailer_env_from **X));
extern int env_from_changed P_((struct mailer_env_from *X));

/* return temporary pointer  value -- do not free 
   return NULL if currently no value set (use implicit default)
  */
extern CONST char * mailer_env_from_value P_((struct mailer_env_from *X,
					    int *can_edit));

extern void mailer_env_from_change P_((struct mailer_env_from *X,
				       const char * value));

extern struct mail_send_state  *mailer_init P_((char **addr_args,
						int dsn,
						int verbose,
						struct mailer_info *info,
						struct mailer_env_from *env_from));

/* Note that also mail_backend2 does freeing ... */
extern void free_mail_send_state P_((struct mail_send_state **S));


extern out_state_t *get_mail_outfd P_((struct mail_send_state  *X));

/* mail_backend2 may free pointer ... */
extern int mail_backend2 P_((struct mail_send_state **mail_fd,
			     end_handler *func,
			     int encoding_top,
			     char * title,
			     sending_message_func *sm));

/* Return mailer path or type ... */
extern CONST char *get_mailer_path P_((struct mail_send_state *mail_fd));

void init_default_mailer P_((void));

extern char * kludge_addr P_((char **addr));
extern char **argv_from_headers   P_((struct mailing_headers * headers));


/* outheaders.c */

extern void zero_mailing_headers P_((struct mailing_headers *hdrs));
extern void free_mailing_headers P_((struct mailing_headers *hdrs));

extern char * from_addr_literal P_((struct mailer_info *mailer_info));

extern void make_from_addr P_((struct expanded_address *expanded,
			      struct mailer_info *mailer_info));

/* shared_mailer.c */

#ifdef USE_DLOPEN
extern SHAREDLIB use_shared_all;
#endif

extern struct mailer_config  * loc_mailer_type P_((char *f));

/*
 * Local Variables:
 *  mode:c
 *  c-basic-offset:4
 *  buffer-file-coding-system: iso-8859-1
 * End:
 */


syntax highlighted by Code2HTML, v. 0.9.1