iaupdate/IAD/engine/controller/src/iaupdateplatformdependency.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 27 Apr 2010 16:46:15 +0300
branchRCL_3
changeset 15 98a43fae6e2b
parent 0 ba25891c3a9e
permissions -rw-r--r--
Revision: 201015 Kit: 201017

/*
* Copyright (c) 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:   ?Description
*
*/



// For the system version info
#include <versioninfo.h>

#include "iaupdateplatformdependency.h"
#include "iaupdateversion.h"
#include "iaupdateprotocolconsts.h"

#include "iaupdatedebug.h"


CIAUpdatePlatformDependency* CIAUpdatePlatformDependency::NewL()
    {
    CIAUpdatePlatformDependency* self =
        CIAUpdatePlatformDependency::NewLC();
    CleanupStack::Pop( self );
    return self;
    }
    
    
CIAUpdatePlatformDependency* CIAUpdatePlatformDependency::NewLC()
    {
    CIAUpdatePlatformDependency* self =
        new( ELeave ) CIAUpdatePlatformDependency();
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }


CIAUpdatePlatformDependency::CIAUpdatePlatformDependency()
: CBase()
    {
    Reset();
    }

void CIAUpdatePlatformDependency::ConstructL()
    {
    // Nothing to do here.
    }


CIAUpdatePlatformDependency::~CIAUpdatePlatformDependency()
    {
    delete iPlatform;
    }


TBool CIAUpdatePlatformDependency::AcceptablePlatformL() const
    {
    IAUPDATE_TRACE("[IAUPDATE] CIAUpdatePlatformDependency::AcceptablePlatformL() begin");
    
    // Get the platform version
    VersionInfo::TPlatformVersion platformVersion;
    User::LeaveIfError( VersionInfo::GetVersion( platformVersion ) );

    IAUPDATE_TRACE_2("Platform version major: %d, minor: %d",
                     platformVersion.iMajorVersion,
                     platformVersion.iMinorVersion);
    IAUPDATE_TRACE_2("Node version floor major: %d, minor: %d",
                     iVersionFloor.iMajor,
                     iVersionFloor.iMinor);
    IAUPDATE_TRACE_2("Node version roof major: %d, minor: %d",
                     iVersionRoof.iMajor,
                     iVersionRoof.iMinor);
                                          
    // Create TIAUpdateVersion for comparing purposes. 
    // Notice, that platform version does not have build value.
    TVersion tmpVersion( platformVersion.iMajorVersion, platformVersion.iMinorVersion, 0 );
    TIAUpdateVersion iaPlatformVersion( tmpVersion );

    // Create temporary version infos.
    // Notice, here we ignore build values, because platform version
    // does not support them. So, set build to extreame values.
    TIAUpdateVersion floor;
    floor.SetToFloor();
    floor.iMajor = iVersionFloor.iMajor;
    floor.iMinor = iVersionFloor.iMinor;
    TIAUpdateVersion roof;
    roof.SetToRoof();
    roof.iMajor = iVersionRoof.iMajor;
    roof.iMinor = iVersionRoof.iMinor;
    
    // Now compare the version ranges.
    TBool correctVersion(  
        floor <= iaPlatformVersion && iaPlatformVersion <= roof );
   
    // Check if the platform description and versions are acceptable.
    if ( ( !iPlatform 
           || iPlatform->CompareF( IAUpdateProtocolConsts::KPlatformDescriptionValue() ) == 0 )
         && correctVersion )
        {
        IAUPDATE_TRACE("[IAUPDATE] CIAUpdatePlatformDependency::AcceptablePlatformL() end: Acceptable");
        return ETrue;
        }
    else
        {
        IAUPDATE_TRACE("[IAUPDATE] CIAUpdatePlatformDependency::AcceptablePlatformL() end: Not Acceptable");
        return EFalse; 
        }
    }
    
    
void CIAUpdatePlatformDependency::SetPlatformL( const TDesC8& aPlatform )
    {
    HBufC8* tmp( aPlatform.AllocL() );
    delete iPlatform;
    iPlatform = tmp;
    }
    

const TIAUpdateVersion& CIAUpdatePlatformDependency::VersionFloor() const
    {
    return iVersionFloor;
    }
    
    
void CIAUpdatePlatformDependency::SetVersionFloor( const TVersion& aVersion )
    {
    iVersionFloor = aVersion;
    }
    
    
const TIAUpdateVersion& CIAUpdatePlatformDependency::VersionRoof() const
    {
    return iVersionRoof;
    }
    
    
void CIAUpdatePlatformDependency::SetVersionRoof( const TVersion& aVersion )
    {
    iVersionRoof = aVersion;    
    }
    
    
void CIAUpdatePlatformDependency::Reset()
    {
    iVersionFloor.SetToFloor();
    iVersionRoof.SetToRoof();

    delete iPlatform;
    iPlatform = NULL;    
    }