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);
+ }