--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/sipconnectionprovider/inc/scpprofilehandler.h Mon Jan 18 20:12:36 2010 +0200
@@ -0,0 +1,368 @@
+/*
+* Copyright (c) 2002-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:
+*
+*/
+
+
+#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 );
+
+#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 );
+
+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;
+
+// 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