networkprotocolmodules/common/suplrrlpasn1/src/rrlpassistancedata.cpp
branchRCL_3
changeset 65 a796fdeeb33c
parent 0 9cfd9a3ee49c
--- /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 <lbs/lbsassistancedatabase.h>
+#include <lbs/lbsassistancedatabuilderset.h>
+#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;
+	}
+