--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devicemgmtnotifications/dmdevdialogserver/src/dmdevicedialogsession.cpp Tue Jul 06 15:14:24 2010 +0300
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Implementation of DM Device Dialogs
+ */
+
+#include "dmdevicedialogsession.h"
+#include "dmdevdialogclientserver.h"
+
+// ----------------------------------------------------------------------------------------
+// CDmDeviceDialogSession::CDmDeviceDialogSession
+// ----------------------------------------------------------------------------------------
+CDmDeviceDialogSession::CDmDeviceDialogSession()
+ {
+ }
+
+// ----------------------------------------------------------------------------------------
+// CDmDeviceDialogSession::~CDmDeviceDialogSession
+// ----------------------------------------------------------------------------------------
+CDmDeviceDialogSession::~CDmDeviceDialogSession()
+ {
+ FLOG(_L("CDmDeviceDialogSession::~CDmDeviceDialogSession-- begin"));
+ if ( !Server().RequestPending() )
+ {
+ FLOG(_L("CDmDeviceDialogSession::~CDmDeviceDialogSession Stopserver"));
+ Server().StopServer();
+ }
+ FLOG(_L("CDmDeviceDialogSession::~CDmDeviceDialogSession-- end"));
+ }
+
+// ----------------------------------------------------------------------------------------
+// CDmDeviceDialogSession::Server
+// ----------------------------------------------------------------------------------------
+CDmDeviceDialogServer& CDmDeviceDialogSession::Server()
+ {
+ return *static_cast<CDmDeviceDialogServer*> (const_cast<CServer2*> (CSession2::Server()));
+ }
+
+// ----------------------------------------------------------------------------------------
+// CDmDeviceDialogSession::CheckClientSecureIdL
+// ----------------------------------------------------------------------------------------
+TBool CDmDeviceDialogSession::CheckClientSecureId(const RMessage2& aMessage)
+ {
+ TUid fota = TUid::Uid(KFotaServerUid);
+ TUid sosserver = TUid::Uid(KSosServerUid);
+ TUid scomo = TUid::Uid(KScomoServerUid);
+
+ // Fotaserver
+ if (aMessage.SecureId() == fota.iUid)
+ {
+ FLOG(_L("[CDmDeviceDialogSession] CheckClientSecureId client is \
+ fotaserver!"));
+ return ETrue;
+ }
+
+ // Sosserver
+ else if (aMessage.SecureId() == sosserver.iUid)
+ {
+ FLOG(_L("[CDmDeviceDialogSession] CheckClientSecureId client is \
+ sosserver!"));
+ return ETrue;
+ }
+ // Scomoserver
+ else if (aMessage.SecureId() == scomo.iUid)
+ {
+ FLOG(_L("[CDmDeviceDialogSession] CheckClientSecureId client is \
+ SCOMO server!"));
+ return ETrue;
+ }
+ // test app
+ else if (aMessage.SecureId() == 0x102073E4)
+ {
+ FLOG(_L("[CDmDeviceDialogSession] CheckClientSecureId client is \
+ testapp!"));
+ return ETrue;
+ }
+ else
+ {
+ FLOG(_L("[CDmDeviceDialogSession] CheckClientSecureId client 0x%X is\
+ unknown (msg %d), bailing out"),
+ aMessage.SecureId().iId, aMessage.Function());
+ }
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------------------
+// CDmDeviceDialogSession::ServiceL
+// ----------------------------------------------------------------------------------------
+void CDmDeviceDialogSession::ServiceL(const RMessage2& aMessage)
+ {
+ RThread clt;
+ aMessage.ClientL(clt);
+ TFullName cltnm = clt.FullName();
+ FLOG(_L( "CDmDeviceDialogSession::ServiceL %d serving for %S?" ),
+ aMessage.Function(), &cltnm);
+ if (CheckClientSecureId(aMessage))
+ {
+ FLOG(_L( "CDmDeviceDialogSession::ServiceL access ok"));
+ Server().CancelServerCloseRequest();
+ if(!Server().IsPkgZeroNoteDisplaying() || aMessage.Function() ==
+ ECancelServerAlert )
+ {
+ TRAPD(err,DispatchMessageL(aMessage));
+ FLOG(_L( "CDmDeviceDialogSession::ServiceL err is %d"), err);
+ User::LeaveIfError(err);
+ }
+ else //User not responded to earlier package zero, so no other services
+ {
+ FLOG(_L( "CDmDeviceDialogSession::ServiceL server is busy"));
+ aMessage.Complete(KErrServerBusy);
+ }
+ }
+ else
+ {
+ FLOG(_L( "CDmDeviceDialogSession::ServiceL access denied"));
+ aMessage.Complete(KErrAccessDenied);
+ }
+ }
+
+// ----------------------------------------------------------------------------------------
+// CDmDeviceDialogSession::ServiceError
+// ----------------------------------------------------------------------------------------
+void CDmDeviceDialogSession::ServiceError(const RMessage2& aMessage,
+ TInt aError)
+ {
+ CSession2::ServiceError(aMessage, aError);
+ }
+
+// ----------------------------------------------------------------------------------------
+// CDmDeviceDialogSession::DispatchMessageL
+// ----------------------------------------------------------------------------------------
+void CDmDeviceDialogSession::DispatchMessageL(const RMessage2& aMessage)
+ {
+ FLOG(_L("CDmDeviceDialogSession::DispatchMessageL-begin"));
+ iMessage = aMessage;
+ switch (aMessage.Function())
+ {
+ case EServerAlert:
+ {
+ FLOG(_L("CDmDeviceDialogSession::DispatchMessageL \
+ Server alert case:"));
+ TInt Uimode = aMessage.Int2();
+ if (Uimode == CDmDeviceDialogServer::ESANSilent)
+ aMessage.Complete(KErrNone);
+ else
+ {
+ Server().NewAsyncRequest();
+ TInt ProfileId = aMessage.Int0();
+ TInt JobId = aMessage.Int1();
+ TInt ReplySlot = 3;
+ Server().LaunchPkgZeroNoteL(ProfileId, JobId, ReplySlot, Uimode,
+ iMessage);
+ }
+ }
+ break;
+ case EPkgConnectNoteIsActive:
+ {
+ FLOG(_L("CDmDeviceDialogSession::DispatchMessageL EPkgZeroOngoing \
+ case:"));
+ TBool ret = Server().IsConenctDialogDisplaying();
+ TPckgBuf<TInt> callactive(ret);
+ aMessage.WriteL(0, callactive);
+ aMessage.Complete(KErrNone);
+ }
+ break;
+ case EPkgZeroConnectNoteDismiss:
+ {
+ FLOG(_L("CDmDeviceDialogSession::DispatchMessageL \
+ EPkgZeroConnectNoteDismiss case:"));
+ if (Server().IsConenctDialogDisplaying())
+ Server().DismissDialog();
+ aMessage.Complete(KErrNone);
+ }
+ break;
+ case EPkgZeroConnectNoteShowAgain:
+ {
+ FLOG(_L("CDmDeviceDialogSession::DispatchMessageL \
+ EPkgZeroConnectNoteShow case:"));
+ if (!Server().IsConenctDialogDisplaying())
+ Server().ShowConnectDialogAgainL();
+ aMessage.Complete(KErrNone);
+ }
+ break;
+ case EShowDisplayAlert:
+ {
+ FLOG(_L("CDmDeviceDialogSession::DispatchMessageL \
+ EDisplayAlert case:"));
+ HBufC* alerttext = HBufC::NewLC(aMessage.GetDesLengthL(0));
+ TPtr bufPtr = alerttext->Des();
+ aMessage.ReadL(0, bufPtr, 0);
+ Server().NewAsyncRequest();
+ Server().ShowDisplayalertL(bufPtr, iMessage);
+ CleanupStack::PopAndDestroy();
+ }
+ break;
+ case EShowConfirmationalert:
+ {
+ HBufC* alerttext = HBufC::NewLC(aMessage.GetDesLengthL(2));
+ TPtr alerttxtptr = alerttext->Des();
+ aMessage.ReadL(2, alerttxtptr);
+ HBufC* alertheader = HBufC::NewLC(aMessage.GetDesLengthL(1));
+ TPtr alertheaderptr = alertheader->Des();
+ aMessage.ReadL(1, alertheaderptr);
+ Server().NewAsyncRequest();
+ Server().ShowConfirmationalertL(aMessage.Int0(), alertheaderptr,
+ alerttxtptr, iMessage);
+ CleanupStack::PopAndDestroy(2);
+ }
+ break;
+ case ECancelServerAlert:
+ {
+ Server().CancelPendingServerAlert();
+ aMessage.Complete(KErrNone);
+ }
+ break;
+ default:
+ {
+ FLOG(_L("CDmDeviceDialogSession::DispatchMessageL default case: \
+ and a leave happened"));
+ User::Leave(KErrArgument);
+ }
+ }
+ FLOG(_L("CDmDeviceDialogSession::DispatchMessageL:end"));
+ }
+//End of file