1/* $NetBSD$ */ 2 3#ifndef _MIME_STATE_H_INCLUDED_ 4#define _MIME_STATE_H_INCLUDED_ 5 6/*++ 7/* NAME 8/* mime_state 3h 9/* SUMMARY 10/* MIME parser state engine 11/* SYNOPSIS 12/* #include "mime_state.h" 13 DESCRIPTION 14 .nf 15 16 /* 17 * Utility library. 18 */ 19#include <vstring.h> 20 21 /* 22 * Global library. 23 */ 24#include <header_opts.h> 25 26 /* 27 * External interface. All MIME_STATE structure members are private. 28 */ 29typedef struct MIME_STATE MIME_STATE; 30typedef void (*MIME_STATE_HEAD_OUT) (void *, int, const HEADER_OPTS *, VSTRING *, off_t); 31typedef void (*MIME_STATE_BODY_OUT) (void *, int, const char *, ssize_t, off_t); 32typedef void (*MIME_STATE_ANY_END) (void *); 33typedef void (*MIME_STATE_ERR_PRINT) (void *, int, const char *, ssize_t); 34 35extern 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 *); 36extern int mime_state_update(MIME_STATE *, int, const char *, ssize_t); 37extern MIME_STATE *mime_state_free(MIME_STATE *); 38 39 /* 40 * Processing options. 41 */ 42#define MIME_OPT_NONE (0) 43#define MIME_OPT_DOWNGRADE (1<<0) 44#define MIME_OPT_REPORT_8BIT_IN_7BIT_BODY (1<<1) 45#define MIME_OPT_REPORT_8BIT_IN_HEADER (1<<2) 46#define MIME_OPT_REPORT_ENCODING_DOMAIN (1<<3) 47#define MIME_OPT_RECURSE_ALL_MESSAGE (1<<4) 48#define MIME_OPT_REPORT_TRUNC_HEADER (1<<5) 49#define MIME_OPT_DISABLE_MIME (1<<6) 50#define MIME_OPT_REPORT_NESTING (1<<7) 51 52 /* 53 * Body encoding domains. 54 */ 55#define MIME_ENC_7BIT (7) 56#define MIME_ENC_8BIT (8) 57#define MIME_ENC_BINARY (9) 58 59 /* 60 * Processing errors, not necessarily lethal. 61 */ 62typedef struct { 63 const int code; /* internal error code */ 64 const char *dsn; /* RFC 3463 */ 65 const char *text; /* descriptive text */ 66} MIME_STATE_DETAIL; 67 68#define MIME_ERR_NESTING (1<<0) 69#define MIME_ERR_TRUNC_HEADER (1<<1) 70#define MIME_ERR_8BIT_IN_HEADER (1<<2) 71#define MIME_ERR_8BIT_IN_7BIT_BODY (1<<3) 72#define MIME_ERR_ENCODING_DOMAIN (1<<4) 73 74extern const MIME_STATE_DETAIL *mime_state_detail(int); 75extern const char *mime_state_error(int); 76 77 /* 78 * With header classes, look at the header_opts argument to recognize MIME 79 * headers in primary or nested sections. 80 */ 81#define MIME_HDR_FIRST (1) /* first class */ 82#define MIME_HDR_PRIMARY (1) /* initial headers */ 83#define MIME_HDR_MULTIPART (2) /* headers after multipart boundary */ 84#define MIME_HDR_NESTED (3) /* attached message initial headers */ 85#define MIME_HDR_LAST (3) /* last class */ 86 87/* LICENSE 88/* .ad 89/* .fi 90/* The Secure Mailer license must be distributed with this software. 91/* AUTHOR(S) 92/* Wietse Venema 93/* IBM T.J. Watson Research 94/* P.O. Box 704 95/* Yorktown Heights, NY 10598, USA 96/*--*/ 97 98#endif 99