diff -r f742655b05bf -r d38647835c2e callcontinuity/vcc/inc/cvcctransferprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/callcontinuity/vcc/inc/cvcctransferprovider.h Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 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: Sends and receives DTMF tones +* +*/ + + + +#ifndef CVCCTRANSFERPROVIDER_H +#define CVCCTRANSFERPROVIDER_H + +class CVccPerformer; + +#include // MCCPTransferProvider +#include // MCCPTransferObserver + +/** + * DTMF provider. + * Contains DTMF providers from call providers and forward all requests between + * them and CCE + * + * @lib vccperformer.lib + * @since S60 v3.2 + */ +class CVccTransferProvider : public CBase, + public MCCPTransferProvider, + public MCCPTransferObserver + { + +public: + + /** + * Two-phased constructor. + * @param aProviders Service providers + * @param aObserver + * @param aDirector Reference to Director object + */ + static CVccTransferProvider* NewL ( CVccPerformer* aCall ); + + /** + * Destructor. + */ + virtual ~CVccTransferProvider(); + + /** + * Attended transfer to given call recipient. + * There needs to exist two calls. a call between A-B and A-C. A wants to transfer the call to B-C. + * Both calls A-B and A-C will be disconnected after transfer. + * In above case C will be the aTransferTargetCall call recipient. 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. + * Actual request result indication comes via observer classes + * @param aTransferTargetCall Call containing the transfer target info. + * @return KErrNone if request was started succesfully. + * @return KErrNotReady if call is not in connected or on-hold state. + * @return KErrArgument transfer traget address was illegal. + * @pre Call state is MCCPCallObserver::ECCPStateConnected or MCCPCallObserver::ECCPStateHold + * @since S60 3.2 + */ + TInt AttendedTransfer( MCCPCall& aTransferTargetCall ); + + /** + * Attended transfer to given address. There does not need to be + * a current call between the given transfer target. + * Actual request result indication comes via observer class + * @param aTransferTarget Transfer target address + * @return KErrNone if request was started succesfully. + * @return KErrNotReady if call is not in connected or on-hold state. + * @return KErrArgument transfer address was illegal. + * @pre Call state is MCCPCallObserver::ECCPStateConnected or MCCPCallObserver::ECCPStateHold + * @since S60 3.2 + */ + TInt AttendedTransfer( const TDesC& aTransferTarget ); + + /** + * Unattended transfer. Call is requested to be transferred to given address. + * After MCCPTransferObserver::ECCPRemoteTransferring event current call will be + * disconnected and no transfer status is checked from the operation. + * Actual request result indication comes via observer classes + * @since S60 3.2 + * @param aTransferTarget Address of the target + * @return KErrNone if request was started succesfully. + * @return KErrNotReady if call is not in connected or on-hold state. + * @return KErrArgument transfer address was illegal. + * @pre Call state is MCCPCallObserver::ECCPStateConnected or MCCPCallObserver::ECCPStateHold + */ + TInt UnattendedTransfer( const TDesC& aTransferTarget ); + + /** + * Accept incoming call transfer request from the call remote party. + * Actual request result indication comes via observer class + * @since Series 60 3.2 + * @param aAccept ETrue - accept transfer, EFalse do not accept transfer request. + * @return KErrNone if request was started succesfully. + * @return KErrNotReady if call is not in connected or on-hold state. + * @return KErrArgument transfer address was illegal. + * @pre Call state is MCCPCallObserver::ECCPStateConnected or MCCPCallObserver::ECCPStateHold + * @pre MCCPObserver::CallCreated is called with the newly created call + */ + TInt AcceptTransfer( const TBool aAccept ); + + /** + * When the other end of the call has requested call transfer to third party it is notified to + * MCCPTransferObserver::TransferEventOccurred(MCCPTransferObserver::ECCPRemoteTransferring). + * The new recipient of the call can be fetched via this method. + * @since Series 60 3.2 + * @param none + * @return new recipient for the call after transfer + * @return KNullDesC if no transfer target is available + * @pre Call state is MCCPCallObserver::ECCPStateConnected or MCCPCallObserver::ECCPStateHold + * @pre MCCPObserver::CallCreated is called with the newly created call + */ + const TDesC& TransferTarget() const; + + /** + * Add an observer for transfer related events. + * Currently CCE will set only one observer. + * @since S60 v3.2 + * @param aObserver Observer to add. + * @return none + * @leave system error if observer adding fails + */ + void AddObserverL( const MCCPTransferObserver& aObserver ); + + /** + * Remove an observer. + * @since S60 v3.2 + * @param aObserver Observer to remove. + * @return KErrNone if removed succesfully. + * @return KErrNotFound if observer was not found. + */ + TInt RemoveObserver( const MCCPTransferObserver& aObserver ); + + void TransferEventOccurred( + const MCCPTransferObserver::TCCPTransferEvent aEvent ); + + void UpdateL(); +private: + + /** + * C++ constructor + * @param aObserver Reference to DTMF observer + * @param aDirector Reference to Director + */ + CVccTransferProvider( CVccPerformer* aCall ); + + /** + * Symbian second-phase constructor + * @param aProviders Reference to array of the Service Providers + */ + void ConstructL( ); + +private: // data + + /** + * DTMF event observers. + * Own. + */ + RPointerArray iObservers; + CVccPerformer* iPerfCall; + MCCPTransferProvider* iCallTransferProvider; + }; + +#endif // CVCCTRANSFERPROVIDER_H