williamr@2: // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline LOCAL_C void AppendCRLF( TDes8& rOutputLine, TInt& rPaddingCount ) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: rOutputLine.Append( TPtrC8(KImcvCRLF) ); williamr@2: rPaddingCount += KImcvCRLF().Length(); williamr@2: } williamr@2: williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline LOCAL_C TInt AddCRLF(TDes8& rOutputLine) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: rOutputLine = KImcvCRLF; williamr@2: return 1; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline LOCAL_C void AddCRLF( TDes8& rOutputLine, TInt& rPaddingCount ) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: rOutputLine=TPtrC8(KImcvCRLF); williamr@2: rPaddingCount = KImcvCRLF().Length(); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline LOCAL_C void AddCRLFAtEndOfLine( TDes8& rOutputLine, TInt& rPaddingCount) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: TInt length = rOutputLine.Length(); williamr@2: if ( length < 2 || (rOutputLine[length-2] != KImcvCR || rOutputLine[length-1] != KImcvLF) ) williamr@2: { williamr@2: rOutputLine.Append( KImcvCRLF ); williamr@2: rPaddingCount += 2; williamr@2: } williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool IsLineCRLF( TDesC8& aOutputLine ) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: TInt length = aOutputLine.Length(); williamr@2: if ( length < 2 || (aOutputLine[length-2] != KImcvCR || aOutputLine[length-1] != KImcvLF) ) williamr@2: return EFalse; williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: williamr@2: //**************************************************************************************** williamr@2: // Class CImEmailTraverser Functions williamr@2: //**************************************************************************************** williamr@2: williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImEmailTraverser::CurrentEntry() williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return iCurrentEntryList[0]; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline CMsvEntrySelection& CImEmailTraverser::CurrentList() const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return *(*iSelectionList)[0]; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImEmailTraverser::DeleteCurrentList() williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: if (!LevelExists()) williamr@2: return EFalse; williamr@2: williamr@2: delete &CurrentList(); williamr@2: iSelectionList->Delete(0); williamr@2: iCurrentEntryList.Delete(0); williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline void CImEmailTraverser::AddList(CMsvEntrySelection& children) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: iSelectionList->InsertL(0, &children); williamr@2: iCurrentEntryList.InsertL(0, 0); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImEmailTraverser::LevelExists() const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return iSelectionList->Count(); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImEmailTraverser::IsBaseLevel() const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return ThisEntry().Id()==iBaseId ? ETrue: EFalse;; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline void CImEmailTraverser::SetBaseEntry() williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: iServerEntry.SetEntry(iBaseId); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline const TMsvEntry& CImEmailTraverser::ThisEntry() const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return iServerEntry.Entry(); williamr@2: } williamr@2: williamr@2: williamr@2: //**************************************************************************************** williamr@2: // Class CImSendMimeEmail Functions williamr@2: //**************************************************************************************** williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline void CImSendMimeEmail::Boundary(TDes8& rOutputLine) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: rOutputLine.Append( (*iBoundaryArray)[0] ); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TPtrC8 CImSendMimeEmail::Boundary() williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return (*iBoundaryArray)[0]; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendMimeEmail::SendBoundaryLine(TDes8& rOutputLine, TInt& rPaddingCount) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: rOutputLine.Append(KImcvMimeBoundaryStartEnd); williamr@2: Boundary( rOutputLine ); williamr@2: rPaddingCount += (*iBoundaryArray)[0].Length() + 2; williamr@2: return 1; williamr@2: } williamr@2: williamr@2: williamr@2: // Sets iState to EEndBoundary or EEndOfEmail williamr@2: // returns true if entry found williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImSendMimeEmail::Down(TMsvEntry& rEntry) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: TInt ret = iEmailTraverser->DownLevelL() ? ETrue:EFalse; williamr@2: williamr@2: if (ret) williamr@2: rEntry = iEmailTraverser->ThisEntry(); williamr@2: return ret; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline void CImSendMimeEmail::GetNextEntryL(TMsvEntry& rEntry) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: if ( (iState!=EEndBoundary && iState!=ELineAfterEndBoundary) && Down(rEntry) ) williamr@2: iState=EBoundary; williamr@2: else if ( iEmailTraverser->NextEntryL(rEntry) ) williamr@2: iState=EBoundary; williamr@2: else if (iEmailTraverser->UpLevelL() ) williamr@2: { williamr@2: if (iServerEntry.Entry().iType==KUidMsvMessageEntry && !(iEmailTraverser->IsBaseLevel())) williamr@2: { williamr@2: // Embedded non-mime message williamr@2: iState=EEndBoundary; williamr@2: GetNextEntryL(rEntry); williamr@2: } williamr@2: else williamr@2: iState=EEndBoundary; williamr@2: } williamr@2: else williamr@2: iState=KImCvFinished; williamr@2: } williamr@2: williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TPtrC8 CImSendMimeEmail::SetBoundaryL(TBool aMultipart) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: if (!aMultipart) williamr@2: return TPtrC8(); williamr@2: williamr@2: CreateBoundaryL(); williamr@2: return (*iBoundaryArray)[0]; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImSendMimeEmail::CheckForEmbeddedEmailL(const TMsvEntry& aEntry) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return (aEntry.iType==KUidMsvMessageEntry); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImSendMimeEmail::CheckForMultipartEmailL(TMsvEntry& rEntry, TImEmailFolderType& aFolder) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: TMsvEmailEntry emailEntry = (TMsvEmailEntry)rEntry; williamr@2: williamr@2: aFolder = emailEntry.MessageFolderType(); williamr@2: if (aFolder==EFolderTypeMixed || aFolder==EFolderTypeDigest || williamr@2: aFolder==EFolderTypeAlternative || aFolder==EFolderTypeRelated ) williamr@2: return ETrue; williamr@2: williamr@2: if ( ! Down(emailEntry) ) williamr@2: return EFalse; williamr@2: williamr@2: if ( iEmailTraverser->CurrentList().Count()==1 && williamr@2: iEmailTraverser->ThisEntry().iType==KUidMsvFolderEntry ) williamr@2: { williamr@2: aFolder = ((TMsvEmailEntry&)iEmailTraverser->ThisEntry()).MessageFolderType(); williamr@2: iEmailTraverser->UpLevelL(); williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: iEmailTraverser->UpLevelL(); williamr@2: return EFalse; williamr@2: } williamr@2: williamr@2: //**************************************************************************************** williamr@2: // Class CImSendRfc822Header Functions williamr@2: //**************************************************************************************** williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRfc822Header::XMailerL(TDes8& rOutputLine) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: rOutputLine = KImcvXMailer; williamr@2: rOutputLine.Append(*iProductName); williamr@2: return 1; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRfc822Header::MessageIdL( TDes8& rOutputLine ) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: if ( !iHeader->ImMsgId().Length() ) williamr@2: return 1; williamr@2: williamr@2: PrepareBufferL( TPtrC8(KImcvMessageIdPrompt), iHeader->ImMsgId()); williamr@2: return SendOutput( rOutputLine ); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRfc822Header::ToL(TDes8& rOutputLine) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return DoRecipientsL(rOutputLine, TPtrC8(KImcvToPrompt), iHeader->ToRecipients()); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRfc822Header::CcL(TDes8& rOutputLine) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return DoRecipientsL(rOutputLine, TPtrC8(KImcvCcPrompt), iHeader->CcRecipients()); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRfc822Header::BccL(TDes8& rOutputLine) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return DoRecipientsL(rOutputLine, TPtrC8(KImcvBccPrompt), iHeader->BccRecipients()); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRfc822Header::FromL( TDes8& rOutputLine ) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: PrepareBufferL( TPtrC8(KImcvFromPrompt), iHeader->From()); williamr@2: return SendOutput( rOutputLine ); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRfc822Header::ReplyToL( TDes8& rOutputLine ) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: if ( !iHeader->ReplyTo().Length() ) williamr@2: return 1; williamr@2: williamr@2: PrepareBufferL( TPtrC8(KImcvReplyToPrompt), iHeader->ReplyTo() ); williamr@2: return SendOutput( rOutputLine ); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRfc822Header::SubjectL( TDes8& rOutputLine ) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: // If the subject field has already been encoded and stored in iOutputBuffer williamr@2: // then there is no need to encode again. williamr@2: if (!iOutputBuffer) williamr@2: { williamr@2: PrepareBufferL( TPtrC8(KImcvSubjectPrompt), iHeader->Subject() ); williamr@2: } williamr@2: return SendOutput( rOutputLine ); williamr@2: } williamr@2: williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRfc822Header::ReturnReceiptsL(TDes8& rOutputLine) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: // SendReturnReceiptFieldsL() will always return one choice. williamr@2: // In future it can be changed to add more fields williamr@2: williamr@2: TPtrC address; williamr@2: if ( iHeader->ReceiptAddress().Length() ) williamr@2: address.Set(iHeader->ReceiptAddress()); williamr@2: else if ( iHeader->ReplyTo().Length() ) williamr@2: address.Set(iHeader->ReplyTo()); williamr@2: else williamr@2: return 1; // No valid a address williamr@2: williamr@2: CDesC8Array* receiptsFields=new (ELeave)CDesC8ArrayFlat(KArrayAllocationNumber); williamr@2: CleanupStack::PushL(receiptsFields); williamr@2: CImcvUtils::SendReturnReceiptFieldsL(*receiptsFields); williamr@2: TInt count=receiptsFields->Count(); williamr@2: for (TInt i=0;iContentType().Length() ) williamr@2: { williamr@2: TPtrC8 contentType = iMimeHeader->ContentType(); williamr@2: rOutputLine.Append( contentType ); williamr@2: williamr@2: TPtrC8 contentSubType = iMimeHeader->ContentSubType(); williamr@2: if ( contentSubType.Length() ) williamr@2: { williamr@2: rOutputLine.Append( KImcvForwardSlash ); williamr@2: rOutputLine.Append( iMimeHeader->ContentSubType() ); williamr@2: } williamr@2: williamr@2: isText = contentType.CompareF(KImcvText) ? EFalse : ETrue; williamr@2: williamr@2: williamr@2: // If the content-Type is text/calendar we need to add two williamr@2: // parameters: "method" and "component" williamr@2: // GS : do we need extra parameters for vCal?? williamr@2: TPtrC8 parameter; williamr@2: williamr@2: if ( contentType.Length() && contentSubType.Length() ) williamr@2: if ( isText && !(contentSubType.CompareF(KImcvICalendar)) ) williamr@2: { williamr@2: // METHOD parameter williamr@2: parameter.Set(iMimeHeader->GetContentTypeValue(KImcvICalendarMethod)); williamr@2: if ( parameter.Length() ) williamr@2: { williamr@2: rOutputLine.Append( KImcvSemiColon ); williamr@2: rOutputLine.Append( KImcvSpace ); williamr@2: rOutputLine.Append( KImcvICalendarMethod ); williamr@2: rOutputLine.Append( KImcvEquals ); williamr@2: rOutputLine.Append( parameter ); williamr@2: } williamr@2: williamr@2: // COMPONENT parameter williamr@2: parameter.Set(iMimeHeader->GetContentTypeValue(KImcvICalendarComponent)); williamr@2: if ( parameter.Length() ) williamr@2: { williamr@2: rOutputLine.Append( KImcvSemiColon ); williamr@2: rOutputLine.Append( KImcvSpace ); williamr@2: rOutputLine.Append( KImcvICalendarComponent ); williamr@2: rOutputLine.Append( KImcvEquals ); williamr@2: rOutputLine.Append( parameter ); williamr@2: } williamr@2: } williamr@2: williamr@2: } williamr@2: else if (iEntry.iType == KUidMsvAttachmentEntry) williamr@2: rOutputLine.Append( KImcvApplOctet ); williamr@2: else if (iEntry.iType==KUidMsvEmailTextEntry || (!iIsMultipart && !iEntry.Attachment())) williamr@2: { williamr@2: rOutputLine.Append(KImcvText); williamr@2: rOutputLine.Append( KImcvForwardSlash ); williamr@2: rOutputLine.Append(KImcvPlain); williamr@2: isText=ETrue; williamr@2: } williamr@2: else williamr@2: { williamr@2: rOutputLine.SetLength(0); williamr@2: return EFalse; williamr@2: } williamr@2: williamr@2: if (isText) williamr@2: { williamr@2: rOutputLine.Append( KImcvSemiColon ); williamr@2: rOutputLine.Append( KImcvSpace ); williamr@2: rOutputLine.Append( KImcvCharset ); williamr@2: rOutputLine.Append( KImcvEquals ); williamr@2: rOutputLine.Append( GetCharsetString() ); williamr@2: } williamr@2: else if ( iBoundaryString.Length() ) williamr@2: rOutputLine.Append(KImcvSemiColon); // boundary to follow williamr@2: williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImSendMimeHeader::TransferEncoding(TDes8& rOutputLine) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: TPtrC8 encodingType = EncodingType(); williamr@2: williamr@2: if (iEntry.iType!=KUidMsvFolderEntry && encodingType.Length()) williamr@2: { williamr@2: rOutputLine = KImcvContentTransferEncoding; williamr@2: rOutputLine.Append(encodingType); williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: return EFalse; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendMimeHeader::ContentLanguage(TDes8& rOutputLine) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: rOutputLine = KImcvContentLanguage; williamr@2: rOutputLine.Append(KImcvDefaultLanguage); williamr@2: return 1; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImSendMimeHeader::Description( TDes8& rOutputLine ) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: TPtrC8 description = iMimeHeader->ContentDescription(); williamr@2: williamr@2: if ( !description.Length() ) williamr@2: return EFalse; williamr@2: williamr@2: rOutputLine = KImcvContentDescription; williamr@2: rOutputLine.Append(KImcvSpace); williamr@2: rOutputLine.Append( description ); williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendMimeHeader::Boundary(TDes8& rOutputLine) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: rOutputLine.Append(KImcvSpace); williamr@2: rOutputLine.Append(KImcvSpace); williamr@2: rOutputLine.Append(KImcvBoundary); williamr@2: rOutputLine.Append(KImcvEquals); williamr@2: rOutputLine.Append(KImcvQuote); williamr@2: rOutputLine.Append(iBoundaryString); williamr@2: rOutputLine.Append(KImcvQuote); williamr@2: return 1; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImSendMimeHeader::Disposition( TDes8& rOutputLine, TInt& rAdvance) williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: rAdvance++; williamr@2: if (iEntry.iType == KUidMsvFolderEntry) williamr@2: return EFalse; williamr@2: williamr@2: if(iLine==EFirstLine) williamr@2: { williamr@2: TPtrC8 disposition = iMimeHeader->ContentDisposition(); williamr@2: williamr@2: // Four cases : (2)disposition explicitly attachment, williamr@2: // (3) Non Multipart message with attachment flag set. williamr@2: // (4) Embedded email williamr@2: williamr@2: if ( iEntry.iType==KUidMsvAttachmentEntry || williamr@2: disposition==KImcvAttachment || williamr@2: (!iIsMultipart && iEntry.iType!=KUidMsvMessageEntry && iEntry.Attachment()) ) williamr@2: { williamr@2: rOutputLine = KImcvContentDisposition; williamr@2: rOutputLine.Append(KImcvSpace); williamr@2: rOutputLine.Append(KImcvAttachment); williamr@2: rOutputLine.Append(KImcvSemiColon); williamr@2: iLine++; williamr@2: rAdvance--; williamr@2: return ETrue; williamr@2: } williamr@2: else if (iEntry.iType==KUidMsvEmailTextEntry ) williamr@2: { williamr@2: rOutputLine = KImcvContentDisposition; williamr@2: rOutputLine.Append(KImcvSpace); williamr@2: rOutputLine.Append(KImcvInline); williamr@2: return ETrue; williamr@2: } williamr@2: else if (iEntry.iType==KUidMsvMessageEntry && iDealingWithAnEmbeddedEmail) williamr@2: { williamr@2: rOutputLine = KImcvContentDisposition; williamr@2: rOutputLine.Append(KImcvSpace); williamr@2: rOutputLine.Append(KImcvAttachment); williamr@2: rOutputLine.Append(KImcvSemiColon); williamr@2: iLine++; williamr@2: rAdvance--; williamr@2: return ETrue; williamr@2: } williamr@2: } williamr@2: else if (iFilename.Length()) williamr@2: { williamr@2: rOutputLine.Append(KImcvTab); williamr@2: rOutputLine.Append(KImcvMimeDispositionFilename); williamr@2: AppendFilenameL( rOutputLine ); williamr@2: iDealingWithAnEmbeddedEmail = EFalse; williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: iLine=0; williamr@2: return EFalse; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline const TPtrC8 CImSendMimeHeader::EncodingType() const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: switch (iEncodingType) williamr@2: { williamr@2: case EEncodingTypeBASE64: williamr@2: return TPtrC8(KImcvBase64); williamr@2: case EEncodingTypeQP: williamr@2: return TPtrC8(KImcvQuotedPrintable); williamr@2: case EEncodingTypeUU: williamr@2: return TPtrC8(KImcvXUUString); williamr@2: default: williamr@2: return TPtrC8(KImcv7Bit); williamr@2: } williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TUint CImSendMimeHeader::CharsetUid() const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return iCharsetUid; williamr@2: } williamr@2: williamr@2: williamr@2: //**************************************************************************************** williamr@2: // Class CImSendRichText Functions williamr@2: //**************************************************************************************** williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImSendRichText::IsBreakable( TChar ch ) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return (ch==' '|| ch=='\t' || ch==CEditableText::EParagraphDelimiter williamr@2: || ch==CEditableText::ENonBreakingSpace ); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TInt CImSendRichText::Size() const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return iBodySize; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImSendRichText::IsEOL( TChar ch ) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return (ch==CEditableText::EParagraphDelimiter williamr@2: || ch==CEditableText::ELineBreak williamr@2: || ch==CEditableText::EPageBreak); williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TBool CImSendRichText::IsPlain( TChar aChar ) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: return (((aChar >= '!') && (aChar <= KImcvSemiColon)) williamr@2: || ((aChar >= KImcvRightChevron) && (aChar <= KImcvTilde))); williamr@2: }; williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline TUint8 CImSendRichText::ReplacementChar( TChar aControlChar ) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: if (aControlChar==CEditableText::ETabCharacter) williamr@2: return KImcvTab; williamr@2: williamr@2: if (aControlChar==CEditableText::ENonBreakingHyphen) williamr@2: return KImcvHyphen; williamr@2: williamr@2: if (aControlChar==CEditableText::ENonBreakingSpace) williamr@2: return KImcvSP; williamr@2: williamr@2: return 0; williamr@2: } williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: inline int CImSendRichText::ConvertLineBreaks( TDes& aSource, TBool aLineBreak) const williamr@2: //---------------------------------------------------------------------------------------- williamr@2: { williamr@2: // Need to get rid of 16 bit richtext control characters before moving to 8bit buffer williamr@2: // Therefore convert to the old para delimiter, convert to CRLF later in EncodeRichText. williamr@2: // Its horrible, but what can you do. williamr@2: williamr@2: TInt padding=0; williamr@2: TInt len=aSource.Length(); williamr@2: TUint8 repChar; williamr@2: for (TInt i=0; i