--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/ConnectionDialogs/cconndlg/src/sortsnaputils.cpp Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,229 @@
+/*
+* 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: Implementation of class TSortSnapUtils.
+*
+*/
+
+
+// INCLUDE FILES
+#include "sortsnaputils.h"
+#include "ConnectionDialogsLogger.h"
+
+// ================= MEMBER FUNCTIONS =======================
+//
+// ---------------------------------------------------------
+// TSortSnapUtils::TSortSnapUtils
+// ---------------------------------------------------------
+//
+TSortSnapUtils::TSortSnapUtils( RMPM& aMPM ):
+iSnapCount( 0 ),
+iSSUState( EUninitialised ),
+iMPM( aMPM )
+ {
+ CLOG_ENTERFN( "TSortSnapUtils::TSortSnapUtils" );
+ CLOG_LEAVEFN( "TSortSnapUtils::TSortSnapUtils" );
+ }
+
+
+// ---------------------------------------------------------
+// TSortSnapUtils::~TSortSnapUtils
+// ---------------------------------------------------------
+//
+TSortSnapUtils::~TSortSnapUtils()
+ {
+ CLOG_ENTERFN( "TSortSnapUtils::~TSortSnapUtils" );
+ CLOG_LEAVEFN( "TSortSnapUtils::~TSortSnapUtils" );
+ }
+
+// ---------------------------------------------------------
+// TSortSnapUtils::InitDestIdArray
+// ---------------------------------------------------------
+//
+void TSortSnapUtils::InitDestIdArray()
+ {
+ CLOG_ENTERFN( "TSortSnapUtils::InitDestIdArray" );
+ switch (iSSUState)
+ {
+ case EUseMPM:
+ {
+ // we already know that MPM is used
+ CLOG_WRITE( "using MPM, no need to re-read from P&S " );
+ break;
+ }
+ case EUninitialised:
+ case EUsePubSub:
+ default:
+ {
+ iSnapCount = 0;
+ TMpmSnapPubSubFormat snapData;
+ TPtr8 e( reinterpret_cast< TUint8* >( &snapData ),
+ sizeof( snapData ) );
+ for (TInt i = 0 ; i < KMPMSortSnapMaxKey; i++ )
+ {
+ TInt err = RProperty::Get( KMPMSortSnapCategory,
+ i,
+ e );
+ CLOG_WRITEF( _L( "RProperty::Get returned: %d" ), err );
+ CLOG_WRITEF( _L( "Snap Id: %d" ), snapData.iSnap );
+ CLOG_WRITEF( _L( "Snap Number: %d" ), iSnapCount );
+
+ if (err == KErrNone)
+ {
+ iSnapIdArray[iSnapCount] = snapData.iSnap;
+ iSnapCount++;
+ }
+ }
+ //determine what method to use:
+ // we always have at least one snap element
+ // in P&S
+ // if we are called from MPM
+ if (iSnapCount)
+ {
+ CLOG_WRITE( "iSSUState = EUsePubSub " );
+ iSSUState = EUsePubSub;
+ }
+ else
+ {
+ CLOG_WRITE( "iSSUState = EUseMPM " );
+ iSSUState = EUseMPM;
+ }
+ }
+ }
+ CLOG_LEAVEFN( "TSortSnapUtils::InitDestIdArray" );
+ }
+
+// ---------------------------------------------------------
+// TSortSnapUtils::GetDestIdArrayL
+// ---------------------------------------------------------
+//
+void TSortSnapUtils::GetDestIdArrayL( RCmManagerExt& aCmManagerExt, RArray<TUint32>& aDestArray )
+ {
+ CLOG_ENTERFN( "TSortSnapUtils::GetDestIdArrayL" );
+ aDestArray.Reset();
+ InitDestIdArray(); // re-read the values, set iSSUState
+ switch (iSSUState)
+ {
+ case EUsePubSub:
+ {
+ CLOG_WRITE( "Using P&S " );
+ // append from 1, do not append uncategorised destination!
+ for ( TInt i = 1 ; i < iSnapCount; i++ )
+ {
+ aDestArray.Append( iSnapIdArray[i] );
+ CLOG_WRITEF( _L( "Appending to array: Snap Id: %d" ), iSnapIdArray[i] );
+ }
+ break;
+ }
+ case EUseMPM:
+ {
+ CLOG_WRITE( "Using MPM " );
+ aCmManagerExt.AllDestinationsL( aDestArray );
+ break;
+ }
+ case EUninitialised:
+ default:
+ {
+ //should not ever happen, as we initialise at the beginning of the
+ // function
+ User::Leave( KErrNotReady );
+ }
+ }
+ CLOG_LEAVEFN( "TSortSnapUtils::GetDestIdArrayL" );
+ }
+
+// ---------------------------------------------------------
+// TSortSnapUtils::GetSortSnapDataL()
+// ---------------------------------------------------------
+//
+TInt TSortSnapUtils::GetSortSnapData( TUint32 aSnapId, TMpmSnapBuffer& aSnapBuffer )
+ {
+ CLOG_ENTERFN( "TSortSnapUtils::GetSortSnapDataL" );
+
+ if (iSSUState == EUninitialised)
+ {
+ InitDestIdArray();
+ }
+
+ switch (iSSUState)
+ {
+ case EUsePubSub:
+ {
+ CLOG_WRITE( "Using P&S " );
+ TMpmSnapPubSubFormat snapData;
+ TPtr8 e( reinterpret_cast< TUint8* >( &snapData ),
+ sizeof( snapData ) );
+ // initialize snap to invalid value
+ snapData.iSnap = (TUint32) KErrNotFound;
+ for ( TInt i = 0 ; i < iSnapCount; i++ )
+ {
+ if ( aSnapId == iSnapIdArray[i] )
+ {
+
+ TInt err = RProperty::Get( KMPMSortSnapCategory,
+ i,
+ e );
+ CLOG_WRITEF( _L( "RProperty::Get returned: %d" ), err );
+
+ if (err == KErrNone)
+ {
+ if ( aSnapId == snapData.iSnap )
+ {
+ aSnapBuffer = snapData.iSortedIaps;
+
+ CLOG_WRITEF( _L( "Found: Snap id: %d" ), snapData.iSnap );
+ CLOG_WRITEF( _L( "Iap count: %d" ), snapData.iSortedIaps.iCount );
+
+ CLOG_LEAVEFN( "TSortSnapUtils::GetSortSnapDataL" );
+ return KErrNone;
+ }
+ }
+ else
+ {
+ CLOG_LEAVEFN( "TSortSnapUtils::GetSortSnapDataL" );
+ return err;
+ }
+ }
+ }
+ break;
+ }
+ case EUseMPM:
+ {
+ CLOG_WRITE( "Using MPM " );
+ TInt errConnect = iMPM.Connect();
+ CLOG_WRITEF( _L( "errConnect = %d" ), errConnect );
+ if ( errConnect == KErrNone )
+ {
+ TInt err = iMPM.SortSNAP( aSnapId, aSnapBuffer );
+ iMPM.Close();
+ CLOG_LEAVEFN( "TSortSnapUtils::GetSortSnapDataL" );
+ return err;
+ }
+ else
+ {
+ CLOG_LEAVEFN( "TSortSnapUtils::GetSortSnapDataL" );
+ return errConnect;
+ }
+ }
+ case EUninitialised:
+ default:
+ {
+ //should not ever happen, as we initialise at the beginning of the
+ // function
+ CLOG_LEAVEFN( "TSortSnapUtils::GetSortSnapDataL" );
+ return KErrNotReady;
+ }
+ }
+ return KErrNone;
+ }
+