diff -r 87622fad6b51 -r a796fdeeb33c networkprotocolmodules/common/suplrrlpasn1/src/rrlpassistancedata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkprotocolmodules/common/suplrrlpasn1/src/rrlpassistancedata.cpp Wed Oct 13 16:07:50 2010 +0300 @@ -0,0 +1,182 @@ +// Copyright (c) 2008-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: +// + +/** + @file + @internalTechnology + +*/ + +#include "RRLP-Messages.h" +#include "rrlpassistancedata.h" +#include +#include +#include "supldevloggermacros.h" + + +/** +Static Factory Constructor +*/ +EXPORT_C CRrlpAssistanceData* CRrlpAssistanceData::NewL() + { + SUPLLOG(ELogP1, "CRrlpAssistanceData::NewL() Begin\n"); + CRrlpAssistanceData* self = new (ELeave) CRrlpAssistanceData(); + CleanupStack::PushL(self); + self->ConstructL(); + SUPLLOG(ELogP1, "CRrlpAssistanceData::NewL() End\n"); + CleanupStack::Pop(self); + return self; + } + + +/** +Private default constructor +*/ +CRrlpAssistanceData::CRrlpAssistanceData() + : CRrlpMessageBase(ERrlpAssistanceData, EFalse) + { + } + + +/** +Second stage constructor +*/ +void CRrlpAssistanceData::ConstructL() + { + } + + +/** +Destructor +*/ +CRrlpAssistanceData::~CRrlpAssistanceData() + { + SUPLLOG(ELogP1, "CRrlpAssistanceData::~CRrlpAssistanceData() Begin\n"); + SUPLLOG(ELogP1, "CRrlpAssistanceData::~CRrlpAssistanceData() End\n"); + } + + +/** +AssistanceDataPresent() + +Indicates whether supported assistance data is present in the received message. +This implementation supports only receipt of GPS assistance data, hence this +method returns ETrue if GPS assistance data is present in the received content. + +@return ETrue if valid assistance data is present in the received message +*/ +EXPORT_C TBool CRrlpAssistanceData::AssistanceDataPresent() + { + SUPLLOG(ELogP1, "CRrlpAssistanceData::AssistanceDataPresent() Begin\n"); + __ASSERT_DEBUG(iData != NULL, User::Invariant()); + __ASSERT_DEBUG(!iIsOutgoingMessage, User::Invariant()); + __ASSERT_DEBUG(iData->component.u.assistanceData != NULL, User::Invariant()); + + if (iData->component.u.assistanceData->m.gps_AssistDataPresent == 0) + { + SUPLLOG(ELogP1, "CRrlpAssistanceData::AssistanceDataPresent(EFalse) End\n"); + return EFalse; + } + SUPLLOG(ELogP1, "CRrlpAssistanceData::AssistanceDataPresent(ETrue) End\n"); + return ETrue; + } + + +/** +BuildAssistanceData() + +@param aDataMask populated to indicate what assistance data exists +@param aData reference to assistance data builder object to populate with + received assistance data +@return KErrNotFound if gps assistance data is not present in the received message, + KErrNone otherwise +*/ +EXPORT_C TInt CRrlpAssistanceData::BuildAssistanceData(TLbsAsistanceDataGroup& aDataMask, RLbsAssistanceDataBuilderSet& aAssistanceDataBuilderSet) + { + SUPLLOG(ELogP1, "CRrlpAssistanceData::BuildAssistanceData() Begin\n"); + __ASSERT_DEBUG(iData != NULL, User::Invariant()); + __ASSERT_DEBUG(!iIsOutgoingMessage, User::Invariant()); + __ASSERT_DEBUG(iData->component.u.assistanceData != NULL, User::Invariant()); + + + // return immediately if no gps assistance data present + if (iData->component.u.assistanceData->m.gps_AssistDataPresent == 0) + { + SUPLLOG(ELogP1, "CRrlpAssistanceData::BuildAssistanceData() End (no assistance data available)\n"); + return KErrNotFound; + } + + // pointer to the received/decoded GPS Assistance Data element + ASN1T_ControlHeader& gpsData = iData->component.u.assistanceData->gps_AssistData.controlHeader; + + SUPLLOG(ELogP1, "CRrlpAssistanceData::BuildAssistanceData() End\n"); + return CRrlpMessageBase::BuildAssistanceData(aDataMask, aAssistanceDataBuilderSet, gpsData); + } + + +/** +MoreAssDataToBeSent() + +@return ETrue if another RRLP Assistance Data Message is pending +*/ +EXPORT_C TBool CRrlpAssistanceData::MoreAssDataToBeSent() + { + SUPLLOG(ELogP1, "CRrlpAssistanceData::MoreAssDataToBeSent() Begin\n"); + __ASSERT_DEBUG(iData != NULL, User::Invariant()); + __ASSERT_DEBUG(!iIsOutgoingMessage, User::Invariant()); + __ASSERT_DEBUG(iData->component.u.assistanceData != NULL, User::Invariant()); + + // check the optional field is present + if (iData->component.u.assistanceData->m.moreAssDataToBeSentPresent != 0) + { + // check the content of the field. + if (iData->component.u.assistanceData->moreAssDataToBeSent == 1) + { + SUPLLOG(ELogP1, "CRrlpAssistanceData::MoreAssDataToBeSent(ETrue) End\n"); + return ETrue; + } + } + + SUPLLOG(ELogP1, "CRrlpAssistanceData::MoreAssDataToBeSent(EFalse) End\n"); + return EFalse; + } + + +/** +GetExtendedReference() + +Populates aRrlpRef if Rel-5 Extended Reference is present in the received message + +@param aRrlpRef local copy of the session reference details +@return KErrNotFound if the extended reference parameters are not present, + KErrNone otherwise +*/ +TInt CRrlpAssistanceData::GetExtendedReference(TRrlpReference& aRrlpRef) + { + __ASSERT_DEBUG(iData->component.u.assistanceData != NULL, User::Invariant()); + + if (iData->component.u.assistanceData->m.rel5_AssistanceData_ExtensionPresent != 0) + { + aRrlpRef.aRel5EntendedRefPresent = ETrue; + aRrlpRef.aRel5SmlcCode = iData->component.u.assistanceData->rel5_AssistanceData_Extension.extended_reference.smlc_code; + aRrlpRef.aRel5TransactionId = iData->component.u.assistanceData->rel5_AssistanceData_Extension.extended_reference.transaction_ID; + } + else + { + return KErrNotFound; + } + return KErrNone; + } +