Revert accidental bogus checkin, sorry
[exim.git] / src / src / demime.h
CommitLineData
8e669ac1 1/* $Cambridge: exim/src/src/demime.h,v 1.3 2005/02/17 11:58:26 ph10 Exp $ */
8523533c
TK
2
3/*************************************************
4* Exim - an Internet mail transport agent *
5*************************************************/
6
7/* Copyright (c) Tom Kistner <tom@duncanthrax.net> 2003-???? */
8/* License: GPL */
9
10/* demime defines */
11
12#ifdef WITH_OLD_DEMIME
13
14#define MIME_DEMUX_MODE_SCANNING 0
15#define MIME_DEMUX_MODE_MIME_HEADERS 1
16#define MIME_DEMUX_MODE_BASE64 2
17#define MIME_DEMUX_MODE_QP 3
18#define MIME_DEMUX_MODE_PLAIN 4
19
20#define MIME_UU_MODE_OFF 0
21#define MIME_UU_MODE_UNCONFIRMED 1
22#define MIME_UU_MODE_CONFIRMED 2
23
24#define MIME_MAX_EXTENSION 128
25
26#define MIME_READ_LINE_EOF 0
27#define MIME_READ_LINE_OK 1
28#define MIME_READ_LINE_OVERFLOW 2
29
30#define MIME_SANITY_MAX_LINE_LENGTH 131071
31#define MIME_SANITY_MAX_FILENAME 512
32#define MIME_SANITY_MAX_HEADER_OPTION_VALUE 1024
33#define MIME_SANITY_MAX_B64_LINE_LENGTH 76
34#define MIME_SANITY_MAX_BOUNDARY_LENGTH 1024
35#define MIME_SANITY_MAX_DUMP_FILES 1024
36
37
38
39/* MIME errorlevel settings */
40
41#define MIME_ERRORLEVEL_LONG_LINE 3,US"line length in message or single header size exceeds %u bytes",MIME_SANITY_MAX_LINE_LENGTH
42#define MIME_ERRORLEVEL_TOO_MANY_PARTS 3,US"too many MIME parts (max %u)",MIME_SANITY_MAX_DUMP_FILES
43#define MIME_ERRORLEVEL_MESSAGE_PARTIAL 3,US"'message/partial' MIME type"
44#define MIME_ERRORLEVEL_FILENAME_LENGTH 3,US"proposed filename exceeds %u characters",MIME_SANITY_MAX_FILENAME
45#define MIME_ERRORLEVEL_BOUNDARY_LENGTH 3,US"boundary length exceeds %u characters",MIME_SANITY_MAX_BOUNDARY_LENGTH
46#define MIME_ERRORLEVEL_DOUBLE_HEADERS 2,US"double headers (content-type, content-disposition or content-transfer-encoding)"
47#define MIME_ERRORLEVEL_UU_MISALIGNED 1,US"uuencoded line length is not a multiple of 4 characters"
48#define MIME_ERRORLEVEL_UU_LINE_LENGTH 1,US"uuencoded line length does not match advertised number of bytes"
49#define MIME_ERRORLEVEL_B64_LINE_LENGTH 1,US"base64 line length exceeds %u characters",MIME_SANITY_MAX_B64_LINE_LENGTH
50#define MIME_ERRORLEVEL_B64_ILLEGAL_CHAR 2,US"base64 line contains illegal character"
51#define MIME_ERRORLEVEL_B64_MISALIGNED 1,US"base64 line length is not a multiple of 4 characters"
52#define MIME_ERRORLEVEL_QP_ILLEGAL_CHAR 1,US"quoted-printable encoding contains illegal character"
53
54
55/* demime structures */
56
57typedef struct mime_part {
58 /* true if there was a content-type header */
59 int seen_content_type;
60 /* true if there was a content-transfer-encoding header
61 contains the encoding type */
62 int seen_content_transfer_encoding;
63 /* true if there was a content-disposition header */
64 int seen_content_disposition;
65 /* pointer to a buffer with the proposed file extension */
66 uschar *extension;
67} mime_part;
68
69typedef struct boundary {
70 struct boundary *next;
71 uschar *boundary_string;
72} boundary;
73
74typedef struct file_extension {
75 struct file_extension *next;
76 uschar *file_extension_string;
77} file_extension;
78
79/* demime.c prototypes */
80
81unsigned int mime_hstr_i(uschar *);
82uschar *mime_decode_qp(uschar *, int *);
83int mime_get_dump_file(uschar *, FILE **, uschar *);
84int mime_header_find(uschar *, uschar *, uschar **);
85int mime_read_line(FILE *, int, uschar *, long *);
86int mime_check_boundary(uschar *, struct boundary *);
87int mime_check_uu_start(uschar *, uschar *, int *);
88long uu_decode_line(uschar *, uschar **, long, uschar *);
89long mime_decode_line(int ,uschar *, uschar **, long, uschar *);
90void mime_trigger_error(int, uschar *, ...);
91int mime_demux(FILE *, uschar *);
92
93
94
95/* BASE64 decoder matrix */
96static unsigned char b64[256]={
97/* 0 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
8e669ac1 98/* 16 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
8523533c
TK
99/* 32 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 62, 128, 128, 128, 63,
100/* 48 */ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 128, 128, 128, 255, 128, 128,
101/* 64 */ 128, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
102/* 80 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 128, 128, 128, 128, 128,
103/* 96 */ 128, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
104 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 128, 128, 128, 128, 128,
105 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
106 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
107 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
108 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
109 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
110 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
111 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
8e669ac1 112 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128
8523533c
TK
113};
114
115
116/* Microsoft-Style uudecode matrix */
117static unsigned char uudec[256]={
8e669ac1 118/* 0 */ 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
8523533c
TK
119/* 16 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
120/* 32 */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
121/* 48 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
122/* 64 */ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
123/* 80 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
124/* 96 */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
125/* 112 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
126/* 128 */ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
127/* 144 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
128/* 160 */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
129/* 176 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
130/* 192 */ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
131/* 208 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
132/* 224 */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8e669ac1 133/* 240 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
8523533c
TK
134};
135
136#endif