--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedcallengine/csplugin/inc/csprovider.h Tue Feb 02 01:11:09 2010 +0200
@@ -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