policymanagement/policyengine/policyengineserver/src/EMailEnforcement.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 21:00:49 +0200
changeset 2 5594fba90824
parent 0 b497e44ab2fc
permissions -rw-r--r--
Revision: 201001 Kit: 201003

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


// INCLUDE FILES

#include "EMailEnforcement.h"
#include "XACMLconstants.h"
#include "PolicyEngineServer.h"
#include "PolicyStorage.h"
#include "debug.h"

// EXTERNAL DATA STRUCTURES
// EXTERNAL FUNCTION PROTOTYPES
// CONSTANTS

_LIT( KEMailEnformentPanic, "EMail enforcement panic");

//Repository UIDs

const TUid TPOPEmailRepository = { 0x10001029 };
const TUid TSMTPEmailRepository = { 0x10001028 };
const TUid TIMAPEmailRepository = { 0x1000102A };

_LIT8( KEMailURI, "Email");

// MACROS
// LOCAL CONSTANTS AND MACROS
// MODULE DATA STRUCTURES
// LOCAL FUNCTION PROTOTYPES


// ==================== LOCAL FUNCTIONS ====================

// ================= MEMBER FUNCTIONS =======================

// -----------------------------------------------------------------------------
// CEmailEnforcement::CEmailEnforcement()
// -----------------------------------------------------------------------------
//

CEmailEnforcement::CEmailEnforcement()
{
}


// -----------------------------------------------------------------------------
// CEmailEnforcement::~CEmailEnforcement()
// -----------------------------------------------------------------------------
//

CEmailEnforcement::~CEmailEnforcement()
{
	RDEBUG("CEmailEnforcement::~CEmailEnforcement()");
	iEMailPOPEnforcement.Close();
	iEMailSMTPEnforcement.Close();
	iEMailIMAPEnforcement.Close();

	iCentRepServer.Close();
	iDMUtil.Close();
	
}


// -----------------------------------------------------------------------------
// CEmailEnforcement::NewL()
// -----------------------------------------------------------------------------
//
		
CEmailEnforcement* CEmailEnforcement::NewL( const TDesC8& aEnforcementId)
{
	if ( ValidEnforcementElement( aEnforcementId))
	{
		return new (ELeave) CEmailEnforcement();	
	}
	
	return 0;
}

// -----------------------------------------------------------------------------
// CEmailEnforcement::InitEnforcement()
// -----------------------------------------------------------------------------
//

TBool CEmailEnforcement::ValidEnforcementElement( const TDesC8& aEnforcementId)
{
	if ( aEnforcementId == PolicyLanguage::Constants::EMailEnforcementPolicy )
	{
		return ETrue;
	}
	
	return EFalse;
}

	
// -----------------------------------------------------------------------------
// CEmailEnforcement::InitEnforcement()
// -----------------------------------------------------------------------------
//

void CEmailEnforcement::InitEnforcementL( TRequestStatus& aRequestStatus)
{
	RDEBUG("CEmailEnforcement::InitEnforcementL");
	//in first phase open connections to centreptool
	if ( iInitState == 0)
	{
		User::LeaveIfError( iCentRepServer.Connect());
		User::LeaveIfError( iDMUtil.Connect());
	
		User::LeaveIfError( iEMailPOPEnforcement.Open( TPOPEmailRepository , iCentRepServer));
		User::LeaveIfError( iEMailSMTPEnforcement.Open( TSMTPEmailRepository , iCentRepServer));
		User::LeaveIfError( iEMailIMAPEnforcement.Open( TIMAPEmailRepository , iCentRepServer));
	}
	
	//init each session in own cycle....
	switch ( iInitState )
	{
		case 0:
			iEMailPOPEnforcement.InitSession( aRequestStatus);
		break;
		case 1:
			iEMailSMTPEnforcement.InitSession( aRequestStatus);	
		break;
		case 2:
			iEMailIMAPEnforcement.InitSession( aRequestStatus);
		break;
		default:
			User::Panic( KEMailEnformentPanic, KErrAbort);
		break;
	}
	
	iInitState++;
}

// -----------------------------------------------------------------------------
// CEmailEnforcement::InitReady()
// -----------------------------------------------------------------------------
//

TBool CEmailEnforcement::InitReady()
{
	return (iInitState > 2);
}


// -----------------------------------------------------------------------------
// CEmailEnforcement::DoEnforcementL()
// -----------------------------------------------------------------------------
//

void CEmailEnforcement::DoEnforcementL( TRequestStatus& aRequestStatus)
{
	RDEBUG("CEmailEnforcement::DoEnforcementL");
	if ( iAccessControlList->Count())
	{
		//if there any number subject which have exclusively right for setting, give access only for DM client
		User::LeaveIfError( iEMailPOPEnforcement.AddSIDWRForDefaults( KDMClientUiD));
		User::LeaveIfError( iEMailSMTPEnforcement.AddSIDWRForDefaults( KDMClientUiD));
		User::LeaveIfError( iEMailIMAPEnforcement.AddSIDWRForDefaults( KDMClientUiD));
		User::LeaveIfError( iEMailPOPEnforcement.RemoveBackupFlagForDefaults());
		User::LeaveIfError( iEMailSMTPEnforcement.RemoveBackupFlagForDefaults());
		User::LeaveIfError( iEMailIMAPEnforcement.RemoveBackupFlagForDefaults());
		
		//ACL...
		User::LeaveIfError( iDMUtil.SetMngSessionCertificate( SessionCertificate()));
		User::LeaveIfError( iDMUtil.AddACLForNode( KEMailURI, EForChildrens, EACLDelete));
		User::LeaveIfError( iDMUtil.AddACLForNode( KEMailURI, EForNode, EACLGet ) );
		User::LeaveIfError( iDMUtil.SetACLForNode( KEMailURI, EForNode, EACLAdd));
		        
		//centrep flag
		CPolicyStorage::PolicyStorage()->ActivateEnforcementFlagL( EEMailEnforcement);	
	}
	else
	{
		//Clear default settings
		User::LeaveIfError( iEMailPOPEnforcement.RestoreDefaults());
		User::LeaveIfError( iEMailSMTPEnforcement.RestoreDefaults());
		User::LeaveIfError( iEMailIMAPEnforcement.RestoreDefaults());
		User::LeaveIfError( iEMailPOPEnforcement.RestoreBackupFlagForDefaults());
		User::LeaveIfError( iEMailSMTPEnforcement.RestoreBackupFlagForDefaults());
		User::LeaveIfError( iEMailIMAPEnforcement.RestoreBackupFlagForDefaults());

		//ACL...
		User::LeaveIfError( iDMUtil.RemoveACL( KEMailURI, ETrue));
		
		//centrep flag
		CPolicyStorage::PolicyStorage()->DeactivateEnforcementFlagL( EEMailEnforcement);	
	}
	
	iEnforcementState++;
	TRequestStatus * status = &aRequestStatus;
	User::RequestComplete( status, KErrNone);
		

}

// -----------------------------------------------------------------------------
// CEmailEnforcement::EnforcementReady()
// -----------------------------------------------------------------------------
//
TBool CEmailEnforcement::EnforcementReady()
{
	return iEnforcementState > 0;
}
	
// -----------------------------------------------------------------------------
// CEmailEnforcement::FinishEnforcementL()
// -----------------------------------------------------------------------------
//
void CEmailEnforcement::FinishEnforcementL( TBool aFlushSettings)
{
	RDEBUG("CEmailEnforcement::FinishEnforcementL");
	//Close sessions
	if ( aFlushSettings)
	{
		iEMailPOPEnforcement.Flush();
	 	iEMailSMTPEnforcement.Flush();
		iEMailIMAPEnforcement.Flush();
		
		iDMUtil.Flush();
	}
	
	iEMailPOPEnforcement.Close();
	iEMailSMTPEnforcement.Close();
	iEMailIMAPEnforcement.Close();
	
	iDMUtil.Close();

	//Close centrep server...
	iCentRepServer.Close();
}
				
// -----------------------------------------------------------------------------
// CEmailEnforcement::AccessRightList()
// -----------------------------------------------------------------------------
//
void CEmailEnforcement::AccessRightList( RAccessControlList& aAccessControlList)
{
	iAccessControlList = &aAccessControlList;
}

// -----------------------------------------------------------------------------
// CEmailEnforcement::ResetEnforcementL()
// -----------------------------------------------------------------------------
//
void CEmailEnforcement::ResetEnforcementL()
{
	RDEBUG("CEmailEnforcement::ResetEnforcementL()");
	User::LeaveIfError( iCentRepServer.Connect());
	User::LeaveIfError( iDMUtil.Connect());
	
	User::LeaveIfError( iEMailPOPEnforcement.Open( TPOPEmailRepository , iCentRepServer));
	User::LeaveIfError( iEMailSMTPEnforcement.Open( TSMTPEmailRepository , iCentRepServer));
	User::LeaveIfError( iEMailIMAPEnforcement.Open( TIMAPEmailRepository , iCentRepServer));


	User::LeaveIfError( iEMailPOPEnforcement.RestoreDefaults());
	User::LeaveIfError( iEMailSMTPEnforcement.RestoreDefaults());
	User::LeaveIfError( iEMailIMAPEnforcement.RestoreDefaults());
	User::LeaveIfError( iEMailPOPEnforcement.RestoreBackupFlagForDefaults());
	User::LeaveIfError( iEMailSMTPEnforcement.RestoreBackupFlagForDefaults());
	User::LeaveIfError( iEMailIMAPEnforcement.RestoreBackupFlagForDefaults());

	//ACL...
	User::LeaveIfError( iDMUtil.RemoveACL( KEMailURI, ETrue));
		
	//centrep flag
	CPolicyStorage::PolicyStorage()->DeactivateEnforcementFlagL( EEMailEnforcement);
	
	iEMailPOPEnforcement.Close();
	iEMailSMTPEnforcement.Close();
	iEMailIMAPEnforcement.Close();
	
	iDMUtil.Close();
}