/* $Id: def_melib.h,v 1.10 2006/06/28 19:21:09 hurtta Exp $ */

#include "headers.h"
#include "melib.h"
#include "misclib.h"
#include "mboxlib.h"

#define MIME_PARAM_magic	0xFC04

struct mime_param {
    unsigned short magic;     /*  MIME_PARAM_magic */

    struct mp_pair {
	char *raw_param;
	char *raw_value;
    }   * params;
    int   param_count;

    charset_t  def;

    struct ascii_pair {
	int   is_compat;
	char *param;
	char *value;
    } * ascii_params;
    int ascii_param_count;

    struct string_pair {
	char *param;
	struct string *value;

    } * string_params;
    int string_param_count;

};

/* -------------------------------------- */
/* Internal routines to melib             */


/* mime_decode.c */

extern FILE *arrange_decoded P_((mime_t *ptr,in_state_t  *state_in,
				 out_state_t *state_out,
				 in_state_t *newstate2,
				 char **name));

extern int set_filter	P_((mime_t *ptr, out_state_t *stat, 
			    charset_t default_content_charset,
			    charset_t override_charset)); 

extern FILE * arrange_binary P_((mime_t *ptr,
				 in_state_t  *state_in,
				 out_state_t *state_out,
				 in_state_t *newstate2,
				 char **name));

/* pgp_decode.c */

#ifdef USE_PGP

extern void pgp_decode  		P_((mime_t *,
					    in_state_t *s_in, 
					    out_state_t *s_out,
					    charset_t defcharset,
					    struct header_rec *mss,
					    type_mismatch_prompt *badtype));
extern int pgp_selector P_((mime_t *p, struct header_rec * hdr));

extern void pgp_SG_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));
extern void pgp_EC_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));

#endif

/* mime_parse.c */

extern mime_t *mime_t_alloc             P_((void));
extern void mime_get_disposition        P_((char *value, mime_t *mt,
					    charset_t def_charset,
					    struct header_errors **header_error));
extern void mime_get_content		P_((char *value, mime_t *mt,
					    charset_t def_charset,
					    struct header_errors **header_error));
extern mime_t *rfc822_parse		P_((FILE *fp, int len, 
					    charset_t defcharset));
extern mime_t * multipart_parse         P_((FILE *fp, int length, 
					    char *boundary, int opts,
					    charset_t defcharset,
					    int have_boundary));
extern CONST char * mime_get_boundary           P_((struct mime_param *P));

extern mime_t *mime_read_header         P_((FILE *fp, int opts, 
					    charset_t defcharset,
					    struct header_errors **header_error));

extern mime_t *parse_mime_headers   P_((header_list_ptr headers,
					long part_offset,
					long body_offset,
					int opts,
					charset_t hdr_charset,
					struct header_errors **header_error));

/* mparser.c */

extern void mime_parser_free P_((struct mime_parser_data **P));

/* mailcap.c */

/* Return 1 if have view command and test succees ... */
extern int mailcap_is_valid_view P_((struct mailcap_entry *f,  mime_t *p));

/* Return 1 if run succees ... */
extern int run_mailcap_view P_((char *file_name,	
				FILE * file_handle,
				out_state_t *state_out, 
				struct mailcap_entry *x, mime_t *p));

/* mime_selector.c */

extern void mime_selector_free P_((struct mime_selected_handler **p));
extern int mime_classify_subparts P_((mime_t *ptr, struct header_rec * hdr));
extern int mime_classify_best_alternative P_((mime_t *ptr,
					      mime_t **ret,
					      struct header_rec * hdr));

extern void null_EC_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));

extern void null_SG_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));




/* parse_util.c */

extern header_list_ptr state_read_headers P_((in_state_t *, int));

/* mime_decode.c */

extern void melib_register_decoders(void);

/* partial.c */

extern void partial_decode  		P_((mime_t *ptr, in_state_t *s_in, 
					    out_state_t *s_out,
					    charset_t defcharset,
					    struct header_rec *mss,
					    type_mismatch_prompt *badtype));

extern int partial_selector P_((mime_t *p, struct header_rec * hdr));


/*  type_check.c */

/* Returns 0 if paging of type is not allowed */
extern int check_type_magic P_((mime_t *ptr, in_state_t *state_in, 
				out_state_t *state_out,
				type_mismatch_prompt *badtype));




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


syntax highlighted by Code2HTML, v. 0.9.1