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\\tldpolicy.xml"); |
39 _LIT(KPolicyFile, ":\\private\\20009D70\\defaulttldpolicy.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\\tldpolicy.xml"); |
961 _LIT( KDefaultFilePath, "z:\\private\\20009d70\\defaulttldpolicy.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() ) ); |
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 { |
1076 CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, blackListArgs ); |
1078 CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, blackListArgs ); |
1077 CleanupStack::PushL(queryFilter); |
1079 CleanupStack::PushL(queryFilter); |
1078 MDBTransaction& dbTrans = queryFilter->DBTransaction(); |
1080 MDBTransaction& dbTrans = queryFilter->DBTransaction(); |
1079 if ( dbTrans.Next() && queryFilter->MatchRecordL() ) |
1081 if ( dbTrans.Next() && queryFilter->MatchRecordL() ) |
1080 { |
1082 { |
1096 //Requested Policydata Not available for this TLD |
1098 //Requested Policydata Not available for this TLD |
1097 CleanupStack::PopAndDestroy(queryFilter); |
1099 CleanupStack::PopAndDestroy(queryFilter); |
1098 User::Leave(InetUriList::KErrInvalidTLD); |
1100 User::Leave(InetUriList::KErrInvalidTLD); |
1099 } |
1101 } |
1100 CleanupStack::PopAndDestroy(queryFilter); |
1102 CleanupStack::PopAndDestroy(queryFilter); |
|
1103 } |
1101 return blackListed; |
1104 return blackListed; |
1102 } |
1105 } |
|
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 } |
1103 |
1169 |
1104 /** |
1170 /** |
1105 return ETrue if Uri is WhiteListed, else return EFalse |
1171 return ETrue if Uri is WhiteListed, else return EFalse |
1106 Leaves with KErrNotSupported if No Policydata is available |
1172 Leaves with KErrNotSupported if No Policydata is available |
1107 */ |
1173 */ |
1108 TBool CUriListInterface::IsWhiteListedUriL( const TDesC8& aUri ) |
1174 TBool CUriListInterface::IsWhiteListedUriL( const TDesC8& aUri ) |
1109 { |
1175 { |
1110 TBool whiteListed (EFalse); |
1176 TBool whiteListed (EFalse); |
1111 TPolicyQueryArgs whiteListArgs ( InetUriList::EWhiteList, InetUriList::EPolicyCharSet ); |
1177 TPolicyQueryArgs whiteListArgs ( InetUriList::EWhiteList, InetUriList::EPolicyCharSet ); |
|
1178 if (!QueryForGlobalChars(whiteListArgs, aUri,InetUriList::EWhiteList)) |
|
1179 { |
1112 CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, whiteListArgs ); |
1180 CUriQueryFilter* queryFilter = QueryWithTldL ( aUri, whiteListArgs ); |
1113 CleanupStack::PushL(queryFilter); |
1181 CleanupStack::PushL(queryFilter); |
1114 MDBTransaction& dbTrans = queryFilter->DBTransaction(); |
1182 MDBTransaction& dbTrans = queryFilter->DBTransaction(); |
1115 if ( dbTrans.Next() && queryFilter->MatchRecordL() ) |
1183 if ( dbTrans.Next() && queryFilter->MatchRecordL() ) |
1116 { |
1184 { |