2 Copyright (C) 2000-2005 SKYRIX Software AG
4 This file is part of SOPE.
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
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.
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
22 #ifndef __NGMimeGenerator_NGMimePartGenerator_H__
23 #define __NGMimeGenerator_NGMimePartGenerator_H__
25 #import <Foundation/NSObject.h>
26 #import <NGMime/NGPart.h>
27 #import <NGMime/NGMimeGeneratorProtocols.h>
29 @class NSMutableData, NSData, NSString, NGHashMap, NGMutableHashMap;
30 @class NGMimeType, NGMimePartGenerator;
32 @interface NGMimePartGenerator : NSObject <NGMimePartGenerator>
35 NSMutableData *result; // result
36 id<NGMimePart> part; // for generating
37 id delegate; // not retained to prevent retain cycles
41 void (*appendBytes)(id,SEL,const void*,unsigned int); /* cached method
44 BOOL generatorGenerateDataForHeaderField:1;
45 BOOL generatorGeneratorForBodyOfPart:1;
46 BOOL generatorGenerateDataForBodyOfPart:1;
50 + (id)mimePartGenerator;
52 /* generating mime from MimeMessage */
53 - (NSData *)generateMimeFromPart:(id<NGMimePart>)_part;
56 /* generate mime from part and store it in the returned filename */
57 - (NSString *)generateMimeFromPartToFile:(id<NGMimePart>)_part;
59 /* build data with current mime-header and the _additionalHeaders;
60 _additionalHeaders come from generateBodyData (boundary, encoding, ...) */
61 - (NSData *)generateHeaderData:(NGHashMap *)_additionalHeaders;
63 /* build the body; use -generatorForBodyOfPart */
64 - (NSData *)generateBodyData:(NGMutableHashMap *)_additionalHeaders;
66 /* call generateHeaderData and generateBodyData; manage additionalHeaders */
69 /* set result and other stuff */
70 - (BOOL)prepareForGenerationOfPart:(id<NGMimePart>)_part;
72 /* setting the delegate */
73 - (void)setDelegate:(id)_delegate;
76 /* ----- hooks for subclasses ----- */
79 Generate a prefix and/or a suffix for a part. Can be used to write
80 HTTP response lines before the part.
82 - (BOOL)generatePrefix;
83 - (void)generateSuffix;
85 /* if no content-type is set */
86 - (NGMimeType *)defaultContentTypeForPart:(id<NGMimePart>)_part;
88 /* returns header field generator for the specified field */
89 - (id<NGMimeHeaderFieldGenerator>)generatorForHeaderField:(NSString *)_name;
91 /* build data for the specified header; employ -generatorForHeaderField */
93 - (NSData *)generateDataForHeaderField:(NSString *)_headerField
96 /* build data with the specified header; */
98 - (NSData *)generateDataWithHeaderField:(NSString *)_headerField
99 values:(NSEnumerator *)_enumerator;
101 /* looking for a NGMimeBodyGenerator in dependece to the content-type */
102 - (id<NGMimeBodyGenerator>)generatorForBodyOfPart:(id<NGMimePart>)_part;
104 /* ----- end hooks for subclasses ----- */
107 - (id<NGMimePart>)part;
111 @interface NSObject(NGMimePartGenerator)
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
118 - (NSData *)mimePartGenerator:(id<NGMimePartGenerator>)_gen
119 generateDataForHeaderField:(NSString *)_headerField
120 value:(NSEnumerator *)_value;
123 The delegate can choose, which generator should be used, to generate
124 the specified NGMimePart.
126 - (id<NGMimeBodyGenerator>)mimePartGenerator:(id<NGMimePartGenerator>)_gen
127 generatorForBodyOfPart:(id<NGMimePart>)_part;
130 The delegate has the opportunity to generate the whole body-part. Additional
131 headers like boundary can be set in _additionalHeaders.
133 - (NSData *)mimePartGenerator:(id<NGMimePartGenerator>)_gen
134 generateDataForBodyOfPart:(id<NGMimePart>)_part
135 additionalHeaders:(NGMutableHashMap *)_additionalHeaders;
138 The delegate can set prefix and suffix for a multipart.
140 - (NSString *)multipartBodyGenerator:(id<NGMimeBodyGenerator>)_bodyGen
141 prefixForPart:(id<NGMimePart>)_part;
143 - (NSString *)multipartBodyGenerator:(id<NGMimeBodyGenerator>)_bodyGen
144 suffixForPart:(id<NGMimePart>)_part;
147 The delegate can select which NGMimeBodyGenerator should de used
148 for generate the given part.
150 - (id<NGMimePartGenerator>)multipartBodyGenerator:(id<NGMimeBodyGenerator>)
151 generatorForPart:(id<NGMimePart>)_part;
154 - (void)setUseMimeData:(BOOL)_b;
158 #endif // __NGMimeGenerator_NGMimePartGenerator_H__