applayerpluginsandutils/uripermissionservices/server/src/urilistinterface.cpp
branchRCL_3
changeset 19 c0c2f28ace9c
parent 18 5f1cd966e0d9
child 20 a0da872af3fa
equal deleted inserted replaced
18:5f1cd966e0d9 19:c0c2f28ace9c
    34 const TInt KMaxLength = 1024;
    34 const TInt KMaxLength = 1024;
    35 const TInt pkgId(0x2000A471);
    35 const TInt pkgId(0x2000A471);
    36 _LIT(KRomDirectory, "z");
    36 _LIT(KRomDirectory, "z");
    37 _LIT(KUriListFile, ":\\private\\20009D70\\ineturilist.xml");
    37 _LIT(KUriListFile, ":\\private\\20009D70\\ineturilist.xml");
    38 #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
    38 #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
    39 _LIT(KPolicyFile, ":\\private\\20009D70\\defaulttldpolicy.xml");
    39 _LIT(KPolicyFile, ":\\private\\20009D70\\tldpolicy.xml");
    40 #endif	//SYMBIAN_ENABLE_SPLIT_HEADERS
    40 #endif	//SYMBIAN_ENABLE_SPLIT_HEADERS
    41 
    41 
    42 CUriListInterface::CUriListInterface ()
    42 CUriListInterface::CUriListInterface ()
    43 	{
    43 	{
    44 		
    44 		
   956 If a valid upgraded policy file exist then, database will be updated to later version.
   956 If a valid upgraded policy file exist then, database will be updated to later version.
   957 */
   957 */
   958 void CUriListInterface::InitializePolicyDatabaseL ()
   958 void CUriListInterface::InitializePolicyDatabaseL ()
   959 	{
   959 	{
   960 	//Install the file with ROM Policy data if ROM file exists	
   960 	//Install the file with ROM Policy data if ROM file exists	
   961 	_LIT( KDefaultFilePath, "z:\\private\\20009d70\\defaulttldpolicy.xml");
   961 	_LIT( KDefaultFilePath, "z:\\private\\20009d70\\tldpolicy.xml");
   962 	if( FileExist( KDefaultFilePath() ) )
   962 	if( FileExist( KDefaultFilePath() ) )
   963 		{
   963 		{
   964 		CTldListInitializer* tldlistInitializer = CTldListInitializer::NewL ( *this );
   964 		CTldListInitializer* tldlistInitializer = CTldListInitializer::NewL ( *this );
   965 		CleanupStack::PushL ( tldlistInitializer );
   965 		CleanupStack::PushL ( tldlistInitializer );
   966 		TRAPD ( policyfileerr, tldlistInitializer->ParseDocumentL ( KDefaultFilePath() ) );
   966 		TRAPD ( policyfileerr, tldlistInitializer->ParseDocumentL ( KDefaultFilePath() ) );
   979 */
   979 */
   980 void CUriListInterface::UpgradePolicyDatabaseL()
   980 void CUriListInterface::UpgradePolicyDatabaseL()
   981 	{
   981 	{
   982 	//Upgrade DB if Policy file is installed
   982 	//Upgrade DB if Policy file is installed
   983 	//Get the Installed file path
   983 	//Get the Installed file path
   984 	_LIT(KTldPolicyFile, "c:\\private\\20009d70\\defaulttldpolicy.xml");
   984 	_LIT(KTldPolicyFile, "c:\\private\\20009d70\\tldpolicy.xml");
   985 	if(!FileExist( KTldPolicyFile() ))
   985 	if(!FileExist( KTldPolicyFile() ))
   986 		{
   986 		{
   987 		return;	
   987 		return;	
   988 		}
   988 		}
   989 	//Upgrade DB
   989 	//Upgrade DB
  1071 */
  1071 */
  1072 TBool CUriListInterface::IsBlackListedUriL( const TDesC8& aUri )
  1072 TBool CUriListInterface::IsBlackListedUriL( const TDesC8& aUri )
  1073 	{
  1073 	{
  1074 	TBool blackListed(EFalse);
  1074 	TBool blackListed(EFalse);
  1075 	TPolicyQueryArgs blackListArgs ( InetUriList::EBlackList, InetUriList::EPolicyCharSet );
  1075 	TPolicyQueryArgs blackListArgs ( InetUriList::EBlackList, InetUriList::EPolicyCharSet );
  1076 	if (!QueryForGlobalChars(blackListArgs,aUri,InetUriList::EBlackList))
       
  1077 	{
       
  1078 	CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, blackListArgs );
  1076 	CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, blackListArgs );
  1079 	CleanupStack::PushL(queryFilter);
  1077 	CleanupStack::PushL(queryFilter);
  1080 	MDBTransaction& dbTrans = queryFilter->DBTransaction();
  1078 	MDBTransaction& dbTrans = queryFilter->DBTransaction();
  1081 	if ( dbTrans.Next() && queryFilter->MatchRecordL() )
  1079 	if ( dbTrans.Next() && queryFilter->MatchRecordL() )
  1082 		{
  1080 		{
  1098 		//Requested Policydata Not available for this TLD
  1096 		//Requested Policydata Not available for this TLD
  1099 		CleanupStack::PopAndDestroy(queryFilter);
  1097 		CleanupStack::PopAndDestroy(queryFilter);
  1100 		User::Leave(InetUriList::KErrInvalidTLD);
  1098 		User::Leave(InetUriList::KErrInvalidTLD);
  1101 		}
  1099 		}
  1102 	CleanupStack::PopAndDestroy(queryFilter);
  1100 	CleanupStack::PopAndDestroy(queryFilter);
  1103 	}
       
  1104 	return blackListed;
  1101 	return blackListed;
  1105 	}
  1102 	}
  1106 
       
  1107 TBool CUriListInterface::QueryForGlobalChars(TPolicyQueryArgs &aPolicyQueryArgs,const TDesC8& aUri,InetUriList::TListType aListType )
       
  1108    {
       
  1109      RBuf8 queryBuf; 
       
  1110     TBool blackOrWhiteListed(EFalse);
       
  1111     _LIT8 ( KSelectStmt, "SELECT * FROM %S where ");
       
  1112     CleanupClosePushL ( queryBuf );
       
  1113     queryBuf.CreateL ( KMaxDbStmtLen );
       
  1114     queryBuf.AppendFormat ( KSelectStmt(), &(KTldTblName()) );
       
  1115     _LIT8(KGlobal,"GlobalChars");
       
  1116     const TDesC8& tldName (iStringPool.String (TLDLIST::ETLDName,TLDLIST::Table).DesC());
       
  1117     _LIT8(KSql, "( %S=:V1 ) " );
       
  1118     queryBuf.AppendFormat( KSql,&tldName );
       
  1119 
       
  1120     //Prepare the query
       
  1121     MDBTransaction* dbTrans = iDbAccessor->PrepareTransactionL ( queryBuf );
       
  1122     CleanupStack::PopAndDestroy (); //queryBuf
       
  1123     CleanupStack::PushL ( TCleanupItem ( CUriListInterface::DestroyTransObj, dbTrans ) );
       
  1124     TInt lt = aPolicyQueryArgs.Get ( TPolicyQueryArgs::ETldListType );
       
  1125     RBuf8 upperCaseUri;
       
  1126     upperCaseUri.Create(KGlobal());
       
  1127     upperCaseUri.UpperCase();
       
  1128     dbTrans->BindTextL(0, KGlobal());
       
  1129 
       
  1130 	    // Execute the query
       
  1131     CUriQueryFilter* queryFilter = CTldPolicyDataFilter::NewL ( dbTrans );
       
  1132     upperCaseUri.Close();
       
  1133     CleanupStack::Pop (); // dbTrans
       
  1134 	        
       
  1135 
       
  1136     CleanupStack::PushL(queryFilter);
       
  1137     MDBTransaction& dbTran = queryFilter->DBTransaction();
       
  1138     if ( dbTran.Next() && queryFilter->MatchRecordL() )
       
  1139         {
       
  1140         const TDesC8& charSet = dbTran.ColumnTextL ( TLDLIST::ECharacterSet );
       
  1141         //Policy file contains empty body for Requested white/Black listed data
       
  1142         __ASSERT_ALWAYS( charSet.Length() > 0, User::Invariant() );
       
  1143         RArray<TChar> policyCharList;
       
  1144         CleanupClosePushL(policyCharList);
       
  1145         //Tokenize the results
       
  1146         TokenizeStringL( charSet, policyCharList);
       
  1147         //Get the host and check whether any of these char is in PolicyCharList
       
  1148         HBufC8* host = ExtractHostL(aUri);
       
  1149         CleanupStack::PushL(host);
       
  1150         if (aListType == InetUriList::EBlackList)
       
  1151             {
       
  1152             blackOrWhiteListed = IsBlackListedHost( host->Des(), policyCharList );
       
  1153             }
       
  1154         else
       
  1155             {
       
  1156             blackOrWhiteListed = IsWhiteListedHostL( host->Des(), policyCharList );
       
  1157             }
       
  1158         CleanupStack::PopAndDestroy(2); //host, PolicyCharList
       
  1159         }
       
  1160     else
       
  1161         {
       
  1162         //Requested Policydata Not available for this TLD
       
  1163         CleanupStack::PopAndDestroy(queryFilter);
       
  1164         User::Leave(InetUriList::KErrInvalidTLD);
       
  1165         }
       
  1166     CleanupStack::PopAndDestroy(queryFilter);
       
  1167     return blackOrWhiteListed;
       
  1168     }
       
  1169 
  1103 
  1170 /**
  1104 /**
  1171 return ETrue if Uri is WhiteListed, else return EFalse
  1105 return ETrue if Uri is WhiteListed, else return EFalse
  1172 Leaves with KErrNotSupported if No Policydata is available
  1106 Leaves with KErrNotSupported if No Policydata is available
  1173 */
  1107 */
  1174 TBool CUriListInterface::IsWhiteListedUriL( const TDesC8& aUri )
  1108 TBool CUriListInterface::IsWhiteListedUriL( const TDesC8& aUri )
  1175 	{
  1109 	{
  1176 	TBool whiteListed (EFalse);
  1110 	TBool whiteListed (EFalse);
  1177 	TPolicyQueryArgs whiteListArgs ( InetUriList::EWhiteList, InetUriList::EPolicyCharSet );
  1111 	TPolicyQueryArgs whiteListArgs ( InetUriList::EWhiteList, InetUriList::EPolicyCharSet );
  1178 	if (!QueryForGlobalChars(whiteListArgs, aUri,InetUriList::EWhiteList))
       
  1179 	{
       
  1180 	CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, whiteListArgs );
  1112 	CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, whiteListArgs );
  1181 	CleanupStack::PushL(queryFilter);
  1113 	CleanupStack::PushL(queryFilter);
  1182 	MDBTransaction& dbTrans = queryFilter->DBTransaction();
  1114 	MDBTransaction& dbTrans = queryFilter->DBTransaction();
  1183 	if ( dbTrans.Next() && queryFilter->MatchRecordL() )
  1115 	if ( dbTrans.Next() && queryFilter->MatchRecordL() )
  1184 		{
  1116 		{
  1200 		//Requested Policydata Not available for this TLD
  1132 		//Requested Policydata Not available for this TLD
  1201 		CleanupStack::PopAndDestroy(queryFilter);
  1133 		CleanupStack::PopAndDestroy(queryFilter);
  1202 		User::Leave(InetUriList::KErrInvalidTLD);
  1134 		User::Leave(InetUriList::KErrInvalidTLD);
  1203 		}
  1135 		}
  1204 	CleanupStack::PopAndDestroy(queryFilter);
  1136 	CleanupStack::PopAndDestroy(queryFilter);
  1205 	}
       
  1206 	return whiteListed;
  1137 	return whiteListed;
  1207 	}
  1138 	}
  1208 
  1139 
  1209 /**
  1140 /**
  1210 returns ETrue if aHost is white listed else returns EFalse
  1141 returns ETrue if aHost is white listed else returns EFalse