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