diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/Server/Src/sipprofilestateunregisteringoldiap.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/sipprofilestateunregisteringoldiap.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,201 @@ +// Copyright (c) 2008-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: +// Name : sipprofilestateunregisteringoldiap.cpp +// Part of : Sip Profile Server +// implementation +// Version : 1.0 +// + + + +// INCLUDE FILES +#include "sipprofilestateunregisteringoldiap.h" +#include "sipconcreteprofile.h" +#include "SipProfileCacheItem.h" +#include "sipplugindirector.h" +#include "SipProfileLog.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::NewL +// ----------------------------------------------------------------------------- +// +CSIPProfileStateUnregisteringOldIAP* +CSIPProfileStateUnregisteringOldIAP::NewL(CSIPPluginDirector& aDirector) + { + return new (ELeave) CSIPProfileStateUnregisteringOldIAP(aDirector); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::CSIPProfileStateUnregisteringOldIAP +// ----------------------------------------------------------------------------- +// +CSIPProfileStateUnregisteringOldIAP::CSIPProfileStateUnregisteringOldIAP( + CSIPPluginDirector& aDirector): + CSIPProfileState(aDirector) + { + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::~CSIPProfileStateUnregisteringOldIAP +// ----------------------------------------------------------------------------- +// +CSIPProfileStateUnregisteringOldIAP::~CSIPProfileStateUnregisteringOldIAP() + { + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::Name +// Though the new IAP has been registered, return the actual state id. +// ----------------------------------------------------------------------------- +// +CSIPConcreteProfile::TStatus CSIPProfileStateUnregisteringOldIAP::Name() const + { + return static_cast(EUnregisteringOldIAP); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::EnableL +// EnableL is used by a profile that doesn't have a SNAP configured, and such +// profile should not be in this state. +// ----------------------------------------------------------------------------- +// +void CSIPProfileStateUnregisteringOldIAP::EnableL( + CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& /*aObserver*/) + { + TUint profileId(aItem.ProfileId()); + PROFILE_DEBUG3("ProfileStateUnregisteringOldIAP::EnableL(profile id)", + profileId) + + User::Leave(KErrArgument); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::EnableSnapInUseL +// ----------------------------------------------------------------------------- +// +void CSIPProfileStateUnregisteringOldIAP::EnableSnapInUseL( + CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& aObserver, + TUint32 /*aSnapId*/) + { + PROFILE_DEBUG3("ProfileStateUnregisteringOldIAP::EnableSnapInUseL(profile)", + aItem.ProfileId()) + + DoCommonEnableL(aItem, aObserver); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::DisableL +// ----------------------------------------------------------------------------- +// +void CSIPProfileStateUnregisteringOldIAP::DisableL( + CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& aObserver) + { + PROFILE_DEBUG3("ProfileStateUnregisteringOldIAP::DisableL id", + aItem.ProfileId()) + + DoCommonDisable(aItem, aObserver); + if (!aItem.IsReferred()) + { + // Quit de-registering old IAP, so that can de-register new IAP profile + iPluginDirector.TerminateHandling(aItem.UsedProfile()); + aItem.ClearMigrationProfiles(); + + StartDeregisterL(aItem, *iUnregInProg); + } + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::SetNeighbourStates +// ----------------------------------------------------------------------------- +// +void CSIPProfileStateUnregisteringOldIAP::SetNeighbourStates( + CSIPProfileState& aRegistered, + CSIPProfileState& aUnregInProg) + { + iRegistered = &aRegistered; + iUnregInProg = &aUnregInProg; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::RegistrationStatusEventL +// Wait until de-register of the old IAP completes. +// ----------------------------------------------------------------------------- +// +void CSIPProfileStateUnregisteringOldIAP::RegistrationStatusEventL( + CSIPProfileCacheItem& aItem, + CSIPConcreteProfile::TStatus aStatus) + { + PROFILE_DEBUG4("ProfileStateUnregisteringOldIAP::RegStatusEventL id,status", + // Id of profile that most recently used profile agent + aItem.UsedProfile().Id(), + aStatus) + __ASSERT_ALWAYS(!aItem.HasProfileUpdate(), User::Leave(KErrCorrupt)); + + if (aStatus == CSIPConcreteProfile::EUnregistered) + { + // Release the old IAP's connection. UsedProfile() returns now old IAP's + // profile. + iPluginDirector.TerminateHandling(aItem.UsedProfile()); + aItem.ClearMigrationProfiles(); + aItem.ChangeStateL(iRegistered); + } + iPluginDirector.StartTimerForCleanup(); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::ErrorOccurred +// De-registering old IAP fails, but the new IAP is registered, so enter +// registered-state. +// ----------------------------------------------------------------------------- +// +TBool CSIPProfileStateUnregisteringOldIAP::ErrorOccurred( + CSIPProfileCacheItem& aItem, + TInt /*aError*/) + { + PROFILE_DEBUG3("ProfileStateUnregisteringOldIAP::ErrorOccurred(profile)", + aItem.UsedProfile().Id()) + + // Deletes iProfileWithOldIAP. TerminateHandling was already done in + // CSIPProfileServerCore::HandleProfileError. + DoCommonErrorOccurred(aItem); + + // If entering register state fails, handle it as error. + TRAPD(err, aItem.ChangeStateL(iRegistered)); + return err != KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::IsAlrState +// ----------------------------------------------------------------------------- +// +TBool CSIPProfileStateUnregisteringOldIAP::IsAlrState() const + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileStateUnregisteringOldIAP::ShutdownInitiated +// De-register the currently registered profile (new IAP). +// ----------------------------------------------------------------------------- +// +void CSIPProfileStateUnregisteringOldIAP::ShutdownInitiated( + CSIPProfileCacheItem& aItem) + { + TRAP_IGNORE(StartDeregisterL(aItem, *iUnregInProg)) + }