epoc32/include/imcvsend.inl
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@2
     4
// 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
     5
// which accompanies this distribution, and is available
williamr@2
     6
// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
//
williamr@2
    15
williamr@2
    16
//----------------------------------------------------------------------------------------
williamr@2
    17
inline LOCAL_C void AppendCRLF( TDes8& rOutputLine, TInt& rPaddingCount )
williamr@2
    18
//----------------------------------------------------------------------------------------
williamr@2
    19
	{
williamr@2
    20
	rOutputLine.Append( TPtrC8(KImcvCRLF) );
williamr@2
    21
	rPaddingCount += KImcvCRLF().Length();
williamr@2
    22
	}
williamr@2
    23
williamr@2
    24
williamr@2
    25
//----------------------------------------------------------------------------------------
williamr@2
    26
inline LOCAL_C TInt AddCRLF(TDes8& rOutputLine)
williamr@2
    27
//----------------------------------------------------------------------------------------
williamr@2
    28
	{
williamr@2
    29
	rOutputLine = KImcvCRLF;
williamr@2
    30
	return 1;
williamr@2
    31
	}
williamr@2
    32
williamr@2
    33
//----------------------------------------------------------------------------------------
williamr@2
    34
inline LOCAL_C void AddCRLF( TDes8& rOutputLine, TInt& rPaddingCount )
williamr@2
    35
//----------------------------------------------------------------------------------------
williamr@2
    36
	{
williamr@2
    37
	rOutputLine=TPtrC8(KImcvCRLF);
williamr@2
    38
	rPaddingCount = KImcvCRLF().Length();
williamr@2
    39
	}
williamr@2
    40
williamr@2
    41
//----------------------------------------------------------------------------------------
williamr@2
    42
inline LOCAL_C void AddCRLFAtEndOfLine( TDes8& rOutputLine, TInt& rPaddingCount)
williamr@2
    43
//----------------------------------------------------------------------------------------
williamr@2
    44
	{
williamr@2
    45
	TInt length = rOutputLine.Length();
williamr@2
    46
	if ( length < 2 || (rOutputLine[length-2] != KImcvCR || rOutputLine[length-1] != KImcvLF) )
williamr@2
    47
		{
williamr@2
    48
		rOutputLine.Append( KImcvCRLF );
williamr@2
    49
		rPaddingCount += 2;
williamr@2
    50
		}
williamr@2
    51
	}
williamr@2
    52
williamr@2
    53
//----------------------------------------------------------------------------------------
williamr@2
    54
inline TBool IsLineCRLF( TDesC8& aOutputLine )
williamr@2
    55
//----------------------------------------------------------------------------------------
williamr@2
    56
	{
williamr@2
    57
	TInt length = aOutputLine.Length();
williamr@2
    58
	if ( length < 2 || (aOutputLine[length-2] != KImcvCR || aOutputLine[length-1] != KImcvLF) )
williamr@2
    59
		return EFalse;
williamr@2
    60
	return ETrue;
williamr@2
    61
	}
williamr@2
    62
williamr@2
    63
williamr@2
    64
//****************************************************************************************
williamr@2
    65
//              Class CImEmailTraverser Functions
williamr@2
    66
//****************************************************************************************
williamr@2
    67
williamr@2
    68
williamr@2
    69
//----------------------------------------------------------------------------------------
williamr@2
    70
inline TInt CImEmailTraverser::CurrentEntry()
williamr@2
    71
//----------------------------------------------------------------------------------------
williamr@2
    72
	{
williamr@2
    73
	return iCurrentEntryList[0];
williamr@2
    74
	}
williamr@2
    75
williamr@2
    76
//----------------------------------------------------------------------------------------
williamr@2
    77
inline CMsvEntrySelection& CImEmailTraverser::CurrentList() const
williamr@2
    78
//----------------------------------------------------------------------------------------
williamr@2
    79
	{
williamr@2
    80
	return *(*iSelectionList)[0];
williamr@2
    81
	}
williamr@2
    82
williamr@2
    83
//----------------------------------------------------------------------------------------
williamr@2
    84
inline TBool CImEmailTraverser::DeleteCurrentList()
williamr@2
    85
//----------------------------------------------------------------------------------------
williamr@2
    86
	{
williamr@2
    87
	if (!LevelExists())
williamr@2
    88
		return EFalse;
williamr@2
    89
williamr@2
    90
	delete &CurrentList();
williamr@2
    91
	iSelectionList->Delete(0);
williamr@2
    92
	iCurrentEntryList.Delete(0);
williamr@2
    93
	return ETrue;
williamr@2
    94
	}
williamr@2
    95
williamr@2
    96
//----------------------------------------------------------------------------------------
williamr@2
    97
inline void CImEmailTraverser::AddList(CMsvEntrySelection& children)
williamr@2
    98
//----------------------------------------------------------------------------------------
williamr@2
    99
	{
williamr@2
   100
	iSelectionList->InsertL(0, &children);
williamr@2
   101
	iCurrentEntryList.InsertL(0, 0);
williamr@2
   102
	}
williamr@2
   103
williamr@2
   104
//----------------------------------------------------------------------------------------
williamr@2
   105
inline TBool CImEmailTraverser::LevelExists() const
williamr@2
   106
//----------------------------------------------------------------------------------------
williamr@2
   107
	{
williamr@2
   108
	return iSelectionList->Count();
williamr@2
   109
	}
williamr@2
   110
williamr@2
   111
//----------------------------------------------------------------------------------------
williamr@2
   112
inline TBool CImEmailTraverser::IsBaseLevel() const
williamr@2
   113
//----------------------------------------------------------------------------------------
williamr@2
   114
	{
williamr@2
   115
	return ThisEntry().Id()==iBaseId ? ETrue: EFalse;;
williamr@2
   116
	}
williamr@2
   117
williamr@2
   118
//----------------------------------------------------------------------------------------
williamr@2
   119
inline void CImEmailTraverser::SetBaseEntry()
williamr@2
   120
//----------------------------------------------------------------------------------------
williamr@2
   121
	{
williamr@2
   122
	iServerEntry.SetEntry(iBaseId);
williamr@2
   123
	}
williamr@2
   124
williamr@2
   125
//----------------------------------------------------------------------------------------
williamr@2
   126
inline const TMsvEntry& CImEmailTraverser::ThisEntry() const
williamr@2
   127
//----------------------------------------------------------------------------------------
williamr@2
   128
	{	
williamr@2
   129
	return iServerEntry.Entry();
williamr@2
   130
	}
williamr@2
   131
williamr@2
   132
williamr@2
   133
//****************************************************************************************
williamr@2
   134
//              Class CImSendMimeEmail Functions
williamr@2
   135
//****************************************************************************************
williamr@2
   136
williamr@2
   137
//----------------------------------------------------------------------------------------
williamr@2
   138
inline void CImSendMimeEmail::Boundary(TDes8& rOutputLine) 
williamr@2
   139
//----------------------------------------------------------------------------------------
williamr@2
   140
	{
williamr@2
   141
	rOutputLine.Append( (*iBoundaryArray)[0] );
williamr@2
   142
	}
williamr@2
   143
williamr@2
   144
//----------------------------------------------------------------------------------------
williamr@2
   145
inline TPtrC8 CImSendMimeEmail::Boundary()
williamr@2
   146
//----------------------------------------------------------------------------------------
williamr@2
   147
	{
williamr@2
   148
	return (*iBoundaryArray)[0];
williamr@2
   149
	}
williamr@2
   150
williamr@2
   151
//----------------------------------------------------------------------------------------
williamr@2
   152
inline TInt CImSendMimeEmail::SendBoundaryLine(TDes8& rOutputLine, TInt& rPaddingCount)
williamr@2
   153
//----------------------------------------------------------------------------------------
williamr@2
   154
	{
williamr@2
   155
	rOutputLine.Append(KImcvMimeBoundaryStartEnd);
williamr@2
   156
	Boundary( rOutputLine );
williamr@2
   157
	rPaddingCount += (*iBoundaryArray)[0].Length() + 2;
williamr@2
   158
	return 1;
williamr@2
   159
	}
williamr@2
   160
williamr@2
   161
williamr@2
   162
// Sets iState to EEndBoundary or EEndOfEmail
williamr@2
   163
// returns true if entry found
williamr@2
   164
//----------------------------------------------------------------------------------------
williamr@2
   165
inline TBool CImSendMimeEmail::Down(TMsvEntry& rEntry)
williamr@2
   166
//----------------------------------------------------------------------------------------
williamr@2
   167
	{
williamr@2
   168
	TInt ret = iEmailTraverser->DownLevelL() ? ETrue:EFalse;
williamr@2
   169
williamr@2
   170
	if (ret)
williamr@2
   171
		rEntry = iEmailTraverser->ThisEntry();
williamr@2
   172
	return ret;
williamr@2
   173
	}
williamr@2
   174
williamr@2
   175
//----------------------------------------------------------------------------------------
williamr@2
   176
inline void CImSendMimeEmail::GetNextEntryL(TMsvEntry& rEntry)
williamr@2
   177
//----------------------------------------------------------------------------------------
williamr@2
   178
	{
williamr@2
   179
	if ( (iState!=EEndBoundary && iState!=ELineAfterEndBoundary) && Down(rEntry) )
williamr@2
   180
		iState=EBoundary;
williamr@2
   181
	else if ( iEmailTraverser->NextEntryL(rEntry) )
williamr@2
   182
		iState=EBoundary;
williamr@2
   183
	else if (iEmailTraverser->UpLevelL() )
williamr@2
   184
		{
williamr@2
   185
		if (iServerEntry.Entry().iType==KUidMsvMessageEntry && !(iEmailTraverser->IsBaseLevel()))
williamr@2
   186
			{
williamr@2
   187
			// Embedded non-mime message
williamr@2
   188
			iState=EEndBoundary;
williamr@2
   189
			GetNextEntryL(rEntry);
williamr@2
   190
			}
williamr@2
   191
		else
williamr@2
   192
			iState=EEndBoundary;
williamr@2
   193
		}
williamr@2
   194
	else
williamr@2
   195
		iState=KImCvFinished;
williamr@2
   196
	}
williamr@2
   197
williamr@2
   198
williamr@2
   199
//----------------------------------------------------------------------------------------
williamr@2
   200
inline TPtrC8 CImSendMimeEmail::SetBoundaryL(TBool aMultipart)
williamr@2
   201
//----------------------------------------------------------------------------------------
williamr@2
   202
	{
williamr@2
   203
	if (!aMultipart)
williamr@2
   204
		return TPtrC8();
williamr@2
   205
williamr@2
   206
	CreateBoundaryL();
williamr@2
   207
	return (*iBoundaryArray)[0];
williamr@2
   208
	}
williamr@2
   209
williamr@2
   210
//----------------------------------------------------------------------------------------
williamr@2
   211
inline TBool CImSendMimeEmail::CheckForEmbeddedEmailL(const TMsvEntry& aEntry) const
williamr@2
   212
//----------------------------------------------------------------------------------------
williamr@2
   213
	{
williamr@2
   214
	return (aEntry.iType==KUidMsvMessageEntry);
williamr@2
   215
	}
williamr@2
   216
williamr@2
   217
//----------------------------------------------------------------------------------------
williamr@2
   218
inline TBool CImSendMimeEmail::CheckForMultipartEmailL(TMsvEntry& rEntry, TImEmailFolderType& aFolder)
williamr@2
   219
//----------------------------------------------------------------------------------------
williamr@2
   220
	{
williamr@2
   221
	TMsvEmailEntry emailEntry = (TMsvEmailEntry)rEntry;
williamr@2
   222
williamr@2
   223
	aFolder = emailEntry.MessageFolderType();
williamr@2
   224
	if (aFolder==EFolderTypeMixed || aFolder==EFolderTypeDigest || 
williamr@2
   225
		aFolder==EFolderTypeAlternative || aFolder==EFolderTypeRelated ) 
williamr@2
   226
		return ETrue;
williamr@2
   227
		
williamr@2
   228
	if ( ! Down(emailEntry) )
williamr@2
   229
		return EFalse;
williamr@2
   230
williamr@2
   231
	if ( iEmailTraverser->CurrentList().Count()==1 && 
williamr@2
   232
				iEmailTraverser->ThisEntry().iType==KUidMsvFolderEntry )
williamr@2
   233
		{
williamr@2
   234
		aFolder = ((TMsvEmailEntry&)iEmailTraverser->ThisEntry()).MessageFolderType();
williamr@2
   235
		iEmailTraverser->UpLevelL();
williamr@2
   236
		return ETrue;
williamr@2
   237
		}
williamr@2
   238
	
williamr@2
   239
	iEmailTraverser->UpLevelL();
williamr@2
   240
	return EFalse;
williamr@2
   241
	}
williamr@2
   242
williamr@2
   243
//****************************************************************************************
williamr@2
   244
//              Class CImSendRfc822Header Functions
williamr@2
   245
//****************************************************************************************
williamr@2
   246
williamr@2
   247
//----------------------------------------------------------------------------------------
williamr@2
   248
inline TInt CImSendRfc822Header::XMailerL(TDes8& rOutputLine)
williamr@2
   249
//----------------------------------------------------------------------------------------
williamr@2
   250
	{
williamr@2
   251
	rOutputLine = KImcvXMailer;
williamr@2
   252
	rOutputLine.Append(*iProductName);
williamr@2
   253
	return 1;
williamr@2
   254
	}
williamr@2
   255
williamr@2
   256
//----------------------------------------------------------------------------------------
williamr@2
   257
inline TInt CImSendRfc822Header::MessageIdL( TDes8& rOutputLine )
williamr@2
   258
//----------------------------------------------------------------------------------------
williamr@2
   259
	{
williamr@2
   260
	if ( !iHeader->ImMsgId().Length() )
williamr@2
   261
		return 1;
williamr@2
   262
williamr@2
   263
	PrepareBufferL( TPtrC8(KImcvMessageIdPrompt), iHeader->ImMsgId());
williamr@2
   264
	return SendOutput( rOutputLine );
williamr@2
   265
	}
williamr@2
   266
williamr@2
   267
//----------------------------------------------------------------------------------------
williamr@2
   268
inline TInt CImSendRfc822Header::ToL(TDes8& rOutputLine)
williamr@2
   269
//----------------------------------------------------------------------------------------
williamr@2
   270
	{
williamr@2
   271
	return DoRecipientsL(rOutputLine, TPtrC8(KImcvToPrompt), iHeader->ToRecipients());
williamr@2
   272
	}
williamr@2
   273
williamr@2
   274
//----------------------------------------------------------------------------------------
williamr@2
   275
inline TInt CImSendRfc822Header::CcL(TDes8& rOutputLine)
williamr@2
   276
//----------------------------------------------------------------------------------------
williamr@2
   277
	{
williamr@2
   278
	return DoRecipientsL(rOutputLine, TPtrC8(KImcvCcPrompt), iHeader->CcRecipients());
williamr@2
   279
	}
williamr@2
   280
williamr@2
   281
//----------------------------------------------------------------------------------------
williamr@2
   282
inline TInt CImSendRfc822Header::BccL(TDes8& rOutputLine)
williamr@2
   283
//----------------------------------------------------------------------------------------
williamr@2
   284
	{
williamr@2
   285
	return DoRecipientsL(rOutputLine, TPtrC8(KImcvBccPrompt), iHeader->BccRecipients());
williamr@2
   286
	}
williamr@2
   287
williamr@2
   288
//----------------------------------------------------------------------------------------
williamr@2
   289
inline TInt CImSendRfc822Header::FromL( TDes8& rOutputLine )
williamr@2
   290
//----------------------------------------------------------------------------------------
williamr@2
   291
	{
williamr@2
   292
	PrepareBufferL( TPtrC8(KImcvFromPrompt), iHeader->From());
williamr@2
   293
	return SendOutput( rOutputLine );
williamr@2
   294
	}
williamr@2
   295
williamr@2
   296
//----------------------------------------------------------------------------------------
williamr@2
   297
inline TInt CImSendRfc822Header::ReplyToL( TDes8& rOutputLine )
williamr@2
   298
//----------------------------------------------------------------------------------------
williamr@2
   299
	{
williamr@2
   300
	if ( !iHeader->ReplyTo().Length() )
williamr@2
   301
		return 1;
williamr@2
   302
williamr@2
   303
	PrepareBufferL( TPtrC8(KImcvReplyToPrompt), iHeader->ReplyTo() );
williamr@2
   304
	return SendOutput( rOutputLine );
williamr@2
   305
	}
williamr@2
   306
williamr@2
   307
//----------------------------------------------------------------------------------------
williamr@2
   308
inline TInt CImSendRfc822Header::SubjectL( TDes8& rOutputLine )
williamr@2
   309
//----------------------------------------------------------------------------------------
williamr@2
   310
	{
williamr@2
   311
	// If the subject field has already been encoded and stored in iOutputBuffer
williamr@2
   312
	// then there is no need to encode again.
williamr@2
   313
	if (!iOutputBuffer)
williamr@2
   314
		{
williamr@2
   315
		PrepareBufferL( TPtrC8(KImcvSubjectPrompt), iHeader->Subject() );
williamr@2
   316
		}
williamr@2
   317
	return SendOutput( rOutputLine );	
williamr@2
   318
	}
williamr@2
   319
williamr@2
   320
williamr@2
   321
//----------------------------------------------------------------------------------------
williamr@2
   322
inline TInt CImSendRfc822Header::ReturnReceiptsL(TDes8& rOutputLine)
williamr@2
   323
//----------------------------------------------------------------------------------------
williamr@2
   324
	{
williamr@2
   325
	// SendReturnReceiptFieldsL() will always return one choice. 
williamr@2
   326
	// In future it can be changed to add more fields 
williamr@2
   327
williamr@2
   328
	TPtrC address;
williamr@2
   329
	if ( iHeader->ReceiptAddress().Length() )
williamr@2
   330
		address.Set(iHeader->ReceiptAddress());
williamr@2
   331
	else if ( iHeader->ReplyTo().Length() )
williamr@2
   332
		address.Set(iHeader->ReplyTo());
williamr@2
   333
	else
williamr@2
   334
		return 1; // No valid a address
williamr@2
   335
williamr@2
   336
	CDesC8Array* receiptsFields=new (ELeave)CDesC8ArrayFlat(KArrayAllocationNumber);
williamr@2
   337
	CleanupStack::PushL(receiptsFields);
williamr@2
   338
	CImcvUtils::SendReturnReceiptFieldsL(*receiptsFields);
williamr@2
   339
	TInt count=receiptsFields->Count();
williamr@2
   340
	for (TInt i=0;i<count;i++)
williamr@2
   341
		PrepareBufferL((*receiptsFields)[i], address);
williamr@2
   342
williamr@2
   343
	CleanupStack::PopAndDestroy(); //receiptsFields
williamr@2
   344
	return SendOutput( rOutputLine );
williamr@2
   345
	}
williamr@2
   346
williamr@2
   347
//----------------------------------------------------------------------------------------
williamr@2
   348
inline TBool CImSendRfc822Header::FieldIsEmailAddress() const
williamr@2
   349
//----------------------------------------------------------------------------------------
williamr@2
   350
	{
williamr@2
   351
	return (iState != ESubject);
williamr@2
   352
	}
williamr@2
   353
williamr@2
   354
//----------------------------------------------------------------------------------------
williamr@2
   355
inline const TImEmailTransformingInfo& CImSendRfc822Header::TransformingInfo() const
williamr@2
   356
//----------------------------------------------------------------------------------------
williamr@2
   357
	{
williamr@2
   358
	return iTransformingInfo;
williamr@2
   359
	}
williamr@2
   360
williamr@2
   361
williamr@2
   362
williamr@2
   363
//****************************************************************************************
williamr@2
   364
//              Class CImSendMimeHeader Functions
williamr@2
   365
//****************************************************************************************
williamr@2
   366
williamr@2
   367
williamr@2
   368
//----------------------------------------------------------------------------------------
williamr@2
   369
inline TInt CImSendMimeHeader::BlankLine(TDes8& rOutputLine) const
williamr@2
   370
//----------------------------------------------------------------------------------------
williamr@2
   371
	{
williamr@2
   372
	rOutputLine = KNullDesC8;
williamr@2
   373
	return 1;
williamr@2
   374
	}
williamr@2
   375
williamr@2
   376
//----------------------------------------------------------------------------------------
williamr@2
   377
inline TInt CImSendMimeHeader::MimeVersion(TDes8& rOutputLine) const
williamr@2
   378
//----------------------------------------------------------------------------------------
williamr@2
   379
	{
williamr@2
   380
	rOutputLine = KImcvMimePrompt;
williamr@2
   381
	rOutputLine.Append(KImcvSpMimeVersion);
williamr@2
   382
	return 1;
williamr@2
   383
	}
williamr@2
   384
williamr@2
   385
//----------------------------------------------------------------------------------------
williamr@2
   386
inline TBool CImSendMimeHeader::ContentType(TDes8& rOutputLine) const
williamr@2
   387
//----------------------------------------------------------------------------------------
williamr@2
   388
	{
williamr@2
   389
	TBool isText = EFalse;
williamr@2
   390
	rOutputLine = KImcvContentType;
williamr@2
   391
	rOutputLine.Append(KImcvSpace);
williamr@2
   392
williamr@2
   393
	if (((TMsvEmailEntry&)iEntry).VCard())
williamr@2
   394
		{
williamr@2
   395
		rOutputLine.Append(KImcvText);
williamr@2
   396
		rOutputLine.Append( KImcvForwardSlash );
williamr@2
   397
		rOutputLine.Append(KImcvDirectory);
williamr@2
   398
		rOutputLine.Append( KImcvSemiColon );
williamr@2
   399
		rOutputLine.Append( KImcvSpace );
williamr@2
   400
		rOutputLine.Append( KImcvProfile );
williamr@2
   401
		rOutputLine.Append( KImcvEquals );
williamr@2
   402
		rOutputLine.Append( KImcvVCard );
williamr@2
   403
		isText=ETrue;
williamr@2
   404
		}
williamr@2
   405
	else if (((TMsvEmailEntry&)iEntry).VCalendar())
williamr@2
   406
		{
williamr@2
   407
		rOutputLine.Append(KImcvText);
williamr@2
   408
		rOutputLine.Append( KImcvForwardSlash );
williamr@2
   409
		rOutputLine.Append(KImcvVCalender);
williamr@2
   410
		isText=ETrue;
williamr@2
   411
		}
williamr@2
   412
	else if (iEntry.iType == KUidMsvEmailHtmlEntry)
williamr@2
   413
		{
williamr@2
   414
		rOutputLine.Append(KImcvText);
williamr@2
   415
		rOutputLine.Append( KImcvForwardSlash );
williamr@2
   416
		rOutputLine.Append(KImcvHtml);
williamr@2
   417
		isText=ETrue;
williamr@2
   418
		}
williamr@2
   419
	else if ( iMimeHeader->ContentType().Length() )
williamr@2
   420
		{
williamr@2
   421
		TPtrC8 contentType = iMimeHeader->ContentType();
williamr@2
   422
		rOutputLine.Append( contentType );	
williamr@2
   423
williamr@2
   424
		TPtrC8 contentSubType = iMimeHeader->ContentSubType();
williamr@2
   425
		if ( contentSubType.Length() )
williamr@2
   426
			{
williamr@2
   427
			rOutputLine.Append( KImcvForwardSlash );
williamr@2
   428
			rOutputLine.Append( iMimeHeader->ContentSubType() );
williamr@2
   429
			}
williamr@2
   430
williamr@2
   431
		isText = contentType.CompareF(KImcvText) ? EFalse : ETrue;
williamr@2
   432
		
williamr@2
   433
		
williamr@2
   434
		// If the content-Type is text/calendar we need to add two
williamr@2
   435
		// parameters: "method" and "component"
williamr@2
   436
// GS : do we need extra parameters for vCal??
williamr@2
   437
		TPtrC8 parameter;
williamr@2
   438
williamr@2
   439
		if ( contentType.Length() && contentSubType.Length() )
williamr@2
   440
		if ( isText && !(contentSubType.CompareF(KImcvICalendar)) )
williamr@2
   441
			{
williamr@2
   442
			// METHOD parameter
williamr@2
   443
			parameter.Set(iMimeHeader->GetContentTypeValue(KImcvICalendarMethod));
williamr@2
   444
			if ( parameter.Length() )
williamr@2
   445
				{
williamr@2
   446
				rOutputLine.Append( KImcvSemiColon );
williamr@2
   447
				rOutputLine.Append( KImcvSpace );
williamr@2
   448
				rOutputLine.Append( KImcvICalendarMethod );
williamr@2
   449
				rOutputLine.Append( KImcvEquals );
williamr@2
   450
				rOutputLine.Append( parameter );
williamr@2
   451
				}
williamr@2
   452
williamr@2
   453
			// COMPONENT parameter
williamr@2
   454
			parameter.Set(iMimeHeader->GetContentTypeValue(KImcvICalendarComponent));
williamr@2
   455
			if ( parameter.Length() )
williamr@2
   456
				{
williamr@2
   457
				rOutputLine.Append( KImcvSemiColon );
williamr@2
   458
				rOutputLine.Append( KImcvSpace );
williamr@2
   459
				rOutputLine.Append( KImcvICalendarComponent );
williamr@2
   460
				rOutputLine.Append( KImcvEquals );
williamr@2
   461
				rOutputLine.Append( parameter );
williamr@2
   462
				}	
williamr@2
   463
			}
williamr@2
   464
		
williamr@2
   465
		}
williamr@2
   466
	else if (iEntry.iType == KUidMsvAttachmentEntry)
williamr@2
   467
		rOutputLine.Append( KImcvApplOctet );	
williamr@2
   468
	else if (iEntry.iType==KUidMsvEmailTextEntry || (!iIsMultipart && !iEntry.Attachment()))
williamr@2
   469
		{
williamr@2
   470
		rOutputLine.Append(KImcvText);
williamr@2
   471
		rOutputLine.Append( KImcvForwardSlash );
williamr@2
   472
		rOutputLine.Append(KImcvPlain);
williamr@2
   473
		isText=ETrue;
williamr@2
   474
		}
williamr@2
   475
	else
williamr@2
   476
		{
williamr@2
   477
		rOutputLine.SetLength(0);
williamr@2
   478
		return EFalse;
williamr@2
   479
		}
williamr@2
   480
williamr@2
   481
	if (isText)
williamr@2
   482
		{
williamr@2
   483
		rOutputLine.Append( KImcvSemiColon );
williamr@2
   484
		rOutputLine.Append( KImcvSpace );
williamr@2
   485
		rOutputLine.Append( KImcvCharset );
williamr@2
   486
		rOutputLine.Append( KImcvEquals );
williamr@2
   487
		rOutputLine.Append( GetCharsetString() );
williamr@2
   488
		}
williamr@2
   489
	else if ( iBoundaryString.Length() )
williamr@2
   490
		rOutputLine.Append(KImcvSemiColon); // boundary to follow
williamr@2
   491
williamr@2
   492
	return ETrue;
williamr@2
   493
	}
williamr@2
   494
williamr@2
   495
//----------------------------------------------------------------------------------------
williamr@2
   496
inline TBool CImSendMimeHeader::TransferEncoding(TDes8& rOutputLine) const
williamr@2
   497
//----------------------------------------------------------------------------------------
williamr@2
   498
	{
williamr@2
   499
	TPtrC8 encodingType = EncodingType();
williamr@2
   500
williamr@2
   501
	if (iEntry.iType!=KUidMsvFolderEntry && encodingType.Length())
williamr@2
   502
		{
williamr@2
   503
		rOutputLine = KImcvContentTransferEncoding;
williamr@2
   504
		rOutputLine.Append(encodingType);
williamr@2
   505
		return ETrue;
williamr@2
   506
		}
williamr@2
   507
williamr@2
   508
	return EFalse;
williamr@2
   509
	}
williamr@2
   510
williamr@2
   511
//----------------------------------------------------------------------------------------
williamr@2
   512
inline TInt CImSendMimeHeader::ContentLanguage(TDes8& rOutputLine) const
williamr@2
   513
//----------------------------------------------------------------------------------------
williamr@2
   514
	{
williamr@2
   515
	rOutputLine = KImcvContentLanguage;
williamr@2
   516
	rOutputLine.Append(KImcvDefaultLanguage);
williamr@2
   517
	return 1;
williamr@2
   518
	}
williamr@2
   519
williamr@2
   520
//----------------------------------------------------------------------------------------
williamr@2
   521
inline TBool CImSendMimeHeader::Description( TDes8& rOutputLine ) const
williamr@2
   522
//----------------------------------------------------------------------------------------
williamr@2
   523
	{
williamr@2
   524
	TPtrC8 description = iMimeHeader->ContentDescription();
williamr@2
   525
williamr@2
   526
	if ( !description.Length() )
williamr@2
   527
		return EFalse;
williamr@2
   528
williamr@2
   529
	rOutputLine = KImcvContentDescription;
williamr@2
   530
	rOutputLine.Append(KImcvSpace);
williamr@2
   531
	rOutputLine.Append( description );
williamr@2
   532
	return ETrue;
williamr@2
   533
	}
williamr@2
   534
williamr@2
   535
williamr@2
   536
//----------------------------------------------------------------------------------------
williamr@2
   537
inline TInt CImSendMimeHeader::Boundary(TDes8& rOutputLine) const
williamr@2
   538
//----------------------------------------------------------------------------------------
williamr@2
   539
	{
williamr@2
   540
	rOutputLine.Append(KImcvSpace);
williamr@2
   541
	rOutputLine.Append(KImcvSpace);
williamr@2
   542
	rOutputLine.Append(KImcvBoundary);
williamr@2
   543
	rOutputLine.Append(KImcvEquals);
williamr@2
   544
	rOutputLine.Append(KImcvQuote);
williamr@2
   545
	rOutputLine.Append(iBoundaryString);
williamr@2
   546
	rOutputLine.Append(KImcvQuote);
williamr@2
   547
	return 1;
williamr@2
   548
	}
williamr@2
   549
williamr@2
   550
//----------------------------------------------------------------------------------------
williamr@2
   551
inline TBool CImSendMimeHeader::Disposition( TDes8& rOutputLine, TInt& rAdvance)
williamr@2
   552
//----------------------------------------------------------------------------------------
williamr@2
   553
	{
williamr@2
   554
	rAdvance++;
williamr@2
   555
	if (iEntry.iType == KUidMsvFolderEntry)
williamr@2
   556
		return EFalse;
williamr@2
   557
williamr@2
   558
	if(iLine==EFirstLine)
williamr@2
   559
		{
williamr@2
   560
		TPtrC8 disposition = iMimeHeader->ContentDisposition();
williamr@2
   561
		
williamr@2
   562
		// Four cases : (2)disposition explicitly attachment,
williamr@2
   563
		// (3) Non Multipart message with attachment flag set.
williamr@2
   564
		// (4) Embedded email
williamr@2
   565
williamr@2
   566
		if ( iEntry.iType==KUidMsvAttachmentEntry || 
williamr@2
   567
			 disposition==KImcvAttachment ||
williamr@2
   568
			 (!iIsMultipart && iEntry.iType!=KUidMsvMessageEntry && iEntry.Attachment()) )
williamr@2
   569
			{
williamr@2
   570
			rOutputLine = KImcvContentDisposition;
williamr@2
   571
			rOutputLine.Append(KImcvSpace);
williamr@2
   572
			rOutputLine.Append(KImcvAttachment);
williamr@2
   573
			rOutputLine.Append(KImcvSemiColon);
williamr@2
   574
			iLine++;
williamr@2
   575
			rAdvance--;
williamr@2
   576
			return ETrue;
williamr@2
   577
			}
williamr@2
   578
		else if (iEntry.iType==KUidMsvEmailTextEntry )
williamr@2
   579
			{
williamr@2
   580
			rOutputLine = KImcvContentDisposition;
williamr@2
   581
			rOutputLine.Append(KImcvSpace);
williamr@2
   582
			rOutputLine.Append(KImcvInline);
williamr@2
   583
			return ETrue;
williamr@2
   584
			}
williamr@2
   585
		 		else if (iEntry.iType==KUidMsvMessageEntry && iDealingWithAnEmbeddedEmail)
williamr@2
   586
 			{
williamr@2
   587
 			rOutputLine = KImcvContentDisposition;
williamr@2
   588
 			rOutputLine.Append(KImcvSpace);
williamr@2
   589
 			rOutputLine.Append(KImcvAttachment);
williamr@2
   590
			rOutputLine.Append(KImcvSemiColon);
williamr@2
   591
 			iLine++;
williamr@2
   592
 			rAdvance--;
williamr@2
   593
 			return ETrue;
williamr@2
   594
 			}
williamr@2
   595
		}
williamr@2
   596
	else if (iFilename.Length())
williamr@2
   597
		{
williamr@2
   598
		rOutputLine.Append(KImcvTab);
williamr@2
   599
		rOutputLine.Append(KImcvMimeDispositionFilename);
williamr@2
   600
		AppendFilenameL( rOutputLine );
williamr@2
   601
		iDealingWithAnEmbeddedEmail = EFalse;
williamr@2
   602
		return ETrue;
williamr@2
   603
		}
williamr@2
   604
williamr@2
   605
	iLine=0;
williamr@2
   606
	return EFalse;
williamr@2
   607
	}
williamr@2
   608
williamr@2
   609
//----------------------------------------------------------------------------------------
williamr@2
   610
inline const TPtrC8 CImSendMimeHeader::EncodingType() const
williamr@2
   611
//----------------------------------------------------------------------------------------
williamr@2
   612
	{
williamr@2
   613
	switch (iEncodingType)
williamr@2
   614
		{
williamr@2
   615
		case EEncodingTypeBASE64:
williamr@2
   616
			return TPtrC8(KImcvBase64);
williamr@2
   617
		case EEncodingTypeQP:
williamr@2
   618
			return TPtrC8(KImcvQuotedPrintable);
williamr@2
   619
		case EEncodingTypeUU:
williamr@2
   620
			return TPtrC8(KImcvXUUString);
williamr@2
   621
		default:
williamr@2
   622
			return TPtrC8(KImcv7Bit);
williamr@2
   623
		}
williamr@2
   624
	}
williamr@2
   625
williamr@2
   626
//----------------------------------------------------------------------------------------
williamr@2
   627
inline TUint CImSendMimeHeader::CharsetUid() const
williamr@2
   628
//----------------------------------------------------------------------------------------
williamr@2
   629
	{
williamr@2
   630
	return iCharsetUid;
williamr@2
   631
	}
williamr@2
   632
williamr@2
   633
williamr@2
   634
//****************************************************************************************
williamr@2
   635
//              Class CImSendRichText Functions
williamr@2
   636
//****************************************************************************************
williamr@2
   637
williamr@2
   638
//----------------------------------------------------------------------------------------
williamr@2
   639
inline TBool CImSendRichText::IsBreakable( TChar ch ) const
williamr@2
   640
//----------------------------------------------------------------------------------------
williamr@2
   641
	{
williamr@2
   642
	return (ch==' '|| ch=='\t' || ch==CEditableText::EParagraphDelimiter 
williamr@2
   643
				   || ch==CEditableText::ENonBreakingSpace );
williamr@2
   644
	}
williamr@2
   645
williamr@2
   646
//----------------------------------------------------------------------------------------
williamr@2
   647
inline TInt CImSendRichText::Size() const
williamr@2
   648
//----------------------------------------------------------------------------------------
williamr@2
   649
	{
williamr@2
   650
	return iBodySize;
williamr@2
   651
	}
williamr@2
   652
williamr@2
   653
//----------------------------------------------------------------------------------------
williamr@2
   654
inline TBool CImSendRichText::IsEOL( TChar ch ) const
williamr@2
   655
//----------------------------------------------------------------------------------------
williamr@2
   656
	{
williamr@2
   657
	return (ch==CEditableText::EParagraphDelimiter
williamr@2
   658
		 || ch==CEditableText::ELineBreak
williamr@2
   659
		 || ch==CEditableText::EPageBreak);
williamr@2
   660
	}
williamr@2
   661
williamr@2
   662
//----------------------------------------------------------------------------------------
williamr@2
   663
inline TBool CImSendRichText::IsPlain( TChar aChar ) const
williamr@2
   664
//----------------------------------------------------------------------------------------
williamr@2
   665
	{
williamr@2
   666
	return (((aChar >= '!') && (aChar <= KImcvSemiColon)) 
williamr@2
   667
					|| ((aChar >= KImcvRightChevron) && (aChar <= KImcvTilde)));
williamr@2
   668
	};
williamr@2
   669
williamr@2
   670
//----------------------------------------------------------------------------------------
williamr@2
   671
inline TUint8 CImSendRichText::ReplacementChar( TChar aControlChar ) const
williamr@2
   672
//----------------------------------------------------------------------------------------
williamr@2
   673
	{
williamr@2
   674
	if (aControlChar==CEditableText::ETabCharacter)
williamr@2
   675
		return KImcvTab;
williamr@2
   676
williamr@2
   677
	if (aControlChar==CEditableText::ENonBreakingHyphen)
williamr@2
   678
		return KImcvHyphen;
williamr@2
   679
williamr@2
   680
	if (aControlChar==CEditableText::ENonBreakingSpace)
williamr@2
   681
		return KImcvSP;
williamr@2
   682
williamr@2
   683
	return 0;
williamr@2
   684
	}
williamr@2
   685
williamr@2
   686
//----------------------------------------------------------------------------------------
williamr@2
   687
inline int CImSendRichText::ConvertLineBreaks( TDes& aSource, TBool aLineBreak) const
williamr@2
   688
//----------------------------------------------------------------------------------------
williamr@2
   689
	{ 		
williamr@2
   690
	// Need to get rid of 16 bit richtext control characters before moving to 8bit buffer
williamr@2
   691
	// Therefore convert to the old para delimiter, convert to CRLF later in EncodeRichText.
williamr@2
   692
	// Its horrible, but what can you do.
williamr@2
   693
williamr@2
   694
	TInt padding=0;
williamr@2
   695
	TInt len=aSource.Length();
williamr@2
   696
	TUint8 repChar;
williamr@2
   697
	for (TInt i=0; i<len; i++)
williamr@2
   698
		{
williamr@2
   699
		repChar=ReplacementChar(aSource[i]);
williamr@2
   700
		if (repChar)
williamr@2
   701
			aSource[i]=repChar;
williamr@2
   702
		else if ( IsEOL(aSource[i]) )
williamr@2
   703
			{
williamr@2
   704
			aSource[i]=KImcvCR;
williamr@2
   705
			aSource.SetLength(i+2);
williamr@2
   706
			aSource[i+1]=KImcvLF;
williamr@2
   707
			padding+=1;
williamr@2
   708
			if (aLineBreak)
williamr@2
   709
				break;
williamr@2
   710
			}
williamr@2
   711
		} 
williamr@2
   712
	return padding;
williamr@2
   713
	};
williamr@2
   714
williamr@2
   715
//****************************************************************************************
williamr@2
   716
//              Class CImSendFile Functions
williamr@2
   717
//****************************************************************************************
williamr@2
   718
williamr@2
   719
williamr@2
   720
//----------------------------------------------------------------------------------------
williamr@2
   721
inline TInt CImSendFile::Size() const
williamr@2
   722
//----------------------------------------------------------------------------------------
williamr@2
   723
	{
williamr@2
   724
	return iAttachmentInfo.iSize;
williamr@2
   725
	}
williamr@2
   726
williamr@2
   727
//****************************************************************************************
williamr@2
   728
//              Class CImCalculateMsgSize Functions
williamr@2
   729
//****************************************************************************************
williamr@2
   730
williamr@2
   731
//----------------------------------------------------------------------------------------
williamr@2
   732
inline TInt CImCalculateMsgSize::MessageSize() const
williamr@2
   733
//----------------------------------------------------------------------------------------
williamr@2
   734
	{
williamr@2
   735
	return iSize;
williamr@2
   736
	}
williamr@2
   737
williamr@2
   738
//----------------------------------------------------------------------------------------
williamr@2
   739
inline void CImCalculateMsgSize::Progress(TInt& rCurrentSize, TInt& rTotalSize)
williamr@2
   740
//----------------------------------------------------------------------------------------
williamr@2
   741
	{
williamr@2
   742
	rCurrentSize=iSize;
williamr@2
   743
	rTotalSize=iTotal;
williamr@2
   744
	}