vpnengine/vpnmanager/src/policyimporter.cpp
branchRCL_3
changeset 46 29c8f9bc68e1
parent 41 e06095241a65
child 49 5960d2d03390
--- 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<KMaxIapLength> iapIdData;
+                User::LeaveIfError(tx.Read(iapIdData));
+                                
+                TBuf<KMaxIapLength> iapModeData;
+                User::LeaveIfError(tx.Read(iapModeData));
+                
+                HBufC* policyFileNameBuf = HBufC::NewLC(fileSize);
+                                
+                TPtr policyFileNamePtr = policyFileNameBuf->Des();
+                User::LeaveIfError(tx.Read(policyFileNamePtr));
+                
+                serverFile.Close();
+                
+                TBuf<KMaxIapLength> 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<KMaxIapLength> 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<KMaxIapLength> iapIdData;
+           User::LeaveIfError(tx.Read(iapIdData));
+                    
+           TBuf<KMaxIapLength> iapModeData;
+           User::LeaveIfError(tx.Read(iapModeData));
+                                       
+           TBuf<KMaxIapLength> 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<KMaxIapLength> 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);
            }