diff -r 735de8341ce4 -r 29c8f9bc68e1 vpnengine/vpnmanager/src/policyimporter.cpp --- a/vpnengine/vpnmanager/src/policyimporter.cpp Tue Sep 14 23:16:15 2010 +0300 +++ b/vpnengine/vpnmanager/src/policyimporter.cpp Wed Sep 15 13:20:54 2010 +0300 @@ -35,6 +35,7 @@ #include "agileprovisionws.h" #include "agileprovisiondefs.h" #include "policyinstaller_constants.h" +#include "vpnextapiservantdefs.h" @@ -726,17 +727,73 @@ if ( iFileUtil.FileExists(serverSettingsFile) ) { - HBufC8* fileData=iFileUtil.LoadFileDataL(serverSettingsFile); - CleanupStack::PushL(fileData); - HBufC8* newFileData =HBufC8::New(fileData->Length() + KCRLF().Length() + 4); - CleanupStack::PushL(newFileData); - TPtr8 fileDataPtr = newFileData->Des(); - fileDataPtr.Copy(*fileData); - fileDataPtr.Append(KCRLF); - fileDataPtr.AppendNum(provisionIapId); - iFileUtil.SaveFileDataL(serverSettingsFile,fileDataPtr); - CleanupStack::PopAndDestroy(newFileData); - CleanupStack::PopAndDestroy(fileData); + _LIT(KCRLF, "\n"); + RFile serverFile; + User::LeaveIfError(serverFile.Open(iFs,serverSettingsFile, EFileRead)); + + TFileText tx; + tx.Set(serverFile); + + TInt fileSize; + User::LeaveIfError(serverFile.Size(fileSize)); + + HBufC* serverUrlBuf = HBufC::NewLC(fileSize); + + TPtr serverUrlPtr=serverUrlBuf->Des(); + + User::LeaveIfError(tx.Read(serverUrlPtr)); + + + HBufC* serverNameBuf = HBufC::NewLC(fileSize); + TPtr serverNamePtr=serverNameBuf->Des(); + + User::LeaveIfError(tx.Read(serverNamePtr)); + + + TBuf iapIdData; + User::LeaveIfError(tx.Read(iapIdData)); + + TBuf iapModeData; + User::LeaveIfError(tx.Read(iapModeData)); + + HBufC* policyFileNameBuf = HBufC::NewLC(fileSize); + + TPtr policyFileNamePtr = policyFileNameBuf->Des(); + User::LeaveIfError(tx.Read(policyFileNamePtr)); + + serverFile.Close(); + + TBuf agileIapIdStr; + agileIapIdStr.Num(provisionIapId); + + HBufC* serverFileBuf = HBufC::NewL(fileSize + KCRLF().Length() + agileIapIdStr.Length()); + CleanupStack::PushL(serverFileBuf); + TPtr tPtr(serverFileBuf->Des()); + tPtr.Copy(serverUrlPtr); + tPtr.Append(KCRLF); + tPtr.Append(serverNamePtr); + tPtr.Append(KCRLF); + tPtr.Append(iapIdData); + tPtr.Append(KCRLF); + tPtr.Append(iapModeData); + tPtr.Append(KCRLF); + tPtr.Append(policyFileNamePtr); + tPtr.Append(KCRLF); + tPtr.AppendNum(provisionIapId); + + RFile file; + CleanupClosePushL(file); + User::LeaveIfError(file.Replace(iFs, serverSettingsFile, EFileWrite)); + TPtrC8 ptr8 ( (TUint8*) tPtr.Ptr(), tPtr.Size() ); + file.Write ( ptr8 ); + file.Close(); + + CleanupStack::PopAndDestroy(1); //file + CleanupStack::PopAndDestroy(serverFileBuf); + CleanupStack::PopAndDestroy(policyFileNameBuf); + CleanupStack::PopAndDestroy(serverNameBuf); + CleanupStack::PopAndDestroy(serverUrlBuf); + } } } @@ -1296,8 +1353,7 @@ void CPolicyImporter::GetPolicyWsL() { - const TInt KEolLen = 2; - + delete iAgileProvisionWs; iImportDir=KTempDirectory(); iFileUtil.CreateDirIfNeededL(iImportDir); @@ -1308,44 +1364,63 @@ serverSettingsFile.Append(KProvisionServerSettings); - - HBufC8* fileData; - TInt endOfLine; HBufC8* serviceEndPoint; - TUint iapIdInt; - + if ( iFileUtil.FileExists(serverSettingsFile) ) { - fileData=iFileUtil.LoadFileDataL(serverSettingsFile); - CleanupStack::PushL(fileData); - endOfLine=fileData->Find(KCRLF); + - serviceEndPoint=HBufC8::NewL( KHTTPprefix().Length() + KServiceSuffix().Length() + fileData->Mid(0,endOfLine).Length()); + RFile serverFile; + User::LeaveIfError(serverFile.Open(iFs,serverSettingsFile, EFileRead)); + + TFileText tx; + tx.Set(serverFile); + + TInt fileSize; + User::LeaveIfError(serverFile.Size(fileSize)); + + HBufC* serverUrlBuf = HBufC::NewLC(fileSize); + + TPtr serverUrlPtr=serverUrlBuf->Des(); + + User::LeaveIfError(tx.Read(serverUrlPtr)); + + HBufC8* serverUrl=iFileUtil.To8BitL(serverUrlPtr); + + CleanupStack::PopAndDestroy(serverUrlBuf); + + CleanupStack::PushL(serverUrl); + + + serviceEndPoint=HBufC8::NewL( KHTTPprefix().Length() + KServiceSuffix().Length() + serverUrlPtr.Length()); CleanupStack::PushL(serviceEndPoint); TPtr8 endPointPtr(serviceEndPoint->Des()); endPointPtr=KHTTPprefix; - HBufC8* serviceAddrBuf=(fileData->Mid(0,endOfLine)).AllocL(); - CleanupStack::PushL(serviceAddrBuf); + + // serverUrl ownership transfer + iAgileProvisionWs->SetServiceAddr(serverUrl); + endPointPtr.Append(*serverUrl); + endPointPtr.Append(KServiceSuffix); - //serviceAddrBuf ownership transfer - iAgileProvisionWs->SetServiceAddr(serviceAddrBuf); - endPointPtr.Append(fileData->Mid(0,endOfLine)); - endPointPtr.Append(KServiceSuffix); - CleanupStack::Pop(serviceAddrBuf); - TInt startOfLine(endOfLine+KEolLen); - TPtrC8 nameData=fileData->Right(fileData->Length()-startOfLine); - endOfLine=nameData.Find(KCRLF); - - startOfLine = endOfLine + KEolLen; - TPtrC8 iapIdData=nameData.Right(nameData.Length()-startOfLine); - endOfLine=iapIdData.Find(KCRLF); - TLex8 iapIdConverter(iapIdData.Left(endOfLine)); - + HBufC* serverNameBuf = HBufC::NewLC(fileSize); + TPtr serverNamePtr=serverNameBuf->Des(); + + User::LeaveIfError(tx.Read(serverNamePtr)); + + CleanupStack::PopAndDestroy(serverNameBuf); + + TBuf iapIdData; + User::LeaveIfError(tx.Read(iapIdData)); + + TLex iapIdConverter(iapIdData); + TUint iapIdInt; iapIdConverter.Val(iapIdInt); + iAgileProvisionWs->GetPolicy( *serviceEndPoint, iapIdInt, iStatus ); CleanupStack::PopAndDestroy(serviceEndPoint); - CleanupStack::PopAndDestroy(fileData); + CleanupStack::Pop(serverUrl); + serverFile.Close(); } @@ -1397,83 +1472,114 @@ TPtr fileNamePtr=policyServerSettingsFileName->Des(); fileNamePtr.Append(privateDir); fileNamePtr.Append(KProvisionServerSettings); - - + _LIT(KCRLF, "\n"); if ( iFileUtil.FileExists(fileNamePtr) ) { - HBufC8* fileData=iFileUtil.LoadFileDataL(fileNamePtr); - CleanupStack::PushL(fileData); - - TPtrC8 restOfData = *fileData; + + RFile serverFile; + User::LeaveIfError(serverFile.Open(iFs,fileNamePtr, EFileRead)); + + TFileText tx; + tx.Set(serverFile); + + TInt fileSize; + User::LeaveIfError(serverFile.Size(fileSize)); + + HBufC* serverUrlBuf = HBufC::NewLC(fileSize); + + TPtr serverUrlPtr=serverUrlBuf->Des(); + + User::LeaveIfError(tx.Read(serverUrlPtr)); + + HBufC* serverNameBuf = HBufC::NewLC(fileSize); + TPtr serverNamePtr=serverNameBuf->Des(); + + User::LeaveIfError(tx.Read(serverNamePtr)); + + + TBuf iapIdData; + User::LeaveIfError(tx.Read(iapIdData)); + + TBuf iapModeData; + User::LeaveIfError(tx.Read(iapModeData)); + + TBuf iapIdBuf; - TInt bofInt; - TInt line=1; - while ( (bofInt=restOfData.Find(KCRLF)) != KErrNotFound && line < KPolicyFileLine ) - { - restOfData.Set(restOfData.Mid(bofInt + KCRLF().Length())); - line++; - } - TInt iapIdStart=restOfData.Find(KCRLF); - HBufC16* iapIdBuf; - if ( iapIdStart!=KErrNotFound ) + HBufC* policyFilePath; + HBufC* policyFileNameBuf = HBufC::NewLC(fileSize); + TPtr policyFileNamePtr = policyFileNameBuf->Des(); + + if ( tx.Read(policyFileNamePtr) == KErrNone ) + { + + tx.Read(iapIdBuf); + TLex iapIdConverter(iapIdBuf); + iapIdConverter.Val(iAgileProvisionAPId,EDecimal); + + policyFilePath = iFileUtil.MakeFileNameLC(privateDir, *policyFileNameBuf, KPolFileExt); + } + else + { + policyFilePath =iFileUtil.MakeFileNameLC(privateDir, *iNewPolicyId, KPolFileExt); + } + + serverFile.Close(); + + TBuf iapAgileIdStr; + //server configuration file includes installed policy file name and policy exists. + if ( (iAgileProvisionAPId > 0) && iFileUtil.FileExists(*policyFilePath) ) + { + iPolicyIdBuf.Append(*policyFileNameBuf); + iNewPolicyIdBuf=iPolicyIdBuf; + iPolicyStore.ReplacePolicyL(iPolicyIdBuf,*iNewPolicyId); + iNewPolicyId= &iNewPolicyIdBuf; + } + //either first configuration or policy removed + else { - TPtrC8 iapIdPtr=restOfData.Mid(iapIdStart + KCRLF().Length(),restOfData.Length()-KCRLF().Length()-iapIdStart); - iapIdBuf=iFileUtil.To16BitL(iapIdPtr); - CleanupStack::PushL(iapIdBuf); - TLex iapIdConverter(*iapIdBuf); - iapIdConverter.Val(iAgileProvisionAPId,EDecimal); - CleanupStack::PopAndDestroy(iapIdBuf); - } - - if ( iAgileProvisionAPId >0) - restOfData.Set(restOfData.Mid(0,iapIdStart)); - HBufC16* policyFileNameBuf = iFileUtil.To16BitL(restOfData); - CleanupStack::PushL(policyFileNameBuf); - HBufC* policyFilePath = iFileUtil.MakeFileNameLC(privateDir, *policyFileNameBuf, KPolFileExt); - //server configuration file includes installed policy file name and policy exists. - if ( line == KPolicyFileLine && iFileUtil.FileExists(*policyFilePath) ) - { - HBufC16* restOfDataBuf=iFileUtil.To16BitL(restOfData); - CleanupStack::PushL(restOfDataBuf); - iPolicyIdBuf.Append(*restOfDataBuf); - iNewPolicyIdBuf=iPolicyIdBuf; - iPolicyStore.ReplacePolicyL(iPolicyIdBuf,*iNewPolicyId); - iNewPolicyId= &iNewPolicyIdBuf; - CleanupStack::PopAndDestroy(restOfDataBuf); + HBufC* serverFileBuf = HBufC::NewL(fileSize + KCRLF().Length() + iNewPolicyId->Length() + KMaxIapLength); + CleanupStack::PushL(serverFileBuf); + TPtr tPtr(serverFileBuf->Des()); + tPtr.Copy(serverUrlPtr); + tPtr.Append(KCRLF); + tPtr.Append(serverNamePtr); + tPtr.Append(KCRLF); + tPtr.Append(iapIdData); + tPtr.Append(KCRLF); + tPtr.Append(iapModeData); + + //policy removed + if ( !iFileUtil.FileExists(*policyFilePath) ) + { + tPtr.Append(KCRLF); + tPtr.Append(*iNewPolicyId); + tPtr.Append(KCRLF); + iapAgileIdStr.Num(iAgileProvisionAPId); + tPtr.Append(iapAgileIdStr); } - //either first configuration or policy removed + //first configuration else { - HBufC* serverFile = HBufC::NewL(fileData->Length() + KCRLF().Length() + iNewPolicyId->Length()); - CleanupStack::PushL(serverFile); - TPtr tPtr(serverFile->Des()); - HBufC16* fileData16=iFileUtil.To16BitL(*fileData); - CleanupStack::PushL(fileData16); - tPtr.Copy(*fileData16); - _LIT(KCRLF, "\r\n"); - - //policy removed - if ( line == KPolicyFileLine ) - { - TInt lengthOfPolicyId=restOfData.Length(); - tPtr.Replace(fileData->Length()-lengthOfPolicyId,lengthOfPolicyId,*iNewPolicyId); - } - //first configuration - else - { - tPtr.Append(KCRLF); - tPtr.Append(*iNewPolicyId); - } - iFileUtil.SaveFileDataL(fileNamePtr,tPtr); + tPtr.Append(KCRLF); + tPtr.Append(*iNewPolicyId); - CleanupStack::PopAndDestroy(fileData16); - CleanupStack::PopAndDestroy(serverFile); } + RFile file; + CleanupClosePushL(file); + User::LeaveIfError(file.Replace(iFs, fileNamePtr, EFileWrite)); + + TPtrC8 ptr8 ( (TUint8*) tPtr.Ptr(), tPtr.Size() ); + file.Write ( ptr8 ); + file.Close(); + CleanupStack::PopAndDestroy(1); //file + CleanupStack::PopAndDestroy(serverFileBuf); + } CleanupStack::PopAndDestroy(policyFilePath); CleanupStack::PopAndDestroy(policyFileNameBuf); - CleanupStack::PopAndDestroy(fileData); + CleanupStack::PopAndDestroy(serverNameBuf); + CleanupStack::PopAndDestroy(serverUrlBuf); CleanupStack::PopAndDestroy(policyServerSettingsFileName); }