diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyprotocols/pdplayer/src/pdpmcprstates.cpp --- a/telephonyprotocols/pdplayer/src/pdpmcprstates.cpp Mon May 03 13:37:20 2010 +0300 +++ b/telephonyprotocols/pdplayer/src/pdpmcprstates.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,137 +1,137 @@ -// 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: -// - -#include -#include -#include -#include -#include -#include "pdpmcpr.h" -#include "pdpmcprstates.h" - -using namespace ESock; -using namespace NetStateMachine; -using namespace Messages; - -namespace PdpMCprStates -{ -} - -namespace PdpMCprErrorRecoveryActivity -{ - -DEFINE_SMELEMENT(CPdpErrorRecoveryActivity::TAwaitingContentionResult, NetStateMachine::MState, PdpMCprStates::TContext) -TBool CPdpErrorRecoveryActivity::TAwaitingContentionResult::Accept() - { - TPDPMessages::TPdpContentionResultMessage* msg = message_cast(&iContext.iMessage); - CPdpErrorRecoveryActivity& activity = static_cast(*iContext.iNodeActivity); - if(msg && msg->iNodeId == activity.iPendingCprId) - { - return ETrue; - } - return EFalse; - } - - -DEFINE_SMELEMENT(CPdpErrorRecoveryActivity::TPdpContentionNoTagOrError, NetStateMachine::MStateFork, PdpMCprStates::TContext) -TInt CPdpErrorRecoveryActivity::TPdpContentionNoTagOrError::TransitionTag() - { - CPdpErrorRecoveryActivity& activity = static_cast(*iContext.iNodeActivity); - - if (activity.iPendingCprId == Messages::TNodeId::NullId()) - { - return MeshMachine::KErrorTag; - } - else - { - return MeshMachine::KNoTag; - } - } - -DEFINE_SMELEMENT(CPdpErrorRecoveryActivity::TProcessErrorRecoveryReq, NetStateMachine::MStateTransition, PdpMCprStates::TContext) -void CPdpErrorRecoveryActivity::TProcessErrorRecoveryReq::DoL() - { - TEErrorRecovery::TErrorRecoveryRequest& req = message_cast(iContext.iMessage); - TInt error = req.iErrContext.iStateChange.iError; - -#ifdef SYMBIAN_NETWORKING_CONTENTION_MANAGEMENT - if (req.iErrContext.iStateChange.iError == KErrUmtsMaxNumOfContextExceededByNetwork || - req.iErrContext.iStateChange.iError == KErrUmtsMaxNumOfContextExceededByPhone) - { - // Get sender's priority - TClientIter iter = iContext.Node().GetClientIter(TCFClientType(TCFClientType::EData)); - ESock::RCFNodePriorityInterface* dataClient; - TBool wasFound = EFalse; - TUint cprPriority = KMaxTUint; - while ((dataClient = static_cast(iter++)) != NULL) - { - if (dataClient->RecipientId() == req.iErrContext.iOriginator) - { - cprPriority = dataClient->Priority(); - wasFound = ETrue; - } - } - if (wasFound) - { - TInt err = KErrNone; - TBool result = EFalse; - TRAP(err, result = iContext.Node().GetTierManager()->HandleContentionL(&iContext.Node(), req.iErrContext.iOriginator, cprPriority)); - if (err == KErrNone && result) - { - CPdpErrorRecoveryActivity& activity = static_cast(*iContext.iNodeActivity); - activity.iPendingCprId = req.iErrContext.iOriginator; - activity.iCprActivity = req.iErrContext.iActivitySigId; - activity.iCprMessageId = req.iErrContext.iMessageId; - activity.iErrorCode = error; - // The contention request has been added into query, Reset message error code. - // TErrResponse will be send from Mcpr's ContentionResolved function. - error = KErrNone; - } - } - } -#endif - - if (error != KErrNone) - { - TErrResponse propagateResp(TErrResponse::EPropagate, error, req.iErrContext.iMessageId); - TEErrorRecovery::TErrorRecoveryResponse rawResp (propagateResp); - - TCFSafeMessage::TResponseCarrierWest resp(rawResp, iContext.iSender); - iContext.PostToSender(resp); - } - } - -DEFINE_SMELEMENT(CPdpErrorRecoveryActivity::TProcessContentionResult, NetStateMachine::MStateTransition, PdpMCprStates::TContext) -void CPdpErrorRecoveryActivity::TProcessContentionResult::DoL() - { - TPDPMessages::TPdpContentionResultMessage* msg = message_cast(&iContext.iMessage); - CPdpErrorRecoveryActivity& activity = static_cast(*iContext.iNodeActivity); - if (msg->iValue != 0) - { - TErrResponse retryResp(TErrResponse::ERetry, 0, activity.iCprMessageId); - TEErrorRecovery::TErrorRecoveryResponse rawResp (retryResp); - TCFSafeMessage::TResponseCarrierWest resp(rawResp, activity.iOriginators[0].RecipientId()); - iContext.PostToSender(resp); - } - else - { - TErrResponse propagateResp(TErrResponse::EPropagate, activity.iErrorCode, activity.iCprMessageId); - TEErrorRecovery::TErrorRecoveryResponse rawResp (propagateResp); - TCFSafeMessage::TResponseCarrierWest resp(rawResp, activity.iOriginators[0].RecipientId()); - iContext.PostToSender(resp); - } - } -} - +// 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: +// + +#include +#include +#include +#include +#include +#include "pdpmcpr.h" +#include "pdpmcprstates.h" + +using namespace ESock; +using namespace NetStateMachine; +using namespace Messages; + +namespace PdpMCprStates +{ +} + +namespace PdpMCprErrorRecoveryActivity +{ + +DEFINE_SMELEMENT(CPdpErrorRecoveryActivity::TAwaitingContentionResult, NetStateMachine::MState, PdpMCprStates::TContext) +TBool CPdpErrorRecoveryActivity::TAwaitingContentionResult::Accept() + { + TPDPMessages::TPdpContentionResultMessage* msg = message_cast(&iContext.iMessage); + CPdpErrorRecoveryActivity& activity = static_cast(*iContext.iNodeActivity); + if(msg && msg->iNodeId == activity.iPendingCprId) + { + return ETrue; + } + return EFalse; + } + + +DEFINE_SMELEMENT(CPdpErrorRecoveryActivity::TPdpContentionNoTagOrError, NetStateMachine::MStateFork, PdpMCprStates::TContext) +TInt CPdpErrorRecoveryActivity::TPdpContentionNoTagOrError::TransitionTag() + { + CPdpErrorRecoveryActivity& activity = static_cast(*iContext.iNodeActivity); + + if (activity.iPendingCprId == Messages::TNodeId::NullId()) + { + return MeshMachine::KErrorTag; + } + else + { + return MeshMachine::KNoTag; + } + } + +DEFINE_SMELEMENT(CPdpErrorRecoveryActivity::TProcessErrorRecoveryReq, NetStateMachine::MStateTransition, PdpMCprStates::TContext) +void CPdpErrorRecoveryActivity::TProcessErrorRecoveryReq::DoL() + { + TEErrorRecovery::TErrorRecoveryRequest& req = message_cast(iContext.iMessage); + TInt error = req.iErrContext.iStateChange.iError; + +#ifdef SYMBIAN_NETWORKING_CONTENTION_MANAGEMENT + if (req.iErrContext.iStateChange.iError == KErrUmtsMaxNumOfContextExceededByNetwork || + req.iErrContext.iStateChange.iError == KErrUmtsMaxNumOfContextExceededByPhone) + { + // Get sender's priority + TClientIter iter = iContext.Node().GetClientIter(TCFClientType(TCFClientType::EData)); + ESock::RCFNodePriorityInterface* dataClient; + TBool wasFound = EFalse; + TUint cprPriority = KMaxTUint; + while ((dataClient = static_cast(iter++)) != NULL) + { + if (dataClient->RecipientId() == req.iErrContext.iOriginator) + { + cprPriority = dataClient->Priority(); + wasFound = ETrue; + } + } + if (wasFound) + { + TInt err = KErrNone; + TBool result = EFalse; + TRAP(err, result = iContext.Node().GetTierManager()->HandleContentionL(&iContext.Node(), req.iErrContext.iOriginator, cprPriority)); + if (err == KErrNone && result) + { + CPdpErrorRecoveryActivity& activity = static_cast(*iContext.iNodeActivity); + activity.iPendingCprId = req.iErrContext.iOriginator; + activity.iCprActivity = req.iErrContext.iActivitySigId; + activity.iCprMessageId = req.iErrContext.iMessageId; + activity.iErrorCode = error; + // The contention request has been added into query, Reset message error code. + // TErrResponse will be send from Mcpr's ContentionResolved function. + error = KErrNone; + } + } + } +#endif + + if (error != KErrNone) + { + TErrResponse propagateResp(TErrResponse::EPropagate, error, req.iErrContext.iMessageId); + TEErrorRecovery::TErrorRecoveryResponse rawResp (propagateResp); + + TCFSafeMessage::TResponseCarrierWest resp(rawResp, iContext.iSender); + iContext.PostToSender(resp); + } + } + +DEFINE_SMELEMENT(CPdpErrorRecoveryActivity::TProcessContentionResult, NetStateMachine::MStateTransition, PdpMCprStates::TContext) +void CPdpErrorRecoveryActivity::TProcessContentionResult::DoL() + { + TPDPMessages::TPdpContentionResultMessage* msg = message_cast(&iContext.iMessage); + CPdpErrorRecoveryActivity& activity = static_cast(*iContext.iNodeActivity); + if (msg->iValue != 0) + { + TErrResponse retryResp(TErrResponse::ERetry, 0, activity.iCprMessageId); + TEErrorRecovery::TErrorRecoveryResponse rawResp (retryResp); + TCFSafeMessage::TResponseCarrierWest resp(rawResp, activity.iOriginators[0].RecipientId()); + iContext.PostToSender(resp); + } + else + { + TErrResponse propagateResp(TErrResponse::EPropagate, activity.iErrorCode, activity.iCprMessageId); + TEErrorRecovery::TErrorRecoveryResponse rawResp (propagateResp); + TCFSafeMessage::TResponseCarrierWest resp(rawResp, activity.iOriginators[0].RecipientId()); + iContext.PostToSender(resp); + } + } +} +