--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/sipconnectionprovider/inc/scpsipconnection.h Mon Jan 18 20:12:36 2010 +0200
@@ -0,0 +1,452 @@
+/*
+* 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_SCPSIPCONNECTION_H
+#define C_SCPSIPCONNECTION_H
+
+#include <e32base.h>
+#include <rconnmon.h>
+#include <sipconnectionobserver.h>
+#include <sipprofileregistryobserver.h>
+
+#include "scpdefs.h"
+
+class CSIPProfileRegistry;
+class CSIPProfile;
+class CSIPManagedProfileRegistry;
+class MScpSipConnectionObserver;
+
+/**
+ * Register/unregister protocol profiles.
+ *
+ * @lib sipconnectionprovider.dll
+ * @since Series 60 3.2
+ */
+class CScpSipConnection : public CBase,
+ public MSIPConnectionObserver
+ {
+public:
+
+ enum TConnectionState
+ {
+ EUnknown = 0,
+ ERegistering,
+ ERegistered,
+ EDeregistering,
+ EDeregistered,
+ };
+
+ enum TRegistrationRequestState
+ {
+ ENoRequest = 0,
+ ERegistrationRequested,
+ EDeregistrationRequested
+ };
+
+ /**
+ * Two-phased constructor.
+ */
+ static CScpSipConnection* NewL( TInt aProfileId,
+ CSIPProfileRegistry& aProfileRegistry,
+ CSIPManagedProfileRegistry& aManagedProfileRegistry,
+ CSIP& aSip );
+ /**
+ * Destructor.
+ */
+ virtual ~CScpSipConnection();
+
+ /**
+ * Return sip profile id of this connection
+ * @return Profile id
+ */
+ TInt ProfileId() const;
+
+ /**
+ * Enables the connection
+ */
+ void EnableL();
+
+ /**
+ * Disables the connection.
+ * @return Symbian error codes
+ */
+ TInt Disable();
+
+ /**
+ * Returns state of deregistration request
+ * @return Registration state
+ */
+ TRegistrationRequestState RegistrationRequestState() const;
+
+ /**
+ * Get sip connection state
+ * @return State
+ */
+ void GetState( TConnectionState& aState, TInt& aError ) const;
+
+ /**
+ * Adds observer for the connection
+ * @param aObserver Observer
+ */
+ void AddObserver( MScpSipConnectionObserver& aObserver );
+
+ /**
+ * Removes observer from this connection
+ * @param aObserver Observer
+ * @return Symbian error codes
+ */
+ TInt RemoveObserver( MScpSipConnectionObserver& aObserver );
+
+ /**
+ * Gets Protocol Profile's IAP Id.
+ * @return Iap id
+ */
+ TInt GetIap( TUint32& aIapId ) const;
+
+ /**
+ * Gets Protocol Profile's SNAP Id.
+ * @return Snap id.
+ */
+ TInt GetSnap( TUint32& aSnapId ) const;
+
+ /**
+ * Gets Protocol Profile's Username..
+ * @param aUsername Username of profile.
+ * @return KErrNone if succeed.
+ */
+ TInt GetUsername( TDes8& aUsername ) const;
+
+ /**
+ * Gets Protocol Profile's domain.
+ * @param aDomain Domain of profile.
+ * @return KErrNone if succeed.
+ */
+ TInt GetDomain( TDes8& aDomain ) const;
+
+ /**
+ * Gets Protocol Profile's User name from Contact header
+ * @param aDomain Domain of profile.
+ * @return KErrNone if succeed.
+ */
+ TInt GetContactHeaderUser( RBuf8& aContactHeaderUser ) const;
+
+ /**
+ * Get CSIPProfile
+ * @return CSIPProfile
+ */
+ CSIPProfile& SipProfile() const;
+
+ /**
+ * Set Protocol Profile use this IAP.
+ * @since Series 60 3.2
+ * @param aIapId Iap Id.
+ * @return KErrNone if succeed.
+ */
+ TInt SetIap( TUint32 aIapId );
+
+ /**
+ * Set Protocol Profile use this SNAP.
+ * @param aSnapId Profile new SNAP Id.
+ * @return KErrNone if succeed.
+ */
+ TInt SetSnap( TUint32 aSnapId );
+
+ /**
+ * Returns the type of the iap this connection's profile is using
+ * @return Iap type
+ */
+ TScpIapType GetIapTypeL() const;
+
+ /**
+ * Profile registry error occurred
+ * @param aProfileId Profile id
+ * @param aError error code
+ */
+ void ProfileRegistryErrorOccurred( TInt aError );
+
+ /**
+ * Updates the sip connection for the used sip profile
+ * @param aProfileId Profile id
+ * @param aEvent Event
+ */
+ void ProfileRegistryEventOccurred( MSIPProfileRegistryObserver::TEvent aEvent );
+
+ /**
+ * Reserve/Free the used connection for a service's use.
+ * For example a VoIP service might reserve the profile for a
+ * duration of a VoIP call
+ * @param aReserved Reserved
+ */
+ void SetReserved( TBool aReserved );
+
+ /**
+ * Returns information about if a connection is reserved or not
+ * @return ETrue if reserved
+ */
+ TBool Reserved() const;
+
+ /**
+ * Raises the flag fot iap availability offered. Iap availability
+ * offers may come from SIP during ALR. If the connection is reserved,
+ * the ARL is not allowed and iap available offered is raised.
+ * When the connection is freed the ALR can occur.
+ */
+ void SetIapAvailableOffered( TBool aIapAvailableOffered );
+
+ /**
+ * Returns the iap available offered flag
+ * @return ETrue if iap available was offered
+ */
+ TBool IapAvailableOffered() const;
+
+ /**
+ * Sets flag that currenlty the profile is romaing
+ */
+ void SetProfileCurrentlyRoaming();
+
+ /**
+ * Handle ongoing alr
+ */
+ void HandleMigrationStarted();
+
+ /**
+ * Handle alr error
+ * @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 HandleMigrationError( TInt aError,
+ TUint32 aProfileId, TUint32 aSnapId, TUint32 aIapId );
+
+ /**
+ * Password check.
+ * @return returns always ETrue because information cannot
+ * be checked from sip
+ */
+ TBool IsPasswordSet() const;
+
+ /**
+ * Username check.
+ * Checks if digest username is set and username is in aor.
+ * @return ETrue when username exists
+ */
+ TBool IsUsernameSetL() const;
+
+#ifdef _DEBUG
+ void GetInfo( TDes& aInfo ) const;
+#endif
+
+private:
+
+ // From MSIPConnectionObserver
+ void IncomingRequest( CSIPServerTransaction* /*aTransaction*/ ) {};
+
+ void IncomingRequest( CSIPServerTransaction* /*aTransaction*/,
+ CSIPDialog& /*aDialog*/ ) {};
+
+ void IncomingResponse( CSIPClientTransaction& /*aTransaction*/ ) {};
+
+ void IncomingResponse( CSIPClientTransaction& /*aTransaction*/,
+ CSIPDialogAssocBase& /*aDialogAssoc*/ ) {};
+
+ void IncomingResponse( CSIPClientTransaction& /*aTransaction*/,
+ CSIPInviteDialogAssoc* /*aDialogAssoc*/ ) {};
+
+ void IncomingResponse( CSIPClientTransaction& /*aTransaction*/,
+ CSIPRegistrationBinding& /*aRegistration*/ ) {};
+
+ void ErrorOccured( TInt /*aError*/, CSIPTransactionBase& /*aTransaction*/ ) {};
+
+ void ErrorOccured( TInt /*aError*/,
+ CSIPClientTransaction& /*aTransaction*/,
+ CSIPRegistrationBinding& /*aRegistration*/ ) {};
+
+ void ErrorOccured( TInt /*aError*/,
+ CSIPTransactionBase& /*aTransaction*/,
+ CSIPDialogAssocBase& /*aDialogAssoc*/ ) {};
+
+ void ErrorOccured( TInt /*aError*/, CSIPRefresh& /*aSIPRefresh*/ ) {};
+
+
+ void ErrorOccured( TInt /*aError*/,
+ CSIPRegistrationBinding& /*aRegistration*/ ) {};
+
+ void ErrorOccured( TInt /*aError*/,
+ CSIPDialogAssocBase& /*aDialogAssoc*/) {};
+
+ void InviteCompleted( CSIPClientTransaction& /*aTransaction*/ ) {};
+
+ void InviteCanceled( CSIPServerTransaction& /*aTransaction*/ ) {};
+
+ void ConnectionStateChanged( CSIPConnection::TState aState );
+
+ /**
+ * Checks if connection method used by the sip profile is
+ * available
+ * @return ETrue if available
+ */
+ TBool IsNetworkConnectionAvailable() const;
+
+ /**
+ * Checks if SNAP connection method used by the sip profile is
+ * available
+ * @return ETrue if available
+ */
+ TBool IsSnapConnectionAvailable( TInt aSnapId ) const;
+
+ /**
+ * Checks if IAP connection method used by sip profile is
+ * available
+ * @return ETrue if available
+ */
+ TBool IsIapConnectionAvailable( TInt aIapId ) const;
+
+private:
+
+ /**
+ * C++ default constructor.
+ */
+ CScpSipConnection( TInt aProfileId,
+ CSIPProfileRegistry& aProfileRegistry,
+ CSIPManagedProfileRegistry& aManagedProfileRegistry,
+ CSIP& aSip );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Starts timeout timer
+ * @param aFunction The function to call after the time out
+ */
+ void StartEnableTimeoutTimer( TInt (*aFunction)(TAny* aPtr) );
+
+ /**
+ * Cancels the disable timer
+ */
+ void CancelEnableTimeoutTimer();
+
+ /**
+ * Profile register timeout callback
+ * @param aSelf this object
+ */
+ static TInt EnableTimeout( TAny* aSelf );
+
+ /**
+ * Handles sip profile register timeout
+ */
+ void HandleEnableTimeout();
+
+ /**
+ * Changes SIP profile from "Always on" to "When needed" if
+ * the profile was originally set to "Always on"
+ */
+ void DisableAlwaysOnModeL();
+
+ /**
+ * Checks if Sip profile type is IMS
+ */
+ TBool SipProfileIMS() const;
+
+private:
+
+ /**
+ * Sip profile id
+ */
+ TInt iProfileId;
+
+ /**
+ * Sip profile registry
+ */
+ CSIPProfileRegistry& iProfileRegistry;
+
+ /**
+ * Managed sip profile registry
+ */
+ CSIPManagedProfileRegistry& iManagedProfileRegistry;
+
+ /**
+ * SIP instance
+ */
+ CSIP& iSip;
+
+ /**
+ * Sip profile. May change. Own
+ */
+ CSIPProfile* iSipProfile;
+
+ /**
+ * Observer
+ */
+ MScpSipConnectionObserver* iObserver;
+
+ /**
+ * Registration request state
+ */
+ TRegistrationRequestState iRegistrationRequestState;
+
+ /**
+ * Registration faile flag
+ */
+ TInt iConnectionStateError;
+
+ /**
+ * Timeout timer. Owned.
+ */
+ CPeriodic* iEnableTimeoutTimer;
+
+ /**
+ * Connection reserved for services' usage
+ */
+ TBool iReserved;
+
+ /**
+ * Iap available offered
+ */
+ TBool iIapAvailableOffered;
+
+ /**
+ * Profile is currently roaming
+ */
+ TBool iProfileCurrentlyRoaming;
+
+ /**
+ * Connection monitor
+ */
+ RConnectionMonitor iConnectionMonitor;
+
+ /**
+ * SIP connection
+ * Own.
+ */
+ CSIPConnection* iSipConnection;
+
+// This need to be cleaned to separate macro/header
+#ifdef _DEBUG
+ friend class T_CScpSipConnection;
+ friend class T_CScpProfileHandler;
+ friend class T_CScpServiceManager;
+ friend class T_CScpVmbxHandler;
+ friend class T_CScpVoipHandler;
+#endif
+ };
+
+#endif // C_SCPSIPCONNECTION_H
+
+// End of File