convergedcallengine/cce/inc/cccecall.h
changeset 0 ff3b6d0fd310
child 19 7d48bed6ce0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedcallengine/cce/inc/cccecall.h	Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,555 @@
+/*
+* Copyright (c) 2006-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:  Implementation for call object
+*
+*/
+
+
+#ifndef CCCECALL_H
+#define CCCECALL_H
+
+#include <e32base.h>
+#include <cccpcallparameters.h>
+
+#include "ccpdefs.h" // TCCPError defs
+
+#include "mccpcallobserver.h"     // MCCPCallObserver
+#include "mccptransferobserver.h" // MCCPTransferObserver
+#include "mccpforwardobserver.h"  // MCCPForwardObserver
+#include "mccecall.h"             // MCCECall
+#include "mccecallobserver.h"     // For enumeration use
+#include "mccecallinfo.h"
+#include "ccecallenums.h"
+
+class CCCEDurationTimer;
+class CCCECallContainer;
+class MCCPCall;
+class MCCPTransferProvider;
+class CCCETransferController;
+class MCCPForwardProvider;
+class CCCECallObserverAsynchroniser;
+
+/**
+ *  Internal call object
+ *
+ *  This object contains logic for this specific call
+ *
+ *  @lib cce.dll
+ *  @since S60 v3.2
+ */
+NONSHARABLE_CLASS(CCCECall) : public CBase,
+                              public MCCPCallObserver,
+                              public MCCPTransferObserver,
+                              public MCCPForwardObserver,
+                              public MCCECall,
+                              public MCCECallInfo
+    {
+    
+public:
+
+    /** Enumeration for requests */ 
+    enum TCallRequest
+       {
+       ECCENone                  =   0x00000000, // 0 must be set to 0
+       ECCEDial,                                 // 1
+       ECCEReleaseActive,                        // 2
+       ECCEReleaseHeld,                          // 3
+       ECCEReleaseOutgoing,                      // 4
+       ECCERejectIncoming,                       // 5
+       ECCETerminateDisconnected,                // 6
+       ECCEHold,                                 // 7
+       ECCEResume,                               // 8
+       ECCESwap,                                 // 9
+       ECCETransfer,                             //10
+       ECCEConferenceJoin,                       //11
+       ECCEMakeEmergencyCall,                    //12
+       ECCEAnswer,                               //13
+       ECCEConferencePrivate,                    //14
+       ECCEConferenceDropParticipant,            //15
+       ECCEConferenceTerminate,                  //16
+       ECCESwitchCallMode,                       //17
+       ECCEReplaceActive,                        //18
+       ECCETerminateAll,                         //19
+       ECCETerminateAllAndWaiting,               //20
+       ECCETerminateAllActiveCalls,              //21
+       ECCETerminateAllHeldCalls,                //22
+       ECCEClearBlackListing,                    //23
+       ECCETerminateAndDial,                     //24    
+       ECCEActivateCcbs,                         //25
+       ECCERejectCcbs,                           //26
+       ECCEUnattendedTransfer,                   //27  
+       ECCEPark                                  //28
+       };
+
+private:
+
+ 
+    class TStateTransition
+        {
+    public:
+    	TStateTransition() 
+    		{
+    		iState = CCPCall::EStateIdle;
+    		iInband = EFalse;
+    		}
+
+    	CCPCall::TCallState iState;
+        TBool iInband;
+        };
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param aCallContainer Reference callcontainer
+     * @param aCallId Defines id for this call
+     */
+    static CCCECall* NewLC( CCCECallContainer& aCallContainer, TInt aCallId );
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CCCECall();
+
+public:
+
+    /**
+     * Sets new converged call into to use.
+     *
+     * @since S60 v3.2
+     * @param aCall Pointer to used ccp call
+     * @param aImplementationUid Implementation uid of plugin that call is from
+     * @param aTransferred Flag indicating if this was transferred call. In that
+     * case some of the initilizations made in this method should not be done
+     * @return None
+     */
+    void SetConvergedCallL( 
+        MCCPCall* aCall,
+        TUid aImplementationUid,
+        TBool aTransferred = EFalse );
+
+    /**
+     * Informs to observers that calls request has been completed.
+     *
+     * @since S60 v3.2
+     * @param aRequest Request to be completed
+     * @param aError Error code for request( KErrNone if succesful )
+     */
+    void NotifyRequestComplete( TInt aRequest, TCCPError aError );
+
+    /**
+     * Complete currently ongoing request
+     *
+     * @since S60 v3.2
+     * @param aError Error code ( KErrNone if succesful )
+     */
+    void RequestComplete( TCCPError aError );
+
+    /**
+     * Do request that is pending. This is needed in multicall dial and answer.
+     *
+     * @since S60 v3.2
+     * @return KErrNone if request was started succesfully. 
+     */
+    TInt DoPendingRequest();
+
+    /**
+     * Call object in use.
+     *
+     * @since S60 v3.2
+     * @return ETrue if in use. 
+     */
+    TBool IsInUse() const;
+
+    /**
+     * Service id of this call.
+     *
+     * @since S60 v3.2
+     * @return Service id of this call, 0 if not in use. 
+     */
+     TUint32 ServiceId() const;
+
+    /**
+     * Reference to owned converged call provider call.
+     *
+     * @since S60 v3.2
+     * @return Reference to MCCPCall. 
+     */    
+    MCCPCall& GetCCPCall() const;
+
+    /**
+     * Returns currently ongoing request.
+     *
+     * @since S60 v3.2
+     * @return Currently ongoing request 
+     */
+    TCallRequest Request() const;
+        
+     /**
+     * Id of this call
+     *
+     * @since S60 v3.2
+     * @return Id of this call. 
+     */
+    TInt CallId() const;
+
+    /**
+     * Adds new observer for MCCECall object.
+     * 
+     * @since S60 v3.2
+     * @param aCallObserver Observer
+     */
+    void SetObserver( const MCCECallObserver& aObserver );
+    
+    /**
+     * Put call on hold but dont complete request.
+     * This is used in multicall situations.
+     *
+     * @since S60 v3.2
+     * @return KErrNone if request was started succesfully. 
+     */
+    TInt HoldNoNotify();
+
+    /**
+     * Resume call but dont complete request.
+     * This is used in multicall situations.
+     *
+     * @since S60 v3.2
+     * @return KErrNone if request was started succesfully. 
+     */
+    TInt ResumeNoNotify();
+    
+    /**
+     * Called by the TransferController object in case when remote end has been
+     * inititated transfer
+     * @since S60 v3.2
+     * @param aAttended Type of the transfer ETrue if type is attended 
+     * otherwise EFalse
+     * @param aTransferController Reference to TransferController
+     * @return None
+     */
+    void HandleTransfer( const TBool aAttented,
+                         CCCETransferController& aTransferController );
+    
+     /**
+     * Sets TransferController handle
+     * @since S60 v3.2
+     * @param aTransferController Pointer to TransferController object
+     * @return None
+     */
+    void SetTransferController( CCCETransferController* aTransferController );
+    
+    /**
+     * Sets new call index if call index not valid.
+     * 
+     * @since S60 5.0
+     */
+    void SetNewCallIndex();
+
+// from base class MCCECall
+
+    /** @see MCCECall::Release */
+    TInt Release();
+
+    /** @see MCCECall::ReplaceActive */
+	TInt ReplaceActive();
+
+    /** @see MCCECall::Hold */
+    TInt Hold();
+
+    /** @see MCCECall::Resume */
+    TInt Resume();
+    
+    /** @see MCCECall::HangUp */
+    TInt HangUp();
+
+    /** @see MCCECall::State */
+    CCPCall::TCallState State() const;
+    
+    /** @see MCCECall::Tone */
+     TCCPTone Tone() const;
+
+    /** @see MCCECall::CallDuration */
+    TTimeIntervalSeconds CallDuration() const;
+
+    /** @see MCCECall::Parameters */
+    const CCCPCallParameters& Parameters() const;
+
+// from base class MCCPCallObserver
+
+    /** @see MCCPCallObserver::ErrorOccurred */
+    void ErrorOccurred( TCCPError aError, MCCPCall* aCall );
+    
+    /** @see MCCPCallObserver::CallStateChanged */
+    void CallStateChanged( TCCPCallState aState, MCCPCall* aCall );
+
+// from class MCCECallInfo
+    
+    /** @see MCCECallInfo::ImplementationUid */
+    const TUid ImplementationUid() const;
+    
+    /** @see MCCECallInfo::Direction */
+    CCPCall::TCallDirection Direction() const;
+    
+    /** @see MCCECallInfo::CallType */
+    CCPCall::TCallType CallType() const;
+    
+    /** @see MCCECallInfo::CallIndex and MCCECall::CallIndex */
+    TInt CallIndex() const;
+    
+private: 
+
+// from base class MCCECall
+
+    /** @see MCCECall::SetParameters */
+    void SetParameters( const CCCECallParameters& aNewParams );
+    
+    /** @see MCCECall::Swap */
+    TInt Swap();
+
+    /** @see MCCECall::Answer */
+    TInt Answer();
+
+    /** @see MCCECall::Dial */
+    TInt Dial( const TDesC8& aCallParams );
+
+    /** @see MCCECall::DialEmergencyCall */
+    void DialEmergencyCall( const TDesC16& aNumber );
+
+    /** @see MCCECall::ForwardToAddressL */
+    void ForwardToAddressL( TInt aIndex );
+
+    /** @see MCCECall::GetMobileCallInfo */
+    void GetMobileCallInfo( TDes8& aCallInfo ) const;
+
+    /** @see MCCECall::StartTime */
+    TDateTime StartTime() const;
+
+    /** @see MCCECall::Caps */
+    MCCECallObserver::TCCECallControlCaps Caps() const;
+
+    /** @see MCCECall::IsSecureSpecified */
+    TBool SecureSpecified() const;
+
+    /** @see MCCECall::IsSecured */
+    TBool IsSecured() const;
+    
+    /** @see MCCECall::IsEmergency and MCCECallInfo::IsEmergency */
+    TBool IsEmergency() const;
+
+    /** @see MCCECall::RemoteParty */
+    const TDesC& RemoteParty() const;
+
+    /** @see MCCECall::RemotePartyName */
+    const TDesC& RemotePartyName() const;
+
+    /** @see MCCECall::DialledParty */
+    const TDesC& DialledParty() const;
+    
+    /** @see MCCECall::AttendedTransfer */
+    TInt AttendedTransfer( const TDesC& aTransferTarget );
+
+    /** @see MCCECall::UnattendedTransfer */
+    TInt UnattendedTransfer( const TDesC& aTarget );
+
+    /** @see MCCECall::AcceptTransfer */
+    TInt AcceptTransfer( const TBool aAccept );
+
+    /** @see MCCECall::TransferTarget */
+    const TDesC& TransferTarget() const;
+
+    /** @see MCCECall::GetForwardAddressChoicesL */
+    const CDesC8Array& GetForwardAddressChoicesL();
+
+// from base class MCCECSCall
+
+    /** @see MCCECSCall::SwitchAlternatingCall */
+    TInt SwitchAlternatingCall();
+    
+    /** @see MCCECSCall::GetMobileDataCallCaps */
+    TInt GetMobileDataCallCaps( TDes8& aCaps ) const;
+    
+    /** @see MCCECSCall::NoFDNCheck */
+    void NoFDNCheck();
+    
+    /** @see MCCECSCall::LogDialedNumber */
+    TBool LogDialedNumber() const;
+    
+// from base class MCCPCallObserver
+    
+    /** @see MCCPCallObserver::CallEventOccurred */
+    void CallEventOccurred( TCCPCallEvent aEvent, MCCPCall* aCall );
+    
+    /** @see MCCPCallObserver::CallCapsChanged */
+    void CallCapsChanged( TUint32 aCapsFlags, MCCPCall* aCall );
+    
+    /** @see MCCPCallObserver::CallStateChangedWithInband */
+    void CallStateChangedWithInband( TCCPCallState aState, MCCPCall* aCall );
+    
+// from base class MCCPTransferObserver
+
+    /** @see MCCPTransferObserver::TransferEventOccurred */
+    void TransferEventOccurred( TCCPTransferEvent aEvent );
+
+// from base class MCCPForwardObserver
+
+     /** @see MCCPForwardObserver::ForwardEventOccurred */
+    void ForwardEventOccurred( 
+        const MCCPForwardObserver::TCCPForwardEvent aEvent );
+
+private:
+
+    /**
+     * Reset call members
+     *
+     * @since S60 v3.2
+     */
+    void Reset();
+
+    /**
+     * Handle call state change
+     *
+     * @since S60 v3.2
+     * @param aCallState New call state ( TCCPCallState )
+     * @param aInband ETrue if tones for this status is generated inband
+     */
+    void CallStateChanged( TCCPCallState aState, TBool aInband );
+
+    /**
+     * Notify call state changes to observers
+     *
+     * @since S60 v3.2
+     * @param aCallStatus New call state
+     * @param aInband ETrue if tones for this status is generated inband
+     */
+    void NotifyCallStatusChange( 
+        CCPCall::TCallState aCallStatus, 
+        TBool aInband, 
+        CCECallEnums::TNotifyType aNotify);
+
+    /**
+     * Tells if cs plugin is used in current call
+     *
+     * @since S60 v3.2
+     * @return ETrue if cs plugin used
+     */
+    TBool IsCsPlugin() const;
+    
+private:
+
+    /** Constructor */
+    CCCECall( CCCECallContainer& aCallContainer, TInt aCallId );
+
+    /** Leaving stuff in constructor */
+    void ConstructL();
+
+private: // data
+
+    /**
+     * Id for this call
+     */
+    const TInt iCallId;
+
+    /**
+     * Callcontainer that owns this call
+     */
+    CCCECallContainer& iCallContainer;
+        
+    /**
+     * Currently ongoing request
+     */
+    TCallRequest iActiveRequest;
+    
+    /**
+     * KErrNone if everythink OK
+     */
+    TCCPError iExitCode;
+    
+    /**
+     * Call direction
+     */
+    CCPCall::TCallDirection iCallDirection;
+
+    /**
+     * If request is made internally, its completion is not
+     * notified to observer. This variable contains request
+     * id of internal request
+     */
+    TInt iDoNotReportRequest;
+    
+    /**
+     * Call status for internal use
+     */
+    CCPCall::TCallState iCallState;
+    
+    /**
+     * Plugin implementation Uid
+     */
+    TUid iImplementationUid;
+    
+    /**
+     * Callparameters
+     */
+    CCCPCallParameters* iCallParameters;
+    
+    /**
+     * CS call only
+     * Not own
+     */
+    const TDesC8* iCallParams;
+    
+    /**
+     * Pointer to observer
+     * Own
+     */
+    CCCECallObserverAsynchroniser* iObserver;
+    
+    /**
+     * Pointer to converged call provider call
+     * Own
+     */
+    MCCPCall* iCall;
+    
+    /**
+     * Counts duration for this call
+     * Own
+     */
+    CCCEDurationTimer* iCCEDurationTimer;
+    
+    /**
+     * ForwardProvider interface handle
+     * Own
+     */
+    MCCPForwardProvider* iForwardProvider;
+    
+    /**
+     * TransferProvider interface handle. 
+     * Not own
+     */  
+    MCCPTransferProvider* iTransferProvider;
+     
+    /**
+     * TransferController handle. 
+     * Not own
+     */ 
+    CCCETransferController* iTransferController;
+    
+    /**
+     * GSM spec Call index.
+     */
+    TInt iCallIndex;
+    
+   
+    };
+
+#endif // CCCECALL_H