--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdatetools.cpp Mon May 03 12:38:03 2010 +0300
@@ -0,0 +1,252 @@
+/*
+* Copyright (c) 2007-2010 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: This module contains the implementation of IAUpdateTools functions
+*
+*/
+
+
+
+
+
+
+#include <s32mem.h>
+#include <iaupdateparameters.h>
+
+#include "iaupdatetools.h"
+#include "iaupdatedebug.h"
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::ExternalizeParametersL
+//
+// -----------------------------------------------------------------------------
+//
+void IAUpdateTools::ExternalizeParametersL( HBufC8*& aTarget,
+ const CIAUpdateParameters& aSource )
+ {
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::ExternalizeParametersL begin");
+ // Notice!
+ // If you make changes here. Also, remember to make corresponding
+ // changes to the InternalizeParametersL
+
+ // The size of the buffer will contain:
+ // - 1 TInt for UIDs,
+ // - 1 TBool for ShowProgress boolean
+ // - 1 TUint for importance
+ // - 1 TUint for type
+ // - 1 TBool for Refresh boolean
+
+ // - 3 TInt for descriptor lengths
+ // --> bytes for 5 + 3 = 8 TInt values are needed
+ // (sizeof( TInt ) * KNumberOfTInts)
+ // - 3 descriptor TDesC texts
+ const TInt KNumberOfTInts( 8 );
+
+ // Notice, that because descriptor texts that are included
+ // here are TDesC, their Size-information has to be used
+ // instead of Length.
+ HBufC8* tmp =
+ HBufC8::NewLC( sizeof( TInt ) * KNumberOfTInts
+ + aSource.SearchCriteria().Size()
+ + aSource.CommandLineExecutable().Size()
+ + aSource.CommandLineArguments().Size() );
+
+ // Create stream that uses the buffer created above.
+ // By using the stream, the values are easier to insert into the buffer.
+ TPtr8 ptr( tmp->Des() );
+ RDesWriteStream stream( ptr );
+ CleanupClosePushL( stream );
+
+ // These are integers for uids
+ IAUPDATE_TRACE_1("[IAUPDATE] uid: %x", aSource.Uid().iUid );
+ stream.WriteInt32L( aSource.Uid().iUid );
+
+ // These are length and data pairs for descriptors
+ IAUPDATE_TRACE_1("[IAUPDATE] search criteria: %S", &aSource.SearchCriteria() );
+ ExternalizeDesL( aSource.SearchCriteria(), stream );
+ IAUPDATE_TRACE_1("[IAUPDATE] command line executable: %S", &aSource.CommandLineExecutable() );
+ ExternalizeDesL( aSource.CommandLineExecutable(), stream );
+#ifdef _DEBUG
+ HBufC* temp = HBufC::NewL( aSource.CommandLineArguments().Length() );
+ temp->Des().Copy( aSource.CommandLineArguments()) ;
+ IAUPDATE_TRACE_1("[IAUPDATE] command line arguments: %S", temp );
+ delete temp;
+#endif //_DEBUG
+ ExternalizeDes8L( aSource.CommandLineArguments(), stream );
+
+ // Boolean for ShowProgress
+ stream.WriteInt32L( aSource.ShowProgress() );
+
+ // TUint for importance
+ stream.WriteInt32L( aSource.Importance() );
+
+ // TUint for type
+ stream.WriteInt32L( aSource.Type() );
+
+ // Boolean for Refresh
+ stream.WriteInt32L( aSource.Refresh() );
+
+ // Stream is not needed anymore
+ CleanupStack::PopAndDestroy( &stream );
+
+ // Remove tmp from the stack but do not delete it because it will be
+ // assigned to the aTarget below.
+ CleanupStack::Pop( tmp );
+
+ // Replace aTarget with new value
+ delete aTarget;
+ aTarget = tmp;
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::ExternalizeParametersL end");
+ }
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::InternalizeParametersL
+//
+// -----------------------------------------------------------------------------
+//
+void IAUpdateTools::InternalizeParametersL( CIAUpdateParameters& aTarget,
+ const TDesC8& aSource )
+ {
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::InternalizeParametersL begin");
+ // Notice!
+ // If you make changes here. Also, remember to make corresponding
+ // changes to the ExternalizeParametersL
+
+ // InternalizeDesL function will set values into this tmp descriptor.
+ HBufC* tmp( NULL );
+
+ // Create stream that uses the given buffer.
+ RDesReadStream stream( aSource );
+ CleanupClosePushL( stream );
+
+ aTarget.SetUid( TUid::Uid( stream.ReadInt32L() ) );
+ IAUPDATE_TRACE_1("[IAUPDATE] uid: %x", aTarget.Uid().iUid );
+
+ InternalizeDesL( tmp, stream );
+ CleanupStack::PushL( tmp );
+ aTarget.SetSearchCriteriaL( *tmp );
+ IAUPDATE_TRACE_1("[IAUPDATE] search criteria: %S", tmp );
+ CleanupStack::PopAndDestroy( tmp );
+ tmp = NULL;
+
+ InternalizeDesL( tmp, stream );
+ CleanupStack::PushL( tmp );
+ aTarget.SetCommandLineExecutableL( *tmp );
+ IAUPDATE_TRACE_1("[IAUPDATE] command line executable: %S", tmp );
+ CleanupStack::PopAndDestroy( tmp );
+ tmp = NULL;
+
+ HBufC8* tmp8( NULL );
+ InternalizeDes8L( tmp8, stream );
+ CleanupStack::PushL( tmp8 );
+ aTarget.SetCommandLineArgumentsL( *tmp8 );
+#ifdef _DEBUG
+ tmp = HBufC::NewL( tmp8->Length() );
+ tmp->Des().Copy( *tmp8 ) ;
+ IAUPDATE_TRACE_1("[IAUPDATE] command line arguments: %S", tmp );
+ delete tmp;
+ tmp = NULL;
+#endif //_DEBUG
+ CleanupStack::PopAndDestroy( tmp8 );
+ tmp8 = NULL;
+
+ aTarget.SetShowProgress( stream.ReadInt32L() );
+
+ // new parameters (in phase 2 IAD) do not always exist. Parameters may have written by old IAD in selfupdate case.
+ TRAPD( err, aTarget.SetImportance( stream.ReadInt32L() ) );
+ if ( err != KErrEof )
+ {
+ User::LeaveIfError( err );
+ aTarget.SetType( stream.ReadInt32L() );
+ aTarget.SetRefresh( stream.ReadInt32L() );
+ }
+
+ IAUPDATE_TRACE_1("[IAUPDATE] show progress: %d", aTarget.ShowProgress() );
+ CleanupStack::PopAndDestroy( &stream );
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateTools::InternalizeParametersL end");
+ }
+
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::ExternalizeDesL
+//
+// -----------------------------------------------------------------------------
+//
+void IAUpdateTools::ExternalizeDesL( const TDesC& aDes,
+ RWriteStream& aStream )
+ {
+ aStream.WriteInt32L( aDes.Length() );
+ aStream.WriteL( aDes );
+ }
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::InternalizeDesL
+//
+// -----------------------------------------------------------------------------
+//
+TInt IAUpdateTools::InternalizeDesL( HBufC*& aDes,
+ RReadStream& aStream )
+ {
+ TInt length = aStream.ReadInt32L();
+ if ( length > 0 )
+ {
+ HBufC* target = HBufC::NewLC( length );
+ TPtr ptr( target->Des() );
+ aStream.ReadL( ptr, length );
+ delete aDes;
+ aDes = target;
+ CleanupStack::Pop( target );
+ }
+ else
+ {
+ delete aDes;
+ aDes = KNullDesC().AllocL();
+ }
+ return length;
+ }
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::ExternalizeDes8L
+//
+// -----------------------------------------------------------------------------
+//
+void IAUpdateTools::ExternalizeDes8L( const TDesC8& aDes, RWriteStream& aStream )
+ {
+ aStream.WriteInt32L( aDes.Length() );
+ aStream.WriteL( aDes );
+ }
+
+// -----------------------------------------------------------------------------
+// IAUpdateTools::InternalizeDes8L
+//
+// -----------------------------------------------------------------------------
+//
+TInt IAUpdateTools::InternalizeDes8L( HBufC8*& aDes, RReadStream& aStream )
+ {
+ TInt length = aStream.ReadInt32L();
+ if ( length > 0 )
+ {
+ HBufC8* target = HBufC8::NewLC( length );
+ TPtr8 ptr( target->Des() );
+ aStream.ReadL( ptr, length );
+ delete aDes;
+ aDes = target;
+ CleanupStack::Pop( target );
+ }
+ else
+ {
+ delete aDes;
+ aDes = KNullDesC8().AllocL();
+ }
+ return length;
+ }