diff --git a/SOPE/GDLContentStore/EOAdaptorChannel+GCS.m b/SOPE/GDLContentStore/EOAdaptorChannel+GCS.m index dca32501d..0eb36facd 100644 --- a/SOPE/GDLContentStore/EOAdaptorChannel+GCS.m +++ b/SOPE/GDLContentStore/EOAdaptorChannel+GCS.m @@ -19,8 +19,10 @@ 02111-1307, USA. */ -#include "EOAdaptorChannel+GCS.h" -#include "common.h" +#import +#import + +#import "EOAdaptorChannel+GCS.h" @implementation EOAdaptorChannel(GCS) diff --git a/SOPE/GDLContentStore/EOQualifier+GCS.m b/SOPE/GDLContentStore/EOQualifier+GCS.m index 965ea77e6..ec12ae59d 100644 --- a/SOPE/GDLContentStore/EOQualifier+GCS.m +++ b/SOPE/GDLContentStore/EOQualifier+GCS.m @@ -19,8 +19,13 @@ 02111-1307, USA. */ -#include "EOQualifier+GCS.h" -#include "common.h" +#import +#import + +#import +#import + +#import "EOQualifier+GCS.h" @implementation EOQualifier(GCS) diff --git a/SOPE/GDLContentStore/GCSChannelManager.m b/SOPE/GDLContentStore/GCSChannelManager.m index e1983909d..13159677c 100644 --- a/SOPE/GDLContentStore/GCSChannelManager.m +++ b/SOPE/GDLContentStore/GCSChannelManager.m @@ -19,106 +19,126 @@ 02111-1307, USA. */ -#include "GCSChannelManager.h" -#include "NSURL+GCS.h" -#include "EOAdaptorChannel+GCS.h" -#include -#include -#include -#include "common.h" +#import +#import +#import +#import +#import +#import + +#import +#import + +#import +#import +#import + +#import "GCSChannelManager.h" +#import "NSURL+GCS.h" +#import "EOAdaptorChannel+GCS.h" /* TODO: - implemented pooling - - auto-close channels which are very old?! - (eg missing release due to an exception) + - auto-close channels which are very old?! + (eg missing release due to an exception) */ @interface GCSChannelHandle : NSObject { @public - NSURL *url; + NSURL *url; EOAdaptorChannel *channel; - NSDate *creationTime; - NSDate *lastReleaseTime; - NSDate *lastAcquireTime; + NSDate *creationTime; + NSDate *lastReleaseTime; + NSDate *lastAcquireTime; } -- (EOAdaptorChannel *)channel; -- (BOOL)canHandleURL:(NSURL *)_url; -- (NSTimeInterval)age; +- (EOAdaptorChannel *) channel; +- (BOOL) canHandleURL: (NSURL *) _url; +- (NSTimeInterval) age; @end @implementation GCSChannelManager -static BOOL debugOn = NO; -static BOOL debugPools = NO; -static int ChannelExpireAge = 180; +static BOOL debugOn = NO; +static BOOL debugPools = NO; +static int ChannelExpireAge = 180; static NSTimeInterval ChannelCollectionTimer = 5 * 60; -+ (void)initialize { ++ (void) initialize +{ NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; - - debugOn = [ud boolForKey:@"GCSChannelManagerDebugEnabled"]; - debugPools = [ud boolForKey:@"GCSChannelManagerPoolDebugEnabled"]; - - ChannelExpireAge = [[ud objectForKey:@"GCSChannelExpireAge"] intValue]; + + debugOn = [ud boolForKey: @"GCSChannelManagerDebugEnabled"]; + debugPools = [ud boolForKey: @"GCSChannelManagerPoolDebugEnabled"]; + + ChannelExpireAge = [[ud objectForKey: @"GCSChannelExpireAge"] intValue]; if (ChannelExpireAge < 1) ChannelExpireAge = 180; - - ChannelCollectionTimer = - [[ud objectForKey:@"GCSChannelCollectionTimer"] intValue]; + + ChannelCollectionTimer = + [[ud objectForKey: @"GCSChannelCollectionTimer"] intValue]; if (ChannelCollectionTimer < 1) ChannelCollectionTimer = 5*60; } -+ (NSString *)adaptorNameForURLScheme:(NSString *)_scheme { - // TODO: map scheme to adaptors (eg 'postgresql://' to PostgreSQL ++ (NSString *) adaptorNameForURLScheme: (NSString *) _scheme +{ + // TODO: map scheme to adaptors (eg 'postgresql: //' to PostgreSQL return @"PostgreSQL"; } -+ (id)defaultChannelManager { ++ (id) defaultChannelManager +{ static GCSChannelManager *cm = nil; - if (cm == nil) - cm = [[self alloc] init]; + + if (!cm) + cm = [self new]; + return cm; } -- (id)init { - if ((self = [super init])) { - self->urlToAdaptor = [[NSMutableDictionary alloc] initWithCapacity:4]; - self->availableChannels = [[NSMutableArray alloc] initWithCapacity:16]; - self->busyChannels = [[NSMutableArray alloc] initWithCapacity:16]; +- (id) init +{ + if ((self = [super init])) + { + urlToAdaptor = [[NSMutableDictionary alloc] initWithCapacity: 4]; + availableChannels = [[NSMutableArray alloc] initWithCapacity: 16]; + busyChannels = [[NSMutableArray alloc] initWithCapacity: 16]; + + gcTimer = [[NSTimer scheduledTimerWithTimeInterval: + ChannelCollectionTimer + target: self selector: @selector (_garbageCollect: ) + userInfo: nil repeats: YES] retain]; + } - self->gcTimer = [[NSTimer scheduledTimerWithTimeInterval: - ChannelCollectionTimer - target:self selector:@selector(_garbageCollect:) - userInfo:nil repeats:YES] retain]; - } return self; } -- (void)dealloc { - if (self->gcTimer) [self->gcTimer invalidate]; - [self->gcTimer release]; +- (void) dealloc +{ + if (gcTimer) + [gcTimer invalidate]; - [self->busyChannels release]; - [self->availableChannels release]; - [self->urlToAdaptor release]; + [busyChannels release]; + [availableChannels release]; + [urlToAdaptor release]; [super dealloc]; } /* DB key */ -- (NSString *)databaseKeyForURL:(NSURL *)_url { +- (NSString *) databaseKeyForURL: (NSURL *) _url +{ /* We need to build a proper key that omits passwords and URL path components which are not required. */ NSString *key; - - key = [NSString stringWithFormat:@"%@\n%@\n%@\n%@", + + key = [NSString stringWithFormat: @"%@\n%@\n%@\n%@", [_url host], [_url port], [_url user], [_url gcsDatabaseName]]; return key; @@ -126,307 +146,343 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60; /* adaptors */ -- (NSDictionary *)connectionDictionaryForURL:(NSURL *)_url { +- (NSDictionary *) connectionDictionaryForURL: (NSURL *) _url +{ NSMutableDictionary *md; id tmp; - - md = [NSMutableDictionary dictionaryWithCapacity:4]; - if ((tmp = [_url host]) != nil) - [md setObject:tmp forKey:@"hostName"]; - if ((tmp = [_url port]) != nil) - [md setObject:tmp forKey:@"port"]; - if ((tmp = [_url user]) != nil) - [md setObject:tmp forKey:@"userName"]; - if ((tmp = [_url password]) != nil) - [md setObject:tmp forKey:@"password"]; - - if ((tmp = [_url gcsDatabaseName]) != nil) - [md setObject:tmp forKey:@"databaseName"]; - - [self debugWithFormat:@"build connection dictionary for URL %@: %@", + md = [NSMutableDictionary dictionaryWithCapacity: 4]; + + if ((tmp = [_url host])) + [md setObject: tmp forKey: @"hostName"]; + if ((tmp = [_url port])) + [md setObject: tmp forKey: @"port"]; + if ((tmp = [_url user])) + [md setObject: tmp forKey: @"userName"]; + if ((tmp = [_url password])) + [md setObject: tmp forKey: @"password"]; + + if ((tmp = [_url gcsDatabaseName])) + [md setObject: tmp forKey: @"databaseName"]; + + [self debugWithFormat: @"build connection dictionary for URL %@: %@", [_url absoluteString], md]; + return md; } -- (EOAdaptor *)adaptorForURL:(NSURL *)_url { +- (EOAdaptor *) adaptorForURL: (NSURL *) _url +{ EOAdaptor *adaptor; - NSString *key; - - if (_url == nil) - return nil; - if ((key = [self databaseKeyForURL:_url]) == nil) - return nil; - if ((adaptor = [self->urlToAdaptor objectForKey:key]) != nil) { - [self debugWithFormat:@"using cached adaptor: %@", adaptor]; - return adaptor; /* cached :-) */ - } - - [self debugWithFormat:@"creating new adaptor for URL: %@", _url]; - - if ([EOAdaptor respondsToSelector:@selector(adaptorForURL:)]) { - adaptor = [EOAdaptor adaptorForURL:_url]; - } - else { - NSString *adaptorName; - NSDictionary *condict; - - adaptorName = [[self class] adaptorNameForURLScheme:[_url scheme]]; - if ([adaptorName length] == 0) { - [self errorWithFormat:@"cannot handle URL: %@", _url]; - return nil; + NSString *key; + NSString *adaptorName; + NSDictionary *condict; + + adaptor = nil; + + if (_url) + { + if ((key = [self databaseKeyForURL: _url])) + { + adaptor = [urlToAdaptor objectForKey: key]; + if (adaptor) + [self debugWithFormat: @"using cached adaptor: %@", adaptor]; + else + { + [self debugWithFormat: @"creating new adaptor for URL: %@", _url]; + + if ([EOAdaptor respondsToSelector: @selector (adaptorForURL: )]) + adaptor = [EOAdaptor adaptorForURL: _url]; + else + { + adaptorName = [[self class] + adaptorNameForURLScheme: [_url scheme]]; + if ([adaptorName length]) + { + condict = [self connectionDictionaryForURL: _url]; + + adaptor = [EOAdaptor adaptorWithName: adaptorName]; + if (adaptor) + [adaptor setConnectionDictionary: condict]; + else + [self errorWithFormat: + @"did not find adaptor '%@' for URL: %@", + adaptorName, _url]; + } + else + [self errorWithFormat: @"cannot handle URL: %@", _url]; + } + + [urlToAdaptor setObject: adaptor forKey: key]; + } + } } - - condict = [self connectionDictionaryForURL:_url]; - - if ((adaptor = [EOAdaptor adaptorWithName:adaptorName]) == nil) { - [self errorWithFormat:@"did not find adaptor '%@' for URL: %@", - adaptorName, _url]; - return nil; - } - - [adaptor setConnectionDictionary:condict]; - } - - [self->urlToAdaptor setObject:adaptor forKey:key]; + return adaptor; } /* channels */ -- (GCSChannelHandle *)findBusyChannelHandleForChannel:(EOAdaptorChannel *)_ch { +- (GCSChannelHandle *) + findBusyChannelHandleForChannel: (EOAdaptorChannel *) _ch +{ NSEnumerator *e; - GCSChannelHandle *handle; - - e = [self->busyChannels objectEnumerator]; - while ((handle = [e nextObject])) { - if ([handle channel] == _ch) - return handle; - } - return nil; -} -- (GCSChannelHandle *)findAvailChannelHandleForURL:(NSURL *)_url { - NSEnumerator *e; - GCSChannelHandle *handle; - - e = [self->availableChannels objectEnumerator]; - while ((handle = [e nextObject])) { - if ([handle canHandleURL:_url]) - return handle; - - if (debugPools) { - [self logWithFormat:@"DBPOOL: cannot use handle (%@ vs %@)", - [_url absoluteString], [handle->url absoluteString]]; - } - } - return nil; + GCSChannelHandle *handle, *currentHandle; + + handle = NULL; + + e = [busyChannels objectEnumerator]; + while (!handle && (currentHandle = [e nextObject])) + if ([currentHandle channel] == _ch) + handle = currentHandle; + + return handle; } -- (EOAdaptorChannel *)_createChannelForURL:(NSURL *)_url { - EOAdaptor *adaptor; +- (GCSChannelHandle *) findAvailChannelHandleForURL: (NSURL *) _url +{ + NSEnumerator *e; + GCSChannelHandle *handle, *currentHandle; + + handle = nil; + + e = [availableChannels objectEnumerator]; + while (!handle && (currentHandle = [e nextObject])) + if ([currentHandle canHandleURL: _url]) + handle = currentHandle; + else if (debugPools) + [self logWithFormat: @"DBPOOL: cannot use handle (%@ vs %@) ", + [_url absoluteString], [handle->url absoluteString]]; + + return handle; +} + +- (EOAdaptorChannel *) _createChannelForURL: (NSURL *) _url +{ + EOAdaptor *adaptor; EOAdaptorContext *adContext; EOAdaptorChannel *adChannel; - - if ((adaptor = [self adaptorForURL:_url]) == nil) - return nil; - - if ((adContext = [adaptor createAdaptorContext]) == nil) { - [self errorWithFormat:@"could not create adaptor context!"]; - return nil; - } - if ((adChannel = [adContext createAdaptorChannel]) == nil) { - [self errorWithFormat:@"could not create adaptor channel!"]; - return nil; - } + + adChannel = nil; + + adaptor = [self adaptorForURL: _url]; + if (adaptor) + { + adContext = [adaptor createAdaptorContext]; + if (adContext) + { + adChannel = [adContext createAdaptorChannel]; + if (!adChannel) + [self errorWithFormat: @"could not create adaptor channel!"]; + } + else + [self errorWithFormat: @"could not create adaptor context!"]; + } + return adChannel; } -- (EOAdaptorChannel *)acquireOpenChannelForURL:(NSURL *)_url { +- (EOAdaptorChannel *) acquireOpenChannelForURL: (NSURL *) _url +{ // TODO: naive implementation, add pooling! EOAdaptorChannel *channel; GCSChannelHandle *handle; - NSCalendarDate *now; + NSCalendarDate *now; + + channel = nil; now = [NSCalendarDate date]; - + /* look for cached handles */ - - if ((handle = [self findAvailChannelHandleForURL:_url]) != nil) { - // TODO: check age? - [self->busyChannels addObject:handle]; - [self->availableChannels removeObject:handle]; - ASSIGN(handle->lastAcquireTime, now); - - if (debugPools) - [self logWithFormat:@"DBPOOL: reused cached DB channel!"]; - return [[handle channel] retain]; - } - if (debugPools) { - [self logWithFormat:@"DBPOOL: create new DB channel for URL: %@", - [_url absoluteString]]; - } - - /* create channel */ - - if ((channel = [self _createChannelForURL:_url]) == nil) - return nil; - - if ([channel isOpen]) - ; - else if (![channel openChannel]) { - [self errorWithFormat:@"could not open channel %@ for URL: %@", - channel, [_url absoluteString]]; - return nil; - } - - /* create handle for channel */ - - handle = [[GCSChannelHandle alloc] init]; - handle->url = [_url retain]; - handle->channel = [channel retain]; - handle->creationTime = [now retain]; - handle->lastAcquireTime = [now retain]; - - [self->busyChannels addObject:handle]; - [handle release]; - - return [channel retain]; + handle = [self findAvailChannelHandleForURL: _url]; + if (handle) + { + // TODO: check age? + [busyChannels addObject: handle]; + [availableChannels removeObject: handle]; + ASSIGN (handle->lastAcquireTime, now); + + channel = [handle channel]; + if (debugPools) + [self logWithFormat: @"DBPOOL: reused cached DB channel! (%p)", + channel]; + } + else + { + if (debugPools) + { + [self logWithFormat: @"DBPOOL: create new DB channel for URL: %@", + [_url absoluteString]]; + } + + /* create channel */ + channel = [self _createChannelForURL: _url]; + if (channel) + { + if ([channel isOpen] + || [channel openChannel]) + { + /* create handle for channel */ + + handle = [[GCSChannelHandle alloc] init]; + handle->url = [_url retain]; + handle->channel = [channel retain]; + handle->creationTime = [now retain]; + handle->lastAcquireTime = [now retain]; + + [busyChannels addObject: handle]; + [handle release]; + } + else + [self errorWithFormat: @"could not open channel %@ for URL: %@", + channel, [_url absoluteString]]; + } + } + + return channel; } -- (void)releaseChannel:(EOAdaptorChannel *)_channel { + +- (void) releaseChannel: (EOAdaptorChannel *) _channel +{ GCSChannelHandle *handle; - - if ((handle = [self findBusyChannelHandleForChannel:_channel]) != nil) { - NSCalendarDate *now; - now = [NSCalendarDate date]; - - handle = [handle retain]; - ASSIGN(handle->lastReleaseTime, now); - - [self->busyChannels removeObject:handle]; - - if ([[handle channel] isOpen] && [handle age] < ChannelExpireAge) { - // TODO: consider age - [self->availableChannels addObject:handle]; - if (debugPools) { + handle = [self findBusyChannelHandleForChannel: _channel]; + if (handle) + { + handle = [handle retain]; + + ASSIGN (handle->lastReleaseTime, [NSCalendarDate date]); + [busyChannels removeObject: handle]; + + if ([_channel isOpen] && [handle age] < ChannelExpireAge) + { + // TODO: consider age + [availableChannels addObject: handle]; + if (debugPools) + [self logWithFormat: + @"DBPOOL: keeping channel (age %ds, #%d, %p) : %@", + (int) + [handle age], [availableChannels count], + [handle->url absoluteString], + _channel]; + } + else if (debugPools) [self logWithFormat: - @"DBPOOL: keeping channel (age %ds, #%d): %@", - (int)[handle age], [self->availableChannels count], - [handle->url absoluteString]]; - } - [_channel release]; + @"DBPOOL: freeing old channel (age %ds, %p) ", (int) + [handle age], _channel]; [handle release]; - return; } + else + { + if ([_channel isOpen]) + [_channel closeChannel]; - if (debugPools) { - [self logWithFormat: - @"DBPOOL: freeing old channel (age %ds)", (int)[handle age]]; + [_channel release]; } - - /* not reusing channel */ - [handle release]; handle = nil; - } - - if ([_channel isOpen]) - [_channel closeChannel]; - - [_channel release]; } /* checking for tables */ -- (BOOL)canConnect:(NSURL *)_url { - /* - this can check for DB connect as well as for table URLs (whether a table - exists) +- (BOOL) canConnect: (NSURL *) _url +{ + /* + this can check for DB connect as well as for table URLs (whether a table + exists) */ EOAdaptorChannel *channel; NSString *table; - BOOL result; - - if ((channel = [self acquireOpenChannelForURL:_url]) == nil) { - if (debugOn) [self debugWithFormat:@"could not acquire channel: %@", _url]; - return NO; - } - if (debugOn) [self debugWithFormat:@"acquired channel: %@", channel]; - result = YES; /* could open channel */ - - /* check whether table exists */ - - table = [_url gcsTableName]; - if ([table length] > 0) - result = [channel tableExistsWithName:table]; - - /* release channel */ - - [self releaseChannel:channel]; channel = nil; - + BOOL result; + + channel = [self acquireOpenChannelForURL: _url]; + if (channel) + { + if (debugOn) + [self debugWithFormat: @"acquired channel: %@", channel]; + + /* check whether table exists */ + table = [_url gcsTableName]; + if ([table length] > 0) + result = [channel tableExistsWithName: table]; + else + result = YES; /* could open channel */ + + /* release channel */ + [self releaseChannel: channel]; + } + else + { + if (debugOn) + [self debugWithFormat: @"could not acquire channel: %@", _url]; + result = NO; + } + return result; } /* collect old channels */ -- (void)_garbageCollect:(NSTimer *)_timer { +- (void) _garbageCollect: (NSTimer *) _timer +{ NSMutableArray *handlesToRemove; unsigned i, count; - - if ((count = [self->availableChannels count]) == 0) - /* no available channels */ - return; + GCSChannelHandle *handle; - /* collect channels to expire */ - - handlesToRemove = [[NSMutableArray alloc] initWithCapacity:4]; - for (i = 0; i < count; i++) { - GCSChannelHandle *handle; - - handle = [self->availableChannels objectAtIndex:i]; - if (![[handle channel] isOpen]) { - [handlesToRemove addObject:handle]; - continue; + count = [availableChannels count]; + if (count) + { + /* collect channels to expire */ + + handlesToRemove = [[NSMutableArray alloc] initWithCapacity: count]; + for (i = 0; i < count; i++) + { + handle = [availableChannels objectAtIndex: i]; + if ([[handle channel] isOpen]) + { + if ([handle age] > ChannelExpireAge) + [handlesToRemove addObject: handle]; + } + else + [handlesToRemove addObject: handle]; + } + + /* remove channels */ + count = [handlesToRemove count]; + if (debugPools) + [self logWithFormat: @"DBPOOL: garbage collecting %d channels.", count]; + for (i = 0; i < count; i++) + { + handle = [handlesToRemove objectAtIndex: i]; + [handle retain]; + [availableChannels removeObject: handle]; + if ([[handle channel] isOpen]) + [[handle channel] closeChannel]; + [handle release]; + } + + [handlesToRemove release]; } - if ([handle age] > ChannelExpireAge) { - [handlesToRemove addObject:handle]; - continue; - } - } - - /* remove channels */ - count = [handlesToRemove count]; - if (debugPools) - [self logWithFormat:@"DBPOOL: garbage collecting %d channels.", count]; - for (i = 0; i < count; i++) { - GCSChannelHandle *handle; - - handle = [[handlesToRemove objectAtIndex:i] retain]; - [self->availableChannels removeObject:handle]; - if ([[handle channel] isOpen]) - [[handle channel] closeChannel]; - [handle release]; - } - - [handlesToRemove release]; } /* debugging */ -- (BOOL)isDebuggingEnabled { +- (BOOL) isDebuggingEnabled +{ return debugOn; } /* description */ -- (NSString *)description { +- (NSString *) description +{ NSMutableString *ms; - ms = [NSMutableString stringWithCapacity:256]; - [ms appendFormat:@"<0x%p[%@]:", self, NSStringFromClass([self class])]; - - [ms appendFormat:@" #adaptors=%d", [self->urlToAdaptor count]]; - - [ms appendString:@">"]; + ms = [NSMutableString stringWithCapacity: 256]; + [ms appendFormat: @"<0x%p[%@]: ", self, NSStringFromClass ([self class])]; + + [ms appendFormat: @" #adaptors=%d", [urlToAdaptor count]]; + + [ms appendString: @">"]; return ms; } @@ -434,82 +490,95 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60; @implementation GCSChannelHandle -- (void)dealloc { - [self->channel release]; - [self->creationTime release]; - [self->lastReleaseTime release]; - [self->lastAcquireTime release]; +- (void) dealloc +{ + [channel release]; + [creationTime release]; + [lastReleaseTime release]; + [lastAcquireTime release]; [super dealloc]; } /* accessors */ -- (EOAdaptorChannel *)channel { - return self->channel; +- (EOAdaptorChannel *) channel +{ + return channel; } -- (BOOL)canHandleURL:(NSURL *)_url { - BOOL isSQLite; - - if (_url == nil) { - [self logWithFormat:@"MISMATCH: no url .."]; - return NO; - } - if (_url == self->url) - return YES; +- (BOOL) canHandleURL: (NSURL *) _url +{ + BOOL result; - isSQLite = [[_url scheme] isEqualToString:@"sqlite"]; - - if (!isSQLite && ![[self->url host] isEqual:[_url host]]) { - [self logWithFormat:@"MISMATCH: different host (%@ vs %@)", - [self->url host], [_url host]]; - return NO; - } - if (![[self->url gcsDatabaseName] isEqualToString:[_url gcsDatabaseName]]) { - [self logWithFormat:@"MISMATCH: different db .."]; - return NO; - } - if (!isSQLite) { - if (![[self->url user] isEqual:[_url user]]) { - [self logWithFormat:@"MISMATCH: different user .."]; - return NO; + result = NO; + + if (_url) + { + if (_url == url + || [[_url scheme] isEqualToString: @"sqlite"]) + result = YES; + else if ([[url host] isEqual: [_url host]]) + { + if ([[url gcsDatabaseName] + isEqualToString: [_url gcsDatabaseName]]) + { + if ([[url user] isEqual: [_url user]]) + { + if ([[url port] intValue] == [[_url port] intValue]) + result = YES; + else + [self logWithFormat: + @"MISMATCH: different port (%@ vs %@) ..", + [url port], [_url port]]; + } + else + [self logWithFormat: @"MISMATCH: different user .."]; + } + else + [self logWithFormat: @"MISMATCH: different db .."]; + } + else + [self logWithFormat: @"MISMATCH: different host (%@ vs %@) ", + [url host], [_url host]]; } - if ([[self->url port] intValue] != [[_url port] intValue]) { - [self logWithFormat:@"MISMATCH: different port (%@ vs %@) ..", - [self->url port], [_url port]]; - return NO; - } - } - return YES; + else + [self logWithFormat: @"MISMATCH: no url .."]; + + return result; } -- (NSTimeInterval)age { - return [[NSCalendarDate calendarDate] - timeIntervalSinceDate:self->creationTime]; +- (NSTimeInterval) age +{ + return [[NSCalendarDate calendarDate] + timeIntervalSinceDate: creationTime]; } /* NSCopying */ -- (id)copyWithZone:(NSZone *)_zone { +- (id) copyWithZone: (NSZone *) _zone +{ return [self retain]; } /* description */ -- (NSString *)description { +- (NSString *) description +{ NSMutableString *ms; - ms = [NSMutableString stringWithCapacity:256]; - [ms appendFormat:@"<0x%p[%@]:", self, NSStringFromClass([self class])]; - - [ms appendFormat:@" channel=0x%p", self->channel]; - if (self->creationTime) [ms appendFormat:@" created=%@", self->creationTime]; - if (self->lastReleaseTime) - [ms appendFormat:@" last-released=%@", self->lastReleaseTime]; - if (self->lastAcquireTime) - [ms appendFormat:@" last-acquired=%@", self->lastAcquireTime]; - - [ms appendString:@">"]; + ms = [NSMutableString stringWithCapacity: 256]; + [ms appendFormat: @"<0x%p[%@]: ", self, NSStringFromClass ([self class])]; + + [ms appendFormat: @" channel=0x%p", channel]; + if (creationTime) + [ms appendFormat: @" created=%@", creationTime]; + if (lastReleaseTime) + [ms appendFormat: @" last-released=%@", lastReleaseTime]; + if (lastAcquireTime) + [ms appendFormat: @" last-acquired=%@", lastAcquireTime]; + + [ms appendString: @">"]; + return ms; } diff --git a/SOPE/GDLContentStore/GCSContext.m b/SOPE/GDLContentStore/GCSContext.m index 17dd48574..191f2aab0 100644 --- a/SOPE/GDLContentStore/GCSContext.m +++ b/SOPE/GDLContentStore/GCSContext.m @@ -19,8 +19,7 @@ 02111-1307, USA. */ -#include "GCSContext.h" -#include "common.h" +#import "GCSContext.h" @implementation GCSContext @end /* GCSContext */ diff --git a/SOPE/GDLContentStore/GCSFieldExtractor.m b/SOPE/GDLContentStore/GCSFieldExtractor.m index 6ec8af66d..134a40343 100644 --- a/SOPE/GDLContentStore/GCSFieldExtractor.m +++ b/SOPE/GDLContentStore/GCSFieldExtractor.m @@ -19,8 +19,7 @@ 02111-1307, USA. */ -#include "GCSFieldExtractor.h" -#include "common.h" +#import "GCSFieldExtractor.h" @implementation GCSFieldExtractor diff --git a/SOPE/GDLContentStore/GCSFieldInfo.m b/SOPE/GDLContentStore/GCSFieldInfo.m index 96a8578cd..41d476c20 100644 --- a/SOPE/GDLContentStore/GCSFieldInfo.m +++ b/SOPE/GDLContentStore/GCSFieldInfo.m @@ -19,8 +19,14 @@ 02111-1307, USA. */ -#include "GCSFieldInfo.h" -#include "common.h" +#import +#import +#import + +#import +#import + +#import "GCSFieldInfo.h" @implementation GCSFieldInfo diff --git a/SOPE/GDLContentStore/GCSFolder.m b/SOPE/GDLContentStore/GCSFolder.m index 6eb8940e6..14873185f 100644 --- a/SOPE/GDLContentStore/GCSFolder.m +++ b/SOPE/GDLContentStore/GCSFolder.m @@ -21,6 +21,17 @@ 02111-1307, USA. */ +#import +#import + +#import +#import + +#import +#import +#import +#import + #import "GCSFieldInfo.h" #import "GCSFolder.h" #import "GCSFolderManager.h" @@ -31,12 +42,6 @@ #import "EOAdaptorChannel+GCS.h" #import "EOQualifier+GCS.h" #import "GCSStringFormatter.h" -#import "common.h" - -#import -#import -#import -#import typedef enum { noTableRequired = 0, diff --git a/SOPE/GDLContentStore/GCSFolderType.m b/SOPE/GDLContentStore/GCSFolderType.m index 5a59a1f42..ac29d10d0 100644 --- a/SOPE/GDLContentStore/GCSFolderType.m +++ b/SOPE/GDLContentStore/GCSFolderType.m @@ -19,13 +19,23 @@ 02111-1307, USA. */ -#include "GCSFolderType.h" -#include "GCSFolder.h" -#include "GCSFieldInfo.h" -#include "GCSFieldExtractor.h" -#include "common.h" -#include -#include +#import +#import +#import + +#import +#import +#import + +#import + +#import +#import + +#import "GCSFolderType.h" +#import "GCSFolder.h" +#import "GCSFieldInfo.h" +#import "GCSFieldExtractor.h" @implementation GCSFolderType diff --git a/SOPE/GDLContentStore/GCSStringFormatter.m b/SOPE/GDLContentStore/GCSStringFormatter.m index b08bab5e9..ff3a8258d 100644 --- a/SOPE/GDLContentStore/GCSStringFormatter.m +++ b/SOPE/GDLContentStore/GCSStringFormatter.m @@ -19,8 +19,9 @@ 02111-1307, USA. */ -#include "GCSStringFormatter.h" -#include "common.h" +#import + +#import "GCSStringFormatter.h" @implementation GCSStringFormatter diff --git a/SOPE/GDLContentStore/NSURL+GCS.m b/SOPE/GDLContentStore/NSURL+GCS.m index 285aad651..4d3f9ed15 100644 --- a/SOPE/GDLContentStore/NSURL+GCS.m +++ b/SOPE/GDLContentStore/NSURL+GCS.m @@ -19,8 +19,10 @@ 02111-1307, USA. */ -#include "NSURL+GCS.h" -#include "common.h" +#import +#import + +#import "NSURL+GCS.h" @implementation NSURL(GCS) diff --git a/SOPE/GDLContentStore/common.h b/SOPE/GDLContentStore/common.h deleted file mode 100644 index fa68afc07..000000000 --- a/SOPE/GDLContentStore/common.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright (C) 2004 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ -// $Id: common.h 673 2005-03-20 19:09:53Z helge $ - -#import -#import - -#include - -#if NeXT_RUNTIME || APPLE_RUNTIME -# define objc_free(__mem__) free(__mem__) -# define objc_malloc(__size__) malloc(__size__) -# define objc_calloc(__cnt__, __size__) calloc(__cnt__, __size__) -# define objc_realloc(__ptr__, __size__) realloc(__ptr__, __size__) -# ifndef sel_eq -# define sel_eq(sela,selb) (sela==selb?YES:NO) -# endif -#endif diff --git a/SOPE/GDLContentStore/gcs_cat.m b/SOPE/GDLContentStore/gcs_cat.m index 7cf768c2e..0145769e1 100644 --- a/SOPE/GDLContentStore/gcs_cat.m +++ b/SOPE/GDLContentStore/gcs_cat.m @@ -19,7 +19,17 @@ 02111-1307, USA. */ -#import +#import +#import +#import +#import + +#import +#import +#import + +#import +#import @class NSUserDefaults, NSArray; @class GCSFolderManager; @@ -35,10 +45,6 @@ @end -#include -#include -#include "common.h" - @implementation Tool - (id)init { diff --git a/SOPE/GDLContentStore/gcs_gensql.m b/SOPE/GDLContentStore/gcs_gensql.m index 13e0caeae..d518cef0a 100644 --- a/SOPE/GDLContentStore/gcs_gensql.m +++ b/SOPE/GDLContentStore/gcs_gensql.m @@ -19,7 +19,17 @@ 02111-1307, USA. */ -#import +#import +#import +#import +#import + +#import +#import +#import + +#import + @class NSUserDefaults, NSArray; @class GCSFolderManager; @@ -34,9 +44,6 @@ @end -#include -#include "common.h" - @implementation Tool - (id)init { diff --git a/SOPE/GDLContentStore/gcs_ls.m b/SOPE/GDLContentStore/gcs_ls.m index 20de58e94..49045abaf 100644 --- a/SOPE/GDLContentStore/gcs_ls.m +++ b/SOPE/GDLContentStore/gcs_ls.m @@ -19,7 +19,20 @@ 02111-1307, USA. */ -#import +#import +#import +#import +#import +#import +#import +#import + +#import +#import +#import + +#import +#import @class NSUserDefaults, NSArray; @class GCSFolderManager; @@ -35,10 +48,6 @@ @end -#include -#include -#include "common.h" - @implementation Tool - (id)init { diff --git a/SOPE/GDLContentStore/gcs_mkdir.m b/SOPE/GDLContentStore/gcs_mkdir.m index 9e62ee878..dc2a82aff 100644 --- a/SOPE/GDLContentStore/gcs_mkdir.m +++ b/SOPE/GDLContentStore/gcs_mkdir.m @@ -19,7 +19,17 @@ 02111-1307, USA. */ -#import +#import +#import +#import +#import + +#import +#import +#import + +#import +#import @class NSUserDefaults, NSArray; @class GCSFolderManager; @@ -35,10 +45,6 @@ @end -#include -#include -#include "common.h" - @implementation Tool - (id)init { diff --git a/SOPE/GDLContentStore/gcs_recreatequick.m b/SOPE/GDLContentStore/gcs_recreatequick.m index d68355359..2dcaedff0 100644 --- a/SOPE/GDLContentStore/gcs_recreatequick.m +++ b/SOPE/GDLContentStore/gcs_recreatequick.m @@ -19,7 +19,17 @@ 02111-1307, USA. */ -#import +#import +#import +#import +#import + +#import +#import +#import + +#import +#import @class NSUserDefaults, NSArray; @class GCSFolderManager; @@ -35,10 +45,6 @@ @end -#include -#include -#include "common.h" - @implementation Tool - (id)init { diff --git a/SOPE/sope-patchset-r1626.diff b/SOPE/sope-patchset-r1630.diff similarity index 98% rename from SOPE/sope-patchset-r1626.diff rename to SOPE/sope-patchset-r1630.diff index ca2fac4a7..e6dc7ee24 100644 --- a/SOPE/sope-patchset-r1626.diff +++ b/SOPE/sope-patchset-r1630.diff @@ -1,6 +1,6 @@ Index: sope-gdl1/PostgreSQL/PostgreSQL72Channel.m =================================================================== ---- sope-gdl1/PostgreSQL/PostgreSQL72Channel.m (révision 1626) +--- sope-gdl1/PostgreSQL/PostgreSQL72Channel.m (révision 1630) +++ sope-gdl1/PostgreSQL/PostgreSQL72Channel.m (copie de travail) @@ -713,6 +713,39 @@ return ms; @@ -44,7 +44,7 @@ Index: sope-gdl1/PostgreSQL/PostgreSQL72Channel.m @implementation PostgreSQL72Channel(PrimaryKeyGeneration) Index: sope-gdl1/Oracle8/OracleAdaptorChannel.m =================================================================== ---- sope-gdl1/Oracle8/OracleAdaptorChannel.m (révision 1626) +--- sope-gdl1/Oracle8/OracleAdaptorChannel.m (révision 1630) +++ sope-gdl1/Oracle8/OracleAdaptorChannel.m (copie de travail) @@ -30,6 +30,7 @@ @@ -139,7 +139,7 @@ Index: sope-gdl1/Oracle8/OracleAdaptorChannel.m @" c_lastmodified INTEGER NOT NULL,\n" Index: sope-gdl1/Oracle8/OracleAdaptorChannelController.m =================================================================== ---- sope-gdl1/Oracle8/OracleAdaptorChannelController.m (révision 1626) +--- sope-gdl1/Oracle8/OracleAdaptorChannelController.m (révision 1630) +++ sope-gdl1/Oracle8/OracleAdaptorChannelController.m (copie de travail) @@ -31,6 +31,8 @@ #import @@ -187,7 +187,7 @@ Index: sope-gdl1/Oracle8/OracleAdaptorChannelController.m Index: sope-mime/NGImap4/NGImap4Client.h =================================================================== ---- sope-mime/NGImap4/NGImap4Client.h (révision 1626) +--- sope-mime/NGImap4/NGImap4Client.h (révision 1630) +++ sope-mime/NGImap4/NGImap4Client.h (copie de travail) @@ -62,6 +62,8 @@ NGImap4ResponseNormalizer *normer; @@ -217,7 +217,7 @@ Index: sope-mime/NGImap4/NGImap4Client.h - (NSDictionary *)copyUid:(unsigned)_uid toFolder:(NSString *)_folder; Index: sope-mime/NGImap4/NGImap4Client.m =================================================================== ---- sope-mime/NGImap4/NGImap4Client.m (révision 1626) +--- sope-mime/NGImap4/NGImap4Client.m (révision 1630) +++ sope-mime/NGImap4/NGImap4Client.m (copie de travail) @@ -24,6 +24,8 @@ #include "NGImap4Client.h" @@ -526,7 +526,7 @@ Index: sope-mime/NGImap4/NGImap4Client.m __PRETTY_FUNCTION__, [_exception name], [_exception reason]]; Index: sope-mime/NGImap4/NGSieveClient.m =================================================================== ---- sope-mime/NGImap4/NGSieveClient.m (révision 1626) +--- sope-mime/NGImap4/NGSieveClient.m (révision 1630) +++ sope-mime/NGImap4/NGSieveClient.m (copie de travail) @@ -294,8 +294,8 @@ return con; @@ -562,7 +562,7 @@ Index: sope-mime/NGImap4/NGSieveClient.m /* write */ Index: sope-mime/NGImap4/NGImap4Connection.h =================================================================== ---- sope-mime/NGImap4/NGImap4Connection.h (révision 1626) +--- sope-mime/NGImap4/NGImap4Connection.h (révision 1630) +++ sope-mime/NGImap4/NGImap4Connection.h (copie de travail) @@ -89,6 +89,7 @@ @@ -574,7 +574,7 @@ Index: sope-mime/NGImap4/NGImap4Connection.h Index: sope-mime/NGImap4/NGImap4Connection.m =================================================================== ---- sope-mime/NGImap4/NGImap4Connection.m (révision 1626) +--- sope-mime/NGImap4/NGImap4Connection.m (révision 1630) +++ sope-mime/NGImap4/NGImap4Connection.m (copie de travail) @@ -381,7 +381,7 @@ @@ -622,7 +622,7 @@ Index: sope-mime/NGImap4/NGImap4Connection.m - (id)infoForMailboxAtURL:(NSURL *)_url { Index: sope-mime/NGImap4/NGImap4ResponseNormalizer.m =================================================================== ---- sope-mime/NGImap4/NGImap4ResponseNormalizer.m (révision 1626) +--- sope-mime/NGImap4/NGImap4ResponseNormalizer.m (révision 1630) +++ sope-mime/NGImap4/NGImap4ResponseNormalizer.m (copie de travail) @@ -292,7 +292,7 @@ /* @@ -671,7 +671,7 @@ Index: sope-mime/NGImap4/NGImap4ResponseNormalizer.m if (objs) free(objs); Index: sope-mime/NGImap4/NGImap4ResponseParser.m =================================================================== ---- sope-mime/NGImap4/NGImap4ResponseParser.m (révision 1626) +--- sope-mime/NGImap4/NGImap4ResponseParser.m (révision 1630) +++ sope-mime/NGImap4/NGImap4ResponseParser.m (copie de travail) @@ -31,6 +31,7 @@ @interface NGImap4ResponseParser(ParsingPrivates) @@ -1122,7 +1122,7 @@ Index: sope-mime/NGImap4/NGImap4ResponseParser.m self->serverResponseDebug = Index: sope-mime/NGImap4/ChangeLog =================================================================== ---- sope-mime/NGImap4/ChangeLog (révision 1626) +--- sope-mime/NGImap4/ChangeLog (révision 1630) +++ sope-mime/NGImap4/ChangeLog (copie de travail) @@ -1,3 +1,29 @@ +2008-10-23 Wolfgang Sourdeau @@ -1156,7 +1156,7 @@ Index: sope-mime/NGImap4/ChangeLog * NGImap4Connection.m: some fix for folders ending with a slash (OGo Index: sope-mime/NGImap4/NGImap4ConnectionManager.m =================================================================== ---- sope-mime/NGImap4/NGImap4ConnectionManager.m (révision 1626) +--- sope-mime/NGImap4/NGImap4ConnectionManager.m (révision 1630) +++ sope-mime/NGImap4/NGImap4ConnectionManager.m (copie de travail) @@ -38,6 +38,9 @@ debugCache = [ud boolForKey:@"NGImap4EnableIMAP4CacheDebug"]; @@ -1283,7 +1283,7 @@ Index: sope-mime/NGImap4/NGImap4ConnectionManager.m /* client object */ Index: sope-mime/NGImap4/NSString+Imap4.m =================================================================== ---- sope-mime/NGImap4/NSString+Imap4.m (révision 1626) +--- sope-mime/NGImap4/NSString+Imap4.m (révision 1630) +++ sope-mime/NGImap4/NSString+Imap4.m (copie de travail) @@ -20,11 +20,56 @@ 02111-1307, USA. @@ -1805,7 +1805,7 @@ Index: sope-mime/NGImap4/NSString+Imap4.m +@end /* NSString(Imap4) */ Index: sope-mime/NGMail/NGSmtpClient.m =================================================================== ---- sope-mime/NGMail/NGSmtpClient.m (révision 1626) +--- sope-mime/NGMail/NGSmtpClient.m (révision 1630) +++ sope-mime/NGMail/NGSmtpClient.m (copie de travail) @@ -24,6 +24,82 @@ #include "NGSmtpReplyCodes.h" @@ -1961,7 +1961,7 @@ Index: sope-mime/NGMail/NGSmtpClient.m reply = [self receiveReply]; Index: sope-mime/NGMail/NGMailAddressParser.h =================================================================== ---- sope-mime/NGMail/NGMailAddressParser.h (révision 1626) +--- sope-mime/NGMail/NGMailAddressParser.h (révision 1630) +++ sope-mime/NGMail/NGMailAddressParser.h (copie de travail) @@ -24,7 +24,9 @@ @@ -1999,7 +1999,7 @@ Index: sope-mime/NGMail/NGMailAddressParser.h Index: sope-mime/NGMail/NGMimeMessageGenerator.m =================================================================== ---- sope-mime/NGMail/NGMimeMessageGenerator.m (révision 1626) +--- sope-mime/NGMail/NGMimeMessageGenerator.m (révision 1630) +++ sope-mime/NGMail/NGMimeMessageGenerator.m (copie de travail) @@ -86,37 +86,40 @@ char *des = NULL; @@ -2065,7 +2065,7 @@ Index: sope-mime/NGMail/NGMimeMessageGenerator.m unsigned isoEndLen = 2; Index: sope-mime/NGMail/NGMailAddressParser.m =================================================================== ---- sope-mime/NGMail/NGMailAddressParser.m (révision 1626) +--- sope-mime/NGMail/NGMailAddressParser.m (révision 1630) +++ sope-mime/NGMail/NGMailAddressParser.m (copie de travail) @@ -52,9 +52,9 @@ StrClass = [NSString class]; @@ -2210,7 +2210,7 @@ Index: sope-mime/NGMail/NGMailAddressParser.m self->dataPos = 0; Index: sope-mime/NGMime/NGMimeRFC822DateHeaderFieldParser.m =================================================================== ---- sope-mime/NGMime/NGMimeRFC822DateHeaderFieldParser.m (révision 1626) +--- sope-mime/NGMime/NGMimeRFC822DateHeaderFieldParser.m (révision 1630) +++ sope-mime/NGMime/NGMimeRFC822DateHeaderFieldParser.m (copie de travail) @@ -19,88 +19,45 @@ 02111-1307, USA. @@ -2615,7 +2615,7 @@ Index: sope-mime/NGMime/NGMimeRFC822DateHeaderFieldParser.m #if 0 Index: sope-mime/NGMime/NGMimeMultipartBodyParser.m =================================================================== ---- sope-mime/NGMime/NGMimeMultipartBodyParser.m (révision 1626) +--- sope-mime/NGMime/NGMimeMultipartBodyParser.m (révision 1630) +++ sope-mime/NGMime/NGMimeMultipartBodyParser.m (copie de travail) @@ -428,6 +428,7 @@ NSString *boundary = nil; @@ -2640,7 +2640,7 @@ Index: sope-mime/NGMime/NGMimeMultipartBodyParser.m if (rawBodyParts) { Index: sope-mime/NGMime/NGMimeHeaderFieldGeneratorSet.m =================================================================== ---- sope-mime/NGMime/NGMimeHeaderFieldGeneratorSet.m (révision 1626) +--- sope-mime/NGMime/NGMimeHeaderFieldGeneratorSet.m (révision 1630) +++ sope-mime/NGMime/NGMimeHeaderFieldGeneratorSet.m (copie de travail) @@ -77,6 +77,7 @@ [rfc822Set setGenerator:gen forField:@"bcc"]; @@ -2652,7 +2652,7 @@ Index: sope-mime/NGMime/NGMimeHeaderFieldGeneratorSet.m Index: sope-mime/NGMime/NGMimeType.m =================================================================== ---- sope-mime/NGMime/NGMimeType.m (révision 1626) +--- sope-mime/NGMime/NGMimeType.m (révision 1630) +++ sope-mime/NGMime/NGMimeType.m (copie de travail) @@ -120,28 +120,23 @@ @@ -2750,7 +2750,7 @@ Index: sope-mime/NGMime/NGMimeType.m - (NSString *)stringValue { Index: sope-mime/NGMime/NGMimeBodyPart.m =================================================================== ---- sope-mime/NGMime/NGMimeBodyPart.m (révision 1626) +--- sope-mime/NGMime/NGMimeBodyPart.m (révision 1630) +++ sope-mime/NGMime/NGMimeBodyPart.m (copie de travail) @@ -31,18 +31,6 @@ return 2; @@ -2788,7 +2788,7 @@ Index: sope-mime/NGMime/NGMimeBodyPart.m - (NSString *)contentId { Index: sope-mime/NGMime/ChangeLog =================================================================== ---- sope-mime/NGMime/ChangeLog (révision 1626) +--- sope-mime/NGMime/ChangeLog (révision 1630) +++ sope-mime/NGMime/ChangeLog (copie de travail) @@ -1,3 +1,25 @@ +2008-09-08 Wolfgang Sourdeau @@ -2818,7 +2818,7 @@ Index: sope-mime/NGMime/ChangeLog * fixes for OGo bug #789 (reply-to QP encoding) Index: sope-mime/NGMime/NGMimeContentTypeHeaderFieldGenerator.m =================================================================== ---- sope-mime/NGMime/NGMimeContentTypeHeaderFieldGenerator.m (révision 1626) +--- sope-mime/NGMime/NGMimeContentTypeHeaderFieldGenerator.m (révision 1630) +++ sope-mime/NGMime/NGMimeContentTypeHeaderFieldGenerator.m (copie de travail) @@ -36,8 +36,7 @@ NGMimeType *type = nil; // only one content-type field @@ -2958,7 +2958,7 @@ Index: sope-mime/NGMime/NGMimeContentTypeHeaderFieldGenerator.m } Index: sope-mime/NGMime/NGMimePartGenerator.m =================================================================== ---- sope-mime/NGMime/NGMimePartGenerator.m (révision 1626) +--- sope-mime/NGMime/NGMimePartGenerator.m (révision 1630) +++ sope-mime/NGMime/NGMimePartGenerator.m (copie de travail) @@ -155,8 +155,9 @@ BOOL isMultiValue, isFirst; @@ -2983,7 +2983,7 @@ Index: sope-mime/NGMime/NGMimePartGenerator.m Index: sope-mime/NGMime/NGMimeBodyParser.m =================================================================== ---- sope-mime/NGMime/NGMimeBodyParser.m (révision 1626) +--- sope-mime/NGMime/NGMimeBodyParser.m (révision 1630) +++ sope-mime/NGMime/NGMimeBodyParser.m (copie de travail) @@ -67,7 +67,10 @@ if (_data == nil) return nil; @@ -2999,7 +2999,7 @@ Index: sope-mime/NGMime/NGMimeBodyParser.m Index: sope-mime/NGMime/NGMimePartParser.h =================================================================== ---- sope-mime/NGMime/NGMimePartParser.h (révision 1626) +--- sope-mime/NGMime/NGMimePartParser.h (révision 1630) +++ sope-mime/NGMime/NGMimePartParser.h (copie de travail) @@ -117,6 +117,7 @@ BOOL parserParseRawBodyDataOfPart:1; @@ -3021,7 +3021,7 @@ Index: sope-mime/NGMime/NGMimePartParser.h @interface NSObject(NGMimePartParser) Index: sope-mime/NGMime/NGMimePartParser.m =================================================================== ---- sope-mime/NGMime/NGMimePartParser.m (révision 1626) +--- sope-mime/NGMime/NGMimePartParser.m (révision 1630) +++ sope-mime/NGMime/NGMimePartParser.m (copie de travail) @@ -227,7 +227,7 @@ } @@ -3046,7 +3046,7 @@ Index: sope-mime/NGMime/NGMimePartParser.m : [NGMimeType mimeType:[ctype stringValue]]; Index: sope-mime/NGMime/NGMimeAddressHeaderFieldGenerator.m =================================================================== ---- sope-mime/NGMime/NGMimeAddressHeaderFieldGenerator.m (révision 1626) +--- sope-mime/NGMime/NGMimeAddressHeaderFieldGenerator.m (révision 1630) +++ sope-mime/NGMime/NGMimeAddressHeaderFieldGenerator.m (copie de travail) @@ -105,10 +105,10 @@ } @@ -3132,7 +3132,7 @@ Index: sope-mime/NGMime/NGMimeAddressHeaderFieldGenerator.m return data; Index: sope-mime/NGMime/NGMimeContentDispositionHeaderFieldGenerator.m =================================================================== ---- sope-mime/NGMime/NGMimeContentDispositionHeaderFieldGenerator.m (révision 1626) +--- sope-mime/NGMime/NGMimeContentDispositionHeaderFieldGenerator.m (révision 1630) +++ sope-mime/NGMime/NGMimeContentDispositionHeaderFieldGenerator.m (copie de travail) @@ -49,80 +49,70 @@ @@ -3268,7 +3268,7 @@ Index: sope-mime/NGMime/NGMimeContentDispositionHeaderFieldGenerator.m } Index: sope-core/NGExtensions/NGExtensions/NSString+Ext.h =================================================================== ---- sope-core/NGExtensions/NGExtensions/NSString+Ext.h (révision 1626) +--- sope-core/NGExtensions/NGExtensions/NSString+Ext.h (révision 1630) +++ sope-core/NGExtensions/NGExtensions/NSString+Ext.h (copie de travail) @@ -30,6 +30,7 @@ @@ -3306,7 +3306,7 @@ Index: sope-core/NGExtensions/NGExtensions/NSString+Ext.h /* specific to libFoundation */ Index: sope-core/NGExtensions/FdExt.subproj/NSString+Ext.m =================================================================== ---- sope-core/NGExtensions/FdExt.subproj/NSString+Ext.m (révision 1626) +--- sope-core/NGExtensions/FdExt.subproj/NSString+Ext.m (révision 1630) +++ sope-core/NGExtensions/FdExt.subproj/NSString+Ext.m (copie de travail) @@ -39,18 +39,6 @@ : (NSString *)[[self copy] autorelease]; @@ -3395,7 +3395,7 @@ Index: sope-core/NGExtensions/FdExt.subproj/NSString+Ext.m - (BOOL)isAbsoluteURL Index: sope-core/NGExtensions/FdExt.subproj/NSString+Encoding.m =================================================================== ---- sope-core/NGExtensions/FdExt.subproj/NSString+Encoding.m (révision 1626) +--- sope-core/NGExtensions/FdExt.subproj/NSString+Encoding.m (révision 1630) +++ sope-core/NGExtensions/FdExt.subproj/NSString+Encoding.m (copie de travail) @@ -140,8 +140,12 @@ @@ -3438,7 +3438,7 @@ Index: sope-core/NGExtensions/FdExt.subproj/NSString+Encoding.m static char *iconv_wrapper(id self, char *_src, unsigned _srcLen, Index: sope-core/NGExtensions/NGQuotedPrintableCoding.m =================================================================== ---- sope-core/NGExtensions/NGQuotedPrintableCoding.m (révision 1626) +--- sope-core/NGExtensions/NGQuotedPrintableCoding.m (révision 1630) +++ sope-core/NGExtensions/NGQuotedPrintableCoding.m (copie de travail) @@ -278,7 +278,12 @@ @@ -3456,7 +3456,7 @@ Index: sope-core/NGExtensions/NGQuotedPrintableCoding.m ((c > 31) && (c < 61)) || Index: sope-core/NGExtensions/EOExt.subproj/EOGlobalID+Ext.m =================================================================== ---- sope-core/NGExtensions/EOExt.subproj/EOGlobalID+Ext.m (révision 1626) +--- sope-core/NGExtensions/EOExt.subproj/EOGlobalID+Ext.m (révision 1630) +++ sope-core/NGExtensions/EOExt.subproj/EOGlobalID+Ext.m (copie de travail) @@ -19,6 +19,7 @@ 02111-1307, USA. @@ -3468,7 +3468,7 @@ Index: sope-core/NGExtensions/EOExt.subproj/EOGlobalID+Ext.m Index: sope-core/NGStreams/GNUmakefile.preamble =================================================================== ---- sope-core/NGStreams/GNUmakefile.preamble (révision 1626) +--- sope-core/NGStreams/GNUmakefile.preamble (révision 1630) +++ sope-core/NGStreams/GNUmakefile.preamble (copie de travail) @@ -1,7 +1,10 @@ # compilation settings @@ -3483,7 +3483,7 @@ Index: sope-core/NGStreams/GNUmakefile.preamble -I.. Index: sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.h =================================================================== ---- sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.h (révision 1626) +--- sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.h (révision 1630) +++ sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.h (copie de travail) @@ -19,6 +19,8 @@ 02111-1307, USA. @@ -3505,7 +3505,7 @@ Index: sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.h id entityResolver; Index: sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.m =================================================================== ---- sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.m (révision 1626) +--- sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.m (révision 1630) +++ sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.m (copie de travail) @@ -30,6 +30,12 @@ #include @@ -3565,7 +3565,7 @@ Index: sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.m - (void)tearDownParser { Index: sope-xml/libxmlSAXDriver/libxmlSAXDriver.m =================================================================== ---- sope-xml/libxmlSAXDriver/libxmlSAXDriver.m (révision 1626) +--- sope-xml/libxmlSAXDriver/libxmlSAXDriver.m (révision 1630) +++ sope-xml/libxmlSAXDriver/libxmlSAXDriver.m (copie de travail) @@ -614,7 +614,7 @@ xmlParseDocument(ctxt); @@ -3587,7 +3587,7 @@ Index: sope-xml/libxmlSAXDriver/libxmlSAXDriver.m xmlFreeParserCtxt(self->ctxt); Index: sope-appserver/mod_ngobjweb/config.c =================================================================== ---- sope-appserver/mod_ngobjweb/config.c (révision 1626) +--- sope-appserver/mod_ngobjweb/config.c (révision 1630) +++ sope-appserver/mod_ngobjweb/config.c (copie de travail) @@ -21,7 +21,7 @@ @@ -3600,7 +3600,7 @@ Index: sope-appserver/mod_ngobjweb/config.c if (buf == NULL) Index: sope-appserver/mod_ngobjweb/GNUmakefile =================================================================== ---- sope-appserver/mod_ngobjweb/GNUmakefile (révision 1626) +--- sope-appserver/mod_ngobjweb/GNUmakefile (révision 1630) +++ sope-appserver/mod_ngobjweb/GNUmakefile (copie de travail) @@ -82,7 +82,7 @@ @@ -3623,7 +3623,7 @@ Index: sope-appserver/mod_ngobjweb/GNUmakefile $(INSTALL_PROGRAM) $(product) /usr/libexec/httpd/ Index: sope-appserver/mod_ngobjweb/NGBufferedDescriptor.c =================================================================== ---- sope-appserver/mod_ngobjweb/NGBufferedDescriptor.c (révision 1626) +--- sope-appserver/mod_ngobjweb/NGBufferedDescriptor.c (révision 1630) +++ sope-appserver/mod_ngobjweb/NGBufferedDescriptor.c (copie de travail) @@ -23,6 +23,7 @@ #include @@ -3635,7 +3635,7 @@ Index: sope-appserver/mod_ngobjweb/NGBufferedDescriptor.c // returns the number of bytes which where read from the buffer Index: sope-appserver/NGObjWeb/GNUmakefile.postamble =================================================================== ---- sope-appserver/NGObjWeb/GNUmakefile.postamble (révision 1626) +--- sope-appserver/NGObjWeb/GNUmakefile.postamble (révision 1630) +++ sope-appserver/NGObjWeb/GNUmakefile.postamble (copie de travail) @@ -23,14 +23,20 @@ @@ -3667,7 +3667,7 @@ Index: sope-appserver/NGObjWeb/GNUmakefile.postamble + $(DESTDIR)/$(GNUSTEP_MAKEFILES)/wobundle.make Index: sope-appserver/NGObjWeb/WOContext.m =================================================================== ---- sope-appserver/NGObjWeb/WOContext.m (révision 1626) +--- sope-appserver/NGObjWeb/WOContext.m (révision 1630) +++ sope-appserver/NGObjWeb/WOContext.m (copie de travail) @@ -64,11 +64,13 @@ static BOOL testNSURLs = NO; @@ -3707,9 +3707,12 @@ Index: sope-appserver/NGObjWeb/WOContext.m serverURL = [@"http://" stringByAppendingString:host]; Index: sope-appserver/NGObjWeb/ChangeLog =================================================================== ---- sope-appserver/NGObjWeb/ChangeLog (révision 1626) +--- sope-appserver/NGObjWeb/ChangeLog (révision 1630) +++ sope-appserver/NGObjWeb/ChangeLog (copie de travail) -@@ -1,3 +1,8 @@ +@@ -3,6 +3,11 @@ + * WOHttpAdaptor/WOHttpAdaptor.m: properly embed threaded request + handler in a top-level pool (v4.7.27) + +2008-09-01 Ludovic Marcotte + + * WORequest.m ([WORequest -browserLanguages]): we ensure @@ -3720,7 +3723,7 @@ Index: sope-appserver/NGObjWeb/ChangeLog * WOHTTPURLHandle.m: add 'query' component of URL to request path Index: sope-appserver/NGObjWeb/DAVPropMap.plist =================================================================== ---- sope-appserver/NGObjWeb/DAVPropMap.plist (révision 1626) +--- sope-appserver/NGObjWeb/DAVPropMap.plist (révision 1630) +++ sope-appserver/NGObjWeb/DAVPropMap.plist (copie de travail) @@ -24,13 +24,19 @@ "{DAV:}status" = "davStatus"; @@ -3798,7 +3801,7 @@ Index: sope-appserver/NGObjWeb/DAVPropMap.plist "{http://groupdav.org/}component-set" = gdavComponentSet; Index: sope-appserver/NGObjWeb/WebDAV/SaxDAVHandler.m =================================================================== ---- sope-appserver/NGObjWeb/WebDAV/SaxDAVHandler.m (révision 1626) +--- sope-appserver/NGObjWeb/WebDAV/SaxDAVHandler.m (révision 1630) +++ sope-appserver/NGObjWeb/WebDAV/SaxDAVHandler.m (copie de travail) @@ -655,6 +655,7 @@ if (self->responses == nil) @@ -3810,7 +3813,7 @@ Index: sope-appserver/NGObjWeb/WebDAV/SaxDAVHandler.m case 'n': Index: sope-appserver/NGObjWeb/WebDAV/SoObjectWebDAVDispatcher.m =================================================================== ---- sope-appserver/NGObjWeb/WebDAV/SoObjectWebDAVDispatcher.m (révision 1626) +--- sope-appserver/NGObjWeb/WebDAV/SoObjectWebDAVDispatcher.m (révision 1630) +++ sope-appserver/NGObjWeb/WebDAV/SoObjectWebDAVDispatcher.m (copie de travail) @@ -1523,16 +1523,16 @@ - (id)doREPORT:(WOContext *)_ctx { @@ -3898,7 +3901,7 @@ Index: sope-appserver/NGObjWeb/WebDAV/SoObjectWebDAVDispatcher.m /* DAV access control lists */ Index: sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m =================================================================== ---- sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m (révision 1626) +--- sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m (révision 1630) +++ sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m (copie de travail) @@ -277,7 +277,8 @@ ok = [self renderLockToken:_object inContext:_ctx]; @@ -3912,7 +3915,7 @@ Index: sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m ok = [self renderStatusResult:_object Index: sope-appserver/NGObjWeb/WebDAV/SoObject+SoDAV.h =================================================================== ---- sope-appserver/NGObjWeb/WebDAV/SoObject+SoDAV.h (révision 1626) +--- sope-appserver/NGObjWeb/WebDAV/SoObject+SoDAV.h (révision 1630) +++ sope-appserver/NGObjWeb/WebDAV/SoObject+SoDAV.h (copie de travail) @@ -62,6 +62,7 @@ properties:(NSDictionary *)_props @@ -3924,7 +3927,7 @@ Index: sope-appserver/NGObjWeb/WebDAV/SoObject+SoDAV.h inContext:(id)_ctx; Index: sope-appserver/NGObjWeb/WODirectAction.m =================================================================== ---- sope-appserver/NGObjWeb/WODirectAction.m (révision 1626) +--- sope-appserver/NGObjWeb/WODirectAction.m (révision 1630) +++ sope-appserver/NGObjWeb/WODirectAction.m (copie de travail) @@ -46,7 +46,7 @@ } @@ -3959,7 +3962,7 @@ Index: sope-appserver/NGObjWeb/WODirectAction.m Index: sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.m =================================================================== ---- sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.m (révision 1626) +--- sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.m (révision 1630) +++ sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.m (copie de travail) @@ -216,6 +216,12 @@ assocCount++; @@ -3976,7 +3979,7 @@ Index: sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.m Index: sope-appserver/NGObjWeb/DynamicElements/_WOComplexHyperlink.m =================================================================== ---- sope-appserver/NGObjWeb/DynamicElements/_WOComplexHyperlink.m (révision 1626) +--- sope-appserver/NGObjWeb/DynamicElements/_WOComplexHyperlink.m (révision 1630) +++ sope-appserver/NGObjWeb/DynamicElements/_WOComplexHyperlink.m (copie de travail) @@ -41,6 +41,7 @@ WOAssociation *string; @@ -4009,7 +4012,7 @@ Index: sope-appserver/NGObjWeb/DynamicElements/_WOComplexHyperlink.m return NO; Index: sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.h =================================================================== ---- sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.h (révision 1626) +--- sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.h (révision 1630) +++ sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.h (copie de travail) @@ -41,7 +41,8 @@ WOAssociation *pageName; @@ -4023,7 +4026,7 @@ Index: sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.h /* 'ivar' associations */ Index: sope-appserver/NGObjWeb/SoObjects/SoObject.m =================================================================== ---- sope-appserver/NGObjWeb/SoObjects/SoObject.m (révision 1626) +--- sope-appserver/NGObjWeb/SoObjects/SoObject.m (révision 1630) +++ sope-appserver/NGObjWeb/SoObjects/SoObject.m (copie de travail) @@ -39,22 +39,34 @@ static int debugLookup = -1; @@ -4174,7 +4177,7 @@ Index: sope-appserver/NGObjWeb/SoObjects/SoObject.m Index: sope-appserver/NGObjWeb/SoObjects/SoObject+Traversal.m =================================================================== ---- sope-appserver/NGObjWeb/SoObjects/SoObject+Traversal.m (révision 1626) +--- sope-appserver/NGObjWeb/SoObjects/SoObject+Traversal.m (révision 1630) +++ sope-appserver/NGObjWeb/SoObjects/SoObject+Traversal.m (copie de travail) @@ -195,7 +195,8 @@ isCreateIfMissingMethod = YES; @@ -4188,7 +4191,7 @@ Index: sope-appserver/NGObjWeb/SoObjects/SoObject+Traversal.m // TODO: the following are only create-if-missing on the target! Index: sope-appserver/NGObjWeb/WOHttpAdaptor/WOHttpTransaction.m =================================================================== ---- sope-appserver/NGObjWeb/WOHttpAdaptor/WOHttpTransaction.m (révision 1626) +--- sope-appserver/NGObjWeb/WOHttpAdaptor/WOHttpTransaction.m (révision 1630) +++ sope-appserver/NGObjWeb/WOHttpAdaptor/WOHttpTransaction.m (copie de travail) @@ -32,6 +32,7 @@ #include @@ -4213,7 +4216,7 @@ Index: sope-appserver/NGObjWeb/WOHttpAdaptor/WOHttpTransaction.m @implementation WOCoreApplication(SimpleParserSelection) Index: sope-appserver/NGObjWeb/Defaults.plist =================================================================== ---- sope-appserver/NGObjWeb/Defaults.plist (révision 1626) +--- sope-appserver/NGObjWeb/Defaults.plist (révision 1630) +++ sope-appserver/NGObjWeb/Defaults.plist (copie de travail) @@ -216,7 +216,7 @@ SoWebDAVDisableCrossHostMoveCheck = NO; @@ -4234,7 +4237,7 @@ Index: sope-appserver/NGObjWeb/Defaults.plist DELETE, Index: sope-appserver/NGObjWeb/WORequest.m =================================================================== ---- sope-appserver/NGObjWeb/WORequest.m (révision 1626) +--- sope-appserver/NGObjWeb/WORequest.m (révision 1630) +++ sope-appserver/NGObjWeb/WORequest.m (copie de travail) @@ -597,6 +597,8 @@ if (r.length > 0) @@ -4247,7 +4250,7 @@ Index: sope-appserver/NGObjWeb/WORequest.m if ((tmp = [self languageForBrowserLanguageCode:language])) Index: sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.h =================================================================== ---- sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.h (révision 1626) +--- sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.h (révision 1630) +++ sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.h (copie de travail) @@ -62,6 +62,10 @@ /* RFC 3253 (DeltaV) */ @@ -4262,7 +4265,7 @@ Index: sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.h Index: sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.m =================================================================== ---- sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.m (révision 1626) +--- sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.m (révision 1630) +++ sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.m (copie de travail) @@ -59,6 +59,10 @@ /* RFC 3253 (DeltaV) */