diff -r 000000000000 -r 164170e6151a pkiutilities/ocsp/test/engine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/ocsp/test/engine.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,217 @@ +// Copyright (c) 2005-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: +// Declase engine for testing OCSP module. Knows nothing about the details of the +// script syntax. Is point of contact between script-reading classes and the +// actual OCSP module itself. +// +// + +/** + @file + @internalTechnology +*/ + +#ifndef __TOCSP_ENGINE_H__ +#define __TOCSP_ENGINE_H__ + +#include +#include +#include +#include "tcertutils.h" +#include "ocsprequestandresponse.h" + +class CTOCSPLogger; + +class COCSPRequest; +class COCSPTransaction; +class COCSPValidator; +class MOCSPTransport; + +class CX509Certificate; +class CUnifiedCertStore; + +class TTransportLog + { +public: + TBuf8<4> iHttpMethod; + TInt iTransDurationMs; + }; + +class CTOCSPEngine : public CActive, private MTimerObserver + { +public: + static CTOCSPEngine* NewL(CTOCSPLogger& aLog); + ~CTOCSPEngine(); + + // COMMANDS TO ACCESS OCSP MODULE + + void StartL(TRequestStatus& aStatus); // Delete all old objects, create a new transaction object + void EndL(TRequestStatus& aStatus); // Clean up after tests run + void SetURIL(const TDesC8& aURI, TBool aUseAIA=ETrue); + + + void SetDefaultTransportL(); + void SetTestTransportL(const TDesC& aResponseFile, const TDesC* aRequestFile); + void SetOcspSupportTransportL(); + void SetTransportRetryCount(TUint aRetryCount); + void SetTransportTimeout(TInt aTimeout); + + void SetNonce(const TBool aNonce); + void AddCertL(const TDesC8& aSubject, const TDesC8& aIssuer); + + void SetValidationTimeL(const TTime& aWhen); + void AddDirectAuthorisationCert(const TDesC& aCert, const TDesC& aLabel, + TRequestStatus& aStatus); + void UseDirectAuthorisation(); + void UseCADelegateAuthorisation(); + void UseCADirectAuthorisation(); + void UseAllAuthorisationSchemes(); + void SetMaxStatusAgeL(TUint aMaxAge); + + void SetCancelTime(TInt aTime); + void Check(TRequestStatus& aStatus); + TBool TestSummaryL(OCSP::TResult aExpected); + TBool TestOutcomeL(TInt aCertIndex, const TOCSPOutcome& aExpected); + TBool TestTransportL(TInt aRetryCountNum, const TDesC& aExpectedHttpMethod, + TInt aExpectedRespTimeMin, TInt aExpectedRespTimeMax); + TBool TestTransportRetryL(TInt aRetryCount); + + void LogResponseL(const TDesC& aFilename); + void LogRequestL(const TDesC& aFilename); + + static TPtrC TranslateStatusL(OCSP::TStatus aStatus); + static TPtrC TranslateResultL(OCSP::TResult aResult); + + /** Set whether to print informational messages. */ + void SetVerbose(TBool aVerbose); + + void SetReponderCertCheck(); + void AddCertToStore(const TDesC& aCertFileName, const TDesC& aLabel, + TCertificateOwnerType aCertType, TRequestStatus& aStatus); + void SetFilterParameters(TInt aCountDropResp, TInt aNumDelayResp, + TInt countCorruptHTTPDataHeader, TInt countCorruptHTTPDataBodySizeLarge, TInt countCorruptHTTPDataBodySizeSmall, + TInt aCountCorruptOCSPData, + TInt aCountInternalErrorResp, TInt aCountTryLaterResp, + TInt aCountSigValidateFailure); + void SetCheckCertsWithAiaOnly(TBool aCheckCertsWithAiaOnly); + void SetUseAIA(TBool aUseAIA); + +private: + CTOCSPEngine(CTOCSPLogger& aLog); + void ConstructL(); + void Destroy(); + + void Reset(); + void PrepareAuthorisationL(); + void DefineAndSetFilterParametersL(); + void DeleteFilterParameters(); + void LogValidationL(const TOCSPOutcome& aOutcome) const; + void LogRequestCompleteL(); + void ReadTransportLogL(); + TBool ReadLineL(const TDesC8& aBuffer, TInt& aPos, TPtrC8& aLine) const; + void LogResponseDetailsL(void); + void InitDirectAuthL(); + void CleanUpDirectAuthL(TRequestStatus& aStatus); + void SetTransportL(MOCSPTransport* aTransport); + + // Implementation of CActive + void RunL(); + void DoCancel(); + TInt RunError(TInt aError); + + // Implementation of MTimerRun + void TimerRun(TInt aError); + + + HBufC8* ReadDataL(RFs& session, const TDesC& aFileName) const; + + void DoAddDirectAuthorisationCertL(const TDesC& aCert, const TDesC& aLabel, + TRequestStatus& aStatus); + void DoCheckL(TRequestStatus& aStatus); + +private: + enum TState + { + EInitCertStore, + EAddingCert, + ERemovingCerts, + EChecking, + }; + +private: + RFs iFs; + CUnifiedCertStore* iUnifiedCertStore; + TState iState; + TRequestStatus* iOriginalRequestStatus; + + CTOCSPLogger& iLog; + + // OCSP objects + COCSPParameters* iParams; + COCSPClient* iClient; + + // Have we added a direct authorisation scheme object? + TBool iUseDirectAuthorisation; + /** Set to use CA Delegate authorisation when the certificate is checked. */ + TBool iUseCADelegateAuthorisation; + /** + When this is set the response is checked to see if it signed + by the issuing CA. + */ + TBool iUseCADirectAuthorisation; + /** + Set when "ALLSCHEMES" command is parsed. This uses the + COCSPParameters::AddAllAuthorisationSchemesL() function. + */ + TBool iUseAllSchemes; + + // The cert objects - we own them + RPointerArray iSubjectCerts; + RPointerArray iIssuerCerts; + RPointerArray iSigningCerts; + + CCertUtils* iCertUtils; + + TBuf<100> iCert; + TBuf<100> iLabel; + + TBool iVerbose; + + // The filename to log requests to, or null + HBufC* iRequestLog; + + TUint32 iIap; + + MOCSPTransport* iTransport; + + // Http transport filter settings + TInt iNumDelayResp; + TInt iCountDropResp; + TInt iCountCorruptHTTPDataHeader; + TInt iCountCorruptHTTPDataBodySizeLarge; + TInt iCountCorruptHTTPDataBodySizeSmall; + TInt iCountCorruptOCSPData; + TInt iCountInternalErrorResp; + TInt iCountTryLaterResp; + TInt iCountSigValidateFailure; + + // Hold information read from the transport filter log + RArray iTransportLog; + + // If non-zero the time interval in milliseconds to cancel issued request + TInt iCancelTime; + CCallbackTimer* iTimer; + }; + +#endif