convergedcallengine/csplugin/inc/cspcall.h
branchRCL_3
changeset 20 987c9837762f
parent 0 ff3b6d0fd310
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedcallengine/csplugin/inc/cspcall.h	Wed Sep 01 12:15:03 2010 +0100
@@ -0,0 +1,787 @@
+/*
+* 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:  CSPCall for CS Call Plug-in
+*
+*/
+
+
+
+#ifndef CSPCALL_H
+#define CSPCALL_H
+
+#include <mccpcscall.h>
+#include <mccpcallobserver.h>
+#include <mccptransferobserver.h>
+#include <mccpforwardobserver.h>
+#include <etel.h>
+#include <etelmm.h>
+#include <cccecallparameters.h>
+
+#include "cspconsts.h"
+#include "cspetelcallrequester.h" // For the requester and TRequestType
+#include "mcspcallobserver.h"
+#include "mcspcallerrorobserver.h"
+#include "mcspuusmessageobserver.h"
+#include "mcspcallcommandhandling.h"
+
+
+class MCCPForwardProvider;
+class CSPForwardProvider;
+class CSPTransferProvider;
+class RMobileCall;
+class CSPEtelCallStatusMonitor;
+class CSPEtelCallEventMonitor;
+class CSPCallInfoMonitor;
+class CSPEtelCallCapsMonitor;
+class CSPTransferProvider;
+class CSPEtelCallCapsMonitor;
+class CSPAudioHandler;
+class MCSPCommonInfo;
+class CSPUUIMonitor;
+class CSPUUIMessageSender;
+
+
+/**
+* Call class for CS Call Plug-in. Implements the API defined by CCP in classes
+* MCCPCall and MCCPCSCall
+*
+*  @lib csplugin.dll
+*/
+class CSPCall : public CBase,
+                public MCCPCSCall,
+                public MCSPCallObserver,
+                public MCSPCallErrorObserver,
+                public MCSPUUSMessageObserver,
+                public MCCPCallCommandHandling
+    {
+    public:
+        /*
+        * C++ default destructor
+        */
+        virtual ~CSPCall( );
+       
+        /** 
+        * ETel call name accessor.
+        * @return system wide error code
+        */
+        void CallName( TName& aCallName );
+        
+        /**
+        * Sets the audio handler for the call.
+        * @param aHandler audio handler
+        */
+        void SetAudioHandler( CSPAudioHandler* aHandler );
+        
+        /**
+         * Security setting change notification.
+         * @param aValue new value
+         */
+        void SecuritySettingChanged( TInt aValue );
+        
+        /**
+         * Remote alerting tone status changed notification.
+         * @param aNewStatus New remote alerting tone status.
+         */
+        void RemoteAlertingToneStatusChanged(
+            RMmCustomAPI::TRemoteAlertingToneStatus aNewStatus );
+
+        /**
+         * Set iDontReportTerm flag value to ETrue.
+         */
+        void DontReportTerminationError();
+        
+// from base class MCSPCallObserver
+
+        /**
+        * Updates the call event for observers.
+        * @param aEvent the event to be notified
+        */
+        virtual void NotifyForwardEventOccurred( 
+                        MCCPForwardObserver::TCCPForwardEvent aEvent );
+
+        /**
+        * Updates the state change and forwards the state for observer.
+        * @param aState new state (ETel) of the call 
+        */
+        virtual void NotifyCallStateChangedETel( 
+            RMobileCall::TMobileCallStatus aState );
+
+        /**
+        * Updates the call event for observers.
+        * @param aEvent the event to be notified
+        */
+        virtual void NotifyCallEventOccurred( 
+            MCCPCallObserver::TCCPCallEvent aEvent );
+
+        /**
+        * Updates the transfer event for observers.
+        * @param aEvent the event to be notified
+        */
+        virtual void NotifyTransferCallEventOccurred( 
+                        MCCPTransferObserver::TCCPTransferEvent aEvent );
+        
+        /**
+        * Notifies changed call capabilities.
+        * @param aCapsFlags new capability flags
+        */
+
+        virtual void CallCapsChanged( const TUint32 aCapsFlags );
+        
+// from base class MCSPCallErrorObserver        
+    
+        /**
+        * From MCSPCallErrorObserver
+        * Dial request failed notification.
+        * @param aErrorCode request failing error code
+        */
+        void DialRequestFailed( TInt aErrorCode );
+
+        /**
+        * From MCSPCallErrorObserver
+        * Emergency dial request failed notification.
+        * @param aErrorCode request failing error code
+        */
+        void EmergencyDialRequestFailed( TInt aErrorCode );
+        
+        /**
+        * From MCSPCallErrorObserver
+        * Notifies about error situation for CCE.
+        */
+        virtual void NotifyErrorOccurred( TCCPError aError );
+
+// from base class MCSPUUSMessageObserver
+        
+        /**
+        * From MCSPUUSMessageObserver
+        * UUS message received notification. 
+        */
+        void UUSMessageReceived( TDesC& aMessage );        
+        
+// from base class MCCPCSCall
+
+        /**
+        * From MCCPCSCall
+        * Returns call information
+        * @param aCallInfo TMobileCallInfoV3
+        * @return KErrNone if succesfull
+        *         otherwise another system wide error code
+        */
+        virtual TInt GetMobileCallInfo( TDes8& aCallInfo ) const;
+
+        /**
+        * From MCCPCSCall
+        * Gets the calls data call capabilities
+        * @param aCaps TMobileCallDataCapsV1
+        * @return KErrNone if the function member was successful, 
+        *        KErrNotSupported if call doesn't support circuit switched data
+        *        KErrNotFound if this call is not a data call
+        */
+        virtual TInt GetMobileDataCallCaps( TDes8& aCaps ) const;
+
+// from base class MCCPCall
+        
+        /**
+        * From MCCPCall
+        * Answers to an incoming call.
+        * @return system wide error code
+        */
+        virtual TInt Answer();
+
+        /**
+        * From MCCPCall
+        * Rejects an incoming call.
+        * @return system wide error code
+        */
+        virtual TInt Reject();
+
+        /**
+        * From MCCPCall
+        * Reguests plug-in to queue the call.     
+        * @return system wide error code    
+        */
+        virtual TInt Queue();
+
+        /**
+        * From MCCPCall
+        * Starts dialing to remote party
+        * @return system wide error code
+        */
+        virtual TInt Dial();
+        
+        /**
+        * From MCCPCSCall
+        * Starts dialing to recipient
+        * @param aCallParams Call parameters used 
+        *   by the TSY (TCallParamsPckg)
+        * @return system wide error code
+        */
+        TInt Dial( const TDesC8& aCallParams );
+
+        /**
+        * From MCCPCall
+        * Call is ringning
+        * @return system wide error code
+        */
+        virtual TInt Ringing();
+
+        /**
+        * From MCCPCall
+        * Ends an ongoing call.
+        * @return system wide error code
+        */
+        virtual TInt HangUp();
+
+        /**
+        * From MCCPCall
+        * Cancels the ongoing request
+        * @return system wide error code
+        */
+        virtual TInt Cancel();
+
+        /**
+        * From MCCPCall
+        * Puts the specified call on hold.
+        * @return system wide error code
+        */
+        virtual TInt Hold();
+
+        /**
+        * From MCCPCall
+        * Resumes the call.
+        * @return system wide error code
+        */
+        virtual TInt Resume();
+
+        /**
+        * From MCCPCall
+        * Swaps a connected call to its opposite state either active or on hold
+        * @return system wide error code
+        */
+        virtual TInt Swap();
+
+        /**
+        * From MCCPCall
+        * Returns the remote party of the call.
+        * @return remote party address,
+        */
+        const TDesC& RemoteParty() const;
+
+        /**
+        * From MCCPCall
+        * Returns the remote party name of the call.
+        * @return remote party name
+        */
+        const TDesC& RemotePartyName();
+
+        /**
+        * From MCCPCall
+        * Dialled party.
+        * @return dialled party name
+        */
+        const TDesC& DialledParty() const;
+
+        /**
+        * From MCCPCall
+        * Return boolean value if the incoming call is forwarded or not.
+        * @return ETrue if call is forwarded, else EFalse
+        */
+        virtual TBool IsCallForwarded() const;
+
+        /**
+        * From MCCPCall
+        * Returns boolean value if the call is mobile originated or not.
+        * @return ETrue if call is mobile originated, otherwise EFalse
+        */
+        virtual TBool IsMobileOriginated() const;
+
+        /**
+        * From MCCPCall
+        * Returns the state of the call.
+        * @return TCCPCallState The current state of the call
+        */
+        virtual MCCPCallObserver::TCCPCallState State() const;
+
+        /**
+        * From MCCPCall
+        * Returns TUid of the plug-in used for this call
+        * @return TUid Implementation UID of the Plug-In
+        */
+        virtual TUid Uid() const;
+
+        /**
+        * From MCCPCall
+        * Returns call control caps for this call
+        * @return call capability information
+        */
+        virtual MCCPCallObserver::TCCPCallControlCaps Caps( ) const;
+
+        /**
+        * From MCCPCall
+        * Get call's secure status.
+        * @return TBool ETrue if security is enabled, else EFalse.
+        */
+        virtual TBool IsSecured() const;
+
+        /**
+        * From MCCPCall 
+        * Get call's secure specified status.
+        * @return TBool ETrue if secure specified 
+        */
+        virtual TBool SecureSpecified() const;
+
+        /**
+        * From MCCPCall  
+        * Set call parameters.
+        * @param aNewParams New call paramater information.
+        */
+        virtual void SetParameters( const CCCPCallParameters& aNewParams );
+        
+        /**
+        * From MCCPCall 
+        * Cet call parameters.
+        * @return Current call paramater information.
+        */
+        virtual const CCCPCallParameters& Parameters() const;
+
+        /**
+        * From MCCPCall 
+        * Get Forward provider
+        * @param aObserver - observer class for forward events
+        * @return Pointer to MCCPForwardProvider if succesfull, NULL if not available
+        * @leave on error case system error code
+        */
+        virtual MCCPForwardProvider* ForwardProviderL( const MCCPForwardObserver& aObserver );
+
+        /**
+        * From MCCPCall 
+        * Get Call transfer provider
+        * @param aObserver - observer class for transfer events
+        * @return Pointer to MCCPTransferProvider if succesfull, NULL if not available
+        * @leave on error case system error code
+        */
+        virtual MCCPTransferProvider* TransferProviderL( const MCCPTransferObserver& aObserver );
+          
+        /**
+        * From MCCPCall  
+        * Adds a new observer for MCCECall object. Called in MT call case. In MO 
+        * case observer will be given at call construction.
+        * Plug-in dependent feature if duplicates or more than one observers 
+        * are allowed or not. Currently CCE will set only one observer.
+        * @param aObserver Observer
+        * @leave system error if observer adding fails
+        */
+        virtual void AddObserverL( const MCCPCallObserver& aObserver );
+
+        /**
+        * From MCCPCall  
+        * Remove an observer.
+        * @param aObserver Observer
+        * @return KErrNone if removed succesfully. KErrNotFound if observer was not found.
+        * Any other system error depending on the error.
+        */
+        virtual TInt RemoveObserver( const MCCPCallObserver& aObserver );
+        
+        /**
+        * From MCCPCall 
+        * Returns the inband tone associated to an error condition or a state transition of a call.
+        * See defenition for TCCPTone.
+        * @since S60 3.2
+        * @param None.
+        * @return TCCPTone Used tone.
+        */
+        TCCPTone Tone() const;
+
+// from base class MCCPCSCall
+        
+        /**
+        * From MCCPCSCall
+        * Indicates that FDN check is not used for dial.
+        */
+        virtual void NoFDNCheck( );
+        
+        /**
+        * From MCCPCSCall 
+        * Log dialed  number. SAT related, check if dialed number is to be logged or not.
+        * @since S60 5.0
+        * @param None
+        * @return Log dialed number or not.
+        */
+        virtual TBool LogDialedNumber() const;
+    
+// from base class MCCPCallCommandHandling
+        
+        /**
+        * Perform answer command.
+        * @return system wide error code
+        */
+        TInt PerformAnswerRequest();
+        
+        /**
+        * Perform dial command.
+        * @return system wide error code
+        */
+        TInt PerformDialRequest();
+        
+    protected:
+            
+        /**
+        * Starts dialing to recipient.
+        * Bypasses FDN check according to aFdnCheck.
+        * @param aFdnCheck True if FDN checking is used
+        * @return system wide error code
+        */
+        virtual TInt DialFdnCond( TBool aFdnCheck ) = 0;
+                
+    protected:
+    
+        /**
+        * C++ default constructor.  
+        * 
+        * @param aLine line of the call 
+        * @param aMobileOriginated is call mobile originated 
+        * @param aName contains call name (mobile terminated) or phone number (mobile originated)
+        * @param aCommonInfo reference to common info interface 
+        * @param aIsEmergencyCall is emergency call 
+        */
+        CSPCall(  RMobileLine& aLine, 
+                  TBool aMobileOriginated,
+                  const TDesC& aName,
+                  MCSPCommonInfo& aCommonInfo,
+                  TBool aIsEmergencyCall );
+                  
+        /*
+        * Constructing 2nd phase.
+        * @param aParams call parameters  
+        */
+        virtual void ConstructL( const CCCECallParameters& aParams );
+        
+        /*
+        * Notifies the ringing state to observers.
+        */
+        virtual void NotifyRingingState();
+        
+        /**
+        * Mapping ETel state to CCP state.
+        * @param aEtelState an ETel state
+        * @return corresponding CCP state
+        */
+        MCCPCallObserver::TCCPCallState 
+            CSPCall::CCPStateFromETelState(
+                RMobileCall::TMobileCallStatus aEtelState );
+                
+        /**
+        * From MCSPCallObserver 
+        * Updates the state change including inband tones 
+        * played by network and forwards the state for observer.
+        * @param aState new state of the call
+        */
+        virtual void NotifyCallStateChangedWithInband( 
+            MCCPCallObserver::TCCPCallState aState );
+
+        /**
+        * Updates the state change 
+        * and forwards the state for observer.
+        * @param aState new state of the call
+        */
+        virtual void NotifyCallStateChanged( 
+            MCCPCallObserver::TCCPCallState aState );
+            
+        /**
+        * From MCSPCallObserver
+        * Notify that remote party info has changed.        
+        * @param aRemotePartyName new remote party name
+        * @param aRemotePartyNumber new remote party number
+        */
+        virtual void NotifyRemotePartyInfoChanged(                
+            const TDesC& aRemotePartyName,
+            const TDesC& aRemotePartyNumber );
+
+        /**
+        * Open call handle.  
+        * Opens a new call handle for MO call  
+        * and an existing handle for MT call.    
+        */
+        virtual void OpenCallHandleL();
+
+        /**
+        * Update call info data including call name,  
+        * remote name and number data.  
+        */
+        virtual void UpdateCallInfo();
+        
+        /**
+         * Implementation for UpdateCallInfo().       
+         */
+        virtual void UpdateCallInfoImpl( RMobileCall::TMobileCallInfoV7 aCallInfo );
+        
+        /**
+         * Set call origin to CCCECallParameters.       
+         */
+        virtual void UpdateCallOrigin( RMobileCall::TMobileCallInfoV7 aCallInfo );
+        
+        /**
+        * Reads information from cenrep.
+        * @param aUid CR Uid
+        * @param aKey CR key
+        * @param aVal value of key, output
+        */
+        void ReadRepositoryL( TUid aUid, TUint aKey, TInt& aVal);
+
+        /**
+        * Check and notify call termination error.
+        */
+        void CheckAndNotifyTerminationError();
+        
+        /**
+        * Error from iExitCode.
+        */
+        TInt ExitCodeError() const;
+        
+        /**
+        * Update call name number info.   
+        * @param aCallInfo RMobileCall::TMobileCallInfoV3
+        * @param aCallCreatedByMonitor, set:  
+        *       EFalse for calls added by plugin owner
+        *       ETrue for calls added by ETel status monitor  
+        */
+        void UpdateCallNameNumberInfo(
+                RMobileCall::TMobileCallInfoV3& aCallInfo, 
+                TBool aCallAddedByMonitor ); 
+
+        /**
+        * Open new call.
+        * New call is opened when the plugin owner adds the new 
+        * call (compare to OpenExistingCall where call is added by 
+        * ETel monitor).  
+        */
+        void OpenNewCall(); 
+
+        /**
+        * Open existing call.
+        * Existing call is opened if one of the ETel
+        * monitors (incoming call monitor or line status monitor) 
+        * has added the call and no new call needs to be 
+        * opened.    
+        * @param aName name of the existing call   
+        */
+        void OpenExistingCallL( const TDesC& aName ); 
+        
+    private:
+
+        /**
+        * Create call handlers for call requests and for 
+        * monitoring call events.   
+        */
+        void CreateCallHandlersL();
+        
+        /**
+        * Update call state from ETel
+        * @return system wide error code 
+        */
+        int UpdateCallState();
+        
+        /**
+         * Sends a remote party info changed notification
+         * if the remote party number has changed. 
+         */
+        void NotifyRemotePartyNumberChanged();
+
+	private: 
+
+        enum TCSPCallAudioStatus {
+            ECSPCallAudioStatusInactive,
+            ECSPCallAudioStatusActive
+            };
+
+    protected:
+
+          /**
+          * CCP Call Observer array.
+          */
+          RPointerArray<MCCPCallObserver> iObservers;
+          
+          /**
+          * Actual ETel call handle.
+          */
+          RMobileCall iCall;
+
+          /**
+          * ETel line
+          */
+          RMobileLine& iLine;
+
+          /**
+          * Determines if the call direction is either MO (ETrue) or MT (EFalse)
+          */
+          TBool iMobileOriginated;  
+
+          /**
+          * Name information of the call.
+          * 
+          * Name information is stored during CSPCall construction
+          * and assigned to iCallName (MT or client call) or 
+          * iRemotePartyNumber (MO call) afterwards.    
+          */
+          TBuf<KCSPPhoneNumberMaxLength> iName;
+          
+          /**
+          * Remote party name of the call.
+          */
+          TBuf<KCSPPhoneNumberMaxLength> iRemotePartyNumber;
+          
+          /**
+          * Remote party name of the call.
+          */
+          TBuf<KCSPCallingNameMaxLength> iRemotePartyName;
+
+          /**
+          * Dialled party of the call.
+          */
+          TBuf<KCSPPhoneNumberMaxLength> iDialledParty;
+          
+          /**
+          * Call name for MT call.
+          */
+          TName iCallName;
+
+          /**
+          * Call parameters.
+          */      
+          CCCECallParameters* iParams; 
+         
+          /**
+          * Call state in CCP format
+          */
+          MCCPCallObserver::TCCPCallState iCallState;
+          
+          /**
+          * Capability flags.
+          */
+          TUint32 iCapsFlags;
+
+          /**
+          * Call status monitor
+          */
+          CSPEtelCallStatusMonitor* iCallStatusMonitor;
+            
+          /**
+          * Call event monitor
+          */
+          CSPEtelCallEventMonitor* iCallEventMonitor;
+          
+          /**
+          * Call info monitor
+          */
+          CSPCallInfoMonitor* iCallInfoMonitor;
+          
+          /**
+          * Makes the asynchronic requests for various purposes.
+          */
+          CSPEtelCallRequester* iRequester;
+
+          /**
+          * Dial completion code.
+          */
+          TInt iDialCompletionCode;
+
+          /**
+           * Common information for calls.
+           */
+           MCSPCommonInfo& iCommonInfo;
+
+          /**
+          * Call termination error notification has been sent.
+          */
+          TBool iTerminationErrorNotified;
+          
+          /**
+          * Emergency call.
+          */
+          TBool iIsEmergencyCall;
+    
+    private:
+        
+          /**
+          * Transfer provider.
+          * Own.
+          */
+          CSPTransferProvider* iTransferProvider;
+          
+          /**
+          * Forward provider. No actual implementation.
+          * Own.
+          */          
+          CSPForwardProvider* iForwardProvider;
+          
+          /**
+          * Audio dev sound handler.
+          * Not own.
+          */
+          CSPAudioHandler* iAudioHandler;
+          
+          /**
+          * FDN check usage status. Default is on. (ETrue)
+          */
+          TBool iFdnCheck;          
+          
+          /**
+          * Monitors call capabilities from ETel.
+          * Own.
+          */
+          CSPEtelCallCapsMonitor* iCallCapsMonitor;
+                    
+          /*  
+          * UUS monitor
+          */          
+          CSPUUIMonitor* iUUIMonitor;
+          
+          /*  
+          * UUS sender
+          */
+          CSPUUIMessageSender* iUUIMessageSender;
+          
+          /**
+          * Data for parsed skype id.
+          * Own.
+          */
+          HBufC* iSkypeId;
+          
+          /**
+          * Audio stop requested status. The flag prevents double audio stop.
+          * Stop is executed in Disconnecting state and Idle state 
+          * if previous state has been DisconnectingWithInband.
+          * Audio start status.
+          */
+          TCSPCallAudioStatus iAudioStatus;
+          
+          /**
+          * Defines whether to report KErrGsmCCNormalUnspecified
+          * and KErrGsmCCCallRejected.
+          */
+          TBool iDontReportTerm;
+          
+          /**
+           * User to user information. Sended to network before dial.
+           * Own.
+           */
+          HBufC* iUserToUserInformation;
+          
+          friend class UT_CSPCall;
+          friend class MT_CConvergedCallProvider;
+          
+          
+    };
+
+
+#endif // CSPCALL_H