diff -r 238255e8b033 -r 84d9eb65b26f messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/UniMimeInfo.cpp --- a/messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/UniMimeInfo.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,338 +0,0 @@ -/* -* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* CUniMimeInfo, Storage for objects mime headers. -* -* -*/ - - -// ========== INCLUDE FILES ================================ - -#include // for basic types -#include // for CBase -#include // for TMsvId -#include // for KMsvTempIndexEntryId - -#include -#include -#include - -#include "msgtextutils.h" -#include "UniModelConst.h" -#include "UniDataUtils.h" -#include "UniMimeInfo.h" - -// ========== EXTERNAL DATA STRUCTURES ===================== - -// ========== EXTERNAL FUNCTION PROTOTYPES ================= - -// ========== CONSTANTS ==================================== - -// Maximum num of characters for descriptors stored in HBufC members -const TInt KMaxMimeFieldLength = 260; -const TInt KMaxContentLocation = 100; // Max byte size for content location - -// From RFC2183. Content-Disposition filename max length. -// Does not need special handling. -//const TInt KMaxMimeFieldParamLength = 78; - -// ========== MACROS ======================================= - -// ========== LOCAL CONSTANTS AND MACROS =================== - -// ========== MODULE DATA STRUCTURES ======================= - - -// ========== LOCAL FUNCTION PROTOTYPES ==================== - -// ========== LOCAL FUNCTIONS ============================== - -// ========== MEMBER FUNCTIONS ============================= - - -// --------------------------------------------------------- -// CUniMimeInfo -// -// Constructor -// --------------------------------------------------------- -// -CUniMimeInfo::CUniMimeInfo() : iContentTypeCharset(0) - { - } - -// --------------------------------------------------------- -// CUniMimeInfo -// -// Destructor. -// --------------------------------------------------------- -// -CUniMimeInfo::~CUniMimeInfo() - { - delete iContentDescription; - delete iContentBase; - delete iContentLocation; - delete iContentId; - delete iContentType; - delete iContentDisposition; - } - - -// --------------------------------------------------------- -// Accessors/Mutators -// --------------------------------------------------------- - -// --------------------------------------------------------- -// SetContentTypeL -// NOTE: 8 bit. -// --------------------------------------------------------- -void CUniMimeInfo::SetContentTypeL( const TDesC8& aSourceDesc ) - { - if ( aSourceDesc.Length() > KMaxMimeFieldLength ) - User::Leave( KErrArgument ); - - HBufC8* buf = aSourceDesc.AllocL(); - delete iContentType; - iContentType = buf; - } - -// --------------------------------------------------------- -// SetContentLocationL -// NOTE: 16 bit. -// --------------------------------------------------------- -void CUniMimeInfo::SetContentLocationL( const TDesC& aSourceDesc ) - { - TInt copyLen = aSourceDesc.Length(); - if ( copyLen > KMaxContentLocation ) - { - copyLen = KMaxContentLocation; - } - - HBufC* buf = HBufC::NewL( copyLen ); - *buf = aSourceDesc.Left( copyLen ); - delete iContentLocation; - iContentLocation = buf; - } - -// --------------------------------------------------------- -// SetContentIdL -// NOTE: 8 bit. -// --------------------------------------------------------- -void CUniMimeInfo::SetContentIdL( const TDesC8& aSourceDesc ) - { - if ( aSourceDesc.Length() > KMaxMimeFieldLength ) - User::Leave( KErrArgument ); - - HBufC8* buf = aSourceDesc.AllocL(); - delete iContentId; - iContentId = buf; - } - -// --------------------------------------------------------- -// SetContentBaseL -// NOTE: 8 bit. -// --------------------------------------------------------- -void CUniMimeInfo::SetContentBaseL( const TDesC8& aSourceDesc ) - { - if ( aSourceDesc.Length() > KMaxMimeFieldLength ) - User::Leave( KErrArgument ); - - HBufC8* buf = aSourceDesc.AllocL(); - delete iContentBase; - iContentBase = buf; - } - -// --------------------------------------------------------- -// SetContentDescriptionL -// NOTE: 8 bit. -// --------------------------------------------------------- -void CUniMimeInfo::SetContentDescriptionL( const TDesC8& aSourceDesc ) - { - if ( aSourceDesc.Length() > KMaxMimeFieldLength ) - User::Leave( KErrArgument ); - - HBufC8* buf = aSourceDesc.AllocL(); - delete iContentDescription; - iContentDescription = buf; - } - -// --------------------------------------------------------- -// SetContentDispositionL -// NOTE: 8 bit. -// --------------------------------------------------------- -void CUniMimeInfo::SetContentDispositionL( const TDesC8& aSourceDesc ) - { - if ( aSourceDesc.Length() > KMaxMimeFieldLength ) - User::Leave( KErrArgument ); - - HBufC8* buf = aSourceDesc.AllocL(); - delete iContentDisposition; - iContentDisposition = buf; - } - -// --------------------------------------------------------- -// Size -// --------------------------------------------------------- -TInt CUniMimeInfo::Size() const - { - // TODO: Check that MIME info size matches to the actual - // MIME header size - //TInt size = sizeof( iContentTypeCharset ); - TInt size = sizeof( TUint32 ); // mmsengine uses this - - if ( iContentDescription ) size += iContentDescription->Size(); - - if ( iContentBase ) size += iContentBase->Size(); - - if ( iContentLocation ) size += iContentLocation->Size(); - - if ( iContentId ) size += iContentId->Size(); - - if ( iContentType ) size += iContentType->Size(); - - if ( iContentDisposition ) size += iContentDisposition->Size(); - - return size; - } - -// --------------------------------------------------------- -// CUniMimeInfo::SaveMimeInfoL -// -// Save MIME info -// --------------------------------------------------------- -// -void CUniMimeInfo::SaveMimeInfoL( MMsvAttachmentManager& aManager, CMsvAttachment& aAttachment ) - { - // Content-Location. - HBufC* safeContentLocation = CMsgTextUtils::GetSafeAttachmentNameLC( - aManager, - ContentLocation(), - aAttachment.Id(), - ETrue ); - SetContentLocationL( *safeContentLocation ); - CleanupStack::PopAndDestroy( safeContentLocation ); - - CMsvMimeHeaders* msvMime = CMsvMimeHeaders::NewLC(); - msvMime->RestoreL( aAttachment ); - - msvMime->SetContentLocationL( *iContentLocation ); - - // Content-type - if ( iContentType ) - { - TInt slash = iContentType->Locate( '/' ); - if ( slash != KErrNotFound ) - { - msvMime->SetContentTypeL( iContentType->Left( slash ) ); - msvMime->SetContentSubTypeL( iContentType->Mid( slash + 1 ) ); - } - } - - // Character set - if ( iContentTypeCharset ) - { - msvMime->SetMimeCharset( iContentTypeCharset ); - } - // Content-Id - if ( iContentId && iContentId->Length() ) - { - msvMime->SetContentIdL( *iContentId ); - } - // Content-Description - if ( iContentDescription && iContentDescription->Length() ) - { - msvMime->SetContentDescriptionL( *iContentDescription ); - } - // Content-Base - if ( iContentBase && iContentBase->Length() ) - { - msvMime->SetContentBaseL( *iContentBase ); - } - // Content-Disposition - if ( iContentDisposition && iContentDisposition->Length() ) - { - msvMime->SetContentDispositionL( *iContentDisposition ); - } - msvMime->StoreL( aAttachment ); - CleanupStack::PopAndDestroy( msvMime ); - } - -// --------------------------------------------------------- -// CUniMimeInfo::DoReadMimeInfoL -// -// Reads mime info from clientMtm to aMimeInfo. -// If function leaves whole MimeInfo object should be considered -// invalid. -// --------------------------------------------------------- -// - -void CUniMimeInfo::ReadMimeInfoL( CMsvAttachment& aAttachment ) - { - CMsvMimeHeaders* msvMime = CMsvMimeHeaders::NewLC(); - msvMime->RestoreL( aAttachment ); - - // Content-Location - SetContentLocationL( msvMime->ContentLocation() ); - - // Content-ID - SetContentIdL( msvMime->ContentId() ); - - TBuf8 contentType; - contentType.Copy( msvMime->ContentType() ); - contentType.Append( _L8("/") ); - contentType.Append( msvMime->ContentSubType() ); - // Content-type - SetContentTypeL( contentType ); - - // Character set - SetCharset( msvMime->MimeCharset() ); - - // Content-Description - SetContentDescriptionL( msvMime->ContentDescription() ); - - // Content-Base - SetContentBaseL( msvMime->ContentBase() ); - - // Content-Disposition - SetContentDispositionL( msvMime->ContentDisposition() ); - - CleanupStack::PopAndDestroy( msvMime ); - } - -// --------------------------------------------------------- -// EnsureContentLocationL -// --------------------------------------------------------- -void CUniMimeInfo::EnsureContentLocationL( - MMsvAttachmentManager& aManager, - CMsvAttachment& aAttachment, - TDesC& aPlainFileName ) - { - if ( !ContentLocation().Length() && aPlainFileName.Length() ) - { - // Generate safe content location from file name - HBufC* contLoc = CMsgTextUtils::GetSafeAttachmentNameLC( - aManager, - aPlainFileName, - aAttachment.Id(), - ETrue ); - SetContentLocationL( *contLoc ); - - CleanupStack::PopAndDestroy( contLoc ); - - // Save ContentLocation. - SaveMimeInfoL( aManager, aAttachment ); - } - } - -// EOF