diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/mussipprofilehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/src/mussipprofilehandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,448 @@ +/* +* Copyright (c) 2005-2006 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: Utilities to get and set profile used with SWIS. +* Part of : Mus For S60 v3.2 +* Description : Utilities to get and set profile used with SWIS. +* Version : %version: 1 % << Don't touch! Updated by Synergy at check-out. +* +*/ + + +// USER +#include "mussipprofilehandler.h" +#include "musuid.hrh" +#include "muslogger.h" +#include "mussipprofileuser.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusSipProfileHandler* CMusSipProfileHandler::NewL( MMusSipProfileUser& aUser ) + { + CMusSipProfileHandler* self = + new (ELeave) CMusSipProfileHandler( aUser ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusSipProfileHandler::CMusSipProfileHandler( MMusSipProfileUser& aUser ) + : iUser( aUser ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusSipProfileHandler::ConstructL()" ) + + // Use NULL Uid since we do not want to receive any requests. + // All requests should be handled by MCE. + iSip = CSIP::NewL( TUid::Null(), *this ); + iProfileRegistry = CSIPProfileRegistry::NewL( *iSip, *this ); + iProfileAlrController = + CSipProfileAlrController::NewL( *iProfileRegistry , *this ); + + MUS_LOG( "mus: [ENGINE] <- CMusSipProfileHandler::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusSipProfileHandler::~CMusSipProfileHandler() + { + delete iProfileAlrController; + delete iSipProfile; + delete iProfileRegistry; + delete iSip; + MUS_LOG( "mus: [ENGINE] CMusSipProfileHandler::~CMusSipProfileHandler()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::CreateProfileL( TUint32 aSipProfileId ) + { + CSIPProfile* profile( NULL ); + if ( aSipProfileId != 0 ) + { + profile = iProfileRegistry->ProfileL( aSipProfileId ); + } + else + { + profile = iProfileRegistry->DefaultProfileL(); + } + + delete iSipProfile; + iSipProfile = profile; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CSIPProfile* CMusSipProfileHandler::Profile() + { + return iSipProfile; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CUri8* CMusSipProfileHandler::UserFromProfileLC() + { + MUS_LOG( "mus: [ENGINE] -> CMusSipProfileHandler::UserFromProfileLC()" ); + + __ASSERT_ALWAYS( iSipProfile != NULL, User::Leave( KErrNotReady ) ); + + const MDesC8Array* aors = NULL; + User::LeaveIfError( iSipProfile->GetParameter( KSIPRegisteredAors, aors ) ); + __ASSERT_ALWAYS( aors && aors->MdcaCount() > 0, + User::Leave( KErrArgument ) ); + + TUriParser8 parser; + User::LeaveIfError( parser.Parse( aors->MdcaPoint( 0 ) ) ); + MUS_LOG( "mus: [ENGINE] <- CMusSipProfileHandler::UserFromProfileLC()" ) + + return CUri8::NewLC( parser ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::RefreshIapAvailabilities() + { + TRAP_IGNORE( iProfileAlrController->RefreshIapAvailabilityL( ProfileId() ) ) + } + + +// ----------------------------------------------------------------------------- +// This function should never be called before creating a profile, but such +// a situation will be considered as pending registration. +// ----------------------------------------------------------------------------- +// +TBool CMusSipProfileHandler::IsRegistered() + { + MUS_LOG( "mus: [ENGINE] -> CMusSipProfileHandler::IsRegistered()" ) + + TBool profileRegistered = EFalse; + if ( iSipProfile ) + { + iSipProfile->GetParameter( KSIPProfileRegistered, profileRegistered ); + } + + MUS_LOG1( "mus: [ENGINE] <- CMusSipProfileHandler::IsRegistered( %d )", + profileRegistered ) + + return profileRegistered; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ProfileRegistryEventOccurred( + TUint32 aProfileId, + MSIPProfileRegistryObserver::TEvent aEvent ) + { + if ( iSipProfile && aProfileId == ProfileId() ) + { + switch ( aEvent ) + { + case MSIPProfileRegistryObserver::EProfileRegistered: + { + iUser.ProfileRegistered(); + break; + } + default: + { + break; + } + } + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ProfileRegistryErrorOccurred( + TUint32 /*aProfileId*/, + TInt /*aError*/) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingRequest( + TUint32 /*aIapId*/, + CSIPServerTransaction* aTransaction ) + { + // Ownership transferred, should not ever be called by SIP though + delete aTransaction; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::TimedOut( + CSIPServerTransaction& /*aTransaction*/ ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingRequest( + CSIPServerTransaction* aTransaction ) + { + // Ownership transferred, should not ever be called by SIP though + delete aTransaction; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingRequest( + CSIPServerTransaction* aTransaction, + CSIPDialog& /*aDialog*/) + { + // Ownership transferred, should not ever be called by SIP though + delete aTransaction; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingResponse( + CSIPClientTransaction& /*aTransaction*/) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingResponse( + CSIPClientTransaction& /*aTransaction*/, + CSIPDialogAssocBase& /*aDialogAssoc*/) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingResponse( + CSIPClientTransaction& /*aTransaction*/, + CSIPInviteDialogAssoc* aDialogAssoc) + { + // Ownership transferred, should not ever be called by SIP though + delete aDialogAssoc; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingResponse( + CSIPClientTransaction& /*aTransaction*/, + CSIPRegistrationBinding& /*aRegistration*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPTransactionBase& /*aTransaction*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPClientTransaction& /*aTransaction*/, + CSIPRegistrationBinding& /*aRegistration*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPTransactionBase& /*aTransaction*/, + CSIPDialogAssocBase& /*aDialogAssoc*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPRefresh& /*aSIPRefresh*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPRegistrationBinding& /*aRegistration*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPDialogAssocBase& /*aDialogAssoc*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::InviteCompleted( + CSIPClientTransaction& /*aTransaction*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::InviteCanceled( + CSIPServerTransaction& /*aTransaction*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ConnectionStateChanged( + CSIPConnection::TState /*aState*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CMusSipProfileHandler::AlrEvent +// From MSipProfileAlrObserver +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::AlrEvent( + MSipProfileAlrObserver::TEvent aEvent, + TUint32 aProfileId, + TUint32 /*aSnapId*/, + TUint32 aIapId ) + { + if ( aEvent == MSipProfileAlrObserver::EIapAvailable ) + { + if ( iSipProfile && + aProfileId == ProfileId() && + !iUser.IsRoamingBetweenAPsAllowed() ) + { + // Disallow roaming only if the profile is used by MuS and + // the MuS has an ongoing session + TRAP_IGNORE( + iProfileAlrController->DisallowMigrationL( aProfileId, aIapId ) ) + } + else + { + // In all other cases allow roaming + TRAP_IGNORE( + iProfileAlrController->AllowMigrationL( aProfileId, aIapId ) ) + } + } + } + +// ----------------------------------------------------------------------------- +// CMusSipProfileHandler::AlrError +// From MSipProfileAlrObserver +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::AlrError( + TInt /*aError*/, + TUint32 /*aProfileId*/, + TUint32 /*aSnapId*/, + TUint32 /*aIapId*/ ) + { + // Ignore ALR related errors as they should not happen + // as migration is not allowed when + // the instance of CMusSipProfileHandler exists + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TUint32 CMusSipProfileHandler::ProfileId() const + { + TUint32 sipProfileId( 0 ); + if ( iSipProfile ) + { + iSipProfile->GetParameter( KSIPProfileId, sipProfileId ); + } + return sipProfileId; + }