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 #include "NGMimeBodyGenerator.h"
23 #include "NGMimePartGenerator.h"
26 @implementation NGMimeBodyGenerator
28 static BOOL debugOn = NO;
34 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
36 debugOn = [ud boolForKey:@"NGMimeGeneratorDebugEnabled"];
38 NSLog(@"WARNING[%@]: NGMimeGeneratorDebugEnabled is enabled!", self);
41 /* generate data for body */
43 - (NSData *)generateBodyOfPart:(id<NGMimePart>)_part
44 additionalHeaders:(NGMutableHashMap *)_addHeaders
45 delegate:(id)_delegate
50 data = [self encodeData:input
52 additionalHeaders:_addHeaders];
54 [self debugWithFormat:@"encoded %d bytes to %d bytes (same=%s, class=%@)",
55 [input length], [data length],
56 input == data ? "yes" : "no",
57 NSStringFromClass([data class])];
62 /* properly encode data for transfer (eg to 7bit for email) */
64 - (NSData *)encodeData:(NSData *)_data
65 forPart:(id<NGMimePart>)_part
66 additionalHeaders:(NGMutableHashMap *)_addHeaders
71 /* manage data storage */
73 - (void)setUseMimeData:(BOOL)_b {
74 self->useMimeData = _b;
77 return self->useMimeData;
82 - (BOOL)isDebuggingEnabled {
86 @end /* NGMimeBodyGenerator */
89 @implementation NGMimeTextBodyGenerator
95 NSAssert2([super version] == 2,
96 @"invalid superclass (%@) version %i !",
97 NSStringFromClass([self superclass]), [super version]);
100 - (NSData *)generateBodyOfPart:(id<NGMimePart>)_part
101 additionalHeaders:(NGMutableHashMap *)_addHeaders
102 delegate:(id)_delegate
104 NSStringEncoding encoding;
108 encoding = [NSString defaultCStringEncoding];
112 if ([body isKindOfClass:[NSString class]]) {
113 // TODO: deal with charset in content-type!
114 data = [body dataUsingEncoding:encoding];
116 else if ([body respondsToSelector:@selector(bytes)])
118 else if ([body respondsToSelector:@selector(dataUsingEncoding:)])
119 data = [body dataUsingEncoding:encoding];
120 else if (body != nil) {
121 [self logWithFormat:@"ERROR: unexpected part body: %@", body];
126 [self logWithFormat:@"WARNING(%s): generate empty body",
127 __PRETTY_FUNCTION__];
128 data = [NSData data];
130 return [self encodeData:data forPart:_part additionalHeaders:_addHeaders];
133 @end /* NGMimeTextBodyGenerator */
136 @implementation NGMimeRfc822BodyGenerator
142 NSAssert2([super version] == 2,
143 @"invalid superclass (%@) version %i !",
144 NSStringFromClass([self superclass]), [super version]);
147 - (id<NGMimePartGenerator>)generatorForPart:(id<NGMimePart>)_part {
150 g = [[[NGMimePartGenerator alloc] init] autorelease];
151 [g setUseMimeData:self->useMimeData];
155 - (NSData *)generateBodyOfPart:(id<NGMimePart>)_part
156 additionalHeaders:(NGMutableHashMap *)_addHeaders
157 delegate:(id)_delegate
160 NGMimePartGenerator *gen;
162 gen = (NGMimePartGenerator *)[self generatorForPart:_part];
163 [gen setDelegate:_delegate];
164 data = [gen generateMimeFromPart:[_part body]];
168 @end /* NGMimeRfc822BodyGenerator */