/* $Id: melib.h,v 1.52 2006/06/28 19:21:09 hurtta Exp $ */
/******************************************************************************
* The Elm (ME+) Mail System - $Revision: 1.52 $ $State: Exp $
*
* Author: Kari Hurtta <hurtta+elm@posti.FMI.FI> (was hurtta+elm@ozone.FMI.FI)
*****************************************************************************/
/* melib/type_check.c */
/* Return 1 to decode */
typedef int type_mismatch_prompt P_((mime_t *ptr, int displaying));
#ifdef USE_PGP
/* pgp_decode.c */
extern char pgp_passphrase[PGP_NUM][STRING];
extern int pgp_expires;
extern enum pgp_version have_pgp P_((enum pgp_version v));
extern enum pgp_version decode_pgp_version P_((char * c));
extern int pgp_void_passphrase P_((void));
extern int pgp_goodPassphrase P_((enum pgp_version v));
extern int pgp_decrypt_init P_((FILE **fpin, FILE **fpout,
int opt, enum pgp_version v,
struct run_state *rs));
#endif
/* parse_util.c */
typedef int header_filter P_((header_list_ptr, int));
extern int NULL_header_filter P_((header_list_ptr, int));
extern void state_write_headers P_((out_state_t * s,
header_list_ptr hdr,
header_filter * filter,
int flag,
int demime,
charset_t defcharset));
extern void state_write_raw_headers P_((out_state_t * s,
header_list_ptr hdr,
header_filter * filter,
int flag));
extern void state_write_header P_((out_state_t * s,
header_list_ptr next,
int demime,
charset_t defcharset));
extern void state_write_raw_header P_((out_state_t * s,
header_list_ptr next));
extern header_list_ptr file_read_headers P_((FILE *, int));
extern long skip_envelope P_((struct header_rec *hdr, FILE *fp));
/* mime.c */
extern void mime_panic P_((char *,int,char *, char *));
extern int check_encoding P_((char *));
/* mime_decode.c */
extern int rfc822_header_filter P_((header_list_ptr, int));
/* Content-transfer-encoding decoders: */
extern void base64_decode P_((in_state_t *, out_state_t *, int, int));
extern void uudecode P_((in_state_t *s_in,
out_state_t *s_out,
int length,
int astext));
extern void quoted_printable_decode P_((in_state_t *, out_state_t *,
int, int));
extern void null_decode P_((mime_t *, in_state_t *, out_state_t *,
charset_t, struct header_rec *));
extern int is_rfc1522 P_((char *));
/* 0: failure, 1: succeed */
extern int run_cte_decoder P_((mime_t *, in_state_t *, out_state_t *));
/* mime_parse.c */
extern void mime_t_clear P_((mime_t *mt));
extern void mime_t_copy P_((mime_t *, mime_t *));
extern void mime_t_zero P_((mime_t *));
extern void mime_destroy P_((mime_t *));
extern int mime_get_charset P_((charset_t *ret,
struct mime_param *buffer,
charset_t * display_charset,
charset_t default_content_charset
));
extern void mime_warnings P_((struct header_rec *));
extern int mime_parse_routine P_((struct folder_info *folder,
struct header_rec *hdr,
FILE *fp));
extern void parse_mime_headers1 P_((mime_t *ptr,
header_list_ptr headers,
long part_offset,
long body_offset,
int opts,
charset_t hdr_charset,
struct header_errors ** header_error));
extern int is_pre_mime_content_type P_((mime_t *ptr, char *content_type));
/* mparser.c */
extern int mime_parser_subparts P_((struct mime_parser_data *P));
extern struct mimeinfo * mime_parser_index P_((struct mime_parser_data *P,
int idx));
/* 0 == no parser, 1 == parser found */
extern int mime_parser_parse P_((struct mimeinfo *s,
charset_t defcharset,
FILE *fp,
struct header_errors **header_error));
extern void copy_parser_data P_((struct mime_parser_data **target,
struct mime_parser_data *source));
/* mailcap.c ----------------------------------------------------------- */
extern void read_mailcaps P_((void));
#if ANSI_C
struct mailcap_entry;
#endif
/* Return value must be free()ed */
extern char * mailcap_view_command P_((struct mailcap_entry *f, mime_t *p));
/* mime_selector.c ---------------------------------------------------- */
extern int mime_classify_media P_((mime_t *p,struct header_rec * hdr));
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
typedef int mime_run_selector P_((mime_t *p,struct header_rec * hdr));
typedef mime_run_selector *mime_run_selector_t;
typedef void encrypted_decoder P_((mime_t *init, mime_t *data,
in_state_t *state_in,
out_state_t *state_out,
charset_t defcharset,
struct header_rec *mss,
type_mismatch_prompt *badtype));
typedef encrypted_decoder * EC_decoder_t;
typedef void signed_decoder P_((mime_t *body, mime_t *sign,
in_state_t *state_in,
out_state_t *state_out,
const char *micalg,
charset_t defcharset,
struct header_rec *mss,
type_mismatch_prompt *badtype));
typedef signed_decoder * SG_decoder_t;
#define MIME_selector_magic 0xFD04
struct mime_selected_handler {
unsigned short magic; /* MIME_selector_magic */
struct mt_handle_pager *handler; /* Found internal handler */
struct mailcap_entry *entry; /* Found external handler */
EC_decoder_t EC_decoder;
SG_decoder_t SG_decoder;
mime_t * selected_alternative;
unsigned use_entry:1;
};
typedef void CT_decoder P_((mime_t *part,
in_state_t *instream,
out_state_t *outstream,
charset_t defcharset,
struct header_rec *hdr,
type_mismatch_prompt *badtype));
typedef CT_decoder *CT_decoder_t;
struct mt_handle_pager {
CT_decoder_t func;
mime_run_selector_t selector;
};
extern void mime_decode P_((mime_t *ptr, in_state_t *state_in,
out_state_t *state_out,
charset_t defcharset,
struct header_rec *mss,
type_mismatch_prompt *badtype
));
/* ----------- */
#define WALKHANDLER_magic 0xFD05
struct walk_handler {
unsigned short magic; /* WALKHANDLER_magic */
struct handler_type * handler_type;
union walk_hadler_data {
struct search_mes * search_mes;
void * dummy;
} u;
};
typedef void mw_init_handler P_((struct walk_handler *hdl));
typedef void mw_free_handler P_((struct walk_handler *hdl));
typedef void mw_action_handler P_((struct walk_handler *hdl,mime_t *ptr,
in_state_t *state_in, /* May be NULL */
FILE *F,
out_state_t *state_out /* May be NULL */
));
#define WALKTYPE_magic 0xFD06
struct handler_type {
unsigned short magic; /* WALKTYPE_magic */
mw_init_handler *mw_init;
mw_free_handler *mw_free;
mw_action_handler *mw_action;
};
extern struct walk_handler * malloc_walk_handler P_((struct handler_type *t));
extern void free_walk_handler P_((struct walk_handler **ptr));
extern void simple_mime_walk P_((mime_t *ptr, struct walk_handler *handler,
in_state_t *state_in, /* May be NULL */
out_state_t *state_out /* May be NULL */
));
/* partial.c */
struct partial_vector {
mime_t * reference;
char * id; /* Unique identifier field */
int number; /* 1 .. total */
int total; /* -1 if not given */
};
extern void free_partial_vector P_((struct header_rec *mss));
extern struct partial_vector *reg_partial P_((struct header_rec *mss,
mime_t * reference));
/* mime_param.c */
#if ANSI_C
struct mime_param;
#endif
extern CONST char * get_mime_param_compat P_((struct mime_param *P,
char *name));
extern CONST char * get_mime_param_ascii P_((struct mime_param *P,
char *name));
extern CONST struct string * get_mime_param P_((struct mime_param *P,
char *name));
extern void free_mime_param P_((struct mime_param **x));
extern struct mime_param * parse_mime_param P_((const char *headername,
const char *value,
charset_t def,
struct header_errors **header_error));
extern struct mime_param * parse_mime_param_string P_((struct string *value,
int gen_compat_len,
int plain_mode));
extern struct mime_param * copy_mime_param P_((struct mime_param *src));
extern struct string * show_mime_params P_((struct mime_param *P));
extern char * encode_mime_params P_((struct mime_param *P));
extern char ** encode_mime_params_v P_((struct mime_param *P));
extern char ** split_mime_params P_((struct mime_param **P,
struct string *in_buffer,
int gen_compat_len,
int plain_mode));
extern void mime_params_add_compat P_((struct mime_param **P,
char *name,
char *value));
extern void mime_params_add P_((struct mime_param **P,
char *name,
struct string *value));
/* encode.c */
/* 0 == failure
1 == OK
-1 == Ctrl-C */
extern int getkey P_((int send));
extern void get_key_no_prompt P_((void));
extern void encode P_((char *line));
extern void makekey P_((char *rkey));
/* parse_helper.c */
extern void mime_parse_helper P_((struct header_rec *entry,
header_list_ptr parsed_headers ));
extern void start_body_helper P_((struct header_rec *current_header,
long content_start,
header_list_ptr parsed_headers));
/*
* Local Variables:
* mode:c
* c-basic-offset:4
* buffer-file-coding-system: iso-8859-1
* End:
*/
syntax highlighted by Code2HTML, v. 0.9.1