diff -r 000000000000 -r a4daefaec16c callcontinuity/vcchotrigger/src/vcchopolicyreader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/callcontinuity/vcchotrigger/src/vcchopolicyreader.cpp Mon Jan 18 20:12:36 2010 +0200 @@ -0,0 +1,246 @@ +/* +* Copyright (c) 2007-2008 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 "vcchopolicyreader.h" +#include "vccspsettings.h" +#include "rubydebug.h" + +_LIT( KVccServiceName, "VCC" ); + +// ======== MEMBER FUNCTIONS ======== +// --------------------------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------------------------- +// +CVccHoPolicyReader::CVccHoPolicyReader() + : iPolicy() + { + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor +// --------------------------------------------------------------------------- +// +void CVccHoPolicyReader::ConstructL() + { + RUBY_DEBUG_BLOCKL( "ConstructL" ); + + iSpSettings = CVccSPSettings::NewL(); + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CVccHoPolicyReader* CVccHoPolicyReader::NewL() + { + RUBY_DEBUG_BLOCKL( "NewL" ); + + CVccHoPolicyReader* self = CVccHoPolicyReader::NewLC(); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CVccHoPolicyReader* CVccHoPolicyReader::NewLC() + { + CVccHoPolicyReader* self = new( ELeave ) CVccHoPolicyReader(); + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CVccHoPolicyReader::~CVccHoPolicyReader() + { + RUBY_DEBUG0( "~CVccHoPolicyReader START" ); + + delete iSpSettings; + + RUBY_DEBUG0( "~CVccHoPolicyReader STOP" ); + } + +// --------------------------------------------------------------------------- +// Returns ho policy +// --------------------------------------------------------------------------- +// +TVccHoPolicy CVccHoPolicyReader::HoPolicy() const + { + return iPolicy; + } + +// --------------------------------------------------------------------------- +// Reads current settings which define when Ho can occur +// from Sp table and user modifiable repositories. +// --------------------------------------------------------------------------- +// +void CVccHoPolicyReader::ReadSettingsL() + { + RUBY_DEBUG_BLOCK( "ReadSettingsL" ); + + iSpSettings->ReadSettingsL( KVccServiceName ); + //read user settings + + ResolvePreferredDomainL(); + ResolveImmediateHoL(); + ResolveHoDirectionL(); + ResolveHoInHeldWaitingCallsL(); + ResolveSignalLevelParametersL(); + ResolveDtAllowedWhenCsOriginatedL(); + } + +// --------------------------------------------------------------------------- +// Defines what is the preferred domain the user should use for MO calls. +// 3GPP 24.216-720 defines operator preference: +// 0 - Indicates the preference for CS domain. +// 1 - Indicates the preference for IM CN subsystem. +// 2 - Indicates the preference for CS domain only. +// 3 - Indicates the preference for IM CN subsystem only. +// +// User preferred domain overrides operator preference. +// User preference modes: CS/PS +// --------------------------------------------------------------------------- +// +void CVccHoPolicyReader::ResolvePreferredDomainL() + { + RUBY_DEBUG_BLOCK( "ResolvePreferredDomainL" ); + + TVccHoPolicyPreferredDomain val = + static_cast( iSpSettings->PreferredDomainL() ); + + iPolicy.SetPreferredDomain( val ); + } + +// --------------------------------------------------------------------------- +// Defines should handover occur immediately when preferred network becomes +// available +// 3GPP 24.216-720 defines operator preference: +// 0 - Indicates the preference to not initiate domain transfer immediately +// to the preferred domain when that domain becomes available. +// 1 - Indicates the preference to initiate domain transfer immediately to +// the preferred domain when that domain becomes available. +// +// --------------------------------------------------------------------------- +// +void CVccHoPolicyReader::ResolveImmediateHoL() + { + RUBY_DEBUG_BLOCK( "ResolveImmediateHoL" ); + + TBool val( iSpSettings->ImmediateDtL() ); + + iPolicy.SetDoImmediateHo( val ); + } + +// --------------------------------------------------------------------------- +// Resolves into which domain hanover can occur +// 3GPP 24.216-720 defines operator preference: +// 0 - Indicates that the network operator prefers the domain transfer in the +// CS to IM CN/IM CN to CS subsystem direction can occur. +// 1 - Indicates that the network operator prefers the domain transfer in the +// CS to IM CN/IM CN to CS subsystem direction cannot occur. +// +// --------------------------------------------------------------------------- +// +void CVccHoPolicyReader::ResolveHoDirectionL() + { + RUBY_DEBUG_BLOCK( "ResolveHoDirectionL" ); + + TInt val( 0 ); + + if( iSpSettings->DtCsToPsAllowedL() == 0 ) + val |= ECsToPsAllowed; + + if( iSpSettings->DtPsToCsAllowedL() == 0 ) + val |= EPsToCsAllowed; + + iPolicy.SetAllowedDirection( val ); + } + +// --------------------------------------------------------------------------- +// Resolves can handover occur when held or waiting calls exist. +// 3GPP 24.216-720 defines operator preference: +// 0 - Indicates that the network operator prefers the domain transfer can +// occur when the VCC UE is engaged in an active and a held/waiting +// call/session on the transferring-out domain. +// 1 - Indicates that the network operator prefers the domain transfer cannot +// occur when the VCC UE is engaged in an active and a held/waiting +// call/session on the transferring-out domain. +// +// --------------------------------------------------------------------------- +// +void CVccHoPolicyReader::ResolveHoInHeldWaitingCallsL() + { + RUBY_DEBUG_BLOCK( "ResolveHoInHeldWaitingCallsL" ); + + TBool val( !iSpSettings->DtHeldWaitingCallsAllowedL() ); + iPolicy.SetDoHoInHeldWaitingCalls( val ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CVccHoPolicyReader::ResolveSignalLevelParametersL() + { + iCsParams.iHighLevel = iSpSettings->CsHoTresholdL(); + iCsParams.iLowLevel = iCsParams.iHighLevel + iSpSettings->CsHoHysteresisL(); + iCsParams.iLowTimeout = iSpSettings->CsHoHysteresisTimerLowL(); + iCsParams.iHighTimeout = iSpSettings->CsHoHysteresisTimerHighL(); + + iPsParams.iHighLevel = iSpSettings->PsHoTresholdL(); + iPsParams.iLowLevel = iPsParams.iHighLevel + iSpSettings->PsHoHysteresisL(); + iPsParams.iLowTimeout = iSpSettings->PsHoHysteresisTimerLowL(); + iPsParams.iHighTimeout = iSpSettings->PsHoHysteresisTimerHighL(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TSignalLevelParams CVccHoPolicyReader::CsSignalLevelParams() const + { + return iCsParams; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TSignalLevelParams CVccHoPolicyReader::PsSignalLevelParams() const + { + return iPsParams; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CVccHoPolicyReader::ResolveDtAllowedWhenCsOriginatedL() + { + TBool val( iSpSettings->DtAllowedWhenCsOriginatedL() ); + iPolicy.SetDtAllowedWhenCsOriginated( val ); + }