policymanagement/policyengine/policyengineserver/inc/TrustedSession.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:27:42 +0100
branchRCL_3
changeset 26 19bba8228ff0
parent 0 b497e44ab2fc
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2000 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: Implementation of policymanagement components
*
*/



#ifndef TRUSTED_SESSION_HEADER_
#define TRUSTED_SESSION_HEADER_

// INCLUDES

#include "ElementBase.h"


#include <PolicyEngineClientServer.h>
#include <e32base.h>
#include <ssl.h>
#include <e32cmn.h>

class CX509Certificate;
class CX500DistinguishedName;

// CONSTANTS

const TInt KSerialNoLength = 20;
const TInt KCertNameLength = 100;

// MACROS
// DATA TYPES
// FUNCTION PROTOTYPES
// FORWARD DECLARATIONS

class CPolicyStorage;
class CCertificateMaps;
class CElementBase;
class CSubjectInfo;

// CLASS DECLARATION


class CTrustedSession : public CBase
{
	public:
		/**
		* CTrustedSession Constructor for CTrustedSession class
        */
		CTrustedSession();

		/**
		* ~CTrustedSession Destructor for CTrustedSession class
        */
		~CTrustedSession();
	
		/**
		* NewL() Symbian specific two phase constructor
		* @return Pointer to created CTrustedSession object
        */
		static CTrustedSession * NewL();
	
		void ConstructL();
	
		void MakeSessionTrustL( const RMessage2& aMessage);
		TCertInfo& SessionCertificate();
		void AddSessionSIDL( TUid aSecirityUID);
		void RemoveSessionTrust();
	
		TBool CertificatedSession() const;
		const TDesC8& CASNForSessionL(); 
		const TDesC8& SIDForSession(); 
		
		TBool CertMatchL( const TDesC8& aTrustedSubject1, const TDesC8& aTrustedSubject2, TBool aUseEditedItems );
		TBool RoleMatchL( const TDesC8& aTrustedSubject, const TDesC8& aRole, TBool aUseEditedItems );
		
		const TDesC8& CommonNameForSubjectL( const TDesC8& aTrustedSubject, TBool aUseEditedItems ); 
		const TDesC8& FingerPrintForSubjectL( const TDesC8& aTrustedSubject, TBool aUseEditedItems ); 
 		
  		TBool IsCertificateMappingValidL( CElementBase * aElement);
  		void GetMappedTargetTrustedSubjectL( RPointerArray<HBufC8>& aTargetTrustedMappedSubjectArray, CElementBase * aElement, TBool aUseEditedItems );
  		HBufC8* GetTargetTrustedSubjectL( CElementBase * aElement, TBool aUseEditedItems );
  		CElementBase* CreateCertificateMappingL( const TDesC8& aAlias );
		 
		void ReplaceIllegalCharacters( TPtr8& aData );
 		
	private:
		TBool iSessionTrust;
		TCertInfo iSessionCertInfo;	
		TBuf8<40> iFingerPrint;
		TBuf8<40> iSessionSID;
		
		HBufC8* iCASN;
};

class CCertificateMaps : public CBase
{
	public:
		class CRolesInfo : public CBase
		{
			public:
				CRolesInfo();
				~CRolesInfo();
				static CRolesInfo* NewL( const TDesC8& aRole, TElementState aState);
			public:
				HBufC8 * iRole;
				TElementState iState;
		};
	
		typedef RPointerArray<CRolesInfo> RRoles;
		typedef RPointerArray<CSubjectInfo> RInfos;
		class CSubjectInfo : public CBase
		{
			public:
				CSubjectInfo();
				~CSubjectInfo();
				
				TBool Match( const TDesC8& aTrustedSubject, TBool aCheckMappedCertificates);
				TBool RoleMatchL( const TDesC8& aRole);
				TRole CertificateRoleL( TBool aUseEditedItems );

			public:
				HBufC8* iCASN;					//CA+SerialNumber+FP
				HBufC8* iMappedToCert;			//CA+SerialNumber+FP
				CSubjectInfo* iMappedToInfo;	//pointer to subject info
				HBufC8* iAlias;					//Alias for certificate
				HBufC8* iSubject;				//Issued to information
				HBufC8* iFingerPrint;			//fingerprint
				RRoles iRoles;					//list of roles which are valid for subject 
				TElementState iState;			//indicates corresponding rule element state
		};

	public:
		CCertificateMaps();
		~CCertificateMaps();
		static CCertificateMaps* NewL();

		void NewMappingsAvailable();
		TRole CertificateRoleL( const TCertInfo& aCertInfo, TBool aUseEditedItems);
 		static void CreateSubjectInfoL( CSubjectInfo * aInfo, const TDesC8& aCertificate);
 		static void CreateSubjectInfoL( CSubjectInfo * aInfo, const TCertInfo& aCertInfo);
 		static void CreateFingerPrint( TDes8& iFingerPrint, const TCertInfo& aCertInfo);
 		static HBufC8* CasnForCertInfoL( const TCertInfo& aInfo);
 		
 		static CX509Certificate* ParseCertificateL( const TDesC8& aCertificate);
		static TBool EvaluateElementValidity( const TBool aUseEditedElements, const TElementState aState);
		
	
	private:
		void BringUpToDateL();
		void LoadCertificateMapsL();
		void AddRolesToCertL( const TDesC8& aRole, const TDesC8& aSubject, TElementState aElementState);
		static void ParseSubjectInfoL( CSubjectInfo* aInfo, CX509Certificate* aCertificate);
		static HBufC8* ParseDNL( const CX500DistinguishedName * aDN, TBool aOnlyCommonName);
		
		CSubjectInfo* FindSubjectL( const TDesC8& aTrustedSubject, TBool aUseEditedItems);
		
		TBool IsAliasExistL( const TDesC8& aAlias);
	private:
		RPointerArray<CSubjectInfo> iCerts;
		CPolicyStorage* iPolicyStorage;
		TBool iMapsUpToDate;
		
		friend class CTrustedSession;
};

#endif