--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneplugins/csplugin/inc/cspcall.h Fri Mar 19 09:28:42 2010 +0200
@@ -0,0 +1,779 @@
+/*
+* 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 aRemoteParty new remote party information
+ */
+ virtual void NotifyRemotePartyInfoChanged(
+ const TDesC& aRemoteParty);
+
+ /**
+ * 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();
+
+ 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