diff -r 000000000000 -r 164170e6151a wim/inc/WimCertConverter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/inc/WimCertConverter.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,444 @@ +/* +* Copyright (c) 2002 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: Interface which handles certificate related operations +* +*/ + + + +#ifndef WIMCERTCONVERTER_H +#define WIMCERTCONVERTER_H + + +//INCLUDES +#include "WimClsv.h" +#include +#include + +// FORWARD DECLARATIONS +class RWimCertMgmt; +class CWimCertInfo; +class CCTCertInfo; + +// CONSTANTS +typedef HBufC8* PHBufC8; +typedef TPtr8* PTPtr8; + + + +//CLASS DECLARATION +/** +* Interface which handles certificate related operations +* with WimServer. +* Caller can add a certificate, remove a certificate, +* list a certificate and get certificate details. +* +* @lib WimClient +* @since Series60 2.1 +*/ +class CWimCertConverter: public CActive + { + + public: + + /** + * Two-phased constructor. + * @param aToken -Reference to current token + */ + IMPORT_C static CWimCertConverter* NewL( MCTToken& aToken ); + + + /** + * Restores certificates from WIM cache. If Restore cannot find + * any certificate, it will return KErrNotFound to caller. + * @param aArray -Array where new certificates are + * inserted. Caller is responsible + * to deallocate CWimCertInfo -objects + * by calling ResetAndDestroy.(IN/OUT) + * @param aStatus -Status from caller. + * @return void + */ + IMPORT_C void Restore( RPointerArray& aArray, + TRequestStatus& aStatus ); + + + /** + * Cancels outgoing Restore operation. Sets an internal flag to true. + * After necessary cleanup, caller is signalled with KErrCancel + * -error code. + * @return void + */ + IMPORT_C void CancelRestore(); + + /** + * Retrieves the actual certificate. In case of other cert than + * Url cert the binary encoded certificate is written into the + * aEncodedCert parameter. In case of Url cert the data is + * the actual url. + * @param aIndex. Used to point iCertRefLst and iCertInfoArr + * -arrays for correct certificate. + * @param aEncodedCert. A buffer to put the certificate in. + * @param aStatus. A request status that is completed when the + * operation has finished.(IN/OUT) + * @return void + */ + IMPORT_C void RetrieveCertByIndexL( const TInt aIndex, + TDes8& aEncodedCert, + TRequestStatus& aStatus ); + + /** + * Cancels an ongoing Retrieve operation. + * If retrieve is cancelled, then operation is completed with + * KErrCancel -error code. + * @return void + */ + IMPORT_C void CancelRetrieve(); + + + /** + * Adds a certificate to the cert store. + * The caller of this function owns all its parameters. + * @since Series 60 2.6 + * @param aLabel -The label of the certificate to add + * @param aFormat -The format of the certificate. Supported formats are + EX509Certificate, EWTLSCertificate, + EX509CertificateUrl and EWTLSCertificateUrl + * @param aCertificateOwnerType -The owner type. Supported types are + ECACertificate and EUserCertificate. + * @param aSubjectKeyId -The Subject key ID + * @param aIssuerKeyId -The issuer key ID + * @param aCert -The certificate to add + * @param aStatus This is completed with the return result + * when the add has completed (IN/OUT) + * @return void + */ + IMPORT_C void AddCertificate( const TDesC& aLabel, + const TCertificateFormat aFormat, + const TCertificateOwnerType aCertificateOwnerType, + const TKeyIdentifier& aSubjectKeyId, + const TKeyIdentifier& aIssuerKeyId, + const TDesC8& aCert, + TRequestStatus& aStatus ); + + /** + * Cancels an ongoing add operation. + * @since Series 60 2.6 + * @return void + */ + IMPORT_C void CancelAddCertificate(); + + /** + * Removes a certificate from WIM. + * @since Series 60 2.6 + * @param aIndex -Used to point iCertInfoArr + * for the certificate to be removed. + * @param aStatus -Status from caller + * @return void + */ + IMPORT_C void RemoveL( const TInt aIndex, TRequestStatus& aStatus ); + + /** + * Cancels ongoing remove operation. + * @since Series 60 2.6 + * @return void + */ + IMPORT_C void CancelRemove(); + + /** + * Destructor + */ + IMPORT_C virtual ~CWimCertConverter(); + + private: + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * C++ default constructor. + * @param aToken -Reference to current token + */ + CWimCertConverter( MCTToken& aToken ); + + 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 activescheduler, is always KErrNone. + */ + TInt RunError( TInt aError ); + + private: + + /** + * Allocates memory for the array which is filled by server. + * @param aWimCertInfoArr -Array to be initialized + * @param aCount -Count of elements in the array + * @return void + */ + void AllocWimCertInfoL( TWimCertInfo* aWimCertInfoArr, TInt aCount ); + + /** + * Deallocates memory from the array. + * @return void + */ + void DeallocWimCertInfo(); + + /** + * Allocates memory for a struct which is filled by server. + * @return void + */ + void AllocMemoryForCertDetailsL(); + + /** + * Creates new certificate objects which can be returned to the caller. + * @return void + */ + void CreateNewCertObjectsL(); + + /** + * Creates new wim certificate objects. + * @return void + */ + void CreateNewWimCertObjectL(); + + /** + * Gets trusted usages. + * @return void + */ + void GetTrustedUsagesL(); + + /** + * Completion of trusted usages. + * @return void + */ + void TrustedUsagesDoneL(); + + /** + * Sets own iStatus to KRequestPending, and signals it + * with User::RequestComplete() -request. This gives chance + * to activescheduler to run other active objects. After a quick + * visit in activescheduler, signal returns to RunL() and starts next + * phase of operation. + * @return void + */ + void SignalOwnStatusAndComplete(); + + /** + * Allocates memory for member variables, which are needed when adding + * a certificate asynchronously to WIM. + * @param aLabel -certificate label (IN) + * @param aIssuerKeyId -Issuer KeyId of a certificate + * @param aSubjectKeyId -Subject KeyId of a certificate + * @param aCert -certificate data + * @return void + */ + void AllocMemoryForAddCertL( const TDesC& aLabel, + const TKeyIdentifier& aIssuerKeyId, + const TKeyIdentifier& aSubjectKeyId, + const TDesC8& aCert ); + + /** + * Copies data to caller's buffer by using pointer. + * @return void + */ + void CopyRetrievedCertData(); + + + /** + * DeAllocates memory from member variables, which are used + * when communicating with WIM. + * @return void + */ + void DeallocCertHBufs(); + + /** + * If user has cancelled initialization process, dealloc references + * from loaded certs. + * @return void + */ + void DeallocReferences(); + + /** + * Returns certificate format according to received index. + * @param aIndex -index of the certificate to be returned. + * @return TCertificateFormat -format of the certificate + */ + TCertificateFormat GetCertFormatByIndex( TInt aIndex ); + + private: + + /** + * Ten different phases, which are used to + * Read certificates from WIM cache, create new certificate objects, + * retrieve certificate, add certificate and remove certificate. + */ + enum TPhase + { + EListCertsFromWim, + ECreateNewCertObjects, + EGetTrustedUsages, + ECertObjectsDone, + ETrustedUsagesDone, + ERetrieveCertificate, + ERetrievingCompleted, + EAddCertificate, + EAddCertificateCompleted, + ERemove, + ERemoveCompleted + }; + + private: + + //Client status is stored here while operation + //on the server side is done. + TRequestStatus* iClientStatus; + + //Array which is used to contain new certificate objects. + //Not owned. Caller is responsible to destroy array. + RPointerArray* iArray; + + //Details of the certificate. Owned. + TWimCertDetails iWimCertDetails; + + //Struct which is used when adding a certificate + //to WIM. + TWimCertAddParameters iParam; + + //Struct which is used when removing a certificate for WIM. + TWimCertRemoveAddr iWimCertRemoveAddr; + + //Reference to current token. Needed in CCTCertInfo creation. + MCTToken& iToken; + + //Handle to connection with server. Owned. + RWimCertMgmt* iConnectionHandle; + + //Typedefs for the reference to certificate. Owned. + TCertificateAddressList iCertRefLst; + + // Certificate information structure. Owned. + TWimCertInfo* iCertInfoArr; + + //Used to handle different phases. + TPhase iPhase; + + //Index to point which certificate we want to be retrieved + TInt iCertRetrieveIndex; + + //Used to inform the size of the array, needed in array construction/ + //destruction. + TInt iArraySize; + + //The count of certificates + TUint8 iCertCount; + + //Pointer to HBufC8*. This is used as an array when listing every + //certificate from WIM to an array during startup. Owned. + PHBufC8* iLabel; + + //Pointer to HBufC8*. This is used as an array when listing every + //certificate from WIM to an array during startup. Owned. + PHBufC8* iKeyId; + + //Pointer to HBufC8*. This is used as an array when listing every + //certificate from WIM to an array during startup. Owned. + PHBufC8* iCAId; + + //Pointer to HBufC8*. This is used as an array when listing every + //certificate from WIM to an array during startup. Owned. + PHBufC8* iIssuerHash; + + //Pointer to iLabel. Also used as an array. Owned. + PTPtr8* iLabelPtr; + + //Pointer to iKeyId. Also used as an array. Owned. + PTPtr8* iKeyIdPtr; + + //Pointer to iCAId. Also used as an array. Owned. + PTPtr8* iCAIdPtr; + + //Pointer to iIssuerHash. Also used as an array. Owned. + PTPtr8* iIssuerHashPtr; + + //Modifiable 8-bit descriptor which points + //to caller's descriptor. We copy retrieved certificate + //data to this descriptor. Owned. + TDes8* iEncodedCert; + + //Buffer which is used to contain certificate data. Owned. + HBufC8* iCertHBufOne; + //Pointer to iCertHBufOne. Owned. + TPtr8* iCertHBufOnePtr; + + //Buffer which is used to contain certificate data. Owned. + HBufC8* iCertHBufTwo; + //Pointer to iCertHBufTwo. Owned. + TPtr8* iCertHBufTwoPtr; + + //Buffer which is used to contain certificate data. Owned. + HBufC8* iCertHBufThree; + //Pointer to iCertHBufThree. Owned. + TPtr8* iCertHBufThreePtr; + + //Buffer which is used to contain certificate data. Owned. + HBufC8* iCertHBufFour; + //Pointer to iCertHBufFour. Owned. + TPtr8* iCertHBufFourPtr; + //ActiveSchedulerWaiter for certificate extra information + //fetching. + CActiveSchedulerWait iActiveSchedulerWait; + //Pointer for trusted usage buffer + HBufC* iTrustedUsages; + //Pointer to trusted usage buffer pointer + TPtr* iTrustedUsagesPtr; + //Index pointing to certificate elements + TUint8 iIndex; + //Pointer to one certificate info, owned + CCTCertInfo* iCert; + //Pointer to one WIM specific certificate info, owned + CWimCertInfo* iCertInfo; + //An array of trusted usage oids + RArray* iOids; + //Package structure for certificate extra info + TCertExtrasInfo iCertExtrasInfo; + //Pointer for key identifier buffer + HBufC8* iKeyIdBuf; + //Used to point right keyId when retrieving extra data + TPtr8* iKeyIdPointer; + + }; + + +#endif //WIMCERTCONVERTER_H