#ifndef _MIME_STATE_H_INCLUDED_
#define _MIME_STATE_H_INCLUDED_
#include <vstring.h>
#include <header_opts.h>
typedef struct MIME_STATE MIME_STATE;
typedef void (*MIME_STATE_HEAD_OUT) (void *, int, const HEADER_OPTS *, VSTRING *, off_t);
typedef void (*MIME_STATE_BODY_OUT) (void *, int, const char *, ssize_t, off_t);
typedef void (*MIME_STATE_ANY_END) (void *);
typedef void (*MIME_STATE_ERR_PRINT) (void *, int, const char *, ssize_t);
extern MIME_STATE *mime_state_alloc(int, MIME_STATE_HEAD_OUT, MIME_STATE_ANY_END, MIME_STATE_BODY_OUT, MIME_STATE_ANY_END, MIME_STATE_ERR_PRINT, void *);
extern int mime_state_update(MIME_STATE *, int, const char *, ssize_t);
extern MIME_STATE *mime_state_free(MIME_STATE *);
#define MIME_OPT_NONE (0)
#define MIME_OPT_DOWNGRADE (1<<0)
#define MIME_OPT_REPORT_8BIT_IN_7BIT_BODY (1<<1)
#define MIME_OPT_REPORT_8BIT_IN_HEADER (1<<2)
#define MIME_OPT_REPORT_ENCODING_DOMAIN (1<<3)
#define MIME_OPT_RECURSE_ALL_MESSAGE (1<<4)
#define MIME_OPT_REPORT_TRUNC_HEADER (1<<5)
#define MIME_OPT_DISABLE_MIME (1<<6)
#define MIME_OPT_REPORT_NESTING (1<<7)
#define MIME_ENC_7BIT (7)
#define MIME_ENC_8BIT (8)
#define MIME_ENC_BINARY (9)
typedef struct {
const int code;
const char *dsn;
const char *text;
} MIME_STATE_DETAIL;
#define MIME_ERR_NESTING (1<<0)
#define MIME_ERR_TRUNC_HEADER (1<<1)
#define MIME_ERR_8BIT_IN_HEADER (1<<2)
#define MIME_ERR_8BIT_IN_7BIT_BODY (1<<3)
#define MIME_ERR_ENCODING_DOMAIN (1<<4)
extern const MIME_STATE_DETAIL *mime_state_detail(int);
extern const char *mime_state_error(int);
#define MIME_HDR_FIRST (1)
#define MIME_HDR_PRIMARY (1)
#define MIME_HDR_MULTIPART (2)
#define MIME_HDR_NESTED (3)
#define MIME_HDR_LAST (3)
#endif