diff -r a5fecba4b1e4 -r 7464c1e21dae deviceupdatesui/cpqtsp/src/CWPBioControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deviceupdatesui/cpqtsp/src/CWPBioControl.cpp Fri Mar 19 04:28:07 2010 +0530 @@ -0,0 +1,312 @@ +/* +* Copyright (c) 2002 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: +* Bio control for Provisioning documents. +* +*/ + +// INCLUDE FILES +#include "CWPBioControl.h" +#include +#include +#include +#include +#include +#include "CWPEngine.h" +#include "CWPAdapter.h" +#include "MWPPhone.h" +#include "WPPhoneFactory.h" +#include "CWPPushMessage.h" +#include "ProvisioningUIDs.h" +#include "MWPContextManager.h" +#include "ProvisioningDebug.h" +#include "CWPNameValue.h" +#include +#include "ProvisioningInternalCRKeys.h" + +// CONSTANTS +/// Maximum length of PIN code +const TInt KMaxPinSize = 20; +/// Number of retries for PIN +// const TInt KPinRetries = 3; // Removed, because iMtmData1 data member of TMsvEntry in CWPMessage.cpp contains Max tries, default=3. +///NONE +_LIT(KNone,""); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Constructor. +// ----------------------------------------------------------------------------- +// +CWPBioControl::CWPBioControl(CMsvSession* aSession,TMsvId aId) + + { + } + +// ----------------------------------------------------------------------------- +// CWPBioControl::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CWPBioControl::ConstructL(CMsvSession* aSession,TMsvId aId) + { + FLOG( _L( "[ProvisioningBC] CWPBioControl::ConstructL:" ) ); + FeatureManager::InitializeLibL(); + iSession = aSession; + iId = aId; + iEngine = CWPEngine::NewL(); + RestoreMsgL(); + FLOG( _L( "[ProvisioningBC] CWPBioControl::ConstructL: done" ) ); + } + +// ----------------------------------------------------------------------------- +// CWPBioControl::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CWPBioControl* CWPBioControl::NewL(CMsvSession* aSession,TMsvId aId) + { + CWPBioControl* self = new( ELeave ) CWPBioControl(aSession,aId); + CleanupStack::PushL( self ); + self->ConstructL(aSession,aId); + CleanupStack::Pop(); + return self; + } +// ----------------------------------------------------------------------------- +// CWPBioControl::returnEngine +// Return CWPEngine pointer +// ----------------------------------------------------------------------------- +// +EXPORT_C CWPEngine* CWPBioControl::returnEngine() + { + return iEngine; + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +CWPBioControl::~CWPBioControl() + { + delete iEngine; + delete iMessage; + FeatureManager::UnInitializeLib(); + } +// ---------------------------------------------------------------------------- +// CWPBioControl ::RestoreMsgL +// ---------------------------------------------------------------------------- +// +void CWPBioControl::RestoreMsgL() + { + CMsvEntry* entry = iSession->GetEntryL(iId); + CleanupStack::PushL( entry ); + TMsvEntry tentry( entry->Entry() ); + iMessage = CWPPushMessage::NewL(); + CMsvStore* readStore = entry->ReadStoreL(); + CleanupStack::PushL( readStore ); + iMessage->RestoreL( *readStore ); + CleanupStack::PopAndDestroy(); // readStore + + TRAPD( result, iEngine->ImportDocumentL( iMessage->Body() ) ); + if( result == KErrCorrupt ) + { + //result = KErrMsgBioMessageNotValid; + } + FTRACE(RDebug::Print(_L("[ProvisioningBC] CWPBioControl::RestoreMsgL result (%d)"), result)); + User::LeaveIfError( result ); + + TBool preAuthenticated( iMessage->Authenticated() ); + // If the message was not authenticated, give a warning + AuthenticateL( *iMessage ); + if( !tentry.ReadOnly() && preAuthenticated != iMessage->Authenticated() ) + { + // If the entry can be written to, get its edit store and save + // authentication flag. Failing is not dangerous, as the only + // effect is that the user has to re-enter the PIN. + // FLOG( _L( "[ProvisioningBC] CWPBioControl::RestoreMsgL 4 " ) ); + TRAPD( ignoreError, SaveMessageL() ); + if ( ignoreError ) ignoreError = 0; // prevent compiler warning + } + + iEngine->PopulateL(); + if( iEngine->ItemCount() == 0 ) + { + FLOG( _L( "[ProvisioningBC] CWPBioControl::RestoreMsgL 7 " ) ); + } + + TPtrC8 orig8( iMessage->Originator() ); + HBufC* orig16 = HBufC::NewLC( orig8.Length() ); + orig16->Des().Copy( orig8 ); + FLOG( _L( "[ProvisioningBC] CWPBioControl::RestoreMsgL 8 " ) ); + if( iMessage->Authenticated() + && iEngine->ContextExistsL( *orig16 ) ) + { + TUint32 context( iEngine->ContextL( *orig16 ) ); + iEngine->SetCurrentContextL( context ); + } + else + { + iEngine->SetCurrentContextL( KWPMgrUidNoContext ); + } + + + CleanupStack::PopAndDestroy(2); + FLOG( _L( "[ProvisioningBC] CWPBioControl::RestoreMsgL done" ) ); + } + +// ---------------------------------------------------------------------------- +// CWPBioControl ::AuthenticateL +// ---------------------------------------------------------------------------- +// +void CWPBioControl::AuthenticateL( CWPPushMessage& aMessage ) + { + if( !aMessage.Authenticated() ) + { + MWPPhone* phone = NULL; + TBuf imsi; + TRAPD(err, phone = WPPhoneFactory::CreateL()); + if(err!=KErrNone) + { + imsi = KNone; + } + else + { + imsi = phone->SubscriberId(); + } + CWPBootstrap* bootstrap = CWPBootstrap::NewL( imsi ); + if(phone) + delete phone; + + CleanupStack::PushL( bootstrap ); + CWPBootstrap::TBootstrapResult result( bootstrap->BootstrapL(aMessage,*iEngine,KNullDesC ) ); + if( result == CWPBootstrap::EPinRequired ) + { + CMsvEntry* entry = iSession->GetEntryL(iId); + TInt count = (entry->Entry()).MtmData1(); + TInt ipin = 1234; + TBuf pin; + pin.AppendNum(ipin); + result = bootstrap->BootstrapL( aMessage, *iEngine, pin ); + CleanupStack::PopAndDestroy( bootstrap ); + } + } + if (aMessage.Authenticated() ) + { + //update Cenrep key + TBuf8<100> orig; + orig.Copy(aMessage.Originator()); + TRAPD(err, SetCenrepKeyL(orig)); + User::LeaveIfError(err); + + } + } +// ---------------------------------------------------------------------------- +// CWPBioControl ::SaveMessageL +// ---------------------------------------------------------------------------- +// +void CWPBioControl::SaveMessageL() + { + CMsvEntry* entry = iSession->GetEntryL(iId); + CleanupStack::PushL( entry ); + + CMsvStore* editStore = entry->EditStoreL(); + CleanupStack::PushL( editStore ); + iMessage->StoreL( *editStore ); + editStore->CommitL(); + CleanupStack::PopAndDestroy(2); // editStore, entry + } + +// ---------------------------------------------------------------------------- +// CWPBioControl ::CollectItemsL +// ---------------------------------------------------------------------------- +// +EXPORT_C RPointerArray* CWPBioControl::CollectItemsLC() const + { + RPointerArray* array = new(ELeave) RPointerArray; + CleanupStack::PushL( TCleanupItem( Cleanup, array ) ); + + TInt count( iEngine->ItemCount() ); + FLOG( _L( "[ProvisioningBC] CWPBioControl::RestoreMsgL 83 " ) ); + for( TInt index = 0; index < count; index++ ) + { + const TDesC& text = iEngine->SummaryText( index ); + const TDesC& title = iEngine->SummaryTitle( index ); + + CWPNameValue* pair = CWPNameValue::NewLC( title, text ); + User::LeaveIfError( array->Append( pair ) ); + CleanupStack::Pop( pair ); + } + array->Sort( TLinearOrder( CWPBioControl::Compare ) ); + return array; + } + +// ----------------------------------------------------------------------------- +// CWPBioControl::Cleanup +// ----------------------------------------------------------------------------- +// +void CWPBioControl::Cleanup( TAny* aAny ) + { + RPointerArray* array = reinterpret_cast*>( aAny ); + array->ResetAndDestroy(); + array->Close(); + delete array; + } + +// ----------------------------------------------------------------------------- +// CWPBioControl::Compare +// ----------------------------------------------------------------------------- +// +TInt CWPBioControl::Compare( const CWPNameValue& aItem1, + const CWPNameValue& aItem2 ) + { + return aItem1.Name().Compare( aItem2.Name() ); + } + +// ---------------------------------------------------------------------------- +// CWPBioControl ::SetCenrepKey +// ---------------------------------------------------------------------------- +// +void CWPBioControl::SetCenrepKeyL(const TDesC8& aValue) + { + + FLOG( _L( "[ProvisioningBC] CWPBioControl::SetCenrepKeyL" ) ); + + CRepository* rep= NULL; + TInt errorStatus = KErrNone; + + TRAPD( errVal, rep = CRepository::NewL( KCRUidOMAProvisioningLV )) + ; + + if (errVal == KErrNone) + { + errorStatus = rep->Set(KOMAProvOriginatorContent, aValue); + } + else + { + errorStatus = errVal; + } + + if (rep) + { + delete rep; + } + + if (errorStatus != KErrNone) + { + User::Leave(errorStatus); + } + + FLOG( _L( "[ProvisioningBC] CWPBioControl::SetCenrepKeyL done" ) ); + + } +// End of File