diff -r f5050f1da672 -r 04becd199f91 javaextensions/satsa/apdu/src.s60/cstsrespapdu.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/satsa/apdu/src.s60/cstsrespapdu.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,193 @@ +/* +* Copyright (c) 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 FILES +#include "cstsrespapdu.h" + +namespace java +{ +namespace satsa +{ + +// CONSTANTS +const TUint8 KSTSNormalEndingSW1 = 0x90; +const TUint8 KSTSNormalEndingSW2 = 0x00; +const TUint8 KSTSNormalEndingSW1WithExtraInfo = 0x91; +const TUint8 KSTSGetResponseSW1Normal = 0x61; +const TUint8 KSTSGetResponseSW1USIM1 = 0x9E; +const TUint8 KSTSGetResponseSW1USIM2 = 0x9F; +const TUint8 KSTSGetResponseSW1EmtpyLe = 0x62; +const TUint8 KSTSGetResponseSW1EmtpyLe2 = 0x63; +const TUint8 KSTSResendSW1 = 0x6C; + +// ============================ MEMBER FUNCTIONS =============================== + + +CSTSRespApdu::CSTSRespApdu() +{ + iConnTarget = ESTSAID; +} + +void CSTSRespApdu::ConstructL(TInt aMaxLength, + CSTSApdu::TSTSApduStandard aStandard) +{ + iRespData = CSTSApdu::NewL(aMaxLength, aStandard); +} + +CSTSRespApdu* CSTSRespApdu::NewLC(TInt aMaxLength, + CSTSApdu::TSTSApduStandard aStandard) +{ + CSTSRespApdu* self = new(ELeave) CSTSRespApdu(); + CleanupStack::PushL(self); + self->ConstructL(aMaxLength, aStandard); + return self; +} + +CSTSRespApdu* CSTSRespApdu::NewL(TInt aMaxLength, + CSTSApdu::TSTSApduStandard aStandard) +{ + CSTSRespApdu* self = CSTSRespApdu::NewLC(aMaxLength, aStandard); + CleanupStack::Pop(self); + return self; +} + +CSTSRespApdu::~CSTSRespApdu() +{ + delete iRespData; +} + +// ----------------------------------------------------------------------------- +// CSTSRespApdu::IsNormalEnding +// Panics, if apdu data buffer contains too little information. +// Checks if SW1 and SW2 bytes of data contain normal ending information. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +TBool CSTSRespApdu::IsNormalEnding() const +{ + TBool returnValue = EFalse; + TUint8 sw1 = GetSW1(); + + if ((sw1 == KSTSNormalEndingSW1 && GetSW2() == KSTSNormalEndingSW2) || (sw1 + == KSTSNormalEndingSW1WithExtraInfo)) + { + returnValue = ETrue; + } + + return returnValue; +} + +// ----------------------------------------------------------------------------- +// CSTSRespApdu::GetResponseNeeded +// Panics, if apdu data buffer contains too little information. +// Checks if SW1 byte contain information that GET RESPONSE APDU is needed. +// Saves to reference parameter new expected response lenth. +// Implementation is done according to JSR177 SATSA-APDU part. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +TBool CSTSRespApdu::GetResponseNeeded(TUint8& aNewLength) const +{ + + TBool returnValue = EFalse; + TUint8 sw1 = GetSW1(); + // get response is needed with new length + if ((sw1 == KSTSGetResponseSW1Normal) || // both AID/USAT OR + ((iConnTarget == ESTSUSAT) && // only in USAT + ((sw1 == KSTSGetResponseSW1USIM1) || (sw1 + == KSTSGetResponseSW1USIM2)))) + { + returnValue = ETrue; + aNewLength = GetSW2(); + } + // get response is needed with empty length in USAT connection + else if ((iConnTarget == ESTSUSAT) && ((sw1 == KSTSGetResponseSW1EmtpyLe) + || (sw1 == KSTSGetResponseSW1EmtpyLe2))) + { + returnValue = ETrue; + aNewLength = 0x00; // must be emtpy in this case + } + return returnValue; +} + +// ----------------------------------------------------------------------------- +// CSTSRespApdu::ResendNeeded +// Panics, if apdu data buffer contains too little information. +// Checks if SW1 byte contain information that apdu resending is needed. +// Saves to reference parameter new expected response lenth. +// Implementation is done according to JSR177 SATSA-APDU part. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +TBool CSTSRespApdu::ResendNeeded(TUint8& aNewLength) const +{ + + TBool returnValue = EFalse; + // resend is needed with new length + if (GetSW1() == KSTSResendSW1) + { + returnValue = ETrue; + aNewLength = GetSW2(); + } + return returnValue; +} + +// ----------------------------------------------------------------------------- +// CSTSRespApdu::GetSW1 +// Panics, if apdu data buffer contains too little information. +// Second last byte of data is SW1 +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +TUint8 CSTSRespApdu::GetSW1() const +{ + // SW1 is second last byte + return iRespData->ApduPtr().Ptr()[iRespData->ApduPtr().Length() - 2]; +} + +// ----------------------------------------------------------------------------- +// CSTSRespApdu::GetSW2 +// Panics, if apdu data buffer contains too little information. +// Last byte of data is SW2 +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +TUint8 CSTSRespApdu::GetSW2() const +{ + // SW2 is last byte + return iRespData->ApduPtr().Ptr()[iRespData->ApduPtr().Length() - 1]; +} + +// ----------------------------------------------------------------------------- +// CSTSRespApdu::ResponseBytes +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +TPtr8& CSTSRespApdu::ResponseBytes() const +{ + return iRespData->ApduPtr(); +} + +// ----------------------------------------------------------------------------- +// CSTSRespApdu::SetConnectionTarget +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +void CSTSRespApdu::SetConnectionTarget(TSTSConnectionTarget aConnTarget) +{ + iConnTarget = aConnTarget; +} + +} // namespace satsa +} // namespace java +// End of File