45 EStateAfterImportUserPrivKey, |
53 EStateAfterImportUserPrivKey, |
46 EStateAttachCertificate, |
54 EStateAttachCertificate, |
47 EStateAfterAttachCertificate, |
55 EStateAfterAttachCertificate, |
48 EStateImportPinAndPol, |
56 EStateImportPinAndPol, |
49 EStateCreateVpnDestination, |
57 EStateCreateVpnDestination, |
50 EStateEndPolicyImport |
58 EStateEndPolicyImport, |
|
59 EStateGetPolicyProvisionService, |
|
60 EStateAfterGetPolicyProvisionService |
51 }; |
61 }; |
52 |
62 |
53 CPolicyImporter* CPolicyImporter::NewL(const RMessage2& aMessage, CVpnApiServant& aVpnApiServant, |
63 CPolicyImporter* CPolicyImporter::NewL(const RMessage2& aMessage, CVpnApiServant& aVpnApiServant, |
54 CPolicyStore& aPolicyStore, RFs& aFs) |
64 CPolicyStore& aPolicyStore, RFs& aFs) |
55 { |
65 { |
595 |
616 |
596 void CPolicyImporter::StateImportPinAndPolL() |
617 void CPolicyImporter::StateImportPinAndPolL() |
597 { |
618 { |
598 LOG_("-> CPolicyImporter::StateImportPinAndPolL()"); |
619 LOG_("-> CPolicyImporter::StateImportPinAndPolL()"); |
599 SetCurrState(EStateImportPinAndPol); |
620 SetCurrState(EStateImportPinAndPol); |
600 |
621 HBufC* pinFile; |
601 HBufC* pinFile = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KPinFileExt); |
622 HBufC* polFile; |
602 HBufC* polFile = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KPolFileExt); |
623 if ( !iAgileProvision ) |
|
624 { |
|
625 pinFile = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KPinFileExt); |
|
626 polFile = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KPolFileExt); |
|
627 } |
|
628 else |
|
629 { |
|
630 pinFile = iFileUtil.MakeFileNameLC(KTempDirectory(), KAgileProvisionPinFileName(), KNullDesc()); |
|
631 polFile = iFileUtil.MakeFileNameLC(KTempDirectory(), KAgileProvisionPolicyFileName(), KNullDesc()); |
|
632 |
|
633 HBufC8* infoData=NULL; |
|
634 |
|
635 if ( iFileUtil.FileExists(*polFile) ) |
|
636 { |
|
637 infoData=GetPolicyNameL(polFile); |
|
638 CleanupStack::PushL(infoData); |
|
639 } |
|
640 else |
|
641 User::Leave(KErrNotFound); |
|
642 |
|
643 |
|
644 HBufC8* pinFileData = HBufC8::NewLC(KNullDesc().Length() + KPinFileNameTitle().Length() + KCRLF().Length() + infoData->Length()); |
|
645 TPtr8 pinFilePtr (pinFileData->Des()) ; |
|
646 pinFilePtr.Append(KPinFileNameTitle); |
|
647 pinFilePtr.Append(KCRLF); |
|
648 pinFilePtr.Append(*infoData); |
|
649 |
|
650 iFileUtil.SaveFileDataL(*pinFile, *pinFileData); |
|
651 |
|
652 CleanupStack::PopAndDestroy(pinFileData); |
|
653 CleanupStack::PopAndDestroy(infoData); |
|
654 } |
|
655 |
603 |
656 |
604 if (!iFileUtil.FileExists(*pinFile)) |
657 if (!iFileUtil.FileExists(*pinFile)) |
605 { |
658 { |
606 LOG_("<- CPolicyImporter::StateImportPinAndPolL() LEAVE: KVpnErrNoPolicyInfoFile"); |
659 LOG_("<- CPolicyImporter::StateImportPinAndPolL() LEAVE: KVpnErrNoPolicyInfoFile"); |
607 User::Leave(KVpnErrNoPolicyInfoFile); |
660 User::Leave(KVpnErrNoPolicyInfoFile); |
637 void CPolicyImporter::StateCreateVpnDestinationL() |
695 void CPolicyImporter::StateCreateVpnDestinationL() |
638 { |
696 { |
639 LOG_("-> CPolicyImporter::StateCreateVpnDestinationL()"); |
697 LOG_("-> CPolicyImporter::StateCreateVpnDestinationL()"); |
640 SetCurrState(EStateCreateVpnDestination); |
698 SetCurrState(EStateCreateVpnDestination); |
641 |
699 |
642 //Gets the IAP name from policy name |
700 //Gets the IAP name from policy name |
643 TVpnPolicyInfo* policyInfo = new (ELeave) TVpnPolicyInfo; |
701 TVpnPolicyInfo* policyInfo = new (ELeave) TVpnPolicyInfo; |
644 CleanupDeletePushL(policyInfo); |
702 CleanupDeletePushL(policyInfo); |
645 |
703 |
646 User::LeaveIfError(iPolicyStore.GetPolicyInfo(*iNewPolicyId, *policyInfo)); |
704 User::LeaveIfError(iPolicyStore.GetPolicyInfo(*iNewPolicyId, *policyInfo)); |
647 |
705 TBool iapExist(EFalse); |
648 CmManagerUtils::CreateVPNConnectionMethodToIntranetL(*policyInfo, |
706 if ( !iAgileProvision ) |
649 *(iVpnApiServant.iEventLogger)); |
707 TUint32 provisionIapId = CmManagerUtils::CreateVPNConnectionMethodToIntranetL(*policyInfo, |
650 |
708 *(iVpnApiServant.iEventLogger)); |
651 CleanupStack::PopAndDestroy(); //policyInfo |
709 else |
|
710 { |
|
711 |
|
712 if ( iAgileProvisionAPId > 0 ) |
|
713 { |
|
714 iapExist=CmManagerUtils::ProvisionIAPNameExistL(iAgileProvisionAPId); |
|
715 } |
|
716 |
|
717 if ( !iapExist || iAgileProvisionAPId == 0) |
|
718 { |
|
719 TUint32 provisionIapId = CmManagerUtils::CreateVPNConnectionMethodToIntranetL(*policyInfo, |
|
720 *(iVpnApiServant.iEventLogger)); |
|
721 |
|
722 TFileName serverSettingsFile; |
|
723 User::LeaveIfError(iFs.PrivatePath(serverSettingsFile)); |
|
724 |
|
725 serverSettingsFile.Append(KProvisionServerSettings); |
|
726 |
|
727 if ( iFileUtil.FileExists(serverSettingsFile) ) |
|
728 { |
|
729 HBufC8* fileData=iFileUtil.LoadFileDataL(serverSettingsFile); |
|
730 CleanupStack::PushL(fileData); |
|
731 HBufC8* newFileData =HBufC8::New(fileData->Length() + KCRLF().Length() + 4); |
|
732 CleanupStack::PushL(newFileData); |
|
733 TPtr8 fileDataPtr = newFileData->Des(); |
|
734 fileDataPtr.Copy(*fileData); |
|
735 fileDataPtr.Append(KCRLF); |
|
736 fileDataPtr.AppendNum(provisionIapId); |
|
737 iFileUtil.SaveFileDataL(serverSettingsFile,fileDataPtr); |
|
738 CleanupStack::PopAndDestroy(newFileData); |
|
739 CleanupStack::PopAndDestroy(fileData); |
|
740 } |
|
741 } |
|
742 } |
|
743 |
|
744 CleanupStack::PopAndDestroy(policyInfo); |
652 GotoState(EStateEndPolicyImport); |
745 GotoState(EStateEndPolicyImport); |
653 |
746 |
654 LOG_("<- CPolicyImporter::StateCreateVpnDestinationL()"); |
747 LOG_("<- CPolicyImporter::StateCreateVpnDestinationL()"); |
655 } |
748 } |
656 |
749 |
666 |
759 |
667 HBufC* fileFilter = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KAllFilesPat); |
760 HBufC* fileFilter = iFileUtil.MakeFileNameLC(iImportDir, iCurrPolicyId, KAllFilesPat); |
668 iFileUtil.DeleteFilesL(*fileFilter); |
761 iFileUtil.DeleteFilesL(*fileFilter); |
669 |
762 |
670 CleanupStack::PopAndDestroy(); // fileFilter |
763 CleanupStack::PopAndDestroy(); // fileFilter |
671 |
764 if ( !iAgileProvision ) |
672 LOG_EVENT_2B(R_VPN_MSG_INSTALLED_POLICY_FILE, iNewPolicyId, NULL, 0, iImportSinglePolicy); |
765 { |
673 |
766 LOG_EVENT_2B(R_VPN_MSG_INSTALLED_POLICY_FILE, iNewPolicyId, NULL, 0, iImportSinglePolicy); |
|
767 } |
|
768 else |
|
769 { |
|
770 _LIT8(KPolicySever, "Policy server"); |
|
771 LOG_EVENT_2B(R_VPN_MSG_INSTALLED_POLICY_SERVER, iNewPolicyId, &KPolicySever(), KErrNone, EFalse); |
|
772 } |
674 GotoState(EStateBeginPolicyImport); |
773 GotoState(EStateBeginPolicyImport); |
675 LOG_("<- CPolicyImporter::StateEndPolicyImportL()"); |
774 LOG_("<- CPolicyImporter::StateEndPolicyImportL()"); |
676 } |
775 } |
|
776 |
|
777 void CPolicyImporter::SynchronizeVpnPolicyServerL() |
|
778 { |
|
779 |
|
780 GotoState(EStateGetPolicyProvisionService); |
|
781 } |
|
782 |
|
783 void CPolicyImporter::StateGetPolicyProvisionServiceL() |
|
784 { |
|
785 GetPolicyWsL(); |
|
786 SetNextState(EStateAfterGetPolicyProvisionService); |
|
787 |
|
788 } |
|
789 |
|
790 void CPolicyImporter::StateAfterGetPolicyProvisionServiceL() |
|
791 { |
|
792 |
|
793 if (iStatus != KErrNone) |
|
794 { |
|
795 User::Leave(iStatus.Int()); |
|
796 } |
|
797 delete iCurrCaCertList; |
|
798 iCurrCaCertList = NULL; |
|
799 iCurrCaCertList = new (ELeave) CArrayFixFlat<TFileName>(2); |
|
800 |
|
801 delete iCurrUserCertList; |
|
802 iCurrUserCertList = NULL; |
|
803 iCurrUserCertList = new (ELeave) CArrayFixFlat<TFileName>(2); |
|
804 |
|
805 iNewPolicyId = &iPolicyId; |
|
806 |
|
807 BuildPolicyIdListL(); |
|
808 iCurrPolicyId.Copy(iPolicyIdList->At(iCurrPolicyIdIndex)); |
|
809 iImportSinglePolicy = EFalse; |
|
810 iAgileProvision = ETrue; |
|
811 GotoState(EStateImportPinAndPol); |
|
812 |
|
813 } |
|
814 |
677 |
815 |
678 void CPolicyImporter::BuildPolicyIdListL() |
816 void CPolicyImporter::BuildPolicyIdListL() |
679 { |
817 { |
680 delete iPolicyIdList; |
818 delete iPolicyIdList; |
681 iPolicyIdList = NULL; |
819 iPolicyIdList = NULL; |
1151 issuerName=NULL; |
1289 issuerName=NULL; |
1152 currIndex++; |
1290 currIndex++; |
1153 } |
1291 } |
1154 |
1292 |
1155 return aCertFileArray->At(currCaIndex); |
1293 return aCertFileArray->At(currCaIndex); |
1156 |
1294 } |
|
1295 |
|
1296 |
|
1297 void CPolicyImporter::GetPolicyWsL() |
|
1298 { |
|
1299 const TInt KEolLen = 2; |
|
1300 |
|
1301 delete iAgileProvisionWs; |
|
1302 iImportDir=KTempDirectory(); |
|
1303 iFileUtil.CreateDirIfNeededL(iImportDir); |
|
1304 iAgileProvisionWs = CAgileProvisionWs::NewL(); |
|
1305 |
|
1306 TFileName serverSettingsFile; |
|
1307 User::LeaveIfError(iFs.PrivatePath(serverSettingsFile)); |
|
1308 |
|
1309 serverSettingsFile.Append(KProvisionServerSettings); |
|
1310 |
|
1311 |
|
1312 HBufC8* fileData; |
|
1313 TInt endOfLine; |
|
1314 HBufC8* serviceEndPoint; |
|
1315 TUint iapIdInt; |
|
1316 |
|
1317 if ( iFileUtil.FileExists(serverSettingsFile) ) |
|
1318 { |
|
1319 fileData=iFileUtil.LoadFileDataL(serverSettingsFile); |
|
1320 CleanupStack::PushL(fileData); |
|
1321 endOfLine=fileData->Find(KCRLF); |
|
1322 |
|
1323 serviceEndPoint=HBufC8::NewL( KHTTPprefix().Length() + KServiceSuffix().Length() + fileData->Mid(0,endOfLine).Length()); |
|
1324 CleanupStack::PushL(serviceEndPoint); |
|
1325 TPtr8 endPointPtr(serviceEndPoint->Des()); |
|
1326 endPointPtr=KHTTPprefix; |
|
1327 HBufC8* serviceAddrBuf=(fileData->Mid(0,endOfLine)).AllocL(); |
|
1328 CleanupStack::PushL(serviceAddrBuf); |
|
1329 |
|
1330 //serviceAddrBuf ownership transfer |
|
1331 iAgileProvisionWs->SetServiceAddr(serviceAddrBuf); |
|
1332 endPointPtr.Append(fileData->Mid(0,endOfLine)); |
|
1333 endPointPtr.Append(KServiceSuffix); |
|
1334 CleanupStack::Pop(serviceAddrBuf); |
|
1335 |
|
1336 TInt startOfLine(endOfLine+KEolLen); |
|
1337 TPtrC8 nameData=fileData->Right(fileData->Length()-startOfLine); |
|
1338 endOfLine=nameData.Find(KCRLF); |
|
1339 |
|
1340 startOfLine = endOfLine + KEolLen; |
|
1341 TPtrC8 iapIdData=nameData.Right(nameData.Length()-startOfLine); |
|
1342 endOfLine=iapIdData.Find(KCRLF); |
|
1343 TLex8 iapIdConverter(iapIdData.Left(endOfLine)); |
|
1344 |
|
1345 iapIdConverter.Val(iapIdInt); |
|
1346 iAgileProvisionWs->GetPolicy( *serviceEndPoint, iapIdInt, iStatus ); |
|
1347 CleanupStack::PopAndDestroy(serviceEndPoint); |
|
1348 CleanupStack::PopAndDestroy(fileData); |
|
1349 } |
|
1350 |
|
1351 |
|
1352 SetActive(); |
|
1353 |
|
1354 } |
|
1355 |
|
1356 HBufC8* CPolicyImporter::GetPolicyNameL(HBufC* aPolicyFileName) |
|
1357 { |
|
1358 HBufC8* infoData=NULL; |
|
1359 HBufC8* infoSection=NULL; |
|
1360 HBufC8* fileData=NULL; |
|
1361 if ( iFileUtil.FileExists(*aPolicyFileName) ) |
|
1362 { |
|
1363 fileData=iFileUtil.LoadFileDataL(*aPolicyFileName); |
|
1364 CleanupStack::PushL(fileData); |
|
1365 _LIT8(KInfo, "[INFO]"); |
|
1366 TInt i=(fileData->Find(KInfo)) + KInfo().Length() + KCRLF().Length(); |
|
1367 |
|
1368 infoSection=fileData->Right((fileData->Length())-i).AllocL(); |
|
1369 CleanupStack::PushL(infoSection); |
|
1370 TInt j=infoSection->Find(KCRLF); |
|
1371 |
|
1372 infoData=infoSection->Mid(0,j).AllocL(); |
|
1373 |
|
1374 CleanupStack::Pop(infoSection); |
|
1375 CleanupStack::Pop(fileData); |
|
1376 |
|
1377 delete infoSection; |
|
1378 delete fileData; |
|
1379 infoSection=NULL; |
|
1380 fileData=NULL; |
|
1381 |
|
1382 } |
|
1383 else |
|
1384 User::Leave(KErrNotFound); |
|
1385 |
|
1386 return infoData; |
|
1387 } |
|
1388 |
|
1389 |
|
1390 void CPolicyImporter::PatchPolicyProvisionL() |
|
1391 { |
|
1392 TPath privateDir; |
|
1393 User::LeaveIfError(iFs.PrivatePath(privateDir)); |
|
1394 |
|
1395 HBufC* policyServerSettingsFileName = HBufC::NewL(KProvisionServerSettings().Length() + privateDir.Length()); |
|
1396 CleanupStack::PushL(policyServerSettingsFileName); |
|
1397 TPtr fileNamePtr=policyServerSettingsFileName->Des(); |
|
1398 fileNamePtr.Append(privateDir); |
|
1399 fileNamePtr.Append(KProvisionServerSettings); |
|
1400 |
|
1401 |
|
1402 if ( iFileUtil.FileExists(fileNamePtr) ) |
|
1403 { |
|
1404 HBufC8* fileData=iFileUtil.LoadFileDataL(fileNamePtr); |
|
1405 CleanupStack::PushL(fileData); |
|
1406 |
|
1407 TPtrC8 restOfData = *fileData; |
|
1408 |
|
1409 TInt bofInt; |
|
1410 TInt line=1; |
|
1411 while ( (bofInt=restOfData.Find(KCRLF)) != KErrNotFound && line < KPolicyFileLine ) |
|
1412 { |
|
1413 restOfData.Set(restOfData.Mid(bofInt + KCRLF().Length())); |
|
1414 line++; |
|
1415 } |
|
1416 TInt iapIdStart=restOfData.Find(KCRLF); |
|
1417 HBufC16* iapIdBuf; |
|
1418 if ( iapIdStart!=KErrNotFound ) |
|
1419 { |
|
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 |
|
1434 //server configuration file includes installed policy file name and policy exists. |
|
1435 if ( line == KPolicyFileLine && iFileUtil.FileExists(*policyFilePath) ) |
|
1436 { |
|
1437 HBufC16* restOfDataBuf=iFileUtil.To16BitL(restOfData); |
|
1438 CleanupStack::PushL(restOfDataBuf); |
|
1439 iPolicyIdBuf.Append(*restOfDataBuf); |
|
1440 iNewPolicyIdBuf=iPolicyIdBuf; |
|
1441 iPolicyStore.ReplacePolicyL(iPolicyIdBuf,*iNewPolicyId); |
|
1442 iNewPolicyId= &iNewPolicyIdBuf; |
|
1443 CleanupStack::PopAndDestroy(restOfDataBuf); |
|
1444 } |
|
1445 //either first configuration or policy removed |
|
1446 else |
|
1447 { |
|
1448 HBufC* serverFile = HBufC::NewL(fileData->Length() + KCRLF().Length() + iNewPolicyId->Length()); |
|
1449 CleanupStack::PushL(serverFile); |
|
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 |
|
1470 CleanupStack::PopAndDestroy(fileData16); |
|
1471 CleanupStack::PopAndDestroy(serverFile); |
|
1472 } |
|
1473 |
|
1474 CleanupStack::PopAndDestroy(policyFilePath); |
|
1475 CleanupStack::PopAndDestroy(policyFileNameBuf); |
|
1476 CleanupStack::PopAndDestroy(fileData); |
|
1477 CleanupStack::PopAndDestroy(policyServerSettingsFileName); |
|
1478 } |
|
1479 |
1157 } |
1480 } |
1158 /***/ |
1481 /***/ |