// SMTPSET.H
//
// Copyright (c) 1998 Symbian Ltd.  All rights reserved. 
//

#if !defined (__SMTPSET_H__)
#define __SMTPSET_H__

#if !defined (__MSVUIDS_H__)
#include <MSVUIDS.H>
#endif

#include "miutset.h"

class CMsvStore;
class RMsvWriteStream;
class RMsvReadStream;


const TUint16 KImSmtpClientSettingsVersion = 1;	// identify which version of this class has been stored
const TUint32 KSMTPDefaultPortNumber = 25;


enum TMsgOutboxBodyEncoding
	{
	EMsgOutboxNoAlgorithm,
	EMsgOutboxMIME
	};

class TSmtpProgress
	{
public:
	enum TSmtpProgressType 
		{
		ESmtpConnecting,
		ESmtpSending,
		ESmtpDisconnecting,
		ESmtpDisconnected,
		ESmtpMaxProgressValue=ESmtpDisconnected
		};

	TSmtpProgressType iSmtpProgress;
	TInt		iTotalMsgs;
	TInt		iMsgsToProcess;
	TInt		iBytesDone;
	TInt		iTotalBytes;
	TInt		iErrorCode; // client side needs to be informed of an error
	};

//
//  TMsgImOutpoxSendState
//
enum TMsgImOutboxSendState
	{
	EMsgOutboxProgressWaiting,
	EMsgOutboxProgressConnecting,
	EMsgOutboxProgressSending,
	EMsgOutboxProgressDone
	};

//
//  TSmtpSessionState
//
enum TSmtpSessionState
	{
	EConnectingToSmtp,
	EWaitingForReply,
	EAuthorisingSmtp,
	ESendingImail,
	EClosingSmtp
	};

//
//  TImImailFileProgress
//
class TImImailFileProgress				
	{
public:
	TInt				iBytesSent;
	TInt				iBytesToSend;
	TSmtpSessionState	iSessionState;
	};

//
//  TImStmpProgress
//
class TImSmtpProgress
	{

public:
	IMPORT_C TMsgImOutboxSendState	Status() const;			    // Progress: current progress status of mail session
	IMPORT_C TInt						MsgNo() const;		    // Progress: No. of message currently being sent; zero=1st message

	IMPORT_C TInt						Error() const;			// Summary: completion code from end of last session
	IMPORT_C TInt						Sent() const;			// Summary: No. messages sent successfully
	IMPORT_C TInt						NotSent() const;		// Summary: No. messages I didn't attempt to send
	IMPORT_C TInt						FailedToSend() const;	// Summary: No. messages attempted to send but failed
	IMPORT_C TInt						SendTotal() const;		// Sent() + NotSent() + FailedToSend() = SendTotal()

	IMPORT_C void						SetError(TInt anError);
	IMPORT_C void						SetStatus(TMsgImOutboxSendState aStatus);
	IMPORT_C void						SetMsgNo(TInt aMsgNo);
	IMPORT_C void						InitialiseTotal(const TInt& aTotal);

	IMPORT_C void						UpdateSent();
	IMPORT_C void						UpdateFailedToSend();
	IMPORT_C void						DecrementSendTotal();

// data
public:

	TImImailFileProgress			iSendFileProgress;

private:

	TMsgImOutboxSendState	iStatus;
	TInt					iError;
	TInt					iMsgNo;
	TInt					iSent;
	TInt					iNotSent;
	TInt					iFailedToSend;
	TInt					iSendTotal;
	};

class CImSmtpSettings : public CImBaseEmailSettings
	{
public:
	IMPORT_C CImSmtpSettings();
	IMPORT_C ~CImSmtpSettings();
	IMPORT_C void Reset();

	// streaming operations
	IMPORT_C void InternalizeL( RMsvReadStream&  );
	IMPORT_C void ExternalizeL( RMsvWriteStream& ) const;
	IMPORT_C void RestoreL( CMsvStore& aMessageStore );
	IMPORT_C void StoreL  ( CMsvStore& aMessageStore ) const;

	// EmailAlias - eg John Smith
	IMPORT_C const TPtrC EmailAlias() const;
	IMPORT_C void SetEmailAliasL( const TDesC& );

	// EmailAddress eg name@address.com
	IMPORT_C const TPtrC EmailAddress() const;
	IMPORT_C void SetEmailAddressL( const TDesC& );

	// ReplyToAddress eg replyname@address.com
	IMPORT_C const TPtrC ReplyToAddress() const;
	IMPORT_C void SetReplyToAddressL( const TDesC& );

	// Address for receipt eg name@address.com
	IMPORT_C const TPtrC ReceiptAddress() const;
	IMPORT_C void SetReceiptAddressL( const TDesC& );
	
	// BodyEncoding
	IMPORT_C const TMsgOutboxBodyEncoding BodyEncoding() const;
	IMPORT_C void SetBodyEncoding( TMsgOutboxBodyEncoding );

	IMPORT_C CImSmtpSettings& CopyL(const CImSmtpSettings& aCImSmtpSettings);
	IMPORT_C TBool operator==(const CImSmtpSettings& aCImSmtpSettings) const;

private:
	HBufC*					iEmailAlias;
	HBufC*					iEmailAddress;
	HBufC*					iReplyToAddress;
	HBufC*					iReceiptAddress;
	TMsgOutboxBodyEncoding	iBodyEncoding;
	};

#endif    // #define __SMTPSET_H__

