Weekend W.I.P. checkin
[users/jgh/exim.git] / src / src / mime.h
1 /* $Cambridge: exim/src/src/mime.h,v 1.1.2.2 2004/11/26 16:04:26 tom Exp $ */
2
3 /*************************************************
4 *     Exim - an Internet mail transport agent    *
5 *************************************************/
6
7 #ifdef WITH_CONTENT_SCAN
8
9 /* Copyright (c) Tom Kistner <tom@duncanthrax.net> 2004 */
10 /* License: GPL */
11
12
13 #define MIME_MAX_HEADER_SIZE 8192
14 #define MIME_MAX_LINE_LENGTH 32768
15
16 #define MBC_ATTACHMENT            0
17 #define MBC_COVERLETTER_ONESHOT   1
18 #define MBC_COVERLETTER_ALL       2
19
20 struct mime_boundary_context
21 {
22   struct mime_boundary_context *parent;
23   unsigned char *boundary;
24   int context;
25 };
26
27 typedef struct mime_header {
28   uschar *name;
29   int    namelen;
30   void   *value;
31 } mime_header;
32
33 static mime_header mime_header_list[] = {
34   { US"content-type:", 13, &mime_content_type },
35   { US"content-disposition:", 20, &mime_content_disposition },
36   { US"content-transfer-encoding:", 26, &mime_content_transfer_encoding },
37   { US"content-id:", 11, &mime_content_id },
38   { US"content-description:", 20 , &mime_content_description }
39 };
40
41 static int mime_header_list_size = sizeof(mime_header_list)/sizeof(mime_header);
42
43
44
45 typedef struct mime_parameter {
46   uschar *name;
47   int    namelen;
48   void   *value;
49 } mime_parameter;
50
51 static mime_parameter mime_parameter_list[] = {
52   { US"name=", 5, &mime_filename },
53   { US"filename=", 9, &mime_filename },
54   { US"charset=", 8, &mime_charset },
55   { US"boundary=", 9, &mime_boundary }
56 };
57
58 static int mime_parameter_list_size = sizeof(mime_parameter_list)/sizeof(mime_parameter);
59
60 /* BASE64 decoder matrix */
61 static unsigned char mime_b64[256]={
62 /*   0 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
63 /*  16 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128, 
64 /*  32 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,   62,  128,  128,  128,   63,
65 /*  48 */   52,   53,   54,   55,   56,   57,   58,   59,   60,   61,  128,  128,  128,  255,  128,  128,
66 /*  64 */  128,    0,    1,    2,    3,    4,    5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
67 /*  80 */   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,   25,  128,  128,  128,  128,  128,
68 /*  96 */  128,   26,   27,   28,   29,   30,   31,   32,   33,   34,   35,   36,   37,   38,   39,   40,
69 /* 112 */   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,   51,  128,  128,  128,  128,  128,
70 /* 128 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
71 /* 144 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
72 /* 160 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
73 /* 176 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
74 /* 192 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
75 /* 208 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
76 /* 224 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
77 /* 240 */  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128,  128 
78 };
79
80 #endif