convergedcallengine/csplugin/inc/csprovider.h
branchRCL_3
changeset 20 987c9837762f
parent 0 ff3b6d0fd310
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedcallengine/csplugin/inc/csprovider.h	Wed Sep 01 12:15:03 2010 +0100
@@ -0,0 +1,601 @@
+/*
+* 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:  Main class for CS Call Plug-in
+*
+*/
+
+
+
+#ifndef CSPROVIDER_H
+#define CSPROVIDER_H
+
+#include <e32base.h>
+#include <cconvergedcallprovider.h>
+#include <mccpcsobserver.h>
+#include <mccpdtmfprovider.h>
+#include <mccpcscall.h>
+#include <mccecall.h>
+
+#include "mcspincomingcallobserver.h"
+#include "mcspsecuritysettingobserver.h"
+#include "mcspcommoninfo.h"
+#include "mcsppubsubobserver.h"
+#include "mcspremotealertingtoneobserver.h"
+#include "mcspconferencestatusobserver.h"
+
+
+// FORWARD DECLARATIONS
+class CSPEtelIncomingCallMonitor;
+class CSPDTMFProvider;
+class CSPServiceSettingsHandler;
+class CSPEtelCallAddedMonitor;
+class CSPConferenceCall;
+class CSPCallArray;
+class CSPAudioHandler;
+class CSPEtelCallWaitingRequester;
+class CSPSupplementaryServicesMonitor;
+class MCCPSsObserver;
+class CSPCipheringStatusMonitor;
+class CSPSsSettingsHandler;
+class CSPCallAddedHandler;
+class CSPPubSubListener;
+class CSPCallCommandHandler;
+class CSPRemoteAlertingToneListener;
+class CSPEtelConferenceStatusMonitor; 
+
+/**
+* Main class for using CS Call Plug-in. Implements the CCP API.
+*
+*  @lib csplugin.dll
+*  @since S60 v3.2
+*/
+class CSProvider : public CConvergedCallProvider,
+                   public MCSPIncomingCallObserver,
+                   public MCSPCommonInfo,
+                   public MCSPSecuritySettingObserver,
+                   public MCSPPubSubObserver,
+                   public MCSPRemoteAlertingToneObserver, 
+                   public MCSPConferenceStatusObserver
+{
+    public:
+    
+        /**
+        * Two-phased constructor.
+        * @return new instance of the class
+        */    
+        static CSProvider* NewL();
+        
+        /**
+        * C++ default destructor
+        */        
+        virtual ~CSProvider();
+        
+        /**
+        * Notification of SS event.
+        * @param aSsTypeAndMode SS type and SS mode
+        * @param aSsInfo SS info
+        */ 
+        void NotifySsEvent( RMmCustomAPI::TSsTypeAndMode& aSsTypeAndMode,
+                            RMmCustomAPI::TSsInfo& aSsInfo );
+
+
+// from base class CConvergedCallProvider    
+
+        /**
+        * Initializes plug-in. All required parameters must be passed
+        * with this function in order to use services.
+        * Simplifies pluging construct removing need to pass parameters 
+        * to ECom interface
+        * @since S60 3.2
+        * @param aAppUID Application UID of Telephony application
+        * @param aObserver general observer
+        * @param aSsObserver observer for events related to supplementary 
+        *        services.
+        */
+        void InitializeL( const MCCPObserver& aObserver,
+                          const MCCPSsObserver& aSsObserver );
+
+        /**
+        * Creates a new call and checks secure status from profile.
+        * @since S60 3.2
+        * @param aServiceId service id
+        * @param aRemoteParty Recipients address/number
+        * @param aObserver Observer
+        * @return MCCPMoCall
+        */
+        MCCPCall* NewCallL( const CCCPCallParameters& aCallParameters,
+                            const TDesC& aRemoteParty, 
+                            const MCCPCallObserver& aObserver );
+
+
+        /**
+        * From CConvergedCallProvider
+        * Releases all bindings to call and deletes it. 
+        * This will be called by CCE to free all the resources reserved for the call.
+        * After this call CCE will not access the call object anymore and observer 
+        * for the class must not be used in plug-in.
+        * This operation must always succeed. If plug-in decides to pre-allocate the 
+        * call object it can choose to do so, but plug-in has to make sure call is 
+        * returned to the state it was before calling CConvergedCallProvider::NewCallL.
+        * @param aCalltoRemove Call to remove.
+        * @return KErrNone or KErrNotFound if removed call is not found.
+        * @pre None, can always be called.
+        * @post Plug-in must quarantee all resources for the call will be cleaned up. 
+        * and plug-in must not call observer after this call!
+        * @since S60 3.2
+        */
+        virtual TInt ReleaseCall( MCCPCall& aCalltoRemove );
+        
+        /**
+        * From CConvergedCallProvider
+        * Creates a new Emergency call and add user-agent header.
+        * @since S60 3.2
+        * @param aServiceId service id
+        * @param aAddress address of emergency call
+        * @param aObserver Observer
+        * @return MCCPEmergencyCall
+        */
+        MCCPEmergencyCall* NewEmergencyCallL( 
+                                          const TUint32 aServiceId,
+                                          const TDesC& aAddress,
+                                          const MCCPCallObserver& aObserver );
+
+        /**
+        * From CConvergedCallProvider.
+        * Releases all bindings to call and deletes it. 
+        * This must be called to free all the resources reserved for the call.
+        * After this call CCE must not be access the call object anymore and observer 
+        * for the class must not be used in plug-in.
+        * This operation mustways succeed. If plug-in decides to pre-allocate the 
+        * call object it can choose to do so, but client has to be sure call is 
+        * cleared from the plug-in and all resuorces are returned to the state before calling 
+        * CConvergedCallProvider::NewEmergencyCallL.
+        * @param aCalltoRemove Call to remove.
+        * @return KErrNone or KErrNotFound if removed call is not found.
+        * @pre None, can always be called.
+        * @post Plug-in must quarantee all resources for the call will be cleaned up. Call must not 
+        * be referenced anymore from CCE and plug-in must not call observer after this call!
+        * @since S60 3.2
+        */
+        TInt ReleaseEmergencyCall( MCCPEmergencyCall& aCalltoRemove );
+        
+        /**
+        * From CConvergedCallProvider
+        * Creates a new conference call.
+        * @since S60 3.2
+        * @param aServiceId service id
+        * @param aObserver Observer
+        * @return MCCPConferenceCall
+        */
+        MCCPConferenceCall* NewConferenceL( const TUint32 aServiceId, 
+                                  const MCCPConferenceCallObserver& aObserver );
+
+        /**
+        * From CConvergedCallProvider
+        * Releases all bindings to conference call. CCE will call this after receiving 
+        * MCCPConferenceCallObserver::ECCPConferenceIdle from plug-in or when it itself 
+        * wants to release the call. In normal sequence called from CCE after HangUp is completed.
+        * @param aCalltoRemove Call to remove.
+        * @return KErrNone or KErrNotFound if removed call is not found.
+        * @pre None, can always be called.
+        * @post Plug-in must quarantee all resources for the call will be cleaned up. Call must not 
+        * be referenced anymore from CCE and plug-in must not call observer after this call!
+        * @since S60 3.2
+        */
+        TInt ReleaseConferenceCall( MCCPConferenceCall& aCalltoRemove );
+
+        /**
+        * Returns Uid of plug-in which is on use.
+        * @since S60 3.2
+        * @return Uid of plug-in
+        */   
+        const TUid& Uid() const;
+
+        /**
+        * Get Plug-In capabilities
+        * @since S60 3.2
+        * @return caps
+        */
+        TUint32 Caps( ) const;
+
+        /**
+        * Get DTMF provider
+        * @since S60 3.2
+        * @return Pointer to MCCPDTMFProvider if succesfull,
+        *         NULL if not available
+        */
+        MCCPDTMFProvider* DTMFProviderL( const MCCPDTMFObserver& aObserver );
+
+        /**
+        * Get extension provider
+        * @since S60 3.2
+        * @return Pointer to MCCPExtensionProvider if succesfull,
+        *         NULL if not available
+        */
+        MCCPExtensionProvider* ExtensionProviderL( 
+                            const MCCPExtensionObserver& aObserver );
+                            
+        /**
+        * This method gets the lifetime of the MS. The lifetime information 
+        * includes the manufacturing date of the MS and the total amount of airtime use, 
+        * from the manufacturing date until the call to this method. Calling this method 
+        * does not reset any data. This is used only CS, other plug-ins may ignore this method.
+        * @since S60 3.2
+        * @param aLifeTimeInfo Life time information
+        * @return none 
+        */
+        TBool GetLifeTime( TDes8& aLifeTimeInfo );
+	   
+        /**
+        * This method gets serial number from MS. The CSInfo includes
+        * the serial number.
+        * @since S60 5.0
+        * @param aCSInfo CS specific information from MS.
+        * @return Get succeeded or not.
+        */
+        TBool GetCSInfo( CSInfo& aCSInfo );
+
+// from base class MCSPIncomingCallObserver
+
+        /**
+        * From MCSPIncomingCallObserver.
+        * Informs incoming call.
+        * 
+        * @since S60 3.2
+        * @param aLine the line that corresponds to the call
+        * @param aCallName the name of call
+        * @param aLineId line identifier for the call
+        */    
+        void IncomingCallArrived( RMobileLine& aLine, TName aCallName,
+                                  RCSPLineContainer::TCSPLineId aLineId );
+        
+// from base class MCSPCommonInfo
+
+        /**
+        * From MCSPCommonInfo
+        * Makes the request. Note that ERequestTypeDial is made with a 
+        * separate MakeDialRequest function.
+        *
+        * @since S60 3.2
+        * @param aRequest type of request
+        * @return ETrue if active, EFalse if not
+        */
+        void GetCallWaitingL( const CCCECallParameters& iParams,
+                              TBool& aCallWaitingStatus );
+                              
+        /**
+        * From MCSPCommonInfo
+        * Diagnostic error fetching.
+        * @param aCallName name of call related to error
+        * @return diagnostic error code
+        */
+        TInt GetDiagnosticError( TName& aCallName );
+
+        /**
+        * From MCSPCommonInfo
+        *
+        * Network security status
+        * 
+        * @since Series60_4.0
+        * @return true if security enabled
+        */
+        TBool NetworkSecurityStatus() const;
+
+        /**
+        * From MCSPCommonInfo         
+        * Secure specified status. 
+        * @since Series60_5.0
+        * @return true if secure specified
+        */
+        TBool SecureSpecified() const;
+        
+        /**
+        * From MCSPCommonInfo
+        * Remote alerting tone status.
+        * @return tone status for remote alerting tone playing
+        */
+        RMmCustomAPI::TRemoteAlertingToneStatus GetRemoteAlertingToneStatus();
+        
+        /**
+         * From MCSPCommonInfo
+         * Initializes with current settings.
+         * @param aParams call params 
+         */
+        void InitializeCallParameters( RMobileCall::TMobileCallParamsV7& aParams );
+
+        /**
+         * From MCSPCommonInfo
+         * Initializes with current data call settings.
+         * @param aParams call params 
+         */
+        void InitializeDataCallParameters( RMobileCall::TMobileHscsdCallParamsV1& aParams );
+        
+        /**
+        * From MCPSCommonInfo
+        * @param aCall client call to be indicated
+        */
+        void IndicateClientCall( MCCPCSCall* aCall );
+        
+        /**
+        * Indicates incoming call for CCE.
+        * @param aCall incoming call
+        */
+        TInt IndicateIncomingCall( MCCPCSCall* aCall );
+        
+        /**
+        * Notify data port name about a loaned data port.
+        * @param aDataPortName port name
+        */
+        void NotifyDataPortName( TName& aDataPortName );
+
+        /**
+        * Indicates active hangup command.
+        * @param aCall MT call
+        * @return system wide error code
+        */
+        TInt IndicateActiveHangup( MCCPCallCommandHandling& aCall );
+        
+        /**
+        * Indicates hangup command complete.
+        * @param aCall MT call
+        * @return system wide error code
+        */
+        TInt IndicateHangupComplete( MCCPCallCommandHandling& aCall );
+        
+        /**
+        * Indicates active hangup command.
+        * @param aCall MT call
+        * @return system wide error code
+        */
+        TInt IndicateDialRequest( MCCPCallCommandHandling& aCall );
+        
+        /**
+        * Indicates active hangup command.
+        * @param aCall MT call
+        * @return system wide error code
+        */
+        TInt IndicateAnswerRequest( MCCPCallCommandHandling& aCall );
+        
+        /**
+        * Don't report termination error
+        * @since Series60_5.0
+        * @return system wide error code
+        */
+        TInt DontReportTerminationError();
+        
+// From base class MCSPSecuritySettingObserver
+
+        /**
+        * From MCSPSecuritySettingObserver
+        * Notifies about changed security status.
+        * @param aValue 
+        */
+        void SecuritySettingChanged( TInt aValue );
+        
+// From base class MCSPPubSubObserver
+
+        /**
+        * Handler for changed event.
+        * @param aUid uid of setting 
+        * @param aKey id of setting
+        * @param aStatus status of completed AO operation
+        */
+        void HandleNotifyPSL( const TUid aUid, const TInt& aKey, 
+            const TRequestStatus& aStatus );
+        
+// From base class MCSPRemoteAlertingToneObserver
+        
+        /**
+         * From MCSPRemoteAlertingToneObserver
+         * @see MCSPRemoteAlertingToneObserver
+         */
+        void RemoteAlertingToneStatusChanged(
+            RMmCustomAPI::TRemoteAlertingToneStatus aNewStatus );
+
+// From base class MCSPConferenceStatusObserver
+        
+        /**
+        * From MCSPConferenceStatusObserver.
+        * Notifies event to observers.
+        * @param aStatus new status of the conference call
+        */        
+        void NotifyStateChange( 
+            MCSPConferenceStatusObserver::TCSPConferenceState aStatus );
+                        
+    private:
+    
+        /**
+        * C++ default constructor
+        */
+        CSProvider();
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Creates connections to ETel.
+        */
+        void CreateEtelConnectionsL();
+        
+        /**
+        * Handles diverting and barring notifications.
+        * @param aAddr address
+        * @param aSsTypeAndMode ss type and mode struct
+        */
+        void HandleDivertOrBarring(TDesC& addr, 
+                         RMmCustomAPI::TSsTypeAndMode& aSsTypeAndMode);
+        
+        /**
+        * Handles SIM status
+        */
+        void HandleSIMStatusL();
+        
+    // data
+    private:
+        
+        /**
+        * Implementation UID
+        */
+        TUid iImplementationUid;
+        
+        /**
+        * ETel connection
+        */
+        RTelServer iServer;
+        
+        /**
+        * Mobile phone handle.
+        */
+        RMobilePhone iMobilePhone;
+
+        /**
+        * Mobile conference call handle.
+        */
+        RMobileConferenceCall iMobileConferenceCall;
+        
+        /**
+        * Observer for provider level functionality.
+        * Not own.
+        */        
+        MCCPCSObserver* iCCPObserver;
+
+        /**
+        * Observer for SS events.
+        * Not own.
+        */
+        MCCPSsObserver* iSsObserver;
+        
+        /**
+        * DTMF provider.
+        * Own.
+        */
+        CSPDTMFProvider* iDTMFProvider;
+        
+        /**
+        * Monitors line for incoming calls.
+        * Own.
+        */        
+        CSPEtelIncomingCallMonitor* iIncomingVoiceCallMonitor;
+        
+        /**
+        * Monitors line for incoming data/video calls.
+        * Own.
+        */        
+        CSPEtelIncomingCallMonitor* iIncomingDataCallMonitor;
+        
+        /**
+        * Monitors line for incoming calls from aux line
+        * Own.
+        */        
+        CSPEtelIncomingCallMonitor* iIncomingAuxCallMonitor;
+        
+        /**
+        * Call array.
+        * Own.
+        */
+        CSPCallArray* iCallArray;
+                
+        /**
+        * Custom API handle for custom functionality.
+        */        
+        RMmCustomAPI iMmCustom;
+        
+        /**
+        * Line container.
+        */
+        RCSPLineContainer iLineContainer;
+        
+        /**
+        * Service settings handler for reading 
+        * service id and name information.
+        * Own.
+        */
+        CSPServiceSettingsHandler* iServiceHandler;
+        
+        /**
+        * Initialisation status.
+        */
+        TBool iInitialized;
+                
+        /**
+        * Call added monitor.
+        * Own.
+        */
+        CSPCallAddedHandler* iCallAddedHandler;
+        
+        /**
+        * Service ID.
+        */
+        TUint32 iServiceId;
+        
+        /**
+        * Dev sound handler.
+        * Own.
+        */
+        CSPAudioHandler* iAudioHandler;
+        
+        /**
+        * Call waiting requester.
+        * Own.
+        */
+        CSPEtelCallWaitingRequester* iCwRequester;
+        
+        /**
+        * Supplementary service related event monitor.
+        * Own.
+        */ 
+        CSPSupplementaryServicesMonitor* iSsMonitor;
+        
+        /**
+         * Ciphering (network security level On/Off) setting monitor.
+         */
+        CSPCipheringStatusMonitor* iCipheringStatusMonitor;
+        
+        /**
+         * SS Settings handler for reading ALS line and ALS supported status.
+         */
+        CSPSsSettingsHandler* iSsSettingsHandler;
+        
+        /**
+        * Sim status listener.
+        * Own.
+        */ 
+        CSPPubSubListener* iSimStatusListener;
+        
+        /**
+        * CallCommandHandler.
+        * Own.
+        */ 
+        CSPCallCommandHandler* iCallCommandHandler;
+        
+        /** 
+         * Remote Alerting Tone listener.
+         */
+        CSPRemoteAlertingToneListener* iRemoteAlertingToneListener;
+        
+        /** 
+         * Monitor for conference status changes.
+         * Own.
+         */
+        CSPEtelConferenceStatusMonitor* iConferenceStatusMonitor;
+
+        /** 
+         * Keep track of conference existence.
+         */
+        CSPConferenceCall* iConferenceCall; 
+};
+
+#endif // CSPROVIDER_H