/*
* Copyright (c) 2007-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:
* Name          : sipsystemstatemonitor.h
* Part of       : SIP
* Version       : SIP/6.0 
*
*/



#ifndef CSIPSYSTEMSTATEMONITOR_H
#define CSIPSYSTEMSTATEMONITOR_H

// INCLUDES
#include <e32base.h>
#include <ecom/ecom.h>

// FORWARD DECLARATIONS
class MSipSystemStateObserver;

// CONSTANTS
/** Interface UID of this ECOM interface */
const TUid KSipSystemStateMonitorIfUid = { 0x10283310 };

// CLASS DECLARATION
/**
* @publishedPartner
* @released
*
* Interface for SIP System State Monitor ECOM plug-in(s).
*/
class CSipSystemStateMonitor : public CBase
    {
    public: // Enumerations
    
        /** System variables */
        enum TSystemVariable
            {
            /** System state event */
            ESystemState=0,
            /** SNAP availability event */
            ESnapAvailability,
            /** RFS State */
            ERfsState
            };    
    
        /** System states */
        enum TSystemState 
            {
            /** System is starting up */
            ESystemNotReady=0,
            /** System has been started up */
            ESystemReady,
            /** System is shutting down */
            ESystemShuttingDown,
			/** System is in Offline state */
			ESystemOffline,
			/** System is in Online state */
			ESystemOnline
            };
    
        /** Snap availability notifications */
        enum TSnapAvailability 
            {
            /** SNAP not available */
            ESnapNotAvailable=0,
            /** SNAP available */
            ESnapAvailable
            };

        /**RFS States */
        enum TRfsState
            {
            /** Rfs Started */
            ERfsStarted=0,
            /** Rfs Failed */
            ERfsFailed,
            /** Rfs Completed */
            ERfsCompleted
            };

    public: // Constructors and destructor
    
        /**
        * Destructor.
        */
        virtual inline ~CSipSystemStateMonitor();

    public: // New functions

        /**
        * Gets current state of the system        
        * @return current state of the system
        */
        virtual TSystemState State() const = 0;

        /**
        * Starts monitoring for a system variable.
        * @param aVariable system variable to be monitored
        * @param aObjectId identifies the monitored object,
        *        for ESystemState the value should be zero,
        *        for ESnapAvailability the ID of the SNAP
        * @param aObserver observer to be informed about the changes 
        *        in the values of system variables.
        * @leave KErrNoMemory if out-of-memory
        * @leave KErrAlreadyExists if monitoring for the variable 
        *        has already been started
        */
        virtual void StartMonitoringL( TSystemVariable aVariable,
                                       TInt aObjectId,
                                       MSipSystemStateObserver& aObserver );

        /**
        * Stops monitoring for a system variable.
        * @param aVariable system variable that was monitored
        * @param aObjectId identifies the monitored object,
        *        for ESystemState value should be zero,
        *        for ESnapAvailability the ID of the SNAP
        * @param aObserver observer to be informed about the changes 
        *        in the values of system variables.
        */
        virtual void StopMonitoring( TSystemVariable aVariable, 
                                     TInt aObjectId,
                                     MSipSystemStateObserver& aObserver );

        /**
        * Gets current value of a particular system variable
        * @param aVariable system variable that was monitored
        * @param aObjectId identifies the monitored object,
        *        for ESystemState the value should be zero,
        *        for ESnapAvailability the ID of the SNAP
        * @return current value of the system variable
        */
        virtual TInt CurrentValue( TSystemVariable aVariable,
                                   TInt aObjectId ) const;
        
        /**
        * Gets current value of a particular system variable
        * @param aVariable system variable that was monitored
        * @param aObjectId identifies the monitored object,
        *        for ESystemState the value should be zero,
        *        for ESnapAvailability the ID of the SNAP
        * @return current value of the system variable
        */
        virtual void EventProcessingCompleted( TSystemVariable aVariable,
                                TInt aObjectId,
                                MSipSystemStateObserver& aObserver);

    public: // Data

        /// Unique key for implementations of this interface.
        TUid iInstanceKey;

    protected: // Constructors:

        inline CSipSystemStateMonitor();
    };
    
#include "sipsystemstatemonitor.inl"

#endif // CSIPSYSTEMSTATEMONITOR_H
