// SMUTSET.H
//
// Copyright (c) 1998 Symbian Ltd.  All rights reserved.
//



#if !defined (__SMUTSET_H_)
#define __SMUTSET_H_

#if !defined(__E32STD_H__)
#include <e32std.h>
#endif
#if !defined(__S32STRM_H__)
#include <s32strm.h>
#endif
#if !defined(__ETELBGSM_H__)
#include <etelbgsm.h>
#endif
#if !defined(__SMUTELEM_H__)
#include "smutelem.h"
#endif


class CMsvStore;
class RMsvReadStream;
class RMsvWriteStream;


const TUid KUidMsvSMSSettingsStream={0x10001835};

#define KDefaultValidityPeriodMinutes 60
#define KDefaultTimeoutMicroSeconds32 60000000
const TInt KDefaultRetryLimit=4;


class TSmsProgress
	{
friend class CSmsRecipientSend;

public:
	enum TSmsProgressType
		{
		ESmsProgressTypeDefault,
//		ESmsProgressTypeReturningIsConnectedToPhone,
		ESmsProgressTypeReadingServiceCenterAddress,
		ESmsProgressTypeEnumerating,
		ESmsProgressTypeSending,
		ESmsProgressTypeReadingMessage
		};

public:
	inline TSmsProgress(TSmsProgressType aType=ESmsProgressTypeDefault);
	
public:
	TSmsProgressType iType;
	TInt iState;
	TInt iError; 
	TInt iHdrNo;     
	TInt iHdrDone;
	TInt iHdrCount;
	TInt iRcpNo;    
	TInt iRcpDone;
	TInt iRcpCount;
	TInt iMsgNo;     
	TInt iMsgDone;
	TInt iMsgCount;
	TGsmTelNumber iServiceCenterAddress;
	};

typedef TPckgBuf<TSmsProgress> TSmsProgressBuf;

class TSmsMessageSettings
	{
public:
	IMPORT_C TSmsMessageSettings();

	IMPORT_C void InternalizeL(RMsvReadStream& aStream);
	IMPORT_C void ExternalizeL(RMsvWriteStream& aStream) const;

	inline void SetConcatenated(TBool aBool);
	inline TBool Concatenated() const;

	inline void SetCompressed(TBool aBool);
	inline TBool Compressed() const;

	inline void SetAlphabet(TSmsDataCodingScheme::TSmsAlphabet aAlphabet);
	inline TSmsDataCodingScheme::TSmsAlphabet Alphabet() const;

	inline void SetClass(TBool aClassDefined,TSmsDataCodingScheme::TSmsClass aClass);
	inline TBool Class(TSmsDataCodingScheme::TSmsClass& aClass) const;

private:
	TBool iConcatenated;
	TBool iCompressed;
	TSmsDataCodingScheme::TSmsAlphabet iAlphabet;
	TBool iClassDefined;
	TSmsDataCodingScheme::TSmsClass iClass;
	};

class TSmsSettings
	{
public:
	IMPORT_C TSmsSettings();
	IMPORT_C void InternalizeL(RMsvReadStream& aStream);
	IMPORT_C void ExternalizeL(RMsvWriteStream& aStream) const;
	IMPORT_C void RestoreL(CMsvStore& aMessageStore);
	IMPORT_C void StoreL(CMsvStore& aMessageStore) const;

	inline void SetValidityPeriod(const TTimeIntervalMinutes& aTimeIntervalMinutes);
	inline const TTimeIntervalMinutes& ValidityPeriod() const;

	inline void SetTimeout(const TTimeIntervalMicroSeconds32& aTimeIntervalMicroSeconds32);
	inline const TTimeIntervalMicroSeconds32& Timeout() const;

	inline void SetSendRetryLimit(const TInt aRetryLimit);
	inline TInt SendRetryLimit() const;

	inline void SetDeleteSmsDeliversFromStores(TBool aBool);
	inline TBool DeleteSmsDeliversFromStores() const;

	inline void SetSmsServiceVisibility(TBool aBool);
	inline TBool SmsServiceVisibility() const;

	inline void SetCostPerMessage(TInt aCostPerMessage);
	inline TInt CostPerMessage() const;

	inline void SetMessageSettings(const TSmsMessageSettings& aMessageSettings);
	inline const TSmsMessageSettings& MessageSettings() const;

	inline void SetServiceCenterAddress(const TGsmTelNumber& aServiceCenterAddress);
	inline void ServiceCenterAddress(TGsmTelNumber& aServiceCenterAddress) const;

private:
	TTimeIntervalMinutes iValidityPeriodMinutes;
	TTimeIntervalMicroSeconds32 iTimeoutMicroSeconds32;
	TInt iRetryLimit;
	TBool iDeleteSmsDeliversFromStores;
	TBool iSmsServiceVisibility;
	TInt iCostPerMessage;
	TSmsMessageSettings iMessageSettings;
	TGsmTelNumber iServiceCenterAddress;
	};
	
#include "smutset.inl"

#endif // !defined __SMUTSET_H_
