policymanagement/policyengine/policyengineserver/src/PolicyProcessor.cpp
changeset 44 39aa16f3fdc2
parent 27 2c8580950a26
child 53 b3a7d8e28262
child 55 1c556dee8eb1
--- a/policymanagement/policyengine/policyengineserver/src/PolicyProcessor.cpp	Wed Jun 23 19:10:17 2010 +0300
+++ b/policymanagement/policyengine/policyengineserver/src/PolicyProcessor.cpp	Tue Jul 06 15:14:24 2010 +0300
@@ -30,12 +30,19 @@
 #include "PolicyEngineServer.h"
 #include "PolicyEngineClientServer.h"
 #include "debug.h"
-
-#include "PolicyEngineUi.h"
-
+#include <hbdevicedialogsymbian.h>
+#include <hbdevicenotificationdialogsymbian.h>
+#include <hbtextresolversymbian.h>
 // CONSTANTS
 const TUid KUidPolicyEngineUi = { 0x10207817 };
+const TUint KDelimeterChar = '|';
+_LIT8( KUserAcceptMark, "A");
 
+enum TUserResponse
+    {
+    EUserAccept,
+    EUserDeny,
+    };
 
 // -----------------------------------------------------------------------------
 // RAttributeContainer::AppendL()
@@ -746,52 +753,24 @@
 	//resolve name and fingerprint
 	const TDesC8& name = iTrustedSession->CommonNameForSubjectL( trustedSubject, iUseEditedElements);
 	const TDesC8& fingerPrint = iTrustedSession->FingerPrintForSubjectL( trustedSubject, iUseEditedElements);
-
+	TPtrC8 ptr = fingerPrint.Left(4); // send only first 4 digits.
+	
+	RDEBUG_2("CPolicyProcessor::fingerPrint: %S", &fingerPrint);
+	RDEBUG_2("CPolicyProcessor::fingerPrint: %S", &ptr);
+	
+	RDEBUG8_2("CPolicyProcessor::fingerPrint: %S", &fingerPrint);
+	RDEBUG8_2("CPolicyProcessor::fingerPrint: %S", &ptr);
+	    
 	TUserResponse response = EUserDeny;
 
-	if ( name.Length() && fingerPrint.Length())
-	{
-		//create notifier
-/*		RNotifier notifier;
-		CleanupClosePushL( notifier);
-		User::LeaveIfError( notifier.Connect() );
-*/		
-		//create parameter descriptor
-		TBuf8<100> responseBuf;
-		HBufC8 * data = HBufC8::NewLC( name.Length() + fingerPrint.Length() + 1);
-		TPtr8 ptr = data->Des();
-		ptr.Append(name);
-		ptr.Append(KDelimeterChar);
-		ptr.Append(fingerPrint.Left(4));
+    CProcessorClient *client = new CProcessorClient();
+    TInt res = client->LaunchDialog(ptr, name);
+    
+    if(res == 0)
+        response = EUserAccept;
+    else
+        response = EUserDeny;  
 
-		//create CAsyncHandler to Auto start/stop CActiveScheduler
-		CASyncHandler * async = CASyncHandler::NewLC();
-//		notifier.StartNotifierAndGetResponse( async->GetRequestStatus(), KUidPolicyEngineUi, ptr, responseBuf);
-		
-		//Start CActiveScheduler and execute stop when request is completed
-		async->WaitForRequest();
-		CPolicyEngineServer::SetActiveSubSession( this);	
-
-		
-		if ( async->GetRequestStatus() > 0) //request pending...
-		{
-//			notifier.CancelNotifier( KUidPolicyEngineUi);	
-		}
-		else
-		{
-			//Check response
-			if ( responseBuf == KUserAcceptMark)
-			{
-				RDEBUG("PolicyEngineServer: CPolicyProcessor user accept corporate policy!");
-				response = EUserAccept;
-			}
-		}
-		
-	//	CleanupStack::PopAndDestroy( 3, &notifier);	//notifier, data, CASyncHandler
-	CleanupStack::PopAndDestroy( 2);
-		
-		
-	}
 
 	MakeBooleanResponseL( response == EUserAccept, aResponseElement);
 }
@@ -980,6 +959,185 @@
 }
 
 
+// -----------------------------------------------------------------------------
+// CProcessorClient::CProcessorClient()
+// -----------------------------------------------------------------------------
+//
+
+CProcessorClient::CProcessorClient()
+    : CActive(EPriorityNormal)
+    {
+    CActiveScheduler::Add( this );
+    iWait = new( ELeave ) CActiveSchedulerWait;
+    iCompletionCode = KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CProcessorClient::~CProcessorClient()
+// -----------------------------------------------------------------------------
+CProcessorClient::~CProcessorClient()
+    {
+    delete iWait;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CProcessorClient::DataReceived()
+// -----------------------------------------------------------------------------
+void CProcessorClient::DataReceived(CHbSymbianVariantMap& aData)
+{
+    _LIT(KResponse, "keyResponse");
+    const CHbSymbianVariant* key = aData.Get(KResponse);
+        
+    if(key)
+    {
+    TInt *res = key->Value<TInt>();
+    iCompletionCode = *res;        
+    iUserResponse = *res;
+    }
+}
+
+
+// -----------------------------------------------------------------------------
+// CProcessorClient::DeviceDialogClosed()
+// -----------------------------------------------------------------------------
+void CProcessorClient::DeviceDialogClosed(TInt aCompletionCode)
+    {
+    iCompletionCode = aCompletionCode;
+    //iDevDialog->Cancel();
+    TRequestStatus* status(&iStatus);
+    User::RequestComplete(status, KErrNone);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CProcessorClient::DoCancel()
+// -----------------------------------------------------------------------------
+void CProcessorClient::DoCancel()
+{
+    if (iWait && iWait->IsStarted() && iWait->CanStopNow()) 
+    {
+        iCompletionCode = KErrCancel;
+        iWait->AsyncStop();
+    }  
+}
+
+
+// -----------------------------------------------------------------------------
+// CProcessorClient::RunL()
+// -----------------------------------------------------------------------------
+void CProcessorClient::RunL()
+{
+    if (iWait) 
+    {
+        iWait->AsyncStop();
+    }    
+}
+
+
+// -----------------------------------------------------------------------------
+// CProcessorClient::LaunchDialog()
+// -----------------------------------------------------------------------------
+TInt CProcessorClient::LaunchDialog(const TDesC8& aFringerPrint,
+        const TDesC8& aServerName)
+    {
+    _LIT(KHbNotifier,"com.nokia.hb.policymanagementdialog/1.0");
+    _LIT(KFingerPrint, "fingerprint");
+    _LIT(KServerdisplayname, "serverdisplayname");
+
+    RDEBUG_2("CPolicyProcessor::fingerPrint: %S", &aFringerPrint);
+    RDEBUG_2("CPolicyProcessor::fingerPrint: %S", &aServerName);
+
+    CHbSymbianVariantMap* varMap = CHbSymbianVariantMap::NewL();
+    CleanupStack::PushL(varMap);
+
+    TBuf<10> fingerBuf;
+    fingerBuf.Copy(aFringerPrint);
+
+    TInt serverNameLen = aServerName.Length();
+    TBuf<50> serverName;
+    serverName.Copy(aServerName);
+
+    RDEBUG_2("CPolicyProcessor::16 fingerPrint: %S", &fingerBuf);
+    RDEBUG_2("CPolicyProcessor::16 serverName : %S", &serverName);
+
+    CHbSymbianVariant* fingerprintid = CHbSymbianVariant::NewL(&fingerBuf,
+            CHbSymbianVariant::EDes);
+
+    CHbSymbianVariant* serverdisplayname = CHbSymbianVariant::NewL(
+            &serverName, CHbSymbianVariant::EDes);
+
+    RDEBUG_2("CPolicyProcessor::fingerPrint: %S", &fingerprintid);
+    RDEBUG_2("CPolicyProcessor::fingerPrint: %S", &serverdisplayname);
+
+    varMap->Add(KFingerPrint, fingerprintid);
+    varMap->Add(KServerdisplayname, serverdisplayname);
+
+    iDevDialog = CHbDeviceDialogSymbian::NewL();
+    TInt err1 = iDevDialog->Show(KHbNotifier, *varMap, this);
+    TInt err = WaitUntilDeviceDialogClosed();
+
+    CleanupStack::PopAndDestroy();
+
+    if (iDevDialog)
+        {
+        iDevDialog->Cancel();
+        delete iDevDialog;
+        iDevDialog = NULL;
+        }
+    
+    if (err == 0)
+        {
+            LaunchTrustNotificationDialog(aServerName);
+         }
+    
+    return iUserResponse;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CProcessorClient::WaitUntilDeviceDialogClosed()
+// -----------------------------------------------------------------------------
+TInt CProcessorClient::WaitUntilDeviceDialogClosed()
+    {
+    iCompletionCode = KErrInUse;
+    if (!IsActive() && iWait && !iWait->IsStarted())
+    {
+            iStatus = KRequestPending;
+            SetActive();
+            iWait->Start();
+            }
+    return iCompletionCode;
+    }
+
+void CProcessorClient::LaunchTrustNotificationDialog(const TDesC8& aServerName)
+{
+    _LIT(KFileName, "deviceupdates_");
+    _LIT(KPath, "z:/resource/qt/translations/");
+    _LIT(KDialogIcon, "note_info.svg");
+    
+    TBool result = HbTextResolverSymbian::Init(KFileName, KPath);
+    
+    if (result) {
+        _LIT(KTrustEstablished,"txt_device_update_dpophead_trust_established");
+        _LIT(KServerID,"txt_deviceupdate_dpopinfo_trust_establised_with_1");
+        
+        HBufC* trustEstablishedText = HbTextResolverSymbian::LoadL(KTrustEstablished);
+        CleanupStack::PushL(trustEstablishedText);
+ 
+        HBufC* serveridbuf = HBufC::NewLC(aServerName.Length());
+        TPtr serveridbufptr = serveridbuf->Des();
+        serveridbufptr.Copy(aServerName);
+   
+        HBufC* serverid = HbTextResolverSymbian::LoadL(KServerID,*serveridbuf);
+        CleanupStack::PushL(serverid);
+
+        CHbDeviceNotificationDialogSymbian::NotificationL(KDialogIcon, *trustEstablishedText, *serverid);
+        
+        CleanupStack::PopAndDestroy(3); //trustEstablishedText,serveridbuf,serverid
+    }
+}
 
 // -----------------------------------------------------------------------------
 // TCombiningAlgorith::TCombiningAlgorith()