diff -r 18280709ae43 -r 15a2125aa2f3 networkprotocolmodules/common/suplrrlpasn1/src/suplpospayload.cpp --- a/networkprotocolmodules/common/suplrrlpasn1/src/suplpospayload.cpp Fri Jun 11 15:06:31 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,182 +0,0 @@ -// 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 "ULP.h" -#include "suplpospayload.h" -#include "supldevloggermacros.h" -#include "rrlputils.h" -#include "rrlpmeasureposrequest.h" -#include "rrlpassistancedata.h" -#include "rrlpprotocolerror.h" -#include "suplasn1error.h" - -/** -Default Constructor -*/ -CSuplPosPayload::CSuplPosPayload(TSuplPosPayloadType aType, TBool aIsOutgoingMsg) - : iMessageType(aType), iIsOutgoingMessage(aIsOutgoingMsg) - { - SUPLLOG(ELogP1, "CSuplPosPayload::CSuplPosPayload() Begin\n"); - SUPLLOG(ELogP1, "CSuplPosPayload::CSuplPosPayload() End\n"); - } - -/** -Default Constructor -*/ -CSuplPosPayload::~CSuplPosPayload() - { - SUPLLOG(ELogP1, "CSuplPosPayload::~CSuplPosPayload() Begin\n"); - SUPLLOG(ELogP1, "CSuplPosPayload::~CSuplPosPayload() End\n"); - } - -/** -EncodeToL() - -Encode a populated outgoing message - -@param aBuf the destination buffer to encode to -@return error indication, KErrNone otherwise -*/ -TInt CSuplPosPayload::EncodeToL(TPtr8& /*aBuf*/) - { - SUPLLOG(ELogP1, "CSuplPosPayload::~CSuplPosPayload() Begin\n"); - SUPLLOG(ELogP1, "CSuplPosPayload::~CSuplPosPayload() End\n"); - return KErrNotSupported; - } - -/** -Prints the content payload data structure to the logger -Default implementation logs nothing and should be overridden -*/ -void CSuplPosPayload::LogMessageContent() - { - SUPLLOG(ELogP1, "CSuplPosPayload::LogMessageContent() Begin\n"); - SUPLLOG(ELogP1, "CSuplPosPayload::LogMessageContent() End\n"); - } - -/** -MessageType() - -@return the positioning payload message type -*/ -EXPORT_C CSuplPosPayload::TSuplPosPayloadType CSuplPosPayload::MessageType() - { - SUPLLOG(ELogP1, "CSuplPosPayload::MessageType() Begin\n"); - SUPLLOG2(ELogP1, "CSuplPosPayload::MessageType() End (iMessageType = %d)\n", iMessageType); - return iMessageType; - } - -/** - * DecodePosPayload - * - * decodes a pospayload and returns a CSuplPosPayload* (eg CRrlpMeasurePositionRequest*) containing the decoded rrlp payload - * - * @param aPosPayload an asn1-encoded rrlp pos payload. Caller takes ownership. - * @param aError any error encountered - */ -EXPORT_C CSuplPosPayload* CSuplPosPayload::DecodePosPayloadL(const HBufC8* aPosPayload, TInt& aError) - { - SUPLLOG(ELogP1, "CSuplPosPayload::DecodePosPayloadL() Begin\n"); - - CSuplPosPayload *decodedRrlpMsg = NULL; - - const ASN1T_PosPayLoad_rrlpPayload* posPayLoad = reinterpret_cast(aPosPayload); - - // extract the RRLP payload and decode and compare... - TInt payloadLength = posPayLoad->numocts; - const OSOCTET* payloadptr = &posPayLoad->data[0]; - - // Create the payload decode buffer - // CleanupDeletePushL used for ASN1x_X classes rather than CleanupStack::PushL() to ensure - // class destructors are called on PopAndDestroy. This is necessary to ensure ASN1Context - // reference counter is decremented correctly and memory released. - ASN1Context* payloadContext = new (ELeave) ASN1Context; - CleanupDeletePushL(payloadContext); - ASN1PERDecodeBuffer* decodeBuffer = new (ELeave) ASN1PERDecodeBuffer (payloadptr, payloadLength, FALSE, payloadContext); - // construction of iDecodeBuffer successful, pop payloadContext off the cleanup stack - CleanupStack::Pop(payloadContext); // now owned by decodeBuffer - CleanupDeletePushL(decodeBuffer); - - // Create data and control objects to manage the decode - ASN1T_PDU* payloadData = new (ELeave) ASN1T_PDU(); - CleanupDeletePushL(payloadData); - ASN1C_PDU* payloadPdu = new (ELeave) ASN1C_PDU(*decodeBuffer, *payloadData); - CleanupDeletePushL(payloadPdu); - - TInt stat = payloadPdu->Decode(); - - // return now if error encountered while decoding - if (stat != KErrNone) - { - aError = RrlpUtils::ProcessAsn1Error(stat); - CleanupStack::PopAndDestroy(payloadPdu); - CleanupStack::PopAndDestroy(payloadData); - CleanupStack::PopAndDestroy(decodeBuffer); - return NULL; - } - - // build payload content wrapper. - switch (payloadData->component.t) - { - case T_RRLP_Component_msrPositionReq: - { - decodedRrlpMsg = CRrlpMeasurePositionRequest::NewL(); - break; - } - - case T_RRLP_Component_assistanceData: - { - decodedRrlpMsg = CRrlpAssistanceData::NewL(); - break; - } - - case T_RRLP_Component_protocolError: - { - decodedRrlpMsg = CRrlpProtocolError::NewL(EFalse); - break; - } - - case T_RRLP_Component_msrPositionRsp: - case T_RRLP_Component_assistanceDataAck: - default: - { - // unsupported message type - aError = ESuplAsn1ErrUnsupportedPosMessageType; - CleanupStack::PopAndDestroy(payloadPdu); - CleanupStack::PopAndDestroy(payloadData); - CleanupStack::PopAndDestroy(decodeBuffer); - return NULL; - } - } - - CleanupStack::Pop(payloadPdu); - CleanupStack::Pop(payloadData); - CleanupStack::PopAndDestroy(decodeBuffer); - - // pass ownership of the decoded message content. - static_cast(decodedRrlpMsg)->SetDecodedData(payloadData, payloadPdu); - - SUPLLOG(ELogP1, "CSuplPosPayload::DecodePosPayloadL() End\n"); - - return decodedRrlpMsg; - - }