applayerpluginsandutils/uripermissionservices/server/src/urilistinterface.cpp
branchRCL_3
changeset 18 5f1cd966e0d9
parent 0 b16258d2340f
child 19 c0c2f28ace9c
--- 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<TChar> 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;
 	}