telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmmbmsmonitoredlist.cpp
--- a/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmmbmsmonitoredlist.cpp Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmmbmsmonitoredlist.cpp Thu May 06 15:10:38 2010 +0100
@@ -1,456 +1,456 @@
-// Copyright (c) 2006-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:
-//
-
-
-
-// INCLUDE FILES
-#include <etelpckt.h>
-#include <pcktlist.h>
-#include "mbmstypes.h"
-#include "cmmmbmsmonitoredlist.h"
-#include <ctsy/tflogger.h>
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-CMmMBMSMonitoredList::CMmMBMSMonitoredList()
- {
- }
-
-CMmMBMSMonitoredList* CMmMBMSMonitoredList::NewL(
- CMmPacketServiceTsy* aMmPacketService,
- TInt aMaxEntries )
- {
- CMmMBMSMonitoredList* monitoredList = new ( ELeave ) CMmMBMSMonitoredList();
-
- CleanupStack::PushL( monitoredList );
-
- monitoredList->ConstructL(aMmPacketService, aMaxEntries);
- CleanupStack::Pop();
-
- return monitoredList;
- }
-
-void CMmMBMSMonitoredList::ConstructL(CMmPacketServiceTsy* aMmPacketService, TInt aMaxEntries)
- {
- iMmPacketService = aMmPacketService;
- iServiceList = CPcktMbmsMonitoredServiceList::NewL();
- iServiceList->SetMaxNumberEntries(aMaxEntries);
- }
-
-CMmMBMSMonitoredList::~CMmMBMSMonitoredList()
- {
- if(iServiceList != NULL)
- {
- delete iServiceList;
- iServiceList = NULL;
- }
- if(iMbmsMonitoredListData.iListOfChanges != NULL)
- {
- delete iMbmsMonitoredListData.iListOfChanges;
- iMbmsMonitoredListData.iListOfChanges = NULL;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::SaveReqUpdValues
-// Save changes to temp list
-// ---------------------------------------------------------------------------
-//
-TInt CMmMBMSMonitoredList::SaveUpdateValuesToTempL(
- TDes8* aList,
- TMbmsAction aAction )
- {
- TInt ret( KErrNone );
-
- iMbmsMonitoredListData.iActionType = aAction;
- iMbmsMonitoredListData.iServiceList = iServiceList;
-
- if(iMbmsMonitoredListData.iListOfChanges == NULL)
- {
- iMbmsMonitoredListData.iListOfChanges = CPcktMbmsMonitoredServiceList::NewL();
- }
-
- if( aList == NULL )
- {
- while( iMbmsMonitoredListData.iListOfChanges->Enumerate() > 0 )
- {
- iMbmsMonitoredListData.iListOfChanges->DeleteEntryL(0);
- }
- }
- else
- {
- iMbmsMonitoredListData.iListOfChanges->RestoreL(*aList);
-
- if( ( EAddEntries == aAction ) || ( ERemoveEntries == aAction ))
- {
- RPacketService::TMbmsServiceAvailabilityV1 entry;
- TInt i = 0;
- while(i != iMbmsMonitoredListData.iListOfChanges->Enumerate() )
- {
- entry = iMbmsMonitoredListData.iListOfChanges->GetEntryL(i);
- // check if entry already exists in service list
- if( ( ( EntryExistL( entry ) ) && ( EAddEntries == aAction )) ||
- ( (!EntryExistL( entry ) ) && ( ERemoveEntries == aAction)))
- {
- iMbmsMonitoredListData.iListOfChanges->DeleteEntryL(i);
- }
- else
- {
- i++;
- }
- }
- if( 0 == iMbmsMonitoredListData.iListOfChanges->Enumerate())
- {
- ret = KErrAlreadyExists;
- ResetTempListL();
- }
- }
- }
-
- return ret;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::PackData()
-// Pack data to send to the LTSY
-// ---------------------------------------------------------------------------
-//
-TInt CMmMBMSMonitoredList::PackDataL()
- {
-
- TInt ret( KErrNone );
-
- CMmDataPackage dataPackage;
- switch( iMbmsMonitoredListData.iActionType )
- {
- case ERemoveAllEntries:
- // pack data (old list + action)
- ResetTempListL();
- //No break since we stll need to pack
- case EAddEntries:
- case ERemoveEntries:
- // Pack data (old list + change list + action)
- dataPackage.PackData( &iMbmsMonitoredListData );
- ret = iMmPacketService->MessageManager()->HandleRequestL(EPacketUpdateMbmsMonitorServiceList, &dataPackage);
- break;
- default:
- ret = KErrNotSupported;
- break;
- }
- if( KErrNone != ret )
- {
- ResetTempListL();
- }
-
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::ProcessEntriesL
-// Packet Data specific functionality of CMmPacketContextTsy::ExtFunc
-// ---------------------------------------------------------------------------
-//
-TInt CMmMBMSMonitoredList::ProcessEntriesL(
- const CPcktMbmsMonitoredServiceList *aList,
- TMbmsAction aAction )
- {
- TInt ret( KErrNone );
-
- switch( aAction )
- {
- case EAddEntries:
- ret = AddTempEntriesToCacheL( aList );
- break;
- case ERemoveEntries:
- DeleteEntriesL( aList );
- break;
- case ERemoveAllEntries:
- ClearListL( iServiceList );
- break;
- default:
- ret = KErrNotSupported;
- break;
- }
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::AddEntries
-// Add new entry/entries into monitored service list
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmMBMSMonitoredList::AddEntriesL( const CPcktMbmsMonitoredServiceList *aList )
- {
- // verify we dont cause overflow
- if(iServiceList->Enumerate() + aList->Enumerate() >= iServiceList->MaxNumberEntries() )
- {
- return KErrOverflow;
- }
- TInt size = aList->Enumerate();
- for( TInt i = 0; i < size; ++i)
- {
- if( EntryExistL( aList->GetEntryL(i) ) )
- {
- return KErrAlreadyExists;
- }
- }
- for( TInt i = 0; i < size; ++i)
- {
- iServiceList->AddEntryL( aList->GetEntryL(i) );
- }
- return KErrNone;
- }
-
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::DeleteEntriesL
-// Remove entry/entries from monitored service list
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmMBMSMonitoredList::DeleteEntriesL( const CPcktMbmsMonitoredServiceList *aList )
- {
-
- if( iMbmsMonitoredListData.iListOfChanges == NULL )
- {
- return ;
- }
- // those entries should not be removed
- if( aList )
- {
- // check if entries could not be added
- if( aList->Enumerate() > 0 )
- {
-
- //iterate through failed entries vs. iMbmsMonitoredListData.iListOfChanges
- for( TInt i = 0; i < iMbmsMonitoredListData.iListOfChanges->Enumerate(); i++ )
- {
- for(TInt j = 0; j < aList->Enumerate(); j++ )
- {
- //if entry could not be removed -> remove it from temp list
- //if no match found. leave it into temp list
- if( iMbmsMonitoredListData.iListOfChanges->GetEntryL(i).iTmgi.GetServiceId() == aList->GetEntryL(j).iTmgi.GetServiceId() )
- {
- iMbmsMonitoredListData.iListOfChanges->DeleteEntryL(i);
- j= aList->Enumerate();
- i--;
- }
- }
- }
- }
- }
-
- // temp list is up-to-date
- // remove entries in temp list from the main list
- for( TInt i = 0; i < iMbmsMonitoredListData.iListOfChanges->Enumerate(); i++ )
- {
- //iterate through temo list vs. main list
- for( TInt ii = 0; ii < iServiceList->Enumerate(); )
- {
- //if entry could not be removed -> remove it from services list
- //if no match found. leave it into temp list
- if( iMbmsMonitoredListData.iListOfChanges->GetEntryL(i).iTmgi.GetServiceId() ==
- iServiceList->GetEntryL(ii).iTmgi.GetServiceId())
- {
- iServiceList->DeleteEntryL(ii);
- }
- else
- {
- ++ii;
- }
- }
-
- }
- }
-
-
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::ClearListL
-// Clear given service list
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmMBMSMonitoredList::ClearListL( CPcktMbmsMonitoredServiceList *aList )
- {
-
- while(aList->Enumerate() > 0 )
- {
- aList->DeleteEntryL(0);
- }
- }
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::EntryExistL
-// Clear given service list
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TBool CMmMBMSMonitoredList::EntryExistL( const RPacketService::TMbmsServiceAvailabilityV1 &aEntry )
- {
-
- for( TInt i = 0; i < iServiceList->Enumerate(); i++ )
- {
- if( aEntry.iTmgi.GetServiceId() == iServiceList->GetEntryL(i).iTmgi.GetServiceId() )
- {
- return ETrue;
- }
- }
- return EFalse;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::NumberOfMonitoredList
-// This function returns the number of monitored service list.
-// ---------------------------------------------------------------------------
-//
-TInt CMmMBMSMonitoredList::NumberOfMonitoredList()
- {
- return iServiceList->Enumerate();
- }
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::SetServicesAvailabilityL
-// This function sets the availability status of the service list.
-// ---------------------------------------------------------------------------
-//
-void CMmMBMSMonitoredList::SetServicesAvailabilityL(CPcktMbmsMonitoredServiceList *aAvailableList)
- {
- if ( aAvailableList )
- {
-#ifndef USING_CTSY_DISPATCHER
- //if the available list is empty (i.e. no services) then all entries in
- //the service list should be marked unavailable
- //the header says aAvailableList is "a list of services that should be set to available (the rest will be unavailable)"
- //this check prevents the the services being marked unavilable in the case the list is empty
- if (aAvailableList->Enumerate() > 0)
-#endif //USING_CTSY_DISPATCHER
- {
- RPacketService::TMbmsServiceAvailabilityV1 updEntry;
- RPacketService::TMbmsServiceAvailabilityV1 origEntry;
-
- //Set available status to EMbmsUnavailable
- for( TInt index1 = 0; index1 < iServiceList->Enumerate(); index1++ )
- {
- origEntry = iServiceList->GetEntryL(index1);
- origEntry.iMbmsAvailabilityStatus = EMbmsUnavailable;
- iServiceList->ChangeEntryL(index1, origEntry);
- }
-
- // check throught the updated monitor list
- for( TInt index2 = 0; index2 < aAvailableList->Enumerate(); index2++ )
- {
- updEntry = aAvailableList->GetEntryL(index2);
-
- // Seach same entry to original list
- for( TInt index3 = 0; index3 < iServiceList->Enumerate(); index3++ )
- {
- origEntry = iServiceList->GetEntryL(index3);
-
- if (origEntry.iTmgi.GetServiceId() == updEntry.iTmgi.GetServiceId())
- {
- // availability status is EMbmsAvailable
- origEntry.iMbmsAvailabilityStatus = EMbmsAvailable;
- iServiceList->ChangeEntryL(index3, origEntry);
- }
- }
- }
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::AddTempEntriesToCache
-// This function add the succesfully added monitor entries to main monitor service
-// list
-// ---------------------------------------------------------------------------
-//
-TInt CMmMBMSMonitoredList::AddTempEntriesToCacheL(const CPcktMbmsMonitoredServiceList* aFailedMonitorEntries)
- {
-
- if(iMbmsMonitoredListData.iListOfChanges == NULL)
- {
- return KErrNone;
- }
- // some entries could not be removed->update temp list for
- if( aFailedMonitorEntries )
- {
- //iterate through failed entries vs. iMbmsMonitoredListData.iListOfChanges
- for(TInt j = 0; j < aFailedMonitorEntries->Enumerate(); j++ )
- {
- for( TInt i = 0; i < iMbmsMonitoredListData.iListOfChanges->Enumerate(); i++ )
- {
- //if entry could not be removed -> remove it from temp list
- //if no match found. leave it into temp list
- if( iMbmsMonitoredListData.iListOfChanges->GetEntryL(i).iTmgi.GetServiceId() ==
- aFailedMonitorEntries->GetEntryL(j).iTmgi.GetServiceId() )
- {
- //delete failed entry fom temp list before append them to main list
- iMbmsMonitoredListData.iListOfChanges->DeleteEntryL(i);
- i = iMbmsMonitoredListData.iListOfChanges->Enumerate();
- }
- }
- }
- }
-
- if( iMbmsMonitoredListData.iListOfChanges->Enumerate() + iServiceList->Enumerate() >=
- iServiceList->MaxNumberEntries() )
- {
- return KErrOverflow;
- }
- // temp list is up-to-date
- // temporary saved entries can be added to the main list
- for(TInt i=0;i < iMbmsMonitoredListData.iListOfChanges->Enumerate(); i++)
- {
- iServiceList->AddEntryL(iMbmsMonitoredListData.iListOfChanges->GetEntryL(i));
- }
- ResetTempListL();
- return KErrNone;
- }
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::ResetTempListL
-// This function clears the temporary monitors service list e.g. in case of timeout
-//
-// ---------------------------------------------------------------------------
-//
-void CMmMBMSMonitoredList::ResetTempListL()
- {
- if(iMbmsMonitoredListData.iListOfChanges != NULL)
- {
- ClearListL(iMbmsMonitoredListData.iListOfChanges);
- delete iMbmsMonitoredListData.iListOfChanges;
- iMbmsMonitoredListData.iListOfChanges = NULL;
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CMmMBMSMonitoredList::ServiceList
-// This function return a pointer to the service list
-//
-// ---------------------------------------------------------------------------
-//
-CPcktMbmsMonitoredServiceList* CMmMBMSMonitoredList::ServiceList()
- {
- return iServiceList;
- }
-
-// End of File
-
+// Copyright (c) 2006-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:
+//
+
+
+
+// INCLUDE FILES
+#include <etelpckt.h>
+#include <pcktlist.h>
+#include "mbmstypes.h"
+#include "cmmmbmsmonitoredlist.h"
+#include <ctsy/tflogger.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CMmMBMSMonitoredList::CMmMBMSMonitoredList()
+ {
+ }
+
+CMmMBMSMonitoredList* CMmMBMSMonitoredList::NewL(
+ CMmPacketServiceTsy* aMmPacketService,
+ TInt aMaxEntries )
+ {
+ CMmMBMSMonitoredList* monitoredList = new ( ELeave ) CMmMBMSMonitoredList();
+
+ CleanupStack::PushL( monitoredList );
+
+ monitoredList->ConstructL(aMmPacketService, aMaxEntries);
+ CleanupStack::Pop();
+
+ return monitoredList;
+ }
+
+void CMmMBMSMonitoredList::ConstructL(CMmPacketServiceTsy* aMmPacketService, TInt aMaxEntries)
+ {
+ iMmPacketService = aMmPacketService;
+ iServiceList = CPcktMbmsMonitoredServiceList::NewL();
+ iServiceList->SetMaxNumberEntries(aMaxEntries);
+ }
+
+CMmMBMSMonitoredList::~CMmMBMSMonitoredList()
+ {
+ if(iServiceList != NULL)
+ {
+ delete iServiceList;
+ iServiceList = NULL;
+ }
+ if(iMbmsMonitoredListData.iListOfChanges != NULL)
+ {
+ delete iMbmsMonitoredListData.iListOfChanges;
+ iMbmsMonitoredListData.iListOfChanges = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::SaveReqUpdValues
+// Save changes to temp list
+// ---------------------------------------------------------------------------
+//
+TInt CMmMBMSMonitoredList::SaveUpdateValuesToTempL(
+ TDes8* aList,
+ TMbmsAction aAction )
+ {
+ TInt ret( KErrNone );
+
+ iMbmsMonitoredListData.iActionType = aAction;
+ iMbmsMonitoredListData.iServiceList = iServiceList;
+
+ if(iMbmsMonitoredListData.iListOfChanges == NULL)
+ {
+ iMbmsMonitoredListData.iListOfChanges = CPcktMbmsMonitoredServiceList::NewL();
+ }
+
+ if( aList == NULL )
+ {
+ while( iMbmsMonitoredListData.iListOfChanges->Enumerate() > 0 )
+ {
+ iMbmsMonitoredListData.iListOfChanges->DeleteEntryL(0);
+ }
+ }
+ else
+ {
+ iMbmsMonitoredListData.iListOfChanges->RestoreL(*aList);
+
+ if( ( EAddEntries == aAction ) || ( ERemoveEntries == aAction ))
+ {
+ RPacketService::TMbmsServiceAvailabilityV1 entry;
+ TInt i = 0;
+ while(i != iMbmsMonitoredListData.iListOfChanges->Enumerate() )
+ {
+ entry = iMbmsMonitoredListData.iListOfChanges->GetEntryL(i);
+ // check if entry already exists in service list
+ if( ( ( EntryExistL( entry ) ) && ( EAddEntries == aAction )) ||
+ ( (!EntryExistL( entry ) ) && ( ERemoveEntries == aAction)))
+ {
+ iMbmsMonitoredListData.iListOfChanges->DeleteEntryL(i);
+ }
+ else
+ {
+ i++;
+ }
+ }
+ if( 0 == iMbmsMonitoredListData.iListOfChanges->Enumerate())
+ {
+ ret = KErrAlreadyExists;
+ ResetTempListL();
+ }
+ }
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::PackData()
+// Pack data to send to the LTSY
+// ---------------------------------------------------------------------------
+//
+TInt CMmMBMSMonitoredList::PackDataL()
+ {
+
+ TInt ret( KErrNone );
+
+ CMmDataPackage dataPackage;
+ switch( iMbmsMonitoredListData.iActionType )
+ {
+ case ERemoveAllEntries:
+ // pack data (old list + action)
+ ResetTempListL();
+ //No break since we stll need to pack
+ case EAddEntries:
+ case ERemoveEntries:
+ // Pack data (old list + change list + action)
+ dataPackage.PackData( &iMbmsMonitoredListData );
+ ret = iMmPacketService->MessageManager()->HandleRequestL(EPacketUpdateMbmsMonitorServiceList, &dataPackage);
+ break;
+ default:
+ ret = KErrNotSupported;
+ break;
+ }
+ if( KErrNone != ret )
+ {
+ ResetTempListL();
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::ProcessEntriesL
+// Packet Data specific functionality of CMmPacketContextTsy::ExtFunc
+// ---------------------------------------------------------------------------
+//
+TInt CMmMBMSMonitoredList::ProcessEntriesL(
+ const CPcktMbmsMonitoredServiceList *aList,
+ TMbmsAction aAction )
+ {
+ TInt ret( KErrNone );
+
+ switch( aAction )
+ {
+ case EAddEntries:
+ ret = AddTempEntriesToCacheL( aList );
+ break;
+ case ERemoveEntries:
+ DeleteEntriesL( aList );
+ break;
+ case ERemoveAllEntries:
+ ClearListL( iServiceList );
+ break;
+ default:
+ ret = KErrNotSupported;
+ break;
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::AddEntries
+// Add new entry/entries into monitored service list
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmMBMSMonitoredList::AddEntriesL( const CPcktMbmsMonitoredServiceList *aList )
+ {
+ // verify we dont cause overflow
+ if(iServiceList->Enumerate() + aList->Enumerate() >= iServiceList->MaxNumberEntries() )
+ {
+ return KErrOverflow;
+ }
+ TInt size = aList->Enumerate();
+ for( TInt i = 0; i < size; ++i)
+ {
+ if( EntryExistL( aList->GetEntryL(i) ) )
+ {
+ return KErrAlreadyExists;
+ }
+ }
+ for( TInt i = 0; i < size; ++i)
+ {
+ iServiceList->AddEntryL( aList->GetEntryL(i) );
+ }
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::DeleteEntriesL
+// Remove entry/entries from monitored service list
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmMBMSMonitoredList::DeleteEntriesL( const CPcktMbmsMonitoredServiceList *aList )
+ {
+
+ if( iMbmsMonitoredListData.iListOfChanges == NULL )
+ {
+ return ;
+ }
+ // those entries should not be removed
+ if( aList )
+ {
+ // check if entries could not be added
+ if( aList->Enumerate() > 0 )
+ {
+
+ //iterate through failed entries vs. iMbmsMonitoredListData.iListOfChanges
+ for( TInt i = 0; i < iMbmsMonitoredListData.iListOfChanges->Enumerate(); i++ )
+ {
+ for(TInt j = 0; j < aList->Enumerate(); j++ )
+ {
+ //if entry could not be removed -> remove it from temp list
+ //if no match found. leave it into temp list
+ if( iMbmsMonitoredListData.iListOfChanges->GetEntryL(i).iTmgi.GetServiceId() == aList->GetEntryL(j).iTmgi.GetServiceId() )
+ {
+ iMbmsMonitoredListData.iListOfChanges->DeleteEntryL(i);
+ j= aList->Enumerate();
+ i--;
+ }
+ }
+ }
+ }
+ }
+
+ // temp list is up-to-date
+ // remove entries in temp list from the main list
+ for( TInt i = 0; i < iMbmsMonitoredListData.iListOfChanges->Enumerate(); i++ )
+ {
+ //iterate through temo list vs. main list
+ for( TInt ii = 0; ii < iServiceList->Enumerate(); )
+ {
+ //if entry could not be removed -> remove it from services list
+ //if no match found. leave it into temp list
+ if( iMbmsMonitoredListData.iListOfChanges->GetEntryL(i).iTmgi.GetServiceId() ==
+ iServiceList->GetEntryL(ii).iTmgi.GetServiceId())
+ {
+ iServiceList->DeleteEntryL(ii);
+ }
+ else
+ {
+ ++ii;
+ }
+ }
+
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::ClearListL
+// Clear given service list
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmMBMSMonitoredList::ClearListL( CPcktMbmsMonitoredServiceList *aList )
+ {
+
+ while(aList->Enumerate() > 0 )
+ {
+ aList->DeleteEntryL(0);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::EntryExistL
+// Clear given service list
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CMmMBMSMonitoredList::EntryExistL( const RPacketService::TMbmsServiceAvailabilityV1 &aEntry )
+ {
+
+ for( TInt i = 0; i < iServiceList->Enumerate(); i++ )
+ {
+ if( aEntry.iTmgi.GetServiceId() == iServiceList->GetEntryL(i).iTmgi.GetServiceId() )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::NumberOfMonitoredList
+// This function returns the number of monitored service list.
+// ---------------------------------------------------------------------------
+//
+TInt CMmMBMSMonitoredList::NumberOfMonitoredList()
+ {
+ return iServiceList->Enumerate();
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::SetServicesAvailabilityL
+// This function sets the availability status of the service list.
+// ---------------------------------------------------------------------------
+//
+void CMmMBMSMonitoredList::SetServicesAvailabilityL(CPcktMbmsMonitoredServiceList *aAvailableList)
+ {
+ if ( aAvailableList )
+ {
+#ifndef USING_CTSY_DISPATCHER
+ //if the available list is empty (i.e. no services) then all entries in
+ //the service list should be marked unavailable
+ //the header says aAvailableList is "a list of services that should be set to available (the rest will be unavailable)"
+ //this check prevents the the services being marked unavilable in the case the list is empty
+ if (aAvailableList->Enumerate() > 0)
+#endif //USING_CTSY_DISPATCHER
+ {
+ RPacketService::TMbmsServiceAvailabilityV1 updEntry;
+ RPacketService::TMbmsServiceAvailabilityV1 origEntry;
+
+ //Set available status to EMbmsUnavailable
+ for( TInt index1 = 0; index1 < iServiceList->Enumerate(); index1++ )
+ {
+ origEntry = iServiceList->GetEntryL(index1);
+ origEntry.iMbmsAvailabilityStatus = EMbmsUnavailable;
+ iServiceList->ChangeEntryL(index1, origEntry);
+ }
+
+ // check throught the updated monitor list
+ for( TInt index2 = 0; index2 < aAvailableList->Enumerate(); index2++ )
+ {
+ updEntry = aAvailableList->GetEntryL(index2);
+
+ // Seach same entry to original list
+ for( TInt index3 = 0; index3 < iServiceList->Enumerate(); index3++ )
+ {
+ origEntry = iServiceList->GetEntryL(index3);
+
+ if (origEntry.iTmgi.GetServiceId() == updEntry.iTmgi.GetServiceId())
+ {
+ // availability status is EMbmsAvailable
+ origEntry.iMbmsAvailabilityStatus = EMbmsAvailable;
+ iServiceList->ChangeEntryL(index3, origEntry);
+ }
+ }
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::AddTempEntriesToCache
+// This function add the succesfully added monitor entries to main monitor service
+// list
+// ---------------------------------------------------------------------------
+//
+TInt CMmMBMSMonitoredList::AddTempEntriesToCacheL(const CPcktMbmsMonitoredServiceList* aFailedMonitorEntries)
+ {
+
+ if(iMbmsMonitoredListData.iListOfChanges == NULL)
+ {
+ return KErrNone;
+ }
+ // some entries could not be removed->update temp list for
+ if( aFailedMonitorEntries )
+ {
+ //iterate through failed entries vs. iMbmsMonitoredListData.iListOfChanges
+ for(TInt j = 0; j < aFailedMonitorEntries->Enumerate(); j++ )
+ {
+ for( TInt i = 0; i < iMbmsMonitoredListData.iListOfChanges->Enumerate(); i++ )
+ {
+ //if entry could not be removed -> remove it from temp list
+ //if no match found. leave it into temp list
+ if( iMbmsMonitoredListData.iListOfChanges->GetEntryL(i).iTmgi.GetServiceId() ==
+ aFailedMonitorEntries->GetEntryL(j).iTmgi.GetServiceId() )
+ {
+ //delete failed entry fom temp list before append them to main list
+ iMbmsMonitoredListData.iListOfChanges->DeleteEntryL(i);
+ i = iMbmsMonitoredListData.iListOfChanges->Enumerate();
+ }
+ }
+ }
+ }
+
+ if( iMbmsMonitoredListData.iListOfChanges->Enumerate() + iServiceList->Enumerate() >=
+ iServiceList->MaxNumberEntries() )
+ {
+ return KErrOverflow;
+ }
+ // temp list is up-to-date
+ // temporary saved entries can be added to the main list
+ for(TInt i=0;i < iMbmsMonitoredListData.iListOfChanges->Enumerate(); i++)
+ {
+ iServiceList->AddEntryL(iMbmsMonitoredListData.iListOfChanges->GetEntryL(i));
+ }
+ ResetTempListL();
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::ResetTempListL
+// This function clears the temporary monitors service list e.g. in case of timeout
+//
+// ---------------------------------------------------------------------------
+//
+void CMmMBMSMonitoredList::ResetTempListL()
+ {
+ if(iMbmsMonitoredListData.iListOfChanges != NULL)
+ {
+ ClearListL(iMbmsMonitoredListData.iListOfChanges);
+ delete iMbmsMonitoredListData.iListOfChanges;
+ iMbmsMonitoredListData.iListOfChanges = NULL;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMmMBMSMonitoredList::ServiceList
+// This function return a pointer to the service list
+//
+// ---------------------------------------------------------------------------
+//
+CPcktMbmsMonitoredServiceList* CMmMBMSMonitoredList::ServiceList()
+ {
+ return iServiceList;
+ }
+
+// End of File
+