From f805951939472c631bb9e574d9a0e40593f5d719 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 19 Apr 2011 22:22:26 +0000 Subject: [PATCH] Monotone-Parent: b062a471e751aff2d35891675a50d0fff8918047 Monotone-Revision: ab9f5dfc9882f0fa2e4df964b47cb60942c58c9a Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-04-19T22:22:26 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 13 ++++ OpenChange/MAPIStoreContext.h | 8 -- OpenChange/MAPIStoreContext.m | 121 +----------------------------- OpenChange/MAPIStoreMailMessage.m | 24 +----- OpenChange/MAPIStoreSOGo.m | 64 ---------------- OpenChange/MAPIStoreTypes.h | 1 - OpenChange/MAPIStoreTypes.m | 30 -------- 7 files changed, 17 insertions(+), 244 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6341ebf05..edb171417 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 2011-04-19 Wolfgang Sourdeau + * OpenChange/MAPIStoreMailMessage.m (-getPrBody:): no longer check + the size of the returned content, as streams are now handled + internally by OpenChange. + (-getPrHtml): same as above. + + * OpenChange/MAPIStoreTypes.m (NSObjectFromStreamData): removed + helper function as it's no longer used. + + * OpenChange/MAPIStoreSOGo.m (sogo_op_set_property_from_fd) + (sogo_op_get_property_into_fd): those backend methods are no + longer used, as OpenChange handles the property streams internally + now. + * OpenChange/gen-property-selectors.py: added code to generate MAPIStoreSupportedProperties as the array of properties that are handled by OpenChange and MAPIStoreSupportedPropertiesCount as the diff --git a/OpenChange/MAPIStoreContext.h b/OpenChange/MAPIStoreContext.h index 2f886cb68..bd0296071 100644 --- a/OpenChange/MAPIStoreContext.h +++ b/OpenChange/MAPIStoreContext.h @@ -133,14 +133,6 @@ - (int) setPropertiesWithFMID: (uint64_t) fmid ofTableType: (uint8_t) tableType inRow: (struct SRow *) aRow; -- (int) setProperty: (enum MAPITAGS) property - withFMID: (uint64_t) fmid - ofTableType: (uint8_t) tableType - fromFile: (NSFileHandle *) aFile; -- (int) getProperty: (enum MAPITAGS) property - withFMID: (uint64_t) fmid - ofTableType: (uint8_t) tableType - intoFile: (NSFileHandle *) aFile; - (int) modifyRecipientsWithMID: (uint64_t) mid inRows: (struct ModifyRecipientRow *) rows withCount: (NSUInteger) max; diff --git a/OpenChange/MAPIStoreContext.m b/OpenChange/MAPIStoreContext.m index 9f3600edf..9d942ed3e 100644 --- a/OpenChange/MAPIStoreContext.m +++ b/OpenChange/MAPIStoreContext.m @@ -21,7 +21,6 @@ */ #import -#import #import #import #import @@ -848,14 +847,14 @@ _prepareContextClass (struct mapistore_context *newMemCtx, { if (propRc == MAPISTORE_ERR_NOT_FOUND) propRc = MAPI_E_NOT_FOUND; - else if (propRc == MAPISTORE_ERR_NO_MEMORY) - propRc = MAPI_E_NOT_ENOUGH_MEMORY; + // else if (propRc == MAPISTORE_ERR_NO_MEMORY) + // propRc = MAPI_E_NOT_ENOUGH_MEMORY; if (propValue) talloc_free (propValue); propValue = MAPILongValue (memCtx, propRc); tag = (tag & 0xffff0000) | 0x000a; } - set_SPropValue_proptag (aRow->lpProps + count, tag, propValue); + set_SPropValue_proptag (aRow->lpProps + count, tag, propValue); } } talloc_free (data); @@ -982,120 +981,6 @@ _prepareContextClass (struct mapistore_context *newMemCtx, return rc; } -- (int) setProperty: (enum MAPITAGS) property - withFMID: (uint64_t) fmid - ofTableType: (uint8_t) tableType - fromFile: (NSFileHandle *) aFile -{ - MAPIStoreMessage *message; - NSNumber *midKey; - NSData *fileData; - const char *propName; - int rc; - - propName = get_proptag_name (property); - if (!propName) - propName = ""; - [self logWithFormat: @"METHOD '%s' -- property: %s(%.8x), fmid: 0x%.16x, tableType: %d", - __FUNCTION__, propName, property, fmid, tableType]; - - fileData = [aFile readDataToEndOfFile]; - switch (tableType) - { - case MAPISTORE_MESSAGE: - midKey = [NSNumber numberWithUnsignedLongLong: fmid]; - message = [messages objectForKey: midKey]; - if (message) - { - [message addNewProperties: - [NSDictionary - dictionaryWithObject: NSObjectFromStreamData (property, - fileData) - forKey: MAPIPropertyKey (property)]]; - rc = MAPISTORE_SUCCESS; - } - else - rc = MAPISTORE_ERR_NOT_FOUND; - break; - case MAPISTORE_FOLDER: - default: - [self errorWithFormat: @"%s: value of tableType not handled: %d", - __FUNCTION__, tableType]; - rc = MAPISTORE_ERROR; - } - - return rc; -} - -- (int) getProperty: (enum MAPITAGS) property - withFMID: (uint64_t) fmid - ofTableType: (uint8_t) tableType - intoFile: (NSFileHandle *) aFile -{ - MAPIStoreMessage *message; - NSNumber *midKey; - NSData *fileData; - const char *propName; - enum MAPISTATUS rc; - - propName = get_proptag_name (property); - if (!propName) - propName = ""; - [self logWithFormat: @"METHOD '%s' -- property: %s(%.8x), fmid: 0x%.16x, tableType: %d", - __FUNCTION__, propName, property, fmid, tableType]; - - switch (tableType) - { - case MAPISTORE_MESSAGE: - midKey = [NSNumber numberWithUnsignedLongLong: fmid]; - message = [messages objectForKey: midKey]; - if (message) - { - fileData = [[message newProperties] objectForKey: MAPIPropertyKey (property)]; - if ([fileData isKindOfClass: NSStringK]) - fileData = [fileData dataUsingEncoding: NSUTF16LittleEndianStringEncoding]; - if (fileData) - { - if (![fileData isKindOfClass: NSDataK]) - [self - errorWithFormat: @"data class not handled for streams: %@", - NSStringFromClass ([fileData class])]; - [aFile writeData: fileData]; - rc = MAPI_E_SUCCESS; - } - else - { - [self errorWithFormat: @"no data for property %s(%.8x)" - @" in mid %.16x", propName, property, fmid]; - rc = MAPI_E_NOT_FOUND; - } - } - else - { - [self errorWithFormat: @"no message found with mid %.16x", fmid]; - rc = MAPI_E_INVALID_OBJECT; - } - break; - - // [message setObject: NSObjectFromStreamData (property, fileData) - // forKey: MAPIPropertyNumber (property)]; - // rc = MAPISTORE_SUCCESS; - // } - // else - case MAPISTORE_FOLDER: - [self errorWithFormat: @"%s: folder properties not handled yet", - __FUNCTION__]; - rc = MAPI_E_NOT_FOUND; - break; - default: - [self errorWithFormat: @"%s: value of tableType not handled: %d", - __FUNCTION__, tableType]; - rc = MAPI_E_INVALID_OBJECT; - } - - return rc; -} - - (NSDictionary *) _convertRecipientFromRow: (struct RecipientRow *) row { NSMutableDictionary *recipient; diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index 8d89d9941..2c02b7dce 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -512,16 +512,6 @@ static Class NSExceptionK, MAPIStoreSentItemsFolderK, MAPIStoreDraftsFolderK; bodyStringFromCharset: charset]; *data = [stringValue asUnicodeInMemCtx: memCtx]; - if (strlen (*data) > 16384) - { - /* TODO: currently a hack to transfer properties as - streams */ - [newProperties setObject: stringValue - forKey: MAPIPropertyKey (PR_BODY_UNICODE)]; - *data = NULL; - rc = MAPI_E_NOT_ENOUGH_MEMORY; - [self logWithFormat: @"PR_BODY data too wide"]; - } } else rc = MAPISTORE_ERR_NOT_FOUND; @@ -581,19 +571,7 @@ static Class NSExceptionK, MAPIStoreSentItemsFolderK, MAPIStoreDraftsFolderK; = [sogoObject lookupInfoForBodyPart: [key _strippedBodyKey]]; encoding = [partHeaderData objectForKey: @"encoding"]; content = [content bodyDataFromEncoding: encoding]; - - if ([content length] > 16384) - { - /* TODO: currently a hack to transfer properties as - streams */ - [newProperties setObject: content - forKey: MAPIPropertyKey (PR_HTML)]; - *data = NULL; - rc = MAPI_E_NOT_ENOUGH_MEMORY; - [self logWithFormat: @"PR_HTML data too wide"]; - } - else - *data = [content asBinaryInMemCtx: memCtx]; + *data = [content asBinaryInMemCtx: memCtx]; } else { diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index 405362ce5..f9973c3a8 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -632,68 +632,6 @@ sogo_op_setprops(void *private_data, return rc; } -static int -sogo_op_set_property_from_fd(void *private_data, - uint64_t fmid, uint8_t type, - uint32_t property, int fd) -{ - NSAutoreleasePool *pool; - sogo_context *cContext; - MAPIStoreContext *context; - NSFileHandle *fileHandle; - int rc; - - DEBUG (5, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__)); - - pool = [NSAutoreleasePool new]; - - cContext = private_data; - context = cContext->objcContext; - [context setupRequest]; - - fileHandle = [[NSFileHandle alloc] initWithFileDescriptor: fd - closeOnDealloc: NO]; - rc = [context setProperty: property withFMID: fmid ofTableType: type - fromFile: fileHandle]; - [fileHandle release]; - - [context tearDownRequest]; - [pool release]; - - return rc; -} - -static int -sogo_op_get_property_into_fd(void *private_data, - uint64_t fmid, uint8_t type, - uint32_t property, int fd) -{ - NSAutoreleasePool *pool; - sogo_context *cContext; - MAPIStoreContext *context; - NSFileHandle *fileHandle; - int rc; - - DEBUG (5, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__)); - - pool = [NSAutoreleasePool new]; - - cContext = private_data; - context = cContext->objcContext; - [context setupRequest]; - - fileHandle = [[NSFileHandle alloc] initWithFileDescriptor: fd - closeOnDealloc: NO]; - rc = [context getProperty: property withFMID: fmid ofTableType: type - intoFile: fileHandle]; - [fileHandle release]; - - [context tearDownRequest]; - [pool release]; - - return rc; -} - static int sogo_op_modifyrecipients(void *private_data, uint64_t mid, @@ -1291,8 +1229,6 @@ int mapistore_init_backend(void) backend.op_setprops = sogo_op_setprops; backend.op_getprops = sogo_op_getprops; - backend.op_set_property_from_fd = sogo_op_set_property_from_fd; - backend.op_get_property_into_fd = sogo_op_get_property_into_fd; /* proof of concept */ backend.folder.open_table = sogo_pocop_open_table; diff --git a/OpenChange/MAPIStoreTypes.h b/OpenChange/MAPIStoreTypes.h index b6fd47bb2..fd20b8e73 100644 --- a/OpenChange/MAPIStoreTypes.h +++ b/OpenChange/MAPIStoreTypes.h @@ -38,7 +38,6 @@ double *MAPIDoubleValue (void *memCtx, double value); id NSObjectFromSPropValue (const struct SPropValue *); id NSObjectFromMAPISPropValue (const struct mapi_SPropValue *); -id NSObjectFromStreamData (enum MAPITAGS property, NSData *streamData); static inline NSNumber * MAPIPropertyKey (enum MAPITAGS propTag) diff --git a/OpenChange/MAPIStoreTypes.m b/OpenChange/MAPIStoreTypes.m index a4d35c024..d8b971b54 100644 --- a/OpenChange/MAPIStoreTypes.m +++ b/OpenChange/MAPIStoreTypes.m @@ -204,36 +204,6 @@ NSObjectFromSPropValue (const struct SPropValue *value) return result; } -id NSObjectFromStreamData (enum MAPITAGS property, NSData* streamData) -{ - short int valueType; - id result; - - valueType = (property & 0xffff); - switch (valueType) - { - case PT_UNICODE: - case PT_STRING8: - result = [NSString stringWithCharacters: (unichar *) [streamData bytes] - length: [streamData length] / 2]; - break; - case PT_BINARY: - result = streamData; - break; - case PT_OBJECT: - result = [NSNull null]; - NSLog (@"%s: object type not handled: %d (0x%.4x)", - __PRETTY_FUNCTION__, valueType, valueType); - break; - default: - [NSException raise: @"MAPIStoreStreamTypeException" - format: @"invalid data type"]; - result = nil; - } - - return result; -} - void MAPIStoreDumpMessageProperties (NSDictionary *properties) {