javaextensions/satsa/apdu/src.s60/cstspinattributes.cpp
branchRCL_3
changeset 19 04becd199f91
--- /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