vpnengine/vpnmanager/src/policyimporter.cpp
branchRCL_3
changeset 46 29c8f9bc68e1
parent 41 e06095241a65
child 49 5960d2d03390
equal deleted inserted replaced
44:735de8341ce4 46:29c8f9bc68e1
    33 #include "cmmanagerutils.h"
    33 #include "cmmanagerutils.h"
    34 #include "log_r6.h"
    34 #include "log_r6.h"
    35 #include "agileprovisionws.h"
    35 #include "agileprovisionws.h"
    36 #include "agileprovisiondefs.h"
    36 #include "agileprovisiondefs.h"
    37 #include "policyinstaller_constants.h"
    37 #include "policyinstaller_constants.h"
       
    38 #include "vpnextapiservantdefs.h"
    38 
    39 
    39 
    40 
    40 
    41 
    41 const TInt KDefaultKeySize(1024);
    42 const TInt KDefaultKeySize(1024);
    42 
    43 
   724                   
   725                   
   725             serverSettingsFile.Append(KProvisionServerSettings);
   726             serverSettingsFile.Append(KProvisionServerSettings);
   726                    
   727                    
   727             if ( iFileUtil.FileExists(serverSettingsFile) )
   728             if ( iFileUtil.FileExists(serverSettingsFile) )
   728                {
   729                {
   729                HBufC8* fileData=iFileUtil.LoadFileDataL(serverSettingsFile);
   730                 _LIT(KCRLF, "\n");
   730                CleanupStack::PushL(fileData);
   731                 RFile serverFile;
   731                HBufC8* newFileData =HBufC8::New(fileData->Length() + KCRLF().Length() + 4);
   732                 User::LeaveIfError(serverFile.Open(iFs,serverSettingsFile, EFileRead));
   732                CleanupStack::PushL(newFileData);
   733                                                
   733                TPtr8 fileDataPtr = newFileData->Des();
   734                 TFileText tx;
   734                fileDataPtr.Copy(*fileData);
   735                 tx.Set(serverFile);
   735                fileDataPtr.Append(KCRLF);
   736 
   736                fileDataPtr.AppendNum(provisionIapId);
   737                 TInt fileSize;
   737                iFileUtil.SaveFileDataL(serverSettingsFile,fileDataPtr);
   738                 User::LeaveIfError(serverFile.Size(fileSize));
   738                CleanupStack::PopAndDestroy(newFileData);
   739 
   739                CleanupStack::PopAndDestroy(fileData);
   740                 HBufC* serverUrlBuf = HBufC::NewLC(fileSize);
       
   741                                           
       
   742                 TPtr serverUrlPtr=serverUrlBuf->Des();
       
   743                                           
       
   744                 User::LeaveIfError(tx.Read(serverUrlPtr));
       
   745                                            
       
   746                             
       
   747                 HBufC* serverNameBuf = HBufC::NewLC(fileSize);
       
   748                 TPtr serverNamePtr=serverNameBuf->Des();
       
   749                                            
       
   750                 User::LeaveIfError(tx.Read(serverNamePtr));
       
   751                                            
       
   752                 
       
   753                 TBuf<KMaxIapLength> iapIdData;
       
   754                 User::LeaveIfError(tx.Read(iapIdData));
       
   755                                 
       
   756                 TBuf<KMaxIapLength> iapModeData;
       
   757                 User::LeaveIfError(tx.Read(iapModeData));
       
   758                 
       
   759                 HBufC* policyFileNameBuf = HBufC::NewLC(fileSize);
       
   760                                 
       
   761                 TPtr policyFileNamePtr = policyFileNameBuf->Des();
       
   762                 User::LeaveIfError(tx.Read(policyFileNamePtr));
       
   763                 
       
   764                 serverFile.Close();
       
   765                 
       
   766                 TBuf<KMaxIapLength> agileIapIdStr;
       
   767                 agileIapIdStr.Num(provisionIapId);
       
   768                 
       
   769                 HBufC* serverFileBuf = HBufC::NewL(fileSize + KCRLF().Length() + agileIapIdStr.Length());
       
   770                 CleanupStack::PushL(serverFileBuf);
       
   771                 TPtr tPtr(serverFileBuf->Des());
       
   772                 tPtr.Copy(serverUrlPtr);
       
   773                 tPtr.Append(KCRLF);
       
   774                 tPtr.Append(serverNamePtr);
       
   775                 tPtr.Append(KCRLF);
       
   776                 tPtr.Append(iapIdData);
       
   777                 tPtr.Append(KCRLF);
       
   778                 tPtr.Append(iapModeData);
       
   779                 tPtr.Append(KCRLF);
       
   780                 tPtr.Append(policyFileNamePtr);
       
   781                 tPtr.Append(KCRLF);
       
   782                 tPtr.AppendNum(provisionIapId);
       
   783                        
       
   784                 RFile file;
       
   785                 CleanupClosePushL(file);
       
   786                 User::LeaveIfError(file.Replace(iFs, serverSettingsFile, EFileWrite));
       
   787                 TPtrC8 ptr8 ( (TUint8*) tPtr.Ptr(), tPtr.Size() );
       
   788                 file.Write ( ptr8 );
       
   789                 file.Close();
       
   790                 
       
   791                 CleanupStack::PopAndDestroy(1);  //file
       
   792                 CleanupStack::PopAndDestroy(serverFileBuf);
       
   793                 CleanupStack::PopAndDestroy(policyFileNameBuf);
       
   794                 CleanupStack::PopAndDestroy(serverNameBuf);
       
   795                 CleanupStack::PopAndDestroy(serverUrlBuf);
       
   796                        
   740                }
   797                }
   741             }
   798             }
   742         }
   799         }
   743 
   800 
   744     CleanupStack::PopAndDestroy(policyInfo);
   801     CleanupStack::PopAndDestroy(policyInfo);
  1294     }
  1351     }
  1295     
  1352     
  1296     
  1353     
  1297     void CPolicyImporter::GetPolicyWsL()
  1354     void CPolicyImporter::GetPolicyWsL()
  1298         {
  1355         {
  1299         const TInt KEolLen = 2;
  1356                
  1300         
       
  1301         delete iAgileProvisionWs;
  1357         delete iAgileProvisionWs;
  1302         iImportDir=KTempDirectory();
  1358         iImportDir=KTempDirectory();
  1303         iFileUtil.CreateDirIfNeededL(iImportDir);
  1359         iFileUtil.CreateDirIfNeededL(iImportDir);
  1304         iAgileProvisionWs = CAgileProvisionWs::NewL();
  1360         iAgileProvisionWs = CAgileProvisionWs::NewL();
  1305              
  1361              
  1306         TFileName serverSettingsFile;
  1362         TFileName serverSettingsFile;
  1307         User::LeaveIfError(iFs.PrivatePath(serverSettingsFile));
  1363         User::LeaveIfError(iFs.PrivatePath(serverSettingsFile));
  1308               
  1364               
  1309         serverSettingsFile.Append(KProvisionServerSettings);
  1365         serverSettingsFile.Append(KProvisionServerSettings);
  1310                     
  1366                     
  1311                
       
  1312         HBufC8* fileData;
       
  1313         TInt endOfLine;
       
  1314         HBufC8* serviceEndPoint;
  1367         HBufC8* serviceEndPoint;
  1315         TUint iapIdInt;
  1368       
  1316         
       
  1317         if ( iFileUtil.FileExists(serverSettingsFile) )
  1369         if ( iFileUtil.FileExists(serverSettingsFile) )
  1318             {
  1370             {
  1319             fileData=iFileUtil.LoadFileDataL(serverSettingsFile);
  1371            
  1320             CleanupStack::PushL(fileData);
       
  1321             endOfLine=fileData->Find(KCRLF);
       
  1322                     
  1372                     
  1323             serviceEndPoint=HBufC8::NewL( KHTTPprefix().Length() + KServiceSuffix().Length() +  fileData->Mid(0,endOfLine).Length());
  1373             RFile serverFile;
       
  1374             User::LeaveIfError(serverFile.Open(iFs,serverSettingsFile, EFileRead));
       
  1375                          
       
  1376             TFileText tx;
       
  1377             tx.Set(serverFile);
       
  1378 
       
  1379             TInt fileSize;
       
  1380             User::LeaveIfError(serverFile.Size(fileSize));
       
  1381 
       
  1382             HBufC* serverUrlBuf = HBufC::NewLC(fileSize);
       
  1383                    
       
  1384             TPtr serverUrlPtr=serverUrlBuf->Des();
       
  1385                    
       
  1386             User::LeaveIfError(tx.Read(serverUrlPtr));
       
  1387                     
       
  1388             HBufC8* serverUrl=iFileUtil.To8BitL(serverUrlPtr);
       
  1389                              
       
  1390             CleanupStack::PopAndDestroy(serverUrlBuf);
       
  1391            
       
  1392             CleanupStack::PushL(serverUrl);
       
  1393             
       
  1394             
       
  1395             serviceEndPoint=HBufC8::NewL( KHTTPprefix().Length() + KServiceSuffix().Length() +  serverUrlPtr.Length());
  1324             CleanupStack::PushL(serviceEndPoint);
  1396             CleanupStack::PushL(serviceEndPoint);
  1325             TPtr8 endPointPtr(serviceEndPoint->Des());
  1397             TPtr8 endPointPtr(serviceEndPoint->Des());
  1326             endPointPtr=KHTTPprefix;
  1398             endPointPtr=KHTTPprefix;
  1327             HBufC8* serviceAddrBuf=(fileData->Mid(0,endOfLine)).AllocL();
  1399                        
  1328             CleanupStack::PushL(serviceAddrBuf);
  1400             // serverUrl ownership transfer
       
  1401             iAgileProvisionWs->SetServiceAddr(serverUrl);
       
  1402             endPointPtr.Append(*serverUrl);
       
  1403             endPointPtr.Append(KServiceSuffix);
  1329             
  1404             
  1330             //serviceAddrBuf ownership transfer
       
  1331             iAgileProvisionWs->SetServiceAddr(serviceAddrBuf);
       
  1332             endPointPtr.Append(fileData->Mid(0,endOfLine));
       
  1333             endPointPtr.Append(KServiceSuffix);
       
  1334             CleanupStack::Pop(serviceAddrBuf);
       
  1335             
  1405             
  1336             TInt startOfLine(endOfLine+KEolLen);
  1406             HBufC* serverNameBuf = HBufC::NewLC(fileSize);
  1337             TPtrC8 nameData=fileData->Right(fileData->Length()-startOfLine);
  1407             TPtr serverNamePtr=serverNameBuf->Des();
  1338             endOfLine=nameData.Find(KCRLF);      
  1408                       
  1339                                         
  1409             User::LeaveIfError(tx.Read(serverNamePtr));
  1340             startOfLine = endOfLine + KEolLen;
  1410                                           
  1341             TPtrC8 iapIdData=nameData.Right(nameData.Length()-startOfLine);
  1411             CleanupStack::PopAndDestroy(serverNameBuf);
  1342             endOfLine=iapIdData.Find(KCRLF);
  1412                                                     
  1343             TLex8 iapIdConverter(iapIdData.Left(endOfLine));
  1413             TBuf<KMaxIapLength> iapIdData;
  1344             
  1414             User::LeaveIfError(tx.Read(iapIdData));
       
  1415                                 
       
  1416             TLex iapIdConverter(iapIdData);
       
  1417             TUint iapIdInt;
  1345             iapIdConverter.Val(iapIdInt);
  1418             iapIdConverter.Val(iapIdInt);
       
  1419          
  1346             iAgileProvisionWs->GetPolicy( *serviceEndPoint, iapIdInt, iStatus );
  1420             iAgileProvisionWs->GetPolicy( *serviceEndPoint, iapIdInt, iStatus );
  1347             CleanupStack::PopAndDestroy(serviceEndPoint);
  1421             CleanupStack::PopAndDestroy(serviceEndPoint);
  1348             CleanupStack::PopAndDestroy(fileData); 
  1422             CleanupStack::Pop(serverUrl);
       
  1423             serverFile.Close();
  1349             }
  1424             }
  1350                 
  1425                 
  1351        
  1426        
  1352         SetActive();
  1427         SetActive();
  1353  
  1428  
  1395         HBufC* policyServerSettingsFileName = HBufC::NewL(KProvisionServerSettings().Length() + privateDir.Length());
  1470         HBufC* policyServerSettingsFileName = HBufC::NewL(KProvisionServerSettings().Length() + privateDir.Length());
  1396         CleanupStack::PushL(policyServerSettingsFileName);
  1471         CleanupStack::PushL(policyServerSettingsFileName);
  1397         TPtr fileNamePtr=policyServerSettingsFileName->Des();
  1472         TPtr fileNamePtr=policyServerSettingsFileName->Des();
  1398         fileNamePtr.Append(privateDir);
  1473         fileNamePtr.Append(privateDir);
  1399         fileNamePtr.Append(KProvisionServerSettings);
  1474         fileNamePtr.Append(KProvisionServerSettings);
  1400             
  1475         _LIT(KCRLF, "\n");                
  1401                 
       
  1402         if ( iFileUtil.FileExists(fileNamePtr) )
  1476         if ( iFileUtil.FileExists(fileNamePtr) )
  1403            {
  1477            {
  1404            HBufC8* fileData=iFileUtil.LoadFileDataL(fileNamePtr);
  1478                              
  1405            CleanupStack::PushL(fileData);
  1479            RFile serverFile;
  1406         
  1480            User::LeaveIfError(serverFile.Open(iFs,fileNamePtr, EFileRead));
  1407            TPtrC8 restOfData = *fileData;
  1481                                    
       
  1482            TFileText tx;
       
  1483            tx.Set(serverFile);
       
  1484 
       
  1485            TInt fileSize;
       
  1486            User::LeaveIfError(serverFile.Size(fileSize));
       
  1487 
       
  1488            HBufC* serverUrlBuf = HBufC::NewLC(fileSize);
       
  1489                               
       
  1490            TPtr serverUrlPtr=serverUrlBuf->Des();
       
  1491                               
       
  1492            User::LeaveIfError(tx.Read(serverUrlPtr));
       
  1493                                
       
  1494            HBufC* serverNameBuf = HBufC::NewLC(fileSize);
       
  1495            TPtr serverNamePtr=serverNameBuf->Des();
       
  1496                                
       
  1497            User::LeaveIfError(tx.Read(serverNamePtr));
       
  1498                                
  1408            
  1499            
  1409            TInt bofInt;
  1500            TBuf<KMaxIapLength> iapIdData;
  1410            TInt line=1;             
  1501            User::LeaveIfError(tx.Read(iapIdData));
  1411            while ( (bofInt=restOfData.Find(KCRLF)) != KErrNotFound && line < KPolicyFileLine )
  1502                     
  1412                  {
  1503            TBuf<KMaxIapLength> iapModeData;
  1413                  restOfData.Set(restOfData.Mid(bofInt + KCRLF().Length()));
  1504            User::LeaveIfError(tx.Read(iapModeData));
  1414                  line++;                                  
  1505                                        
  1415                  }
  1506            TBuf<KMaxIapLength> iapIdBuf;
  1416            TInt iapIdStart=restOfData.Find(KCRLF);
  1507            
  1417            HBufC16* iapIdBuf;
  1508            HBufC* policyFilePath;                               
  1418            if ( iapIdStart!=KErrNotFound )
  1509            HBufC* policyFileNameBuf = HBufC::NewLC(fileSize);
       
  1510            TPtr policyFileNamePtr = policyFileNameBuf->Des();
       
  1511            
       
  1512            if (  tx.Read(policyFileNamePtr) == KErrNone )
       
  1513                {
       
  1514                
       
  1515                tx.Read(iapIdBuf);
       
  1516                TLex iapIdConverter(iapIdBuf);
       
  1517                iapIdConverter.Val(iAgileProvisionAPId,EDecimal);
       
  1518                                   
       
  1519                policyFilePath = iFileUtil.MakeFileNameLC(privateDir, *policyFileNameBuf, KPolFileExt);
       
  1520                }
       
  1521            else
       
  1522                {
       
  1523                policyFilePath =iFileUtil.MakeFileNameLC(privateDir, *iNewPolicyId, KPolFileExt);
       
  1524                }
       
  1525 
       
  1526            serverFile.Close();
       
  1527            
       
  1528            TBuf<KMaxIapLength> iapAgileIdStr;
       
  1529            //server configuration file includes installed policy file name and policy exists.
       
  1530            if ( (iAgileProvisionAPId > 0) && iFileUtil.FileExists(*policyFilePath) )
       
  1531               { 
       
  1532               iPolicyIdBuf.Append(*policyFileNameBuf);
       
  1533               iNewPolicyIdBuf=iPolicyIdBuf;
       
  1534               iPolicyStore.ReplacePolicyL(iPolicyIdBuf,*iNewPolicyId);
       
  1535               iNewPolicyId= &iNewPolicyIdBuf;
       
  1536               }
       
  1537                //either first configuration or policy removed
       
  1538            else
  1419               {
  1539               {
  1420               TPtrC8 iapIdPtr=restOfData.Mid(iapIdStart + KCRLF().Length(),restOfData.Length()-KCRLF().Length()-iapIdStart);
       
  1421               iapIdBuf=iFileUtil.To16BitL(iapIdPtr);
       
  1422               CleanupStack::PushL(iapIdBuf);
       
  1423               TLex iapIdConverter(*iapIdBuf);
       
  1424               iapIdConverter.Val(iAgileProvisionAPId,EDecimal);     
       
  1425               CleanupStack::PopAndDestroy(iapIdBuf);           
       
  1426               }
       
  1427            
       
  1428            if ( iAgileProvisionAPId >0)
       
  1429                restOfData.Set(restOfData.Mid(0,iapIdStart));
       
  1430                HBufC16* policyFileNameBuf = iFileUtil.To16BitL(restOfData);
       
  1431                CleanupStack::PushL(policyFileNameBuf);
       
  1432                HBufC* policyFilePath = iFileUtil.MakeFileNameLC(privateDir, *policyFileNameBuf, KPolFileExt);
       
  1433                
  1540                
  1434                //server configuration file includes installed policy file name and policy exists.
  1541                HBufC* serverFileBuf = HBufC::NewL(fileSize + KCRLF().Length() + iNewPolicyId->Length() + KMaxIapLength);
  1435                if ( line == KPolicyFileLine && iFileUtil.FileExists(*policyFilePath) )
  1542                CleanupStack::PushL(serverFileBuf);
  1436                    { 
  1543                TPtr tPtr(serverFileBuf->Des());
  1437                    HBufC16* restOfDataBuf=iFileUtil.To16BitL(restOfData);
  1544                tPtr.Copy(serverUrlPtr);
  1438                    CleanupStack::PushL(restOfDataBuf);
  1545                tPtr.Append(KCRLF);
  1439                    iPolicyIdBuf.Append(*restOfDataBuf);
  1546                tPtr.Append(serverNamePtr);
  1440                    iNewPolicyIdBuf=iPolicyIdBuf;
  1547                tPtr.Append(KCRLF);
  1441                    iPolicyStore.ReplacePolicyL(iPolicyIdBuf,*iNewPolicyId);
  1548                tPtr.Append(iapIdData);
  1442                    iNewPolicyId= &iNewPolicyIdBuf;
  1549                tPtr.Append(KCRLF);
  1443                    CleanupStack::PopAndDestroy(restOfDataBuf);
  1550                tPtr.Append(iapModeData);
       
  1551                                              
       
  1552                //policy removed
       
  1553                if ( !iFileUtil.FileExists(*policyFilePath) )
       
  1554                   {
       
  1555                    tPtr.Append(KCRLF);
       
  1556                    tPtr.Append(*iNewPolicyId);
       
  1557                    tPtr.Append(KCRLF);
       
  1558                    iapAgileIdStr.Num(iAgileProvisionAPId);
       
  1559                    tPtr.Append(iapAgileIdStr);
  1444                    }
  1560                    }
  1445                //either first configuration or policy removed
  1561                //first configuration
  1446                else
  1562                else
  1447                    {
  1563                    {
  1448                    HBufC* serverFile = HBufC::NewL(fileData->Length() + KCRLF().Length() + iNewPolicyId->Length());
  1564                    tPtr.Append(KCRLF);
  1449                    CleanupStack::PushL(serverFile);
  1565                    tPtr.Append(*iNewPolicyId);
  1450                    TPtr tPtr(serverFile->Des());
       
  1451                    HBufC16* fileData16=iFileUtil.To16BitL(*fileData);
       
  1452                    CleanupStack::PushL(fileData16);
       
  1453                    tPtr.Copy(*fileData16);
       
  1454                    _LIT(KCRLF, "\r\n");
       
  1455               
       
  1456                    //policy removed
       
  1457                    if ( line == KPolicyFileLine )
       
  1458                        {
       
  1459                        TInt lengthOfPolicyId=restOfData.Length();
       
  1460                        tPtr.Replace(fileData->Length()-lengthOfPolicyId,lengthOfPolicyId,*iNewPolicyId);
       
  1461                        }
       
  1462                    //first configuration
       
  1463                    else
       
  1464                        {
       
  1465                        tPtr.Append(KCRLF);
       
  1466                        tPtr.Append(*iNewPolicyId);
       
  1467                        }
       
  1468                    iFileUtil.SaveFileDataL(fileNamePtr,tPtr);
       
  1469                    
  1566                    
  1470                    CleanupStack::PopAndDestroy(fileData16);
       
  1471                    CleanupStack::PopAndDestroy(serverFile);
       
  1472                    }
  1567                    }
       
  1568                RFile file;
       
  1569                CleanupClosePushL(file);
       
  1570                User::LeaveIfError(file.Replace(iFs, fileNamePtr, EFileWrite));
       
  1571                      
       
  1572                TPtrC8 ptr8 ( (TUint8*) tPtr.Ptr(), tPtr.Size() );
       
  1573                file.Write ( ptr8 );
       
  1574                file.Close();
       
  1575                CleanupStack::PopAndDestroy(1); //file   
       
  1576                CleanupStack::PopAndDestroy(serverFileBuf);
       
  1577                }
  1473              
  1578              
  1474                CleanupStack::PopAndDestroy(policyFilePath);
  1579                CleanupStack::PopAndDestroy(policyFilePath);
  1475                CleanupStack::PopAndDestroy(policyFileNameBuf); 
  1580                CleanupStack::PopAndDestroy(policyFileNameBuf); 
  1476                CleanupStack::PopAndDestroy(fileData);
  1581                CleanupStack::PopAndDestroy(serverNameBuf);
       
  1582                CleanupStack::PopAndDestroy(serverUrlBuf);
  1477                CleanupStack::PopAndDestroy(policyServerSettingsFileName);
  1583                CleanupStack::PopAndDestroy(policyServerSettingsFileName);
  1478            }
  1584            }
  1479 
  1585 
  1480     }
  1586     }
  1481 /***/
  1587 /***/