voipplugins/sipconnectionprovider/inc/scpprofilehandler.h
branchRCL_3
changeset 22 d38647835c2e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/sipconnectionprovider/inc/scpprofilehandler.h	Wed Sep 01 12:29:57 2010 +0100
@@ -0,0 +1,393 @@
+/*
+* Copyright (c) 2002-2010 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:  
+*
+*/
+
+
+#ifndef C_SCPPPROFILEHANDLER_H
+#define C_SCPPPROFILEHANDLER_H
+
+#include <sipprofileregistryobserver.h>
+#include <sipconnectionobserver.h>
+#include <sipobserver.h>
+#include <sipprofilealrobserver.h>
+
+#include "scpsipconnectionobserver.h"
+#include "scpalrobserver.h"
+#include "scpdefs.h"
+#include "scpsipconnection.h"
+#include "scpalrobserver.h"
+
+class CSIP;
+class CSIPProfileRegistry;
+class CSIPManagedProfileRegistry;
+class CSIPManagedProfile;
+class CSipProfileAlrController;
+class CScpSipConnection;
+class MIpVmbxObserver;
+class CIpVmbxInterface;
+
+/**
+ *  Register/unregister protocol profiles.
+ *
+ *  @lib sipconnectionprovider.dll
+ *  @since Series 60 3.2
+ */
+class CScpProfileHandler : public CBase,
+                           public MSIPProfileRegistryObserver,
+                           public MSIPObserver,
+                           public MSipProfileAlrObserver,
+                           public MScpSipConnectionObserver
+    {
+public:
+
+    /**
+     * Enumeration for ALR events.
+     */
+    enum TAlrEvent
+        {
+        EScpAlrAllowMigration,
+        EScpAlrDisallowMigration,
+        EScpAlrRefresh
+        };
+    
+public:  // Constructors and destructor
+    
+    /**
+     * Two-phased constructor.
+     */
+    static CScpProfileHandler* NewL();
+
+    /**
+     * Destructor.
+     */
+    virtual ~CScpProfileHandler();
+
+public: 
+
+    /**
+     * Adds Sip profile observer.
+     * @param aObserver SIP profile observer.
+     */
+    void AddObserverL( MScpSipConnectionObserver& aObserver );   
+            
+    /**
+     * Remove observer from the array.
+     * @param aObserver SIP profile observer.
+     * @return KErrNone If succeed.
+     */
+    TInt RemoveObserver( MScpSipConnectionObserver& aObserver );   
+    
+    /**
+     * Get current state of scp connection having given sip profile id
+     * @param aProfileId SIP profile id.
+     * @param aState Current state.
+     * @return KErrNone if succeed.
+     */
+    TInt GetCurrentState( TUint32 aProfileId, 
+        CScpSipConnection::TConnectionState& aState,
+        TInt& aError ) const;    
+    
+    /**
+     * Register profile to SIP.
+     * @param aProfileId SIP Profile id to register.
+     * @return Symbian error codes.
+     */
+    void RegisterProfileL( TUint32 aProfileId );
+
+    /**
+     * UnRegister profile to SIP.
+     * @param aProfileId SIP Profile id to unregister.
+     * @return Symbian error codes.
+     */
+    TInt UnregisterProfile( TUint32 aProfileId );
+
+     /**
+     * Cancels any ongoing registration
+     * @param aProfileId SIP Profile id to unregister.
+     * @return Symbian error codes.
+     */
+    TInt CancelRegistration( TUint32 aProfileId );
+                                       
+    /**
+     * Return existence info of profile id.
+     * @param aProfileId Protocol profile id.
+     * @return ETrue if profile exist.
+     */
+    TBool ProfileExists( TUint32 aProfileId ) const;  
+    
+    /**
+     * Uses SIP ALR controller for ALR events.
+     * @param aProfileId  Profile id.
+     * @param aEvent      New ALR event.
+     * @param aIapId      IAP id.
+     */
+    void DoAlrEventL( TUint32 aProfileId,                      
+                      TAlrEvent aEvent,
+                      TUint32 aIapId = NULL );
+
+    /**
+     * Checks if sip connection for give profile id exists
+     * @param aProfileId Profile id.
+     * @return ETrue if exists
+     */
+    TBool SipConnectionExists( TUint32 aProfileId ) const;
+
+    /**
+     * Gets a asip connection for given profile id
+     * @param aProfileId Profile id.
+     * @return Sip connection. Ownership is not transferred.
+     */
+    CScpSipConnection* GetSipConnection( TUint32 aProfileId ) const;
+       
+    /**
+     * Creates a sip connection for given profile id
+     * @param aProfileId Profile id.
+     * @return Sip connection. Ownership is transferred.
+     */
+    CScpSipConnection* CreateSipConnectionL( TUint32 aProfileId ) const;  
+
+    /**
+     * Sets a sip profile reserved state
+     * @param aProfileId Sip profile id
+     * @param aReserved Reserved
+     */
+    void SetSipProfileReserved( TUint32 aProfileId, TBool aReserved );
+
+    /**
+     * Return VMBX service provider interface
+     * @param aObserver VMBX service provider observer
+     * @return Interface
+     */
+    CIpVmbxInterface& VmbxInterfaceL( MIpVmbxObserver& aObserver );
+    
+    /**
+     * Delete VMBX service provider interface, there is no other way to remove 
+     * MIpVmbxObserver. Observer has to remove when deleting vmbx subservice.
+     */
+    void DeleteVmbxInterface();
+    
+    /**
+     * Checks if a sip profile requires update
+     * @param aProfileId SIP profile ID
+     * @param aTerminalType indicates is terminal type defined
+     * @param aWlanMac indicates is wlan mac defined
+     * @param aStringLength length of free string
+     */    
+    void UpdateSipProfileL( TUint32 aProfileId, TBool aTerminalType,
+        TBool aWlanMac, TInt astringLength );
+ 
+    /**
+     * Set username and/or passowrd.
+     * @param aProfileId Profile id to use.
+     * @param aUsername to set
+     * @param aSetUsername If true, set username.
+     * @param aPassword Password to set.
+     * @param aSetPassword If true, set password.
+     * @@return none 
+     * @leave KErrArgument if passed values are incorrect, or other 
+     * symbian error code. 
+     */
+    void SetUsernameAndPasswordL( TUint32 aProfileId,
+                                  const TDesC8& aUsername,
+                                  TBool aSetUsername,
+                                  const TDesC8& aPassword,
+                                  TBool aSetPassword );
+    
+    /**
+     * Informs SIP to allow ALR migration
+	 *
+     * @param aProfileId SIP profile ID
+     */    
+    void StartAlrMigration( TUint32 aProfileId );
+    
+#ifdef _DEBUG
+    void GetDebugInfo( TDes& aInfo ) const;
+#endif                                          
+
+        
+private: // Functions from base classes
+
+    /**
+     * From MSIPObserver
+     * A SIP request has been received from the network.        
+     * @pre aTransaction != 0
+     * @param aIapId The IapId from which the SIP request was received.
+     * @param aTransaction contains local address, remote address of a SIP
+     *        message, as well as optional SIP message method, headers and
+     *        body. The ownership is transferred.
+     */
+    void IncomingRequest( TUint32 aIapId, CSIPServerTransaction* aTransaction );
+
+    /**
+     * From MSIPObserver
+     * The received SIP request time-outed and it is invalid i.e. cannot be used
+     * anymore.
+     * This will be called if the user fails to create a SIP connection
+     * and does not send an appropriate SIP response.
+     * @param aTransaction The time-outed transaction.
+     */
+    void TimedOut( CSIPServerTransaction& aTransaction );
+
+
+    /** 
+     * From MSIPProfileRegistryObserver
+     * An event related to SIP Profile has accorred
+     * @param aProfileId a profile Id
+     * @param aEvent an occurred event
+     */
+    void ProfileRegistryEventOccurred( TUint32 aProfileId,
+                                       MSIPProfileRegistryObserver::TEvent aEvent );
+
+    /**
+     * From MSIPProfileRegistryObserver
+     * An asynchronous error has occurred related to SIP profile
+     * Event is send to those observers, who have the
+     * corresponding profile instantiated.
+     * @param aProfileId the id of failed profile 
+     * @param aError an occurred error
+     */
+    void ProfileRegistryErrorOccurred( TUint32 aProfileId,
+                                       TInt aError );
+                                   
+    /**
+     * ALR related event occurred. See MSipProfileAlrObserver.
+     * @param aEvent the event that occurred
+     * @param aProfileId identifies the SIP profile related to the event
+     * @param aSnapId the SNAP related to the event
+     * @param aIapId the IAP related to the event
+     */
+    void AlrEvent( MSipProfileAlrObserver::TEvent aEvent,
+                   TUint32 aProfileId,
+                   TUint32 aSnapId,
+                   TUint32 aIapId );
+                           
+    /**
+     * ALR related error occurred. See MSipProfileAlrObserver.
+     * @param aError the error that occurred
+     * @param aProfileId identifies the SIP profile related to the error
+     * @param aSnapId the SNAP related to the event
+     * @param aIapId the IAP related to the error
+     */
+    void AlrError( TInt aError,
+                   TUint32 aProfileId,
+                   TUint32 aSnapId,
+                   TUint32 aIapId );
+
+    /**
+     * Sip profile state changed
+     * @param aProfileId Profile id.
+     * @param aSipEvent A new event of profile.
+     */  
+    void HandleSipConnectionEvent( TUint32 aProfileId,
+                                   TScpConnectionEvent aSipEvent );
+    
+    /**
+     * Query is starting to ALR allowed.
+     * Client can start ALR later if needed to do something first
+     * 
+     * @return ETrue if allowed.
+     */
+    TBool IsSipProfileAllowedToStartAlr();
+   
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    CScpProfileHandler();
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+
+    /**
+     * Removes a sip connection from iSipConnections
+     * @param aProfilId Sip profile id
+     * @return Symbian error codes
+     */
+    TInt RemoveSipConnection( TUint32 aProfileId );
+
+    /**
+     * Checks if sip profile is reserved by some service
+     * @param aProfileId Sip profile id
+     * @return ETrue if reserved
+     */
+    TBool IsSipProfileReserved( TUint32 aProfileId ) const;
+
+private:
+    
+    /**
+     * SIP instance. Own.
+     */
+    CSIP* iSip;
+    
+    /**
+     * SIP profile registry. Own.
+     */
+    CSIPProfileRegistry* iProfileRegistry;
+    
+    /**
+     * SIP managed profile registry. Own.
+     */
+    CSIPManagedProfileRegistry* iManagedProfileRegistry;
+    
+    /**
+     * SIP ALR controller. Own.
+     */
+    CSipProfileAlrController* iAlrController;
+
+    /**
+     * Sip connections.
+     */
+    RPointerArray< CScpSipConnection > iSipConnections;
+        
+    /**
+     * SIP profile observers.
+     */
+    RPointerArray< MScpSipConnectionObserver > iObservers;
+
+    /**
+     * VMBx service provider interface. Created once, when needed.
+     */
+    CIpVmbxInterface* iVmbxInterface;
+
+    /**
+	 * New IapId received in ALR event
+	 */
+    TUint iNewAlrIapId;
+    
+    /**
+     * Is ALR Migration Allowed To Start Immediately
+     */
+    TBool iAlrAllowedToStartImmediately;
+    
+// This need to be cleaned to separate macro/header
+#ifdef _DEBUG
+    friend class T_CScpServiceManager;
+    friend class T_CScpProfileHandler;
+    friend class T_CScpSipHelper;
+    friend class T_CScpVmbxHandler;
+    friend class T_CScpVoipHandler;
+    friend class T_CScpPresenceHandler;
+    friend class T_CScpSettingHandler;
+    friend class T_CScpImHandler;
+#endif
+    };
+
+#endif      // CSCPPPROFILEHANDLER_H   
+            
+// End of File