TInt TCmdUNSAFTimers::FindIapKeyL( CRepository& aRepository, TInt aIapId, TUint32& aKey ) const { RArray<TUint32> keys; CleanupClosePushL( keys ); TInt err = aRepository.FindL( KUNSAFProtocolsIAPIdMask, KUNSAFProtocolsFieldTypeMask, keys ); TInt ret = KErrNotFound; if ( err == KErrNone && keys.Count() > 0 ) { for ( TInt i = 0; i < keys.Count() && ret == KErrNotFound; i++ ) { TUint32 key = ( KUNSAFProtocolsIAPIdMask ^ ( keys[ i ] ) ); key |= KUNSAFProtocolsIAPTableMask; TInt iapId( 0 ); Read( aRepository, KUNSAFProtocolsIAPIdMask | key, iapId ); if ( iapId == aIapId ) { aKey = key; ret = KErrNone; } } } CleanupStack::PopAndDestroy( &keys ); return ret; }
TUint32 TCmdUNSAFTimers::CreateNewKeyL( CRepository& aRepository, TUint32 aKey, TUint32 aTable ) const { const TUint32 KInitialKey = 1; TUint32 newKey = KInitialKey; RArray<TUint32> keys; CleanupClosePushL( keys ); TInt err = aRepository.FindL( aKey, KUNSAFProtocolsFieldTypeMask, keys ); if ( err != KErrNotFound ) { User::LeaveIfError( err ); TInt keyCount = keys.Count(); if ( keyCount != 0 ) { // Find the biggest key and increment it by one keys.SortUnsigned(); TUint32 maxKey = aKey ^ keys[ keyCount - 1 ]; newKey = maxKey + 1; } } newKey |= aTable; CleanupStack::PopAndDestroy( &keys ); return newKey; }
TInt TCmdUNSAFTimers::FindDomainKeyL( CRepository& aRepository, TPtrC8 aDomain, TUint32& aKey ) const { RArray<TUint32> keys; CleanupClosePushL( keys ); TInt err = aRepository.FindL( KUNSAFProtocolsDomainMask, KUNSAFProtocolsFieldTypeMask, keys ); TInt ret = KErrNotFound; if ( err == KErrNone && keys.Count() > 0 ) { for ( TInt i = 0; i < keys.Count() && ret == KErrNotFound; i++ ) { TUint32 key = ( KUNSAFProtocolsDomainMask ^ ( keys[ i ] ) ); key |= KUNSAFProtocolsDomainTableMask; TBuf8<KMaxServerNameLen> domain; if ( ( Read( aRepository, KUNSAFProtocolsDomainMask | key, domain ) == KErrNone ) && ( domain == aDomain ) ) { aKey = key; ret = KErrNone; } } } CleanupStack::PopAndDestroy( &keys ); return ret; }
void T_NATFWTraversalAdapter::SetupL( ) { // Central Repository for NAT-FW Traversal settings CRepository* rep = CRepository::NewLC( KCRUidUNSAFProtocols ); iNATFWDomainSpecificItem = CNATFWDomainSpecificItem::NewL(); iNATFWIAPSpecificItem = CNATFWIAPSpecificItem::NewL(); ////////////////////////////// ////////// TMTEST //////////// ////////////////////////////// /*_LIT8( KTesti, "101kakka,3,2,1" ); TLex8 leksaaja( KTesti() ); TInt arvoitus( KErrNotFound ); TInt virhe = leksaaja.Val( arvoitus ); DBG_PRINT_2( "Timo testaa: virhe = %d", virhe ); DBG_PRINT_2( "Timo testaa: arvoitus = %d", arvoitus );*/ ////////////////////////////// //////// TMTEST END ////////// ////////////////////////////// // Load stored data data if exist RArray<TUint32> keys; CleanupClosePushL( keys ); TInt err = rep->FindL( KUNSAFProtocolsDomainMask, KUNSAFProtocolsFieldTypeMask, keys ); if ( keys.Count() ) { GetDomainSettingsL( keys[0], *iNATFWDomainSpecificItem ); } err = rep->FindL( KUNSAFProtocolsIAPIdMask, KUNSAFProtocolsFieldTypeMask, keys ); if ( keys.Count() ) { GetIAPSettingsL( keys[0], *iNATFWIAPSpecificItem ); } CleanupStack::PopAndDestroy( &keys ); CleanupStack::PopAndDestroy( rep ); }
// --------------------------------------------------------------------------- // T_NATFWTraversalAdapter::GetDomainSettingsL // Gets one domain settings entry // --------------------------------------------------------------------------- // void T_NATFWTraversalAdapter::GetDomainSettingsL( TUint32 aDomainKeyId, CNATFWDomainSpecificItem& aItem ) { // Central Repository for NAT-FW Traversal settings CRepository* rep = CRepository::NewLC( KCRUidUNSAFProtocols ); // CS:1 TUint32 key( KErrNone ); // select domain key = ( KUNSAFProtocolsDomainMask^( aDomainKeyId ) ); key |= KUNSAFProtocolsDomainTableMask; // set key id aItem.SetDomainKey( aDomainKeyId ); // set domain TInt actualLength = 0; TBuf8<1> tmp; rep->Get( KUNSAFProtocolsDomainMask|key, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* domainName = HBufC8::NewLC( actualLength ); TPtr8 ptr( domainName->Des() ); TInt err = rep->Get( KUNSAFProtocolsDomainMask|key, ptr ); if( KErrNone == err ) { aItem.SetDomainL( domainName->Des() ); } else { aItem.SetDomainL( KNullDesC8() ); } CleanupStack::PopAndDestroy( domainName ); actualLength = 0; } // set STUN server address rep->Get( KUNSAFProtocolsSTUNServerMask|key, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* stunServerAddr = HBufC8::NewLC( actualLength ); TPtr8 ptr ( stunServerAddr->Des() ); TInt err = rep->Get( KUNSAFProtocolsSTUNServerMask|key, ptr ); if( err == KErrNone ) { aItem.SetSTUNServerAddrL( stunServerAddr->Des() ); } else { aItem.SetSTUNServerAddrL( KNullDesC8() ); } CleanupStack::PopAndDestroy( stunServerAddr ); } // STUN server port TInt tmpValue( 0 ); rep->Get( KUNSAFProtocolsSTUNServerPortMask|key, tmpValue ); aItem.SetSTUNServerPort( tmpValue ); // STUN server username rep->Get( KUNSAFProtocolsSTUNUsernameMask|key, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* stunUsername = HBufC8::NewLC( actualLength ); TPtr8 ptr ( stunUsername->Des() ); TInt err = rep->Get( KUNSAFProtocolsSTUNUsernameMask|key, ptr ); if( err == KErrNone ) { aItem.SetSTUNUsernameL( stunUsername->Des() ); } else { aItem.SetSTUNUsernameL( KNullDesC8() ); } CleanupStack::PopAndDestroy( stunUsername ); } // STUN server password rep->Get( KUNSAFProtocolsSTUNPasswordMask|key, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* stunPassword = HBufC8::NewLC( actualLength ); TPtr8 ptr ( stunPassword->Des() ); TInt err = rep->Get( KUNSAFProtocolsSTUNPasswordMask|key, ptr ); if( err == KErrNone ) { aItem.SetSTUNPasswordL( stunPassword->Des() ); } else { aItem.SetSTUNPasswordL( KNullDesC8() ); } CleanupStack::PopAndDestroy( stunPassword ); } // NAT refresh interval for UDP tmpValue = KErrNotFound; rep->Get( KUNSAFProtocolsDomainIntervalUDPMask|key, tmpValue ); aItem.SetNATRefreshUDP( tmpValue ); // NAT refresh interval for TCP tmpValue = KErrNotFound; rep->Get( KUNSAFProtocolsDomainIntervalTCPMask|key, tmpValue ); aItem.SetNATRefreshTCP( tmpValue ); // CRLF-based NAT binding refresh tmpValue = KErrNotFound; rep->Get( KUNSAFProtocolsDomainEnableCRLFRefresh|key, tmpValue ); aItem.SetEnableCRLFRefresh( tmpValue ); TUint32 tempKey = aDomainKeyId|KUNSAFProtocolsFieldTypeMask; tempKey ^= KUNSAFProtocolsFieldTypeMask; RArray<TUint32> stunKeys; CleanupClosePushL( stunKeys ); // CS:2 rep->FindL( tempKey|KUNSAFProtocolsSTUNAddressMask, KUNSAFProtocolsSubTableFieldTypeMask, stunKeys ); TInt stunKeyCount = stunKeys.Count(); // STUN server items start from CenRep table index 1. for ( TInt counter = 1; counter < stunKeyCount; counter++ ) { CWPStunServerItem* stunItem = CWPStunServerItem::NewLC(); // CS:3 // Remove STUN server address mask from key. TUint32 tmpKey = KUNSAFProtocolsSTUNAddressMask^stunKeys[counter]; // STUNSrvAddr actualLength = 0; rep->Get( tmpKey|KUNSAFProtocolsSTUNAddressMask, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* stunSrvAddr = HBufC8::NewLC( actualLength ); // CS:4 TPtr8 ptr( stunSrvAddr->Des() ); TInt err = rep->Get( tmpKey|KUNSAFProtocolsSTUNAddressMask, ptr ); if ( KErrNone == err ) { stunItem->SetStunSrvAddrL( stunSrvAddr->Des() ); } else { stunItem->SetStunSrvAddrL( KNullDesC8 ); } CleanupStack::PopAndDestroy( stunSrvAddr ); // CS:3 } else if ( 0 == actualLength ) { stunItem->SetStunSrvAddrL( KNullDesC8 ); } // STUNSrvPort TInt tmpValue( KErrNotFound ); rep->Get( tmpKey|KUNSAFProtocolsSTUNPortMask, tmpValue ); stunItem->SetStunSrvPort( tmpValue ); // STUNSrvUsername actualLength = 0; rep->Get( tmpKey|KUNSAFProtocolsSTUNUsernameMask, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* stunUsername = HBufC8::NewLC( actualLength ); // CS:4 TPtr8 ptr( stunUsername->Des() ); TInt err = rep->Get( tmpKey|KUNSAFProtocolsSTUNUsernameMask, ptr ); if ( KErrNone == err ) { stunItem->SetStunUsernameL( stunUsername->Des() ); } else { stunItem->SetStunUsernameL( KNullDesC8 ); } CleanupStack::PopAndDestroy( stunUsername ); // CS:3 } else if ( 0 == actualLength ) { stunItem->SetStunUsernameL( KNullDesC8 ); } // STUNSrvPassword actualLength = 0; rep->Get( tmpKey|KUNSAFProtocolsSTUNPasswordMask, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* stunPassword = HBufC8::NewLC( actualLength ); // CS:4 TPtr8 ptr( stunPassword->Des() ); TInt err = rep->Get( tmpKey|KUNSAFProtocolsSTUNPasswordMask, ptr ); if ( KErrNone == err ) { stunItem->SetStunPasswordL( stunPassword->Des() ); } else { stunItem->SetStunPasswordL( KNullDesC8 ); } CleanupStack::PopAndDestroy( stunPassword ); // CS:3 } else if ( 0 == actualLength ) { stunItem->SetStunPasswordL( KNullDesC8 ); } aItem.AddStunServerItemL( stunItem ); // Ownership transfer. CleanupStack::Pop( stunItem ); // CS:2 } stunKeys.Close(); CleanupStack::PopAndDestroy( &stunKeys ); // CS:1 // STUNSharedSecret tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsDomainSharedSecretNotSupported, tmpValue ); aItem.SetDisableStunSharedSecret( tmpValue ); // PortPoolStartPort tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsPortPoolStartPortMask, tmpValue ); aItem.SetStartPortRange( tmpValue ); // PortPoolEndPort tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsPortPoolEndPortMask, tmpValue ); aItem.SetEndPortRange( tmpValue ); // UsedNATProtocol actualLength = 0; rep->Get( key|KUNSAFProtocolsUsedNATProtocolMask, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* natProtocol = HBufC8::NewLC( actualLength ); // CS:4 TPtr8 ptr( natProtocol->Des() ); TInt err = rep->Get( key|KUNSAFProtocolsUsedNATProtocolMask, ptr ); if ( KErrNone == err ) { aItem.SetNatProtocolL( natProtocol->Des() ); } else { aItem.SetNatProtocolL( KNullDesC8 ); } CleanupStack::PopAndDestroy( natProtocol ); // CS:3 } else if ( 0 == actualLength ) { aItem.SetNatProtocolL( KNullDesC8 ); } // ICESpecific/NATUtilities actualLength = 0; rep->Get( key|KUNSAFProtocolsNATUtilities, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* natUtils = HBufC8::NewLC( actualLength ); // CS:4 TPtr8 ptr( natUtils->Des() ); TInt err = rep->Get( key|KUNSAFProtocolsNATUtilities, ptr ); if ( KErrNone == err ) { aItem.SetNatUtilitiesL( natUtils->Des() ); } else { aItem.SetNatUtilitiesL( KNullDesC8 ); } CleanupStack::PopAndDestroy( natUtils ); // CS:3 } else if ( 0 == actualLength ) { aItem.SetNatUtilitiesL( KNullDesC8 ); } // ICESpecific/HostPref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsHostPref, tmpValue ); aItem.SetHostPref( tmpValue ); // ICESpecific/ServerRefPref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsServerRefPref, tmpValue ); aItem.SetServerRefPref( tmpValue ); // ICESpecific/RelayPref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsRelayPref, tmpValue ); aItem.SetRelayPref( tmpValue ); // ICESpecific/PeerRefPref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsPeerRefPref, tmpValue ); aItem.SetPeerRefPref( tmpValue ); // ICESpecific/IPv4Pref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsIPV4Pref, tmpValue ); aItem.SetIPv4Pref( tmpValue ); // ICESpecific/IPv6Pref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsIPV6Pref, tmpValue ); aItem.SetIPv6Pref( tmpValue ); // ICESpecific/VpnPref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsVPNPref, tmpValue ); aItem.SetVpnPref( tmpValue ); // ICESpecific/UdpPref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsUDPPref, tmpValue ); aItem.SetUdpPref( tmpValue ); // ICESpecific/TcpPref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsTCPPref, tmpValue ); aItem.SetTcpPref( tmpValue ); // ICESpecific/TcpActivePref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsTCPActivePref, tmpValue ); aItem.SetTcpActivePref( tmpValue ); // ICESpecific/TcpPassivePref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsTCPPassivePref, tmpValue ); aItem.SetTcpPassivePref( tmpValue ); // ICESpecific/TCPSimultPref tmpValue = KErrNotFound; rep->Get( key|KUNSAFProtocolsTCPSimultPref, tmpValue ); aItem.SetTcpSimultPref( tmpValue ); // TURN server tempKey = aDomainKeyId|KUNSAFProtocolsFieldTypeMask; tempKey ^= KUNSAFProtocolsFieldTypeMask; RArray<TUint32> turnKeys; CleanupClosePushL( turnKeys ); // CS:2 rep->FindL( tempKey|KUNSAFProtocolsTURNAddressMask, KUNSAFProtocolsSubTableFieldTypeMask, turnKeys ); TInt turnKeyCount = turnKeys.Count(); for ( TInt counter = 0; counter < turnKeyCount; counter++ ) { CWPTurnServerItem* turnItem = CWPTurnServerItem::NewLC(); // CS:3 // Remove TURN server address mask from key. TUint32 tmpKey = KUNSAFProtocolsTURNAddressMask^turnKeys[counter]; // TURNSrvAddr actualLength = 0; rep->Get( tmpKey|KUNSAFProtocolsTURNAddressMask, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* turnSrvAddr = HBufC8::NewLC( actualLength ); // CS:4 TPtr8 ptr( turnSrvAddr->Des() ); TInt err = rep->Get( tmpKey|KUNSAFProtocolsTURNAddressMask, ptr ); if ( KErrNone == err ) { turnItem->SetTurnSrvAddrL( turnSrvAddr->Des() ); } else { turnItem->SetTurnSrvAddrL( KNullDesC8 ); } CleanupStack::PopAndDestroy( turnSrvAddr ); // CS:3 } else if ( 0 == actualLength ) { turnItem->SetTurnSrvAddrL( KNullDesC8 ); } // TURNSrvPort TInt tmpValue( KErrNotFound ); rep->Get( tmpKey|KUNSAFProtocolsTURNPortMask, tmpValue ); turnItem->SetTurnSrvPort( tmpValue ); // TURNUsername actualLength = 0; rep->Get( tmpKey|KUNSAFProtocolsTURNUsernameMask, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* turnUsername = HBufC8::NewLC( actualLength ); // CS:4 TPtr8 ptr( turnUsername->Des() ); TInt err = rep->Get( tmpKey|KUNSAFProtocolsTURNUsernameMask, ptr ); if ( KErrNone == err ) { turnItem->SetTurnUsernameL( turnUsername->Des() ); } else { turnItem->SetTurnUsernameL( KNullDesC8 ); } CleanupStack::PopAndDestroy( turnUsername ); // CS:3 } else { turnItem->SetTurnUsernameL( KNullDesC8 ); } // TURNPassword actualLength = 0; rep->Get( tmpKey|KUNSAFProtocolsTURNPasswordMask, tmp, actualLength ); if ( actualLength > 0 ) { HBufC8* turnPassword = HBufC8::NewLC( actualLength ); // CS:4 TPtr8 ptr( turnPassword->Des() ); TInt err = rep->Get( tmpKey|KUNSAFProtocolsTURNPasswordMask, ptr ); if ( KErrNone == err ) { turnItem->SetTurnPasswordL( turnPassword->Des() ); } else { turnItem->SetTurnPasswordL( KNullDesC8 ); } CleanupStack::PopAndDestroy( turnPassword ); // CS:3 } else { turnItem->SetTurnPasswordL( KNullDesC8 ); } aItem.AddTurnServerItemL( turnItem ); // Ownership transfer. CleanupStack::Pop( turnItem ); // CS:2 } turnKeys.Close(); CleanupStack::PopAndDestroy( &turnKeys ); // CS:1 CleanupStack::PopAndDestroy( rep ); // CS:0 }
LOCAL_C void FindL() { CRepository* repository; User::LeaveIfNull(repository = CRepository::NewLC(KUidPlatsecTestRepository)); RArray<TUint32> foundIds; CleanupClosePushL(foundIds); TInt r = KErrNone; TRAPD(leaveReason, r = repository->FindL(0, 0, foundIds)); if(OomTesting && (r==KErrNoMemory || leaveReason==KErrNoMemory)) { CleanupStack::PopAndDestroy(); //foundIds User::Leave(KErrNoMemory); } // Note that we are allowed to find any setting regardless of it's platsec // what we can't do is return the value TEST2(r, KErrNone); TEST(foundIds.Count()==KNumSettings); foundIds.Reset(); TRAP(leaveReason, r = repository->FindL(23, 0, foundIds)); // 23 - just a random number, value is not important if(OomTesting && (r==KErrNoMemory || leaveReason==KErrNoMemory)) { CleanupStack::PopAndDestroy(); //foundIds User::Leave(KErrNoMemory); } TEST2(r, KErrNone); TEST(foundIds.Count()==KNumSettings); foundIds.Reset(); TRAP(leaveReason, r = repository->FindL(0, 2, foundIds)); if(OomTesting && (r==KErrNoMemory || leaveReason==KErrNoMemory)) { CleanupStack::PopAndDestroy(); //foundIds User::Leave(KErrNoMemory); } TEST2(r, KErrNone); TEST(foundIds.Count()==22); foundIds.Reset(); TRAP(leaveReason, r = repository->FindL(4, 6, foundIds)); if(OomTesting && (r==KErrNoMemory || leaveReason==KErrNoMemory)) { CleanupStack::PopAndDestroy(); //foundIds User::Leave(KErrNoMemory); } TEST2(r, KErrNone); TEST(foundIds.Count()==1); foundIds.Reset(); TRAP(leaveReason, r = repository->FindL(15, 15, foundIds)); if(OomTesting && (r==KErrNoMemory || leaveReason==KErrNoMemory)) { CleanupStack::PopAndDestroy(); //foundIds User::Leave(KErrNoMemory); } TEST2(r, KErrNotFound); TEST(foundIds.Count()==0); CleanupStack::PopAndDestroy(); //foundIds CleanupStack::PopAndDestroy(repository); }