realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/sipprflregisterdelayrequestedstate.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/sipprflregisterdelayrequestedstate.cpp Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,176 @@
+// Copyright (c) 2007-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 : sipprflregisterdelayrequested.cpp
+// Part of : sip profile fsm
+// implementation
+// Version : %version: 3.1.1 %
+//
+
+
+
+// INCLUDE FILES
+#include "sipprflregisterdelayrequestedstate.h"
+#include "sipconcreteprofile.h"
+#include "sipmessageelements.h"
+#include "sipregistrationbinding.h"
+#include "sipconnection.h"
+#include "sipclienttransaction.h"
+#include "sipprofileagentobserver.h"
+#include "SipProfileLog.h"
+#include "sipprofilefsmuser.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSIPPrflRegisterDelayRequestedState::NewL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPPrflRegisterDelayRequestedState*
+CSIPPrflRegisterDelayRequestedState::NewL(MSIPProfileFSMUser& aUser)
+ {
+ return new (ELeave) CSIPPrflRegisterDelayRequestedState(aUser);
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPPrflRegisterDelayRequestedState::CSIPPrflRegisterDelayRequestedState()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSIPPrflRegisterDelayRequestedState::CSIPPrflRegisterDelayRequestedState(
+ MSIPProfileFSMUser& aUser)
+ : CSIPPrflStateBase(aUser,MSIPProfileContext::EDelayedRegisterRequested)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPPrflRegisterDelayRequestedState::~CSIPPrflRegisterDelayRequestedState()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPPrflRegisterDelayRequestedState::~CSIPPrflRegisterDelayRequestedState()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPPrflRegisterDelayRequestedState::LinkStates()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSIPPrflRegisterDelayRequestedState::LinkStates(
+ CSIPPrflStateBase& aInitState)
+ {
+ iInitState = &aInitState;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPPrflRegisterDelayRequestedState::ConcreteProfileState()
+// -----------------------------------------------------------------------------
+//
+CSIPConcreteProfile::TStatus
+CSIPPrflRegisterDelayRequestedState::ConcreteProfileState() const
+ {
+ return CSIPConcreteProfile::ERegistrationInProgress;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPPrflRegisterDelayRequestedState::DeregisterL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSIPPrflRegisterDelayRequestedState::DeregisterL(
+ MSIPProfileContext& aContext)
+ {
+ PROFILE_DEBUG1("CSIPPrflRegisterDelayRequestedState::DeregisterL")
+ __ASSERT_DEBUG(aContext.Profile()!=0, User::Invariant());
+
+ CSIPConcreteProfile& profile = *aContext.Profile();
+ TUint32 contextId = 0;
+
+ aContext.ForgetProfile();
+
+ // aContext.ForgetProfile() does not set profile to NULL since
+ // iRetryPossible is ETrue. so must set profile to NULL here.
+ // because soon the profile will be deleted from function
+ // aItem.ClearOldProfile
+ aContext.SetProfile(NULL);
+ aContext.SetTransaction(NULL);
+ aContext.RemoveDeltaTimerEntry();
+
+ CSIPRegistrationBinding* regBinding = aContext.Registration();
+ if ( regBinding )
+ {
+ contextId = aContext.Registration()->ContextId();
+ aContext.DestroyRegistration();
+ }
+
+ aContext.SetNextState(*iInitState);
+ aContext.AgentObserver().SIPProfileStatusEvent(profile,contextId);
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPPrflRegisterDelayRequestedState::ChangeRegistrationStateL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSIPPrflRegisterDelayRequestedState::ChangeRegistrationStateL(
+ MSIPProfileContext& aContext)
+ {
+ PROFILE_DEBUG1(
+ "CSIPPrflRegisterDelayRequestedState::ChangeRegistrationStateL")
+ TUint32 contextId(0);
+ CSIPConcreteProfile& profile = DoCleanup(aContext,contextId);
+ aContext.SetNextState(*iInitState);
+ iUser.RetryProfileRegistrationL(profile);
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPPrflRegisterDelayRequestedState::RegisterL()
+// -----------------------------------------------------------------------------
+//
+void CSIPPrflRegisterDelayRequestedState::RegisterL(
+ MSIPProfileContext& aContext)
+ {
+ aContext.Connection().RefreshConnection();
+ }
+
+void CSIPPrflRegisterDelayRequestedState::ConnectionStateChanged(
+ MSIPProfileContext& aContext,CSIPConnection::TState aState)
+ {
+ switch(aState)
+ {
+ case CSIPConnection::EActive:
+ {
+ aContext.RemoveDeltaTimerEntry();
+ TRAPD(err, ChangeRegistrationStateL(aContext));
+ if (err)
+ {
+ HandleError(aContext, err, iInitState);
+ }
+ break;
+ }
+ /* When State EUnavailable is received, the registration Binding in the SIPStack
+ * is no longer present. Hence we have to do the cleanup here and propagate the
+ * error back to clients of profiles.
+ */
+ case CSIPConnection::EUnavailable:
+ {
+ HandleError(aContext, KErrCouldNotConnect, iInitState);
+ break;
+ }
+ default:break;
+ }
+
+ }