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];
111 if ([body isKindOfClass:[NSString class]]) {
112 // TODO: deal with charset in content-type!
113 data = [body dataUsingEncoding:encoding];
119 NSLog(@"WARNING: textBodyGenerator expect that body is"
120 @" kind of class NSString");
124 NSLog(@"WARNING(%s): generate empty body", __PRETTY_FUNCTION__);
125 data = [NSData data];
127 return [self encodeData:data forPart:_part additionalHeaders:_addHeaders];
130 @end /* NGMimeTextBodyGenerator */
133 @implementation NGMimeRfc822BodyGenerator
139 NSAssert2([super version] == 2,
140 @"invalid superclass (%@) version %i !",
141 NSStringFromClass([self superclass]), [super version]);
144 - (id<NGMimePartGenerator>)generatorForPart:(id<NGMimePart>)_part {
147 g = [[[NGMimePartGenerator alloc] init] autorelease];
148 [g setUseMimeData:self->useMimeData];
152 - (NSData *)generateBodyOfPart:(id<NGMimePart>)_part
153 additionalHeaders:(NGMutableHashMap *)_addHeaders
154 delegate:(id)_delegate
157 NGMimePartGenerator *gen;
159 gen = (NGMimePartGenerator *)[self generatorForPart:_part];
160 [gen setDelegate:_delegate];
161 data = [gen generateMimeFromPart:[_part body]];
165 @end /* NGMimeRfc822BodyGenerator */