diff -r 7d48bed6ce0c -r 987c9837762f convergedcallengine/csplugin/inc/csprovider.h --- /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 +#include +#include +#include +#include +#include + +#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