--- a/connectivitylayer/isce/isinameservice_dll/src/namerecords.cpp Wed Apr 21 14:29:55 2010 +0300
+++ b/connectivitylayer/isce/isinameservice_dll/src/namerecords.cpp Tue Oct 19 13:16:20 2010 +0300
@@ -19,146 +19,264 @@
#include "namerecords.h"
#include <nsisi.h>
#include "isinameservicetrace.h" // For C_TRACE, ASSERT_RESET.. and fault codes
+#include "isihelpers.h" // For PN_DEV_OWN
enum TISINameRecordsFaults
{
EISINameRecordsMemAllocFailure = 0x01,
+ EISINameRecordsNullPointer,
+ EISINameRecordsNullPointer2,
+ EISINameRecordsNullPointer3,
+ EISINameRecordsNullPointer4,
+ EISINameRecordsNotFoundEntry,
};
+const TUint8 KAlwaysAssert( 0x00 );
+const TUint16 KOwnDeviceRouter( PN_DEV_OWN << 8 );
+
DNameRecords::DNameRecords()
- {
- //nothing
- C_TRACE( ( _T( "DNameRecords::DNameRecords <->" ) ) );
- }
+ {
+ //nothing
+ C_TRACE( ( _T( "DNameRecords::DNameRecords <>" ) ) );
+ }
DNameRecords::~DNameRecords()
- {
- C_TRACE( ( _T( "DNameRecords::~DNameRecords ->" ) ) );
- TInt i = 0;
- while( i<iNameTableArray.Count())
- {
- delete iNameTableArray[i];
- iNameTableArray.Remove(i);
- }
- iNameTableArray.Reset();
- }
+ {
+ C_TRACE( ( _T( "DNameRecords::~DNameRecords>" ) ) );
+ for( TUint32 i( 0 ); i < iNameTableArray.Count(); i++ )
+ {
+ delete iNameTableArray[ i ];
+ iNameTableArray.Remove( i );
+ }
+ iNameTableArray.Reset();
+ C_TRACE( ( _T( "DNameRecords::~DNameRecords<" ) ) );
+ }
-TUint8 DNameRecords::AddName( const TUint32 aName,
- const TUint16 aPhonetAddress,
- const TUint8 aFlags )
+TUint8 DNameRecords::AddName(
+ const TUint32 aName,
+ const TUint16 aPhonetAddress,
+ const TUint8 aFlags
+ )
{
- C_TRACE( ( _T( "DNameRecords::AddName name:0x%x phonetAdd:%d flags: %d ->" ), aName, aPhonetAddress, aFlags ) );
+ C_TRACE( ( _T( "DNameRecords::AddName name:0x%x phonetAdd:0x%04x flags: 0x%x>" ), aName, aPhonetAddress, aFlags ) );
+ TUint8 error( PN_NAME_OK );
+ switch( aFlags )
+ {
+ case PN_NAME_UNDEF :
+ case PN_NAME_NOCHG :
+ {
+ error = AddNewName( aName, aPhonetAddress, aFlags );
+ break;
+ }
+ default:
+ {
+ TRACE_ASSERT_ALWAYS( KAlwaysAssert );
+ error = PN_NAME_UNKNOWN;
+ break;
+ }
+ }
+ C_TRACE( ( _T( "DNameRecords::AddName name:0x%x phonetAdd:0x%04x flags: 0x%x %d<" ), aName, aPhonetAddress, aFlags, error ) );
+ return error;
+ }
- TUint8 error = PN_NAME_OK ;
- TUint i = 0;
- TBool nameFound = EFalse;
-
- if( aFlags == PN_NAME_UNDEF ||
- aFlags == PN_NAME_NOCHG )
+TUint8 DNameRecords::RemoveName(
+ const TUint32 aName
+ )
+ {
+ C_TRACE( ( _T( "DNameRecords::RemoveName name:0x%x>" ), aName ) );
+ TUint8 error( PN_NAME_UNKNOWN );
+ TNameTableEntry* nameEntry = FindMatchingNameTableEntry( aName );
+ if( nameEntry )
{
- while( i<iNameTableArray.Count())
- {
- if( iNameTableArray[i]->iName == aName)
- {
- nameFound = ETrue;
- if( iNameTableArray[i]->iFlags != PN_NAME_UNDEF )
- {
- error = PN_NAME_NOT_ALLOWED;
- }
- else
- {
- iNameTableArray[i]->iPhonetAddress = aPhonetAddress;
- iNameTableArray[i]->iFlags = aFlags;
- }
- break;
- }
- i++;
- }//while
+ if( nameEntry->iFlags == PN_NAME_UNDEF )
+ {
+ RemoveUndefinedEntry( *nameEntry );
+ error = PN_NAME_OK;
+ }
+ else
+ {
+ error = PN_NAME_NOT_ALLOWED;
+ TRACE_ASSERT_ALWAYS( KAlwaysAssert );
+ }
}
- else
- {
- error = PN_NAME_UNKNOWN;
- }
- if( !nameFound )
+ // No need for else, as name is unknown
+ TRACE_ASSERT_ALWAYS( PN_NAME_OK == error );
+ C_TRACE( ( _T( "DNameRecords::RemoveName name:0x%x %d<" ), aName, error ) );
+ return error;
+ }
+
+TInt DNameRecords::LookupPhonetAddress(
+ const TUint32 aName,
+ TUint16* aPhonetAddress
+ )
+ {
+ C_TRACE( ( _T( "DNameRecords::LookupPhonetAddress name:0x%x>" ), aName ) );
+ ASSERT_RESET_ALWAYS( aPhonetAddress, ( EISINameRecordsNullPointer2 | EDISINameRecordsTraceId << KClassIdentifierShift ) );
+ TInt error( KErrNotFound );
+ TNameTableEntry* nameEntry = FindMatchingNameTableEntry( aName );
+ if( nameEntry )
{
- TNameTable* table = new TNameTable( aName, aPhonetAddress, aFlags );
+ *aPhonetAddress = nameEntry->iPhonetAddress;
+ error = KErrNone;
+ }
+ // No need for else, as name is not found
+ C_TRACE( ( _T( "DNameRecords::LookupPhonetAddress name:0x%x %d<" ), aName, error ) );
+ return error;
+ }
- ASSERT_RESET_ALWAYS( table, EISINameRecordsMemAllocFailure | EDISINameRecordsTraceId << KClassIdentifierShift );
- iNameTableArray.Append( table );
-
+TInt DNameRecords::LookupNamePhonetAddressAndFlags(
+ const TUint32 aName,
+ TUint16* aPhonetAddress,
+ TUint8* aFlags
+ )
+ {
+ C_TRACE( ( _T( "DNameRecords::LookupNamePhonetAddressAndFlags name:0x%x>" ), aName ) );
+ ASSERT_RESET_ALWAYS( aPhonetAddress, ( EISINameRecordsNullPointer3 | EDISINameRecordsTraceId << KClassIdentifierShift ) );
+ ASSERT_RESET_ALWAYS( aFlags, ( EISINameRecordsNullPointer4 | EDISINameRecordsTraceId << KClassIdentifierShift ) );
+ TInt error( KErrNotFound );
+ TNameTableEntry* nameEntry = FindMatchingNameTableEntry( aName );
+ if( nameEntry )
+ {
+ *aPhonetAddress = nameEntry->iPhonetAddress;
+ *aFlags = nameEntry->iFlags;
+ error = KErrNone;
}
+ // No need for else, as name is not found
+ C_TRACE( ( _T( "DNameRecords::LookupNamePhonetAddressAndFlags name:0x%x %d<" ), aName, error ) );
return error;
}
-TUint8 DNameRecords::RemoveName( const TUint32 aName )
- {
- C_TRACE( ( _T( "DNameRecords::RemoveName name:0x%x ->" ), aName ) );
- TUint8 error = PN_NAME_UNKNOWN;
- TInt i = 0;
- while( i<iNameTableArray.Count() )
+void DNameRecords::NameQuery(
+ const TUint32 aName,
+ const TUint32 aMask,
+ RArray <TNameTableEntry*>* aResultsArray
+ )
+ {
+ C_TRACE( ( _T( "DNameRecords::NameQuery name:0x%x mask:0x%x &aResultsArray: 0x%x>" ), aName, aMask, &aResultsArray ) );
+ FindMatchingNameTableEntriesWithMask( aName, aMask, aResultsArray );
+ C_TRACE( ( _T( "DNameRecords::NameQuery name:0x%x mask:0x%x &aResultsArray: 0x%x<" ), aName, aMask, &aResultsArray ) );
+ }
+
+// privates start
+
+TUint8 DNameRecords::AddNewName(
+ const TUint32 aName,
+ const TUint16 aPhonetAddress,
+ const TUint8 aFlags
+ )
+ {
+ E_TRACE( ( _T( "DNameRecords::AddNewName 0x%x 0x%04x 0x%x>" ), aName, aPhonetAddress, aFlags ) );
+ const TUint32 nameTableCount( iNameTableArray.Count() );
+ TUint8 error( PN_NAME_OK );
+ TNameTableEntry* nameEntry = FindMatchingNameTableEntry( aName );
+ if( nameEntry )
{
- if( iNameTableArray[i]->iName == aName)
- {
- error = PN_NAME_NOT_ALLOWED;
- if( iNameTableArray[i]->iFlags == PN_NAME_UNDEF )
- {
- delete iNameTableArray[i];;
- iNameTableArray.Remove(i);
- iNameTableArray.Compress();
- error = PN_NAME_OK;
- }
- break;
- }
- i++;
- } //while
+ error = AddExistinNameToNameTableArray( nameEntry, aName, aPhonetAddress, aFlags );
+ }
+ else
+ {
+ error = AddNewNameToNameTableArray( aName, aPhonetAddress, aFlags );
+ }
+ E_TRACE( ( _T( "DNameRecords::AddNewName 0x%x 0x%04x 0x%x error %d<" ), aName, aPhonetAddress, aFlags, error ) );
+ return error;
+ }
+TUint8 DNameRecords::AddExistinNameToNameTableArray(
+ TNameTableEntry* aNameTableEntry,
+ const TUint32 aName,
+ const TUint16 aPhonetAddress,
+ const TUint8 aFlags
+ )
+ {
+ E_TRACE( ( _T( "DNameRecords::AddExistinNameToNameTableArray 0x%x 0x%04x 0x%x exists 0x%x>" ), aName, aPhonetAddress, aFlags, aNameTableEntry ) );
+ TUint8 error( PN_NAME_NOT_ALLOWED );
+ ASSERT_RESET_ALWAYS( aNameTableEntry, ( EISINameRecordsNullPointer | EDISINameRecordsTraceId << KClassIdentifierShift ) );
+ if( aNameTableEntry->iFlags != PN_NAME_NOCHG )
+ {
+ aNameTableEntry->iPhonetAddress = aPhonetAddress;
+ aNameTableEntry->iFlags = aFlags;
+ error = PN_NAME_OK;
+ }
+ // No need for else, if not changeable doing nothing.
+ TRACE_ASSERT_ALWAYS( PN_NAME_OK == error );
+ E_TRACE( ( _T( "DNameRecords::AddExistinNameToNameTableArray 0x%x 0x%04x 0x%x exists 0x%x error %d<" ), aName, aPhonetAddress, aFlags, aNameTableEntry, error ) );
return error;
}
-TInt32 DNameRecords::LookupPhonetAddress( const TUint32 aName, TUint16* aPhonetAddress )
- {
- C_TRACE( ( _T( "DNameRecords::LookupPhonetAddress name:0x%x ->" ), aName ) );
- TInt32 error = KErrNotFound;
- TInt i = 0;
-
- while( i<iNameTableArray.Count() )
+TUint8 DNameRecords::AddNewNameToNameTableArray(
+ const TUint32 aName,
+ const TUint16 aPhonetAddress,
+ const TUint8 aFlags
+ )
+ {
+ E_TRACE( ( _T( "DNameRecords::AddNewNameToNameTableArray 0x%x 0x%04x 0x%x>" ), aName, aPhonetAddress, aFlags ) );
+ TUint8 error( PN_NAME_NOT_ALLOWED );
+ // This check is only needed here as these PhoNet addresses may never exist.
+ if( KOwnDeviceRouter != aPhonetAddress )
{
- C_TRACE( ( _T( "DNameRecords::LookupPhonetAddress ind:0x%x " ), i ) );
- if( iNameTableArray[i]->iName == aName)
- {
- C_TRACE( ( _T( "DNameRecords::LookupPhonetAddress found phonet address: 0x%x" ), iNameTableArray[i]->iPhonetAddress ) );
- *aPhonetAddress = iNameTableArray[i]->iPhonetAddress;
- error = KErrNone;
- break;
- }
- i++;
- }//while
-
+ TNameTableEntry* table = new TNameTableEntry( aName, aPhonetAddress, aFlags );
+ E_TRACE( ( _T( "DNameRecords::AddNewNameToNameTableArray 0x%x 0x%x 0x%x new 0x%x<>" ), aName, aPhonetAddress, aFlags, table ) );
+ ASSERT_RESET_ALWAYS( table, ( EISINameRecordsMemAllocFailure | EDISINameRecordsTraceId << KClassIdentifierShift ) );
+ iNameTableArray.Append( table );
+ error = PN_NAME_OK;
+ }
+ // No need for else as not allowed.
+ TRACE_ASSERT_ALWAYS( PN_NAME_OK == error );
+ E_TRACE( ( _T( "DNameRecords::AddNewNameToNameTableArray 0x%x 0x%04x 0x%x 0x%x<" ), aName, aPhonetAddress, aFlags, error ) );
return error;
}
-RArray <TNameTable*>* DNameRecords::GetNameTable()
+TNameTableEntry* DNameRecords::FindMatchingNameTableEntry(
+ const TUint32 aName
+ )
{
- C_TRACE( ( _T( "DNameRecords::GetNameTable ->" ) ) );
- return &iNameTableArray ;
+ E_TRACE( ( _T( "DNameRecords::FindMatchingNameTableEntry 0x%x>" ), aName ) );
+ TNameTableEntry* tableEntry = NULL;
+ const TUint32 nameTableCount( iNameTableArray.Count() );
+ for( TUint32 i( 0 ); i < nameTableCount; i++ )
+ {
+ if( iNameTableArray[ i ]->iName == aName )
+ {
+ tableEntry = iNameTableArray[ i ];
+ break;
+ }
+ // No need for else, continue for
+ }
+ E_TRACE( ( _T( "DNameRecords::FindMatchingNameTableEntry 0x%x entry 0x%x<" ), aName, tableEntry ) );
+ return tableEntry;
}
-TInt32 DNameRecords::NameQuery( const TUint32 aName, const TUint32 aMask, RArray <TNameTable*> *aResultsArray )
- {
- C_TRACE( ( _T( "DNameRecords::AddName name:0x%x mask:%d &aResultsArray: 0x%x ->" ), aName, aMask, &aResultsArray ) );
-
- TInt i = 0;
- TInt32 count = 0;//KErrNotFound
- while( i<iNameTableArray.Count() )
+void DNameRecords::FindMatchingNameTableEntriesWithMask(
+ const TUint32 aName,
+ const TUint32 aMask,
+ RArray <TNameTableEntry*>* aResultsArray
+ )
+ {
+ E_TRACE( ( _T( "DNameRecords::FindMatchingNameTableEntriesWithMask 0x%x 0x%x 0x%x>" ), aName, aMask, aResultsArray ) );
+ const TUint32 nameTableCount( iNameTableArray.Count() );
+ for( TUint32 i( 0 ); i < nameTableCount; i++ )
{
- if( aName == iNameTableArray[i]->iName ||
- (aName & aMask ) == ( iNameTableArray[i]->iName & aMask ) )
+ TNameTableEntry* tableEntry = iNameTableArray[ i ];
+ if( ( aName == tableEntry->iName ) ||
+ ( ( aName & aMask ) == ( tableEntry->iName & aMask ) ) )
{
- aResultsArray->Append( iNameTableArray[i] );
- count++;
+ E_TRACE( ( _T( "DNameRecords::FindMatchingNameTableEntriesWithMask 0x%x 0x%x found" ), aName, aMask ) );
+ aResultsArray->Append( tableEntry );
}
- i++;
- }//while
- return count;
- }
+ // No need for else, if not found no actions.
+ }
+ E_TRACE( ( _T( "DNameRecords::FindMatchingNameTableEntriesWithMask 0x%x 0x%x 0x%x<" ), aName, aMask, aResultsArray ) );
+ }
+void DNameRecords::RemoveUndefinedEntry(
+ TNameTableEntry& aNameEntryToRemove
+ )
+ {
+ E_TRACE( ( _T( "DNameRecords::RemoveUndefinedEntry 0x%x>" ), &aNameEntryToRemove ) );
+ const TInt index = iNameTableArray.Find( &aNameEntryToRemove );
+ ASSERT_RESET_ALWAYS( ( index != KErrNotFound ), ( EISINameRecordsNotFoundEntry | EDISINameRecordsTraceId << KClassIdentifierShift ) );
+ delete iNameTableArray[ index ];
+ iNameTableArray.Remove( index );
+ iNameTableArray.Compress();
+ E_TRACE( ( _T( "DNameRecords::RemoveUndefinedEntry 0x%x<" ), &aNameEntryToRemove ) );
+ }