secsrv_plat/java_utils_api/inc/JavaUtils.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
permissions -rw-r--r--
Revision: 201004

/*
* Copyright (c) 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:
*
*/


#ifndef JAVAUTILS_H
#define JAVAUTILS_H

//INCLUDES
#include <e32base.h>

const TInt   KPathMaxLength                = 8;
const TInt   KLabelMaxLength               = 24;
const TInt   KPINMaxLabelLength            = 64;

typedef TBuf<KPINMaxLabelLength> TPINLabel;

//FORWARD DECLARATIONS
class RWimCertMgmt;
class RWimMgmt;


struct TJavaPINParams
	{
	TPINLabel iPINLabel;  
	TInt      iFlags;
	TInt      iAuthId;
	TInt      iPinNumber;
	TInt      iMinLength;
	TInt      iMaxLength;
	TInt      iPinType;
	TInt      iStoredLength;
	TInt      iPinReference;
	TInt      iPadChar;
	};
	
/**
*  Reads Java provisioning information from Smart Card
*
*  @lib WimClient.lib
*  @since S60 3.2
*/
class CWimJavaUtils : public CActive
    {
    public:

        /**
        * Two-phased constructor.
        *
        * @param
        * @return
        */
        IMPORT_C static CWimJavaUtils* NewL();

        /**
        * Destructor
        */
        IMPORT_C virtual ~CWimJavaUtils();
        
        /**
        * Initializes the WIM Server cache. This is the most time consuming call. 
        *
        * @param  aStatus  Indicates the result of this call. Values:
        *         KErrNone, call was successull
        *         KErrNotFound, no WIM was found
        *         KErrNoMemory, no memory
        *         KErrGeneral, any other error
        * @return void
        */
        IMPORT_C void Initialize( TRequestStatus& aStatus );

        /** 
        * Cancels outgoing Initialize operation. 
        *
        * @param
        * @return void
        */
        IMPORT_C void CancelInitialize();

        /**
        * Fetches the size of ACIF. 
        * This information can be used as a notification of existing of provisioning 
        * information. If the size is not included in Smart Card's
        * DODF-JavaPROV file then the full length of the file containing the 
        * provisioning information is returned.
        *
        * @param  aSize    The length of ACIF
        * @param  aStatus  Indicates the result of this call.
        *         KErrNone, no errors. NOTE: size can still be 0 indicating
        *                   that no provisioning information was found.
        *                   If aSize > 0 it means that provisioning information
        *                   was found.
        *         KErrNoMemory, No memory
        *         KErrGeneral, any other error
        * @return void
        */
        IMPORT_C void GetACIFSize( TInt& aSize,
                                   TRequestStatus& aStatus );
        
        /**
        * Fetches the size of ACF
        *
        * @param aSize  The lenght of ACF
        * @param aACFPath The path of ACF on smart card
        * @param  aStatus  Indicates the result of this call.
        * @return void
        */
        IMPORT_C void GetACFSize( TInt& aSize, 
                                  const TDesC8& aACFPath,
                                  TRequestStatus& aStatus );
                                  
        /**
        * Get the Authobj information
        *
        * @param aAuthIdList List of AuthObject ID
        * @param aAuthObjsInfoList List of AuthObject Info
        * @param  aStatus  Indicates the result of this call.
        * @return void 
        */
        IMPORT_C void GetAuthObjsInfo( const RArray<TInt>& aAuthIdList, 
                                       RArray<TJavaPINParams>& aAuthObjsInfoList,
                                       TRequestStatus& aStatus );
                                  
        /** 
        * Cancels outgoing GetACIFSize operation.
        *
        * @param 
        * @return void
        */
        IMPORT_C void CancelGetACIFSize();
        
        /** 
        * Cancels outgoing GetACFSize operation.
        *
        * @param
        * @return void
        */
        IMPORT_C void CancelGetACFSize();
        
        /**
        * Cancel outgoing GetAuthObjsInfo
        *
        * @param 
        * @return void
        */
        IMPORT_C void CancelGetAuthObjsInfo();
         
        /**
        * Fetches the whole data of ACIF file. 
        *
        * @param  aACIFData  ACIF binary data from smart card
        * @param  aStatus  Indicates the result of this call.
        *         KErrNone, no errors.
        *         KErrNoMemory, No memory
        *         KErrGeneral, any other error
        * @return void
        */
        IMPORT_C void RetrieveACIFContent( TDes8& aACIFData,
                                           TRequestStatus& aStatus );
                                           
        
       /**
        * Fetches the whole data of ACF file
        *
        * @param aACFData ACF binary data from smart card
        * @param aACFPath ACF file path on smart card
        * @param  aStatus  Indicates the result of this call.
        * @return void
        */
        IMPORT_C void RetrieveACFContent( TDes8& aACFData,
                                           const TDesC8& aACFPath,
                                           TRequestStatus& aStatus );
                                           
        /**
        * Fetches the wim label and path
        *
        * @param aWimLabel 
        * @param aPath
        * @param  aStatus  Indicates the result of this call.  
        * @return void 
        */
        IMPORT_C void RetrieveWimLabelAndPath( TDes8& aWimLabel,
                                               TDes8& aPath,
                                               TRequestStatus& aStatus );                                   
                                           
        
        /** 
        * Cancels outgoing Retrieve operation.
        *
        * @return void
        */
        IMPORT_C void CancelRetrieveACIFContent();
        
        /** 
        * Cancels outgoing Retrieve operation.
        *
        * @return void
        */
        IMPORT_C void CancelRetrieveACFContent();
        
        /**
        * Cancel outgoing Retrieve operation
        *
        * @return void
        */
        IMPORT_C void CancelRetrieveWimLabelAndPath();

    private:

        /**
        * Symbian constructor
        * @return void
        */
        void ConstructL();

        /**
        * C++ default constructor.
        */
        CWimJavaUtils();

    private: //from CActive
        
        /**
        * Different phases are handled here.
        * @return void
        */
        void RunL();

        /**
        * Cancellation function
        * Deallocates member variables and completes client status with
        * KErrCancel error code.
        * @return void
        */
        void DoCancel();

        /**
        * The active scheduler calls this function if this active 
        * object's RunL() function leaves. 
        * Handles necessary cleanup and completes request with
        * received error code.
        * @param aError -The error code which caused this function call.
        * @return TInt  -Error code to active scheduler, is always KErrNone.
        */ 
        TInt RunError( TInt aError );

    private:

        /** 
        * Sets own iStatus to KRequestPending, and signals it 
        * with User::RequestComplete() -request. This gives chance 
        * active scheduler to run other active objects. After a quick
        * visit in active scheduler, signal returns to RunL() and starts next
        * phase of operation. 
        * @return void
        */
        void SignalOwnStatusAndComplete();

        /** 
        * Allocates memory for member variables, which are needed
        * in Java Provisioning struct.
        * @param aDataLength -The length of the data to be allocated
        * @return void
        */
        void AllocMemoryForJavaProvStructL( const TInt aDataLength );
        
        /** 
        * Allocates memory for path and label
        * @return void
        */
        void AllocMemoryForPathAndLabelL();
        /** 
        * Deallocates memory from member variables
        * @return void
        */
        void DeallocMemoryFromJavaProvStruct();
        
        /** 
        * Deallocates memory from path and label
        * @return void
        */
        void DeallocMemoryFromPathAndLabel();
        
    private:

        enum TJavaUtilPhase
            {
            EInitialize,
            EConnectClientSession,
            EInitializeWim,
            EInitializeDone,
            EGetACIFSize,
            EGetACIFSizeDone,
            ERetrieveACIFContent,
            ERetrieveACIFContentDone,
            EGetACFSize,
            EGetACFSizeDone,
            ERetrieveACFContent,
            ERetrieveACFContentDone,
            EGetAuthObjsInfo,
            EGetAuthObjsInfoDone,
            ERetrieveWimLabelAndPath,
            ERetrieveWimLabelAndPathDone
            };

        //Indicator for different phases
        TJavaUtilPhase                  iPhase;
        
        //Client status is stored here while operation
        //on the server side is done.
        TRequestStatus*                 iClientStatus;
        
        //Handle to connection with server. Owned.
        RWimCertMgmt*                   iConnectionHandle;

        // Pointer to Client Session. Owned. 
        RWimMgmt*                       iClientSession;

        //Informs the size of provisioning string. Not owned.
        TInt*                           iSize;
        
        //Descriptor to hold provisioning data. Not owned.
        TDes8*                          iData;

        //Buffer to hold Java provisioning data for server. Owned.
        HBufC8*                         iJavaProvBuf;
    
        //Pointer to iJavaProvBuf. Owned.
        TPtr8*                          iJavaProvBufPtr;
        
        //Flag to indicate errors during WIM -initialization.
        TInt                            iWimStartErr;
        
        TBuf8<KPathMaxLength>           iACFPath;
        
        RArray<TInt>*                   iAuthIdList; //owed
         
        //saves pointer to user's array
		RArray<TJavaPINParams>*         iClientsAuthObjsInfoList;//not owned
		                                
		//Array to hold authOjbectInfo data
        RArray<TJavaPINParams>*         iAuthObjsInfoList; //owed
        
        TDes8*                          iLabel;
        
        TDes8*                          iPath;
        
        //Buffer to hold Label. Owned.
        HBufC8*                         iLabelBuf;
    
        //Pointer to Label. Owned.
        TPtr8*                          iLabelBufPtr;
        
        //Buffer to hold path. Owned.
        HBufC8*                         iPathBuf;
    
        //Pointer to path. Owned.
        TPtr8*                          iPathBufPtr;
        
        
    };

	
#endif  // JAVAUTILS_H

// End of File