--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocolmodules/common/suplrrlpasn1/src/rrlpprotocolerror.cpp Wed Oct 13 16:07:50 2010 +0300
@@ -0,0 +1,189 @@
+// 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 "rrlpprotocolerror.h"
+#include "supldevloggermacros.h"
+
+/**
+Static Factory Constructor
+*/
+EXPORT_C CRrlpProtocolError* CRrlpProtocolError::NewL(TBool aIsOutgoing)
+ {
+ SUPLLOG(ELogP1, "CRrlpProtocolError::NewL() Begin\n");
+ CRrlpProtocolError* self = new (ELeave) CRrlpProtocolError(aIsOutgoing);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ SUPLLOG(ELogP1, "CRrlpProtocolError::NewL() End\n");
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+/**
+Private default constructor
+*/
+CRrlpProtocolError::CRrlpProtocolError(TBool aIsOutgoing)
+ : CRrlpMessageBase(ERrlpProtocolError, aIsOutgoing)
+ {
+ }
+
+
+/**
+Second stage constructor
+*/
+void CRrlpProtocolError::ConstructL()
+ {
+ // call base class ConstructL to create data structures.
+ CRrlpMessageBase::ConstructL();
+
+ // construct messaage specific data
+ // containers if this is an outgoing message
+ if (iIsOutgoingMessage)
+ {
+ // local reference to context object
+ OSCTXT* pctxt = iControl->getCtxtPtr();
+
+ iData->component.t = T_RRLP_Component_protocolError;
+ iData->component.u.protocolError = (ASN1T_ProtocolError*)rtxMemAllocZ(pctxt, sizeof(ASN1T_ProtocolError));
+ LeaveIfAllocErrorL();
+ }
+ }
+
+
+/**
+Destructor
+*/
+CRrlpProtocolError::~CRrlpProtocolError()
+ {
+ SUPLLOG(ELogP1, "CRrlpProtocolError::~CRrlpProtocolError() Begin\n");
+ SUPLLOG(ELogP1, "CRrlpProtocolError::~CRrlpProtocolError() End\n");
+ }
+
+
+/**
+SetProtocolError()
+
+@param aErrorCode - the outgoing RRLP Protocol error code
+@return error indication, KErrNone otherwise
+*/
+EXPORT_C TInt CRrlpProtocolError::SetProtocolError(const TRrlpErrorCode& aErrorCode)
+ {
+ SUPLLOG(ELogP8, "CRrlpProtocolError::SetProtocolError() Begin\n");
+ SUPLLOG2(ELogP8, " - TRrlpErrorCode aLocError = %d", aErrorCode);
+
+ __ASSERT_DEBUG(iIsOutgoingMessage, User::Invariant());
+ __ASSERT_DEBUG(iData->component.u.protocolError != NULL, User::Invariant());
+
+ iData->component.u.protocolError->errorCause = aErrorCode;
+
+ SUPLLOG(ELogP1, "CRrlpProtocolError::SetProtocolError() End\n");
+ return KErrNone;
+ }
+
+
+/**
+ProtocolError()
+
+@param aErrorCode on return, populated with the received RRLP Error Code
+@return error indication, KErrNone otherwise
+*/
+EXPORT_C TInt CRrlpProtocolError::GetProtocolError(TRrlpErrorCode& aErrorCode)
+ {
+ SUPLLOG(ELogP8, "CRrlpProtocolError::ProtocolError() Begin\n");
+ __ASSERT_DEBUG(!iIsOutgoingMessage, User::Invariant());
+ __ASSERT_DEBUG(iData->component.u.protocolError != NULL, User::Invariant());
+
+ aErrorCode = (TRrlpErrorCode)iData->component.u.protocolError->errorCause;
+
+ SUPLLOG2(ELogP8, " - TRrlpErrorCode aLocError = %d", aErrorCode);
+ SUPLLOG(ELogP1, "CRrlpProtocolError::ProtocolError() End\n");
+ return KErrNone;
+ }
+
+
+/**
+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 CRrlpProtocolError::GetExtendedReference(TRrlpReference& aRrlpRef)
+ {
+ __ASSERT_DEBUG(iData->component.u.protocolError != NULL, User::Invariant());
+
+ if (iData->component.u.protocolError->m.rel_5_ProtocolError_ExtensionPresent !=0)
+ {
+ if (iData->component.u.protocolError->rel_5_ProtocolError_Extension.m.extended_referencePresent !=0)
+ {
+ aRrlpRef.aRel5EntendedRefPresent = ETrue;
+ aRrlpRef.aRel5SmlcCode = iData->component.u.protocolError->rel_5_ProtocolError_Extension.extended_reference.smlc_code;
+ aRrlpRef.aRel5TransactionId = iData->component.u.protocolError->rel_5_ProtocolError_Extension.extended_reference.transaction_ID;
+ }
+ else
+ {
+ return KErrNotFound;
+ }
+ }
+ else
+ {
+ return KErrNotFound;
+ }
+ return KErrNone;
+ }
+
+
+/**
+SetExtendedReference()
+
+Sets the extended reference parameters in the outgoing message, if they are set
+in the passed container.
+
+@param aRrlpRef on return, populated with the session reference details
+@return KErrNotFound if no extended reference data is present,
+ KErrNone otherwise
+*/
+TInt CRrlpProtocolError::SetExtendedReference(const TRrlpReference& aRrlpRef)
+ {
+ __ASSERT_DEBUG(iData->component.u.protocolError != NULL, User::Invariant());
+
+ // if present, populate the optional Rel-5 extended reference
+ if (aRrlpRef.aRel5EntendedRefPresent)
+ {
+ // mark the optional component present
+ iData->component.u.protocolError->m.rel_5_ProtocolError_ExtensionPresent = 1;
+ iData->component.u.protocolError->rel_5_ProtocolError_Extension.m.extended_referencePresent = 1;
+ ASN1T_Extended_reference* extendedRef = &iData->component.u.protocolError->rel_5_ProtocolError_Extension.extended_reference;
+ extendedRef->smlc_code = aRrlpRef.aRel5SmlcCode;
+ extendedRef->transaction_ID = aRrlpRef.aRel5TransactionId;
+ }
+ else
+ {
+ return KErrNotFound;
+ }
+
+ return KErrNone;
+ }
+
+