summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/mime/src/mimecth.h
blob: ed6516345221e8b0b0b38b52d2e8015ec06059a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/*
 * This is the definitions for the Content Type Handler plugins for
 * libmime. This will allow developers the dynamically add the ability
 * for libmime to render new content types in the MHTML rendering of
 * HTML messages.
 */

#ifndef _MIMECTH_H_
#define _MIMECTH_H_

#include "mimei.h"
#include "mimeobj.h"  /*  MimeObject (abstract)              */
#include "mimecont.h" /*   |--- MimeContainer (abstract)          */
#include "mimemult.h" /*   |     |--- MimeMultipart (abstract)      */
#include "mimemsig.h" /*   |     |     |--- MimeMultipartSigned (abstract)*/
#include "mimetext.h" /*   |     |--- MimeInlineText (abstract)      */
#include "mimecryp.h"

/*
  This header exposes functions that are necessary to access the
  object hierarchy for the mime chart. The class hierarchy is:

     MimeObject (abstract)
      |
      |--- MimeContainer (abstract)
      |     |
      |     |--- MimeMultipart (abstract)
      |     |     |
      |     |     |--- MimeMultipartMixed
      |     |     |
      |     |     |--- MimeMultipartDigest
      |     |     |
      |     |     |--- MimeMultipartParallel
      |     |     |
      |     |     |--- MimeMultipartAlternative
      |     |     |
      |     |     |--- MimeMultipartRelated
      |     |     |
      |     |     |--- MimeMultipartAppleDouble
      |     |     |
      |     |     |--- MimeSunAttachment
      |     |     |
      |     |     |--- MimeMultipartSigned (abstract)
      |     |          |
      |     |          |--- MimeMultipartSigned
      |     |
      |     |--- MimeXlateed (abstract)
      |     |     |
      |     |     |--- MimeXlateed
      |     |
      |     |--- MimeMessage
      |     |
      |     |--- MimeUntypedText
      |
      |--- MimeLeaf (abstract)
      |     |
      |     |--- MimeInlineText (abstract)
      |     |     |
      |     |     |--- MimeInlineTextPlain
      |     |     |
      |     |     |--- MimeInlineTextHTML
      |     |     |
      |     |     |--- MimeInlineTextRichtext
      |     |     |     |
      |     |     |     |--- MimeInlineTextEnriched
      |     |      |
      |     |      |--- MimeInlineTextVCard
      |     |
      |     |--- MimeInlineImage
      |     |
      |     |--- MimeExternalObject
      |
      |--- MimeExternalBody
 */

#include "nsIMimeContentTypeHandler.h"

/*
 * These functions are exposed by libmime to be used by content type
 * handler plugins for processing stream data.
 */
/*
 * This is the write call for outputting processed stream data.
 */
extern int MIME_MimeObject_write(MimeObject*, const char* data, int32_t length,
                                 bool user_visible_p);
/*
 * The following group of calls expose the pointers for the object
 * system within libmime.
 */
extern MimeInlineTextClass* MIME_GetmimeInlineTextClass(void);
extern MimeLeafClass* MIME_GetmimeLeafClass(void);
extern MimeObjectClass* MIME_GetmimeObjectClass(void);
extern MimeContainerClass* MIME_GetmimeContainerClass(void);
extern MimeMultipartClass* MIME_GetmimeMultipartClass(void);
extern MimeMultipartSignedClass* MIME_GetmimeMultipartSignedClass(void);
extern MimeEncryptedClass* MIME_GetmimeEncryptedClass(void);

/*
 * These are the functions that need to be implemented by the
 * content type handler plugin. They will be called by by libmime
 * when the module is loaded at runtime.
 */

/*
 * MIME_GetContentType() is called by libmime to identify the content
 * type handled by this plugin.
 */
extern "C" char* MIME_GetContentType(void);

/*
 * This will create the MimeObjectClass object to be used by the libmime
 * object system.
 */
extern "C" MimeObjectClass* MIME_CreateContentTypeHandlerClass(
    const char* content_type, contentTypeHandlerInitStruct* initStruct);

/*
 * Typedefs for libmime to use when locating and calling the above
 * defined functions.
 */
typedef char* (*mime_get_ct_fn_type)(void);
typedef MimeObjectClass* (*mime_create_class_fn_type)(
    const char*, contentTypeHandlerInitStruct*);

#endif /* _MIMECTH_H_ */