networksecurity/ipsec/te_ipsec_selector_confilict/src/te_loadpolicy_bbd.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:33:58 +0100
branchRCL_3
changeset 22 8d540f55e491
parent 20 7e41d162e158
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201035 Kit: 201035

/*
* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Symbian Foundation License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
** @File :- te_loadpolicy_bbd.cpp Implements loading the policy 
*/


/**
 * @file ts_ipsec_polapi.cpp Implements main test code for IPsec
 */

#include "te_loadpolicy_bbd.h"
#include "te_ipsecconst.h"
#include "te_selectorconflict.h"
#include <ES_SOCK.H> 
#include "lib_pfkey.h"
#include "pfkey_ext.h"
#include "pfkey_send.h"
#include <commdbconnpref.h>


#if defined(SYMBIAN_CRYPTO)
#include <cryptostrength.h>
#else
#include <cryptalg.h>
#endif

_LIT8( KMyPolicy,  
"SECURITY_FILE_VERSION: 3\r\n[INFO]\r\n\
IpSec Policy LOADING\r\n\
[POLICY]\r\n\
sa trans_1 = {\r\n\
esp\r\n\
encrypt_alg 12\r\n\
src_specific\r\n\
}\r\n\
outbound remote 10.225.208.183 255.255.255.255 protocol 17 = { trans_1(10.225.208.183) }\r\n\
inbound local 10.225.208.102 255.255.255.255 protocol 17  = { trans_1(10.225.208.183) }\r\n\
inbound = {}\r\n\
outbound = {}\r\n" );


_LIT8( KMyPolicy1,  
"SECURITY_FILE_VERSION: 3\r\n[INFO]\r\n\
IpSec Policy LOADING\r\n\
[POLICY]\r\n\
sa trans_2 = {\r\n\
esp\r\n\
encrypt_alg 12\r\n\
src_specific\r\n\
}\r\n\
outbound remote 10.225.208.49 255.255.255.255 protocol 17 = { trans_2(10.225.208.49) }\r\n\
inbound local 10.225.208.155 255.255.255.255 protocol 17  = { trans_2(10.225.208.49) }\r\n" );

_LIT8( KMyPolicy2,  
"SECURITY_FILE_VERSION: 3\r\n[INFO]\r\n\
IpSec Policy LOADING\r\n\
[POLICY]\r\n\
sa trans_3 = {\r\n\
esp\r\n\
encrypt_alg 12\r\n\
src_specific\r\n\
}\r\n\
outbound remote 192.168.1.1 255.255.255.255 protocol 17 = { trans_3() }\r\n\
inbound local 192.168.1.2 255.255.255.255 protocol 17  = { trans_3() }\r\n\
inbound = {}\r\n\
outbound = {}\r\n" );


/**
Purpose: Constructor of CT_IPSecIKEV2TestWrapper class
@internalComponent
*/
CT_LoadPolicyBBD::CT_LoadPolicyBBD()
	{
	}

/**
Purpose: Destructor of CT_LoadPolicyBBD class
@internalComponent
*/
CT_LoadPolicyBBD::~CT_LoadPolicyBBD()
	{
	delete iObject;
	iObject = NULL;
	}

/**
Purpose: Command fuction of CT_LoadPolicyBBD class
@internalComponent
*/
CT_LoadPolicyBBD* CT_LoadPolicyBBD::NewL()
	{
	CT_LoadPolicyBBD*	ret = new (ELeave) CT_LoadPolicyBBD();
	CleanupStack::PushL(ret);
	ret->ConstructL();
	CleanupStack::Pop(ret);
	return ret;
	}
	
	
/**
Purpose: Command fuction for a wrapper class
@internalComponent
*/
void CT_LoadPolicyBBD::ConstructL()
	{
    TInt errfound;
    
	iObject = new (ELeave) TInt;
	errfound = iDrpPolicyServer.Connect();
	if( errfound != KErrNone )
	    {
	    ERR_PRINTF2(_L("failed to connect RIpsecPolicyServ with error: %d"), errfound);
	    SetBlockResult(EFail);
	    return;
	    }
	errfound=iBypsPolicyServer.Connect();
	if( errfound != KErrNone )
	    {
	    ERR_PRINTF2(_L("failed to connect RIpsecPolicyServ with error: %d"), errfound);
	    SetBlockResult(EFail); 
	    return;
	    }

	iMyZoneInfoSet.iSelectorZone.iScope = KScopeNetwork;
	iMyZoneInfoSet.iSelectorZone.iId = 8;
	iMyZoneInfoSet.iEndPointZone.iScope = KScopeNetwork;
	iMyZoneInfoSet.iEndPointZone.iId = 7;
	        
	}


/**
Purpose: Command fuction for a wrapper class
@internalComponent
*/
TBool CT_LoadPolicyBBD::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
	{
	TBool ret = ETrue;

	// Print out the parameters for debugging
	INFO_PRINTF2( _L("<font size=2 color=990000><b>aCommand = %S</b></font>"), &aCommand );
	INFO_PRINTF2( _L("aSection = %S"), &aSection );
	INFO_PRINTF2( _L("aAsyncErrorIndex = %D"), aAsyncErrorIndex );

	if(KNewCMD() == aCommand)
		{
		DoCmdNewL(aSection);
		}
	else if(KTestLoadBypassPolicy() == aCommand)
		{
	    DoLoadBypassModePolicy(aSection);
		}
	else if (KTestLoadDropModePolicy() == aCommand)
	    {
        DoLoadDropModePolicy(aSection);
	    }
	else if (KLoadNewBypassPolicy() == aCommand)
        {
        DoLoadNewBypassModePolicy(aSection);
        }
	else if (KUnloadDropPolicy() == aCommand)
        {
        DoUnloadDropPolicy(aSection);
        }
	else if (KUnloadBypassPolicy() == aCommand)
        {
        DoUnloadBypassPolicy(aSection);
        }
	else if (KUnloadNewBypassPolicy() == aCommand)
	    {
	    DoUnloadNewBypassPolicy(aSection);
	    }	
	else if (KCloseConnection() == aCommand)
	    {
	    DoCmdClose(aSection);
	    }
	else
		{
		ret = EFalse;
		}

	return ret;
	}


/**
Purpose: To create a new object of the CTEFTest type through the API.

Ini file options:
	iniData - The data from the ini file at the section provided.

@internalComponent
@param  aSection Current ini file command section
*/
void CT_LoadPolicyBBD::DoCmdNewL(const TDesC& aSection)
	{
	TInt objectValue = 0;
	TInt iapid =0;
	if (!GetIntFromConfig(aSection, KObjectValue(), objectValue))
		{
		ERR_PRINTF2(_L("<font color=FF0000>No parameter %S</font>"), &KObjectValue());
		SetBlockResult(EFail);
		}
	else
	    {
	    *iObject = objectValue;	    
	    
        if(!GetIntFromConfig(aSection, KIapid(), iapid))
            {
            ERR_PRINTF2(_L("<font color=FF0000>No parameter %S</font>"), &KObjectValue());
            SetBlockResult(EFail);
            }
        else
            {
            }
	    }
	}

/**
 * Bypass policy loading for ONB scripts
 */
void CT_LoadPolicyBBD::DoLoadBypassModePolicy(const TDesC& /*aSection*/) 
    {
    RSocketServ pSocketServ;
    /** Handle to SADB socket */
    RSADB pSADB;     
    TInt err;
        
    err = pSocketServ.Connect();
    if ( err != KErrNone)
         {
         ERR_PRINTF2(_L("DoLoadBypassModePolicy():- Failed to connect  RSocketServ with error: %d"), err);
         SetBlockResult(EFail);   
         }   
    err = pSADB.Open(pSocketServ);
    if ( err != KErrNone)
         {
         ERR_PRINTF2(_L("DoLoadBypassModePolicy():- Failed to open RSADB with error: %d"), err);
         SetBlockResult(EFail);  
         }                                   
        
    
    HBufC8 *policyData = HBufC8::NewLC( KMyPolicy().Length() + 256); // Allow size for IP spec.
    TPtr8 policyDataPtr(policyData->Des());
    policyDataPtr.Append(KMyPolicy);
    
    TRequestStatus status;
    iBypsPolicyServer.LoadPolicy( *policyData, iBypsPolicyHandle, status, iMyZoneInfoSet);
    User::WaitForRequest(status);
    
    err = status.Int();
    if( err == KErrNone)
        {
        iBypsPolicyServer.ActivatePolicy( iBypsPolicyHandle(), status );
        User::WaitForRequest(status);
        User::LeaveIfError(status.Int());   
        SetBlockResult(EPass);
        }
    else
        {
        SetError(status.Int());
        ERR_PRINTF2(_L("DoLoadNewBypassPolicy():- LoadPolicy failed with error: %d"), err);
        SetBlockResult(EFail);
        }
    CleanupStack::PopAndDestroy(policyData);
    pSADB.Close();
    pSocketServ.Close();    
    }

/*
*Execute the test for closing the connection.
*/
void CT_LoadPolicyBBD::DoLoadDropModePolicy(const TDesC& /*aSection*/)
    {       
    RSocketServ pSocketServ;
    /** Handle to SADB socket */
    RSADB pSADB;
    TInt err;
            
    err = pSocketServ.Connect();
    if ( err != KErrNone)
         {
         ERR_PRINTF2(_L("DoLoadDropModePolicy():- Failed to connect  RSocketServ with error: %d"), err);
         SetBlockResult(EFail);   
         }   
    err = pSADB.Open(pSocketServ);
    if ( err != KErrNone)
         {
         ERR_PRINTF2(_L("DoLoadDropModePolicy():- Failed to open RSADB with error: %d"), err);
         SetBlockResult(EFail);  
         }                                   
               
    HBufC8 *policyData = HBufC8::NewLC( KMyPolicy1().Length() + 256); // Allow size for IP spec.
    TPtr8 policyDataPtr(policyData->Des());
    policyDataPtr.Append(KMyPolicy1);
    /***
     * this code is to check the UMA setopt function
     * 
     */
    TInt sur = 0x2002E241;
    _LIT8(KFormatStr,"%D");
    TBuf8<50> sidbuf;
    sidbuf.Format(KFormatStr,sur);
    TLex8 lex(sidbuf);    
    TInt intval;
    err = lex.Val(intval);
    
    //storing the SID information to the policy server which
    //is used to identify the UMA policy in ipsec policy manager handler.
    TInt error=0 ;
    //pPolicyServer.SetOpt(KOptionNameSid, KOptionLevelDefault, sidbuf);
    //ERR_PRINTF2(_L("DoLoadDropModePolicy->LoadPolicy ERROR  in setOpt to the policy server %s"), sidBuffer);
    RDebug::Printf("\n see the value \n");
    if ( KErrNone != error )
    {
    ERR_PRINTF2(_L("DoLoadDropModePolicy->LoadPolicy ERROR  in setOpt to the policy server %d"), error);
    }
    
    TRequestStatus status;
    iDrpPolicyServer.LoadPolicy( *policyData, iDrpPolicyHandle, status, iMyZoneInfoSet);
    User::WaitForRequest(status);
    TInt err1 = status.Int();
    if(err1 == KErrNone)
        {
        iDrpPolicyServer.ActivatePolicy(iDrpPolicyHandle(), status );
        User::WaitForRequest(status);
        User::LeaveIfError(status.Int());   
        SetBlockResult(EPass);
        }
    else
        {
        SetError(status.Int());
        ERR_PRINTF2(_L("DoLoadDropModePolicy->LoadPolicy failed with error: %d"),err1);
        SetBlockResult(EFail);
        }
    CleanupStack::PopAndDestroy(policyData);    
    pSADB.Close();
    pSocketServ.Close();     
    }


void CT_LoadPolicyBBD::DoLoadNewBypassModePolicy(const TDesC& /*aSection*/)
    {       
    RSocketServ pSocketServ;
    /** Handle to SADB socket */
    RSADB pSADB;
    TInt err;
            
    err = pSocketServ.Connect();
    if ( err != KErrNone)
         {
         ERR_PRINTF2(_L("DoLoadNewBypassModePolicy():- Failed to connect  RSocketServ with error: %d"), err);
         SetBlockResult(EFail);  
         }   
    err = pSADB.Open(pSocketServ);
    if ( err != KErrNone)
         {
         ERR_PRINTF2(_L("DoLoadNewBypassModePolicy():- Failed to open RSADB with error: %d"), err);
         SetBlockResult(EFail);   
         }                                   
                    
    HBufC8 *policyData = HBufC8::NewLC( KMyPolicy2().Length() + 256); // Allow size for IP spec.
    TPtr8 policyDataPtr(policyData->Des());
    policyDataPtr.Append(KMyPolicy2);
    

    TRequestStatus status;
    iBypsPolicyServer.LoadPolicy( *policyData, iNewBypsPolicyHandle, status, iMyZoneInfoSet);
    User::WaitForRequest(status);
    
    err = status.Int();
    if( err == KErrNone)
        {
        iBypsPolicyServer.ActivatePolicy( iNewBypsPolicyHandle(), status );
        User::WaitForRequest(status);
        User::LeaveIfError(status.Int());   
        SetBlockResult(EPass);
        }
    else
        {
        SetError(status.Int());
        ERR_PRINTF2(_L("DoLoadNewBypassPolicy():- LoadPolicy failed with error: %d"), err);
        SetBlockResult(EFail);
        }
    CleanupStack::PopAndDestroy(policyData);
    pSADB.Close();
    pSocketServ.Close();     
    }


/*
*Execute the test to unload the policy.
*/
void CT_LoadPolicyBBD::DoUnloadDropPolicy(const TDesC& /*aSection*/)
    {      
    TRequestStatus status;
    iDrpPolicyServer.UnloadPolicy(iDrpPolicyHandle(),status);
    User::WaitForRequest(status);
    TInt err = status.Int();
    if( err != KErrNone)
        {
        SetError(err);
        ERR_PRINTF2(_L("DoUnloadDropPolicy():- UnloadPolicy failed with error: %d"), err);
        SetBlockResult(EFail);
        }
    }

/*
*Execute the test to unload the policy.
*/
void CT_LoadPolicyBBD::DoUnloadNewBypassPolicy(const TDesC& /*aSection*/)
    {      
    TRequestStatus status;    
    iBypsPolicyServer.UnloadPolicy(iNewBypsPolicyHandle(),status);
    User::WaitForRequest(status);
    TInt err = status.Int();
    if( err != KErrNone)
        {
        SetError(err);
        ERR_PRINTF2(_L("DoUnloadNewBypassPolicy():- UnloadPolicy failed with error: %d"), err);
        SetBlockResult(EFail);
        }
    }

/*
*Execute the test to unload the policy.
*/
void CT_LoadPolicyBBD::DoUnloadBypassPolicy(const TDesC& /*aSection*/)
    {      
    TRequestStatus status;    
    iBypsPolicyServer.UnloadPolicy(iBypsPolicyHandle(),status);
    User::WaitForRequest(status);
    TInt err = status.Int();
    if( err != KErrNone)
        {
        SetError(err);
        ERR_PRINTF2(_L("DoUnloadBypassPolicy():- UnloadPolicy failed with error: %d"), err);
        SetBlockResult(EFail);
        }
    }


/*
*Execute the test for closing the connection.
*/
void CT_LoadPolicyBBD::DoCmdClose(const TDesC& /*aSection*/)
    {      
    SetBlockResult(EPass);
    }