convergedcallengine/csplugin/inc/csptransferprovider.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 0 ff3b6d0fd310
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2007-2008 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 of CSPTransferProvider which provides methods and
*                functionality to handle call transfering
*
*/


#ifndef CSPTRANSFERPROVIDER_H
#define CSPTRANSFERPROVIDER_H

#include <e32base.h>
#include <mccptransferprovider.h>
#include <mccptransferobserver.h>

class RMobileCall;
class MCSPCallErrorObserver;
class MCSPCommonInfo;

/**
* Call transfer methods.
* MCCPCallObserver is used for errors, statuses, notifications etc
*
*  @since S60 3.2
*/
class CSPTransferProvider : public CActive,
                            public MCCPTransferProvider
    {
    
    public:
        /**
        * Two phased constructing of the transfer provider instance.
        * @param aCall mobile call handle
        * @return the Transfer provider instance
        */
        static CSPTransferProvider* NewL( RMobileCall& aCall, 
                MCSPCallErrorObserver& aErrorObserver,
                MCSPCommonInfo& aCommonInfo );        

        /** 
        * Destructs the transfer provider.
        * @since S60 3.2
        */
        virtual ~CSPTransferProvider();
        
    public:

    // from base class MCCPTransferProvider
        /**
        * Attended transfer to given call recipient.
        * There exist a call between A-B and A-C. A wants to transfer the call
        * to B-C. A itself will not be inline in case the transfer is made 
        * succesfully.In above case C will be the aTransferTargetCall. B is 
        * the recipient of the current call between A-B - called on A's call
        * object transfer provider. The A-B call is on hold (optional).
        *
        * @param aTransferTargetCall Target receiver of the transferred call. 
        *                            In this case there exist a call.
        * @return In case of an immediate error returns system error code, 
        *         if request has been started returns KErrNone.
        * Actual request result indication comes via observer class
        */
        TInt AttendedTransfer( MCCPCall& aTransferTargetCall );

        /**
        * Attended transfer to given address. There does not need to be 
        * a current call between the given transfer target.
        * @param aTransferTarget Transfer target address
        * @return In case of an immediate error returns system error code,
        *         if request has been started returns KErrNone.
        * Actual request result indication comes via observer class
        */
        TInt AttendedTransfer( const TDesC& aTransferTarget );

        /**
        * Unattended transfer. Call is requested to be transferred to given
        * address. After ECCPRemoteTransferring event current call will be
        * disconnected and no transfer status is checked from the operation. 
        * @param aTransferTarget Address of the target
        * @return In case of an immediate error returns system error code, 
        *         if request has been started returns KErrNone.
        * Actual request result indication comes via observer class
        */
        TInt UnattendedTransfer( const TDesC& aTransferTarget );

        /**
        * Accept incoming call transfer request from the call remote party.
        * @param aAccept ETrue - accept transfer, 
        *                EFalse do not accept transfer request.
        * @return In case of an immediate error returns system error code, 
        *         if request has been started returns KErrNone.
        * Actual request result indication comes via observer class
        */
        TInt AcceptTransfer( const TBool aAccept );
          
        /**
        * When the other end of the call has requested call transfer to
        * third party it is notified to 
        * CCPCallCall::EventOccurred(ECCPRemoteTransferring).
        * The new recipient of the call can be fetched via this method.
        * @return New recipient for the call after transfer
        */
        const TDesC& TransferTarget() const;
        
        /**
        * Add an observer for transfer related events.
        * Plug-in dependent feature if duplicates or more than one observers 
        * are allowed or not. Currently CCE will set only one observer.
        * @since S60 v3.2
        * @param aObserver Observer
        * @leave system error if observer adding fails
        */
        void AddObserverL( const MCCPTransferObserver& aObserver );

        /**
        * Remove an observer.
        * @since S60 v3.2
        * @param aObserver Observer
        * @return KErrNone if removed succesfully
        *         KErrNotFound if observer was not found.
        *         Any other system error depending on the error.
        */
        TInt RemoveObserver( const MCCPTransferObserver& aObserver );
        
        /**
        * A transfer event has occurred concerning a specific call.
        * @since S60 3.2
        * @param aEvent Occurred event.
        */
        void TransferEventOccurred( 
            const MCCPTransferObserver::TCCPTransferEvent aEvent );

    // from base class CActive
    protected:
            /**
        * From CActive
        * RunL
        * @since S60 3.2
        */
        void RunL();
            
        /**
        * From CActive
        * Cancels the monitor
        * @since S60 3.2
        */
        void DoCancel();  

    private:
        /**
        * Constructs the provider
        *
        * @param aCall handle mobile call
        */
        CSPTransferProvider( RMobileCall& aCall, 
                             MCSPCallErrorObserver& aErrorObserver,
                             MCSPCommonInfo& aCommonInfo );

        /**
        * Constructing 2nd phase.
        */
        void ConstructL();
        
    private: // data

        /**
        * DTMF event observer.
        */
        RPointerArray<MCCPTransferObserver> iObservers;
            
        /**
        * Etel call object
        */
        RMobileCall& iCall;
        
        /**
        * Error observer;
        */
        MCSPCallErrorObserver& iErrorObserver;
        
        /**
        * Common information for calls.
        */
        MCSPCommonInfo& iCommonInfo;


};

#endif CSPTRANSFERPROVIDER_H