vtengines/videoteleng/CallCtrl/Inc/CVtCtlVideoCall.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 23 Nov 2009 14:47:47 +0200
changeset 0 ed9695c8bcbe
permissions -rw-r--r--
Revision: 200948

/*
* Copyright (c) 2004 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:  Video call abstraction
*
*/



#ifndef CVTCTLVIDEOCALL_H
#define CVTCTLVIDEOCALL_H

//  INCLUDES
#include <etelmm.h>
#include "MVtCtlCallControl.h"
#include "MVtCtlCallStatusObserver.h"


// FORWARD DECLARATIONS
class CVtCtlCallStatusMonitor;

// CLASS DECLARATION

/**
*  Video call abstraction
*
*  @lib CSCallCtrl
*  @since 2.6
*/
NONSHARABLE_CLASS( CVtCtlVideoCall ) : 
    public CBase,
    public MVtCtlCallStatusObserver
    {
    public:
        
        /**
        * Call information
        */
        struct TVtCtlCallInfo
            {
            // Session state
            MVtCtlCallControl::TVtCtlState     iStatus;
            // Previous session state
            MVtCtlCallControl::TVtCtlState     iPreviousStatus;
            // Session id
            TVtCtlSessionId                    iId;
            // Session direction
            MVtCtlCallControl::TVtCtlDirection iDirection;
            };

    public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        * @param aDataLine line subsession
        * @param aId session id
        * @param aObserver call status observer
        */
        /*****************************************************
        *   Series 60 Customer / ETel
        *   Series 60  ETel API
        *****************************************************/
        static CVtCtlVideoCall* NewL( 
            RMobileLine& aDataLine,
            TVtCtlSessionId aId,
            MVtCtlCallStatusObserver& aObserver
            );

        /**
        * Destructor.
        */
        virtual ~CVtCtlVideoCall();

    public: // New functions
        
        /**
        * Returns call info
        * @return reference to call info
        */
        const CVtCtlVideoCall::TVtCtlCallInfo& CallInfo() const;

        /**
        * Returns Etel call info
        * @return call info
        */
        /*****************************************************
        *   Series 60 Customer / ETel
        *   Series 60  ETel API
        *****************************************************/
        const RMobileCall::TMobileCallInfoV1& MobileInfo() const;

        /**
        * Opens call subsession and starts monitoring call status.
        * @param aCallName call name
        */
        /*****************************************************
        *   Series 60 Customer / ETel
        *   Series 60  ETel API
        *****************************************************/
        void InitializeCallL( RMobileCall& aCall );

        /**
        * Updates call information from ETel
        * @return Symbian OS error code
        */
        TInt UpdateCallInfo();

        /**
        * Returns call duration from Etel
        * @param aDuration duration
        * @return Symbian OS error code
        */
        TInt GetDuration( TVtCtlDuration& aDuration );
        
        /**
        * Obtains video call state from the server and returns it.
        * @param aState updated call state
        * @return Symbian OS error code
        * @since S60 3.1
        */
        TInt GetCallState( MVtCtlCallControl::TVtCtlState& aState );

    protected:  // From MVtCtlCallStatusObserver
        
        /**
        * @see MVtCtlCallStatusObserver::HandleCallStatusChangeL
        */
        virtual void HandleCallStatusChangeL( 
            TVtCtlSessionId aId,
            MVtCtlCallControl::TVtCtlState aStatus,
            MVtCtlCallControl::TVtCtlState aPreviousStatus );

    private:

        /**
        * C++ constructor.
        * @param aDataLine data line
        * @param aId session id
        * @param aObserver observer
        */
        /*****************************************************
        *   Series 60 Customer / ETel
        *   Series 60  ETel API
        *****************************************************/
        CVtCtlVideoCall( 
            RMobileLine& aDataLine, 
            TVtCtlSessionId aId,
            MVtCtlCallStatusObserver& aObserver );

    private:    // Data

        // Call information
        TVtCtlCallInfo iCallInfo;

        // Etel call
        /*****************************************************
        *   Series 60 Customer / ETel
        *   Series 60  ETel API
        *****************************************************/
        RMobileCall* iCall;

        // Data line
        /*****************************************************
        *   Series 60 Customer / ETel
        *   Series 60  ETel API
        *****************************************************/
        RMobileLine& iLine;

        // Etel call information
        /*****************************************************
        *   Series 60 Customer / ETel
        *   Series 60  ETel API
        *****************************************************/
        RMobileCall::TMobileCallInfoV1 iMobileCallInfo;
        
        // Call status monitor
        CVtCtlCallStatusMonitor* iStatusMonitor;

        // Call status observer
        MVtCtlCallStatusObserver& iObserver;
    };

#endif      // CVTCTLVIDEOCALL_H   
            
// End of File