]> err.no Git - sope/blob - sope-mime/NGMime/NGMimePartGenerator.h
fixed copyrights for 2005
[sope] / sope-mime / NGMime / NGMimePartGenerator.h
1 /*
2   Copyright (C) 2000-2005 SKYRIX Software AG
3
4   This file is part of SOPE.
5
6   SOPE is free software; you can redistribute it and/or modify it under
7   the terms of the GNU Lesser General Public License as published by the
8   Free Software Foundation; either version 2, or (at your option) any
9   later version.
10
11   SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
12   WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14   License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with SOPE; see the file COPYING.  If not, write to the
18   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19   02111-1307, USA.
20 */
21
22 #ifndef __NGMimeGenerator_NGMimePartGenerator_H__
23 #define __NGMimeGenerator_NGMimePartGenerator_H__
24
25 #import <Foundation/NSObject.h>
26 #import <NGMime/NGPart.h>
27 #import <NGMime/NGMimeGeneratorProtocols.h>
28
29 @class NSMutableData, NSData, NSString, NGHashMap, NGMutableHashMap;
30 @class NGMimeType, NGMimePartGenerator;
31
32 @interface NGMimePartGenerator : NSObject <NGMimePartGenerator>
33 {
34 @protected
35   NSMutableData  *result;  // result
36   id<NGMimePart> part;     // for generating
37   id             delegate; // not retained to prevent retain cycles
38
39   BOOL           useMimeData;
40   
41   void (*appendBytes)(id,SEL,const void*,unsigned int); /* cached method
42                                                            for result */
43   struct {
44     BOOL generatorGenerateDataForHeaderField:1;
45     BOOL generatorGeneratorForBodyOfPart:1;
46     BOOL generatorGenerateDataForBodyOfPart:1;
47   } delegateRespondsTo;
48 }
49
50 + (id)mimePartGenerator;
51
52 /* generating mime from MimeMessage */
53 - (NSData *)generateMimeFromPart:(id<NGMimePart>)_part;
54
55
56 /* generate mime from part and store it in the returned filename */
57 - (NSString *)generateMimeFromPartToFile:(id<NGMimePart>)_part;
58
59 /* build data with current mime-header and the _additionalHeaders;
60    _additionalHeaders come from generateBodyData (boundary, encoding, ...) */
61 - (NSData *)generateHeaderData:(NGHashMap *)_additionalHeaders;
62
63 /* build the body; use -generatorForBodyOfPart */
64 - (NSData *)generateBodyData:(NGMutableHashMap *)_additionalHeaders;
65
66 /* call generateHeaderData and generateBodyData; manage additionalHeaders */
67 - (void)generateData;
68
69 /* set result and other stuff */
70 - (BOOL)prepareForGenerationOfPart:(id<NGMimePart>)_part;
71
72 /* setting the delegate */
73 - (void)setDelegate:(id)_delegate;
74 - (id)delegate;
75
76 /* ----- hooks for subclasses ----- */
77
78 /*
79   Generate a prefix and/or a suffix for a part. Can be used to write
80   HTTP response lines before the part.
81 */
82 - (BOOL)generatePrefix;
83 - (void)generateSuffix;
84
85 /* if no content-type is set */
86 - (NGMimeType *)defaultContentTypeForPart:(id<NGMimePart>)_part;
87
88 /* returns header field generator for the specified field */
89 - (id<NGMimeHeaderFieldGenerator>)generatorForHeaderField:(NSString *)_name;
90
91 /* build data for the specified header; employ -generatorForHeaderField */
92
93 - (NSData *)generateDataForHeaderField:(NSString *)_headerField
94   value:(id)_value;
95
96 /* build data with the specified header; */
97
98 - (NSData *)generateDataWithHeaderField:(NSString *)_headerField
99   values:(NSEnumerator *)_enumerator;
100
101 /* looking for a NGMimeBodyGenerator in dependece to the content-type */
102 - (id<NGMimeBodyGenerator>)generatorForBodyOfPart:(id<NGMimePart>)_part;
103
104 /* ----- end hooks for subclasses ----- */
105
106 /* accessors */
107 - (id<NGMimePart>)part;
108
109 @end
110
111 @interface NSObject(NGMimePartGenerator)
112
113 /*
114   The delegete has the opportunity to generate data for specified
115   header-field with the given enumerator. The classes of the values depends
116   on the _headerField name, normaly they are NSStrings
117 */   
118 - (NSData *)mimePartGenerator:(id<NGMimePartGenerator>)_gen
119   generateDataForHeaderField:(NSString *)_headerField
120   value:(NSEnumerator *)_value;
121
122 /*
123   The delegate can choose, which generator should be used, to generate
124   the specified NGMimePart.
125 */
126 - (id<NGMimeBodyGenerator>)mimePartGenerator:(id<NGMimePartGenerator>)_gen
127   generatorForBodyOfPart:(id<NGMimePart>)_part;
128
129 /*
130   The delegate has the opportunity to generate the whole body-part. Additional
131   headers like boundary can be set in _additionalHeaders.
132 */
133 - (NSData *)mimePartGenerator:(id<NGMimePartGenerator>)_gen
134   generateDataForBodyOfPart:(id<NGMimePart>)_part
135   additionalHeaders:(NGMutableHashMap *)_additionalHeaders;
136
137 /*
138   The delegate can set prefix and suffix for a multipart.
139 */
140 - (NSString *)multipartBodyGenerator:(id<NGMimeBodyGenerator>)_bodyGen
141   prefixForPart:(id<NGMimePart>)_part;
142
143 - (NSString *)multipartBodyGenerator:(id<NGMimeBodyGenerator>)_bodyGen
144   suffixForPart:(id<NGMimePart>)_part;
145
146 /*
147   The delegate can select which NGMimeBodyGenerator should de used
148   for generate the given part.
149 */  
150 - (id<NGMimePartGenerator>)multipartBodyGenerator:(id<NGMimeBodyGenerator>)
151   generatorForPart:(id<NGMimePart>)_part;
152
153 - (BOOL)useMimeData;
154 - (void)setUseMimeData:(BOOL)_b;
155
156 @end
157
158 #endif // __NGMimeGenerator_NGMimePartGenerator_H__