--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/satsa/apdu/src.s60/cstspinattributes.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,254 @@
+/*
+* 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 "cstspinattributes.h"
+
+namespace java
+{
+namespace satsa
+{
+
+// CONSTANTS
+
+//0000 0000 1000 0000 -->9. bit from left but first byte ignored
+const TUint8 KSTSDisableAllowed = 0x80;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::CSTSPinAttributes
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSTSPinAttributes::CSTSPinAttributes()
+{
+ iPinType = ENotInitialized;
+ iMaxLength = KErrNotFound;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::CSTSPinAttributes
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSTSPinAttributes::CSTSPinAttributes(TInt aPinType, TInt aMinLength,
+ TInt aStoredLength, TInt aMaxLength, TInt aPinReference)
+{
+
+ iPinType = (TPinType) aPinType;
+
+ //if maxLenght is zero or less it is not found correctly
+ if (aMaxLength <= 0)
+ {
+ iMaxLength = KErrNotFound;
+ }
+ else
+ {
+ iMaxLength = aMaxLength;
+ }
+
+ iMinLength = aMinLength;
+ iStoredLength = aStoredLength;
+
+ iPinReference = aPinReference;
+
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSTSPinAttributes::ConstructL()
+{
+ // creating with empty values
+ iPinFlags = KNullDesC8().AllocL();
+ iPadChar = KNullDesC8().AllocL();
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSTSPinAttributes::ConstructL(TInt aPadChar, TInt aFlags)
+{
+ // creating with empty values
+ iPinFlags = HBufC8::NewL(2);//pinflags contains maximum of two bytes of data
+ iPinFlags->Des().Append(aFlags);
+ iPadChar = HBufC8::NewL(1);
+ iPadChar->Des().Append(aPadChar);
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSTSPinAttributes* CSTSPinAttributes::NewLC(TInt aPinType, TInt aMinLength,
+ TInt aStoredLength, TInt aMaxLength, TInt aPinReference, TInt aPadChar,
+ TInt aFlags)
+{
+ CSTSPinAttributes
+ * self =
+ new(ELeave) CSTSPinAttributes(aPinType, aMinLength, aStoredLength, aMaxLength, aPinReference);
+ CleanupStack::PushL(self);
+ self->ConstructL(aPadChar, aFlags);
+ return self;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSTSPinAttributes* CSTSPinAttributes::NewL()
+{
+ CSTSPinAttributes* self = new(ELeave) CSTSPinAttributes();
+
+ return self;
+}
+
+// Destructor
+CSTSPinAttributes::~CSTSPinAttributes()
+{
+ delete iPinFlags;
+ delete iPadChar;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::PinType
+// Getter for PIN type
+// -----------------------------------------------------------------------------
+CSTSPinAttributes::TPinType CSTSPinAttributes::PinType() const
+{
+ return iPinType;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::MinLength
+// Getter for PIN minimum length
+// -----------------------------------------------------------------------------
+TInt CSTSPinAttributes::MinLength() const
+{
+ return iMinLength;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::StoredLength
+// Getter for PIN stored lenght
+// -----------------------------------------------------------------------------
+
+TInt CSTSPinAttributes::StoredLength() const
+{
+ return iStoredLength;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::MaxLength
+// Getter for PIN maximum length
+// -----------------------------------------------------------------------------
+
+TInt CSTSPinAttributes::MaxLength() const
+{
+ return iMaxLength;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::PinReference
+// Getter for PIN reference
+// -----------------------------------------------------------------------------
+
+TUint8 CSTSPinAttributes::PinReference() const
+{
+ return iPinReference;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::PadChar
+// Getter for padding character
+// -----------------------------------------------------------------------------
+
+const TDesC8& CSTSPinAttributes::PadChar() const
+{
+ return *iPadChar;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::CopyL
+// Takes information from parameter and sets it, takes copy
+// -----------------------------------------------------------------------------
+void CSTSPinAttributes::CopyL(const CSTSPinAttributes& aPinAttributes)
+{
+ HBufC8* tmpPinFlags = aPinAttributes.iPinFlags->AllocL();
+ delete iPinFlags;
+ iPinFlags = tmpPinFlags;
+
+ iPinType = aPinAttributes.PinType();
+ iMinLength = aPinAttributes.MinLength();
+ iStoredLength = aPinAttributes.StoredLength();
+ iMaxLength = aPinAttributes.MaxLength();
+ iPinReference = aPinAttributes.PinReference();
+
+ HBufC8* tmpPadChar = aPinAttributes.PadChar().AllocL();
+ delete iPadChar;
+ iPadChar = tmpPadChar;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSPinAttributes::IsPinFlagSet
+// Uses mask to find out is flag set or not. Mask is already set in header file
+// where TFlagType is defined. Supports only case sensitive and needs-padding
+// flags.
+// -----------------------------------------------------------------------------
+TBool CSTSPinAttributes::IsPinFlagSet(TFlagType aFlagType) const
+{
+
+ TBool returnValue = EFalse;
+ TInt8 correctByte = 0x00;
+
+ //case sensitive, needs-padding, change-disabled and unblock-disabled
+ //information will be found from first byte
+ TInt index = 0;
+
+ //disable allowed information will be found from second byte
+ if (aFlagType == EDisableAllowed)
+ {
+ //special case because value is in second byte of iPinFlags
+ //and thats why when presenting flagtype in one byte form
+ //DisableAllowed has same value than ECaseSensitive flag.
+ //Thats why own constant for disable allowed.
+ aFlagType = (TFlagType) KSTSDisableAllowed;
+ }
+
+ if (iPinFlags->Length() > index)
+ {
+ correctByte = iPinFlags->Ptr()[index];
+ //check is wanted bit set or not
+ returnValue = ((aFlagType & correctByte) == aFlagType);
+ }
+ //if correctByte is missing, we return EFalse
+ return returnValue;
+}
+
+} // namespace satsa
+} // namespace java
+// End of File