diff -r a2a70ce3d4e8 -r 5f1cd966e0d9 applayerpluginsandutils/uripermissionservices/server/src/urilistinterface.cpp --- a/applayerpluginsandutils/uripermissionservices/server/src/urilistinterface.cpp Thu Jul 15 19:14:59 2010 +0300 +++ b/applayerpluginsandutils/uripermissionservices/server/src/urilistinterface.cpp Thu Aug 19 10:27:19 2010 +0300 @@ -36,7 +36,7 @@ _LIT(KRomDirectory, "z"); _LIT(KUriListFile, ":\\private\\20009D70\\ineturilist.xml"); #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS -_LIT(KPolicyFile, ":\\private\\20009D70\\tldpolicy.xml"); +_LIT(KPolicyFile, ":\\private\\20009D70\\defaulttldpolicy.xml"); #endif //SYMBIAN_ENABLE_SPLIT_HEADERS CUriListInterface::CUriListInterface () @@ -958,7 +958,7 @@ void CUriListInterface::InitializePolicyDatabaseL () { //Install the file with ROM Policy data if ROM file exists - _LIT( KDefaultFilePath, "z:\\private\\20009d70\\tldpolicy.xml"); + _LIT( KDefaultFilePath, "z:\\private\\20009d70\\defaulttldpolicy.xml"); if( FileExist( KDefaultFilePath() ) ) { CTldListInitializer* tldlistInitializer = CTldListInitializer::NewL ( *this ); @@ -981,7 +981,7 @@ { //Upgrade DB if Policy file is installed //Get the Installed file path - _LIT(KTldPolicyFile, "c:\\private\\20009d70\\tldpolicy.xml"); + _LIT(KTldPolicyFile, "c:\\private\\20009d70\\defaulttldpolicy.xml"); if(!FileExist( KTldPolicyFile() )) { return; @@ -1073,6 +1073,8 @@ { TBool blackListed(EFalse); TPolicyQueryArgs blackListArgs ( InetUriList::EBlackList, InetUriList::EPolicyCharSet ); + if (!QueryForGlobalChars(blackListArgs,aUri,InetUriList::EBlackList)) + { CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, blackListArgs ); CleanupStack::PushL(queryFilter); MDBTransaction& dbTrans = queryFilter->DBTransaction(); @@ -1098,9 +1100,73 @@ User::Leave(InetUriList::KErrInvalidTLD); } CleanupStack::PopAndDestroy(queryFilter); + } return blackListed; } +TBool CUriListInterface::QueryForGlobalChars(TPolicyQueryArgs &aPolicyQueryArgs,const TDesC8& aUri,InetUriList::TListType aListType ) + { + RBuf8 queryBuf; + TBool blackOrWhiteListed(EFalse); + _LIT8 ( KSelectStmt, "SELECT * FROM %S where "); + CleanupClosePushL ( queryBuf ); + queryBuf.CreateL ( KMaxDbStmtLen ); + queryBuf.AppendFormat ( KSelectStmt(), &(KTldTblName()) ); + _LIT8(KGlobal,"GlobalChars"); + const TDesC8& tldName (iStringPool.String (TLDLIST::ETLDName,TLDLIST::Table).DesC()); + _LIT8(KSql, "( %S=:V1 ) " ); + queryBuf.AppendFormat( KSql,&tldName ); + + //Prepare the query + MDBTransaction* dbTrans = iDbAccessor->PrepareTransactionL ( queryBuf ); + CleanupStack::PopAndDestroy (); //queryBuf + CleanupStack::PushL ( TCleanupItem ( CUriListInterface::DestroyTransObj, dbTrans ) ); + TInt lt = aPolicyQueryArgs.Get ( TPolicyQueryArgs::ETldListType ); + RBuf8 upperCaseUri; + upperCaseUri.Create(KGlobal()); + upperCaseUri.UpperCase(); + dbTrans->BindTextL(0, KGlobal()); + + // Execute the query + CUriQueryFilter* queryFilter = CTldPolicyDataFilter::NewL ( dbTrans ); + upperCaseUri.Close(); + CleanupStack::Pop (); // dbTrans + + + CleanupStack::PushL(queryFilter); + MDBTransaction& dbTran = queryFilter->DBTransaction(); + if ( dbTran.Next() && queryFilter->MatchRecordL() ) + { + const TDesC8& charSet = dbTran.ColumnTextL ( TLDLIST::ECharacterSet ); + //Policy file contains empty body for Requested white/Black listed data + __ASSERT_ALWAYS( charSet.Length() > 0, User::Invariant() ); + RArray policyCharList; + CleanupClosePushL(policyCharList); + //Tokenize the results + TokenizeStringL( charSet, policyCharList); + //Get the host and check whether any of these char is in PolicyCharList + HBufC8* host = ExtractHostL(aUri); + CleanupStack::PushL(host); + if (aListType == InetUriList::EBlackList) + { + blackOrWhiteListed = IsBlackListedHost( host->Des(), policyCharList ); + } + else + { + blackOrWhiteListed = IsWhiteListedHostL( host->Des(), policyCharList ); + } + CleanupStack::PopAndDestroy(2); //host, PolicyCharList + } + else + { + //Requested Policydata Not available for this TLD + CleanupStack::PopAndDestroy(queryFilter); + User::Leave(InetUriList::KErrInvalidTLD); + } + CleanupStack::PopAndDestroy(queryFilter); + return blackOrWhiteListed; + } + /** return ETrue if Uri is WhiteListed, else return EFalse Leaves with KErrNotSupported if No Policydata is available @@ -1109,6 +1175,8 @@ { TBool whiteListed (EFalse); TPolicyQueryArgs whiteListArgs ( InetUriList::EWhiteList, InetUriList::EPolicyCharSet ); + if (!QueryForGlobalChars(whiteListArgs, aUri,InetUriList::EWhiteList)) + { CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, whiteListArgs ); CleanupStack::PushL(queryFilter); MDBTransaction& dbTrans = queryFilter->DBTransaction(); @@ -1134,6 +1202,7 @@ User::Leave(InetUriList::KErrInvalidTLD); } CleanupStack::PopAndDestroy(queryFilter); + } return whiteListed; }