diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflresolvingproxiesstate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflresolvingproxiesstate.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,198 @@ +// 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 : sipprflresolvingproxiesstate.cpp +// Part of : sip profile fsm +// implementation +// Version : %version: 2.1.1 % +// + + + +// INCLUDE FILES +#include "sipprflresolvingproxiesstate.h" +#include "sipconcreteprofile.h" +#include "sipprofileagentobserver.h" +#include "sipmessageelements.h" +#include "sipregistrationbinding.h" +#include "sipclienttransaction.h" +#include "sipprflinitstate.h" +#include "sipprflregisterrequestedstate.h" +#include "sipprflregistrationinprogressstate.h" +#include "sipprflregisteredstate.h" +#include "sipprflderegistrationinprogressstate.h" +#include "sipprflderegisterrequestedstate.h" +#include "sipprflstatebase.h" +#include "sipprofilefsmuser.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSIPPrflResolvingProxiesState::NewL() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPPrflResolvingProxiesState* CSIPPrflResolvingProxiesState::NewL( + MSIPProfileFSMUser& aUser) + { + return new(ELeave)CSIPPrflResolvingProxiesState(aUser); + } + +// ----------------------------------------------------------------------------- +// CSIPPrflResolvingProxiesState::CSIPPrflResolvingProxiesState +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CSIPPrflResolvingProxiesState::CSIPPrflResolvingProxiesState( + MSIPProfileFSMUser& aUser) + : CSIPPrflStateBase(aUser,MSIPProfileContext::EProxyResolvingInProgress) + { + } + +// ----------------------------------------------------------------------------- +// CSIPPrflResolvingProxiesState::CSIPPrflResolvingProxiesState +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPPrflResolvingProxiesState::~CSIPPrflResolvingProxiesState() + { + } + +// ----------------------------------------------------------------------------- +// CSIPPrflResolvingProxiesState::LinkStates() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPPrflResolvingProxiesState::LinkStates( + CSIPPrflStateBase& aInitState, + CSIPPrflStateBase& aRegisterRequestedState, + CSIPPrflStateBase& aRegistrationInProgressState) + { + iInit = &aInitState; + iRegisterRequested = &aRegisterRequestedState; + iRegistrationInProgress = &aRegistrationInProgressState; + } + +// ----------------------------------------------------------------------------- +// CSIPPrflResolvingProxiesState::ConcreteProfileState() +// ----------------------------------------------------------------------------- +// +CSIPConcreteProfile::TStatus +CSIPPrflResolvingProxiesState::ConcreteProfileState() const + { + return CSIPConcreteProfile::ERegistrationInProgress; + } + +// ----------------------------------------------------------------------------- +// CSIPPrflResolvingProxiesState::DeregisterL() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CSIPPrflResolvingProxiesState::DeregisterL( + MSIPProfileContext& aContext) + { + __ASSERT_DEBUG(aContext.Profile()!=0, User::Invariant()); + + CSIPConcreteProfile& profile = *aContext.Profile(); + TUint32 contextId = 0; + + aContext.ForgetProfile(); + + CSIPRegistrationBinding* regBinding = aContext.Registration(); + if ( regBinding ) + { + contextId = aContext.Registration()->ContextId(); + aContext.DestroyRegistration(); + } + + aContext.CancelProxyResolving(); + + aContext.SetNextState(*iInit); + aContext.AgentObserver().SIPProfileStatusEvent(profile,contextId); + } + +// ----------------------------------------------------------------------------- +// CSIPPrflResolvingProxiesState::ConnectionStateChanged() +// ----------------------------------------------------------------------------- +// +void CSIPPrflResolvingProxiesState::ConnectionStateChanged( + MSIPProfileContext& aContext, + CSIPConnection::TState aState) + { + switch(aState) + { + case CSIPConnection::EActive: + { + TRAPD( err, aContext.ResolveProxyL() ); + if ( err ) + { + ProxyResolvingRequestFailed( aContext, err ); + } + break; + } + case CSIPConnection::EInactive: + { + aContext.SetNextState(*iRegisterRequested); + break; + } + case CSIPConnection::EUnavailable: + { + HandleError(aContext, KErrCouldNotConnect, iInit); + break; + } + default: + { + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CSIPPrflResolvingProxiesState::ProxyResolvingRequestCompleteL() +// ----------------------------------------------------------------------------- +// +void CSIPPrflResolvingProxiesState::ProxyResolvingRequestCompleteL( + MSIPProfileContext& aContext, + MDesC8Array& aProxies) + { + aContext.SetProxiesL(aProxies); + if (aContext.Connection().State() == CSIPConnection::EActive) + { + aContext.SetNextState(*iInit); + iUser.RegisterProfileL(*aContext.Profile()); + } + else + { + if (aContext.Connection().State() == CSIPConnection::EUnavailable) + { + HandleError(aContext, KErrCouldNotConnect, iInit); + } + else + { + aContext.SetNextState(*iRegisterRequested); + } + } + } + +// ----------------------------------------------------------------------------- +// CSIPPrflResolvingProxiesState::ProxyResolvingRequestFailed() +// ----------------------------------------------------------------------------- +// +void CSIPPrflResolvingProxiesState::ProxyResolvingRequestFailed( + MSIPProfileContext& aContext, + TInt aError) + { + aContext.SetNextState(*iInit); + aContext.HandleProxyResolvingError(aError); + }