diff -r 000000000000 -r 3553901f7fa8 smsprotocols/smsstack/smsprot/Inc/smspmondsk.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/smsprotocols/smsstack/smsprot/Inc/smspmondsk.h Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,104 @@ +// Copyright (c) 1997-2009 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: +// Header for a CActive based class that monitors for low disk space and +// is informed when a PDU is being received. Should memory be too low, +// an error code is returned causing a NAck. The class will then monitor +// for the point at which PDUs can be received again, and a Resume Reception +// will be sent to the network. +// The are two limits - a high limit for general SMSs and a low limit for +// class 0 SMSs. However there is only one way to resume reception of SMSs. So +// once a resume reception is sent, it resumes hoth types of SMSs. The algorithm +// is a bit simiplier because of this: +// IF sending non-Class 0 AND we are below the high limit THEN +// N'Ack SMS +// IF not waiting for free diskspace THEN +// Wait for free diskspace to rise above the high limit +// Resume SMS Reception. +// ELSE +// Continue waiting for either high limit or low limit +// Resume SMS Reception as previously intended +// END_IF +// ELSE IF sending Class 0 AND we are below the low limit THEN +// Wait for free diskspace to rise above the low limit +// Resume SMS Reception. +// END_IF +// Note that in the second and last case, SMS reception may be resumed before +// we are above the high limit, but in that case montioring will repeat when +// the next non-class 0 SMS is attempted to be delivered. This is necessary as +// there is no way to resume just class 0 SMSs. +// +// + +/** + @file + @internalComponent +*/ + + +#ifndef __SMSPMONDSK_H__ +#define __SMSPMONDSK_H__ + +#include +#include + + +/** + * The class is a simple active object derived state machine that monitors + * disk space needed for storage of incoming messages. + */ +class CSmsMonitorDiskSpace : public CActive + { +public: + static CSmsMonitorDiskSpace* NewL(MSmsComm& aSmsComm, RMobileSmsMessaging& aSmsMessaging, RFs& aFs); + ~CSmsMonitorDiskSpace(); + + void CheckDiskSpaceForPDUL(TBool aPDUIsClass0); + +protected: + void RunL(); + void DoCancel(); + +private: + enum TSmsMonitorDiskSpaceState + { + ESmsMonitorDiskSpaceIdle, + ESmsMonitorDiskSpaceMonitorLowLimit, + ESmsMonitorDiskSpaceMonitorHighLimit, + ESmsMonitorDiskSpaceResumeReception + }; + + CSmsMonitorDiskSpace(MSmsComm& aSmsComm, RMobileSmsMessaging& aSmsMessaging, RFs& aFs); + void ConstructL(); + + void NotifyDiskSpace(TInt aLimit, TSmsMonitorDiskSpaceState aState); + void ResumeSmsReception(); + TInt GetFreeDiskSpace(); + + TSmsMonitorDiskSpaceState iState; + RMobileSmsMessaging& iSmsMessaging; + RFs& iFs; + MSmsComm& iSmsComm; + TUint iLowLimit; + TUint iHighLimit; + TBool iNAckdClassZero; + TBool iNAckdClassOther; + +#ifdef _DEBUG + TBool iInOODTesting ; + RProperty iFreeDiskSpaceProperty; +#endif + + }; + +#endif // !defined __SMSPMONDSK_H__