--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AknGlobalUI/NotifierWrapper/src/AknNotifierAppServerSession.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2004-2007 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: Notifier server app session implementation.
+*
+*/
+
+#include <e32notif.h>
+#include <eiksrvs.h>
+
+#include "AknNotiferAppServerApplication.h"
+#include "AknNotifierAppServer.h"
+#include "AknNotifierAppServerSession.h"
+#include "AknNotifierControllerUtilities.h"
+
+const TInt KINPUTSLOT = 1;
+const TInt KREPLYSLOT = 2;
+const TInt KEikonServerSecureId = 0x10003A4A;
+
+LOCAL_C void SetEikonServerFree(TAny* aPtr)
+ {
+ *(TBool*)aPtr = 0; // points to boolean
+ }
+
+EXPORT_C CAknNotifierServerAppService::CAknNotifierServerAppService(
+ const CAknNotifierAppServer& aAppServer)
+:iOwner(const_cast<CAknNotifierAppServer&>(aAppServer))
+ {
+ }
+
+EXPORT_C CAknNotifierServerAppService::~CAknNotifierServerAppService()
+ {
+ delete iInputBuf;
+ delete iReplyBuf;
+ }
+
+EXPORT_C void CAknNotifierServerAppService::HandleMessageL(const RMessage2& aMessage)
+ {
+ CAknNotifierAppServerAppUi* appUi = (CAknNotifierAppServerAppUi*)CEikonEnv::Static()->AppUi();
+
+ if (appUi && aMessage.SecureId().iId == KEikonServerSecureId)
+ {
+ appUi->EikSrvBlocked() = ETrue;
+ CleanupStack::PushL(TCleanupItem(SetEikonServerFree, &(appUi->EikSrvBlocked()) ));
+ }
+
+ if (aMessage.Function() == KDoNotifierControllerCommand)
+ {
+ if (appUi && appUi->NotifierControllerUtility())
+ {
+ appUi->NotifierControllerUtility()->DoNotifierContollerCommandL(
+ (CAknNotifierControllerUtility::TNotifierControllerCommand)aMessage.Int0());
+
+ CleanupStack::PopAndDestroy(); // Free eikon server
+ }
+
+ aMessage.Complete(KErrNone);
+ return;
+ }
+
+ switch ( aMessage.Function() )
+ {
+ case EStartNotifier:
+ {
+ ResolveBuffersL(aMessage);
+ TPtr8 ptr = iReplyBuf->Des();
+ iOwner.StartNotifierL(TUid::Uid(aMessage.Int0()),*iInputBuf, ptr);
+ WriteReplyL(aMessage);
+ break;
+ }
+ case EUpdateNotifier:
+ {
+ ResolveBuffersL(aMessage);
+ TPtr8 ptr2 = iReplyBuf->Des();
+ iOwner.UpdateNotifierL(TUid::Uid(aMessage.Int0()),*iInputBuf, ptr2);
+ WriteReplyL(aMessage);
+ break;
+ }
+ case ECancelNotifier:
+ {
+ iOwner.CancelNotifier(TUid::Uid(aMessage.Int0()));
+ aMessage.Complete(KErrNone);
+ break;
+ }
+ case EStartNotifierAndGetResponse:
+ {
+ if (appUi && appUi->EikSrvBlocked())
+ {
+ CleanupStack::PopAndDestroy(); // Free eikon server
+ }
+
+ ResolveBuffersL(aMessage);
+
+ iOwner.StartNotifierAndGetResponseL(
+ TUid::Uid(aMessage.Int0()),
+ *iInputBuf,
+ aMessage,
+ KREPLYSLOT);
+
+ break;
+ }
+ case EUpdateNotifierAndGetResponse:
+ {
+ if (appUi && appUi->EikSrvBlocked())
+ {
+ CleanupStack::PopAndDestroy(); // Free eikon server
+ }
+
+ ResolveBuffersL(aMessage);
+
+ iOwner.UpdateNotifierAndGetResponseL(
+ TUid::Uid(aMessage.Int0()),
+ *iInputBuf,
+ aMessage,
+ KREPLYSLOT);
+
+ break;
+ }
+ default:
+ {
+ CAknAppServiceBase::ServiceL(aMessage);
+ }
+ }
+
+ if (appUi && appUi->EikSrvBlocked())
+ {
+ CleanupStack::PopAndDestroy(); // Free eikon server
+ }
+ }
+
+EXPORT_C TBool CAknNotifierServerAppService::AllowClientL(const RMessage2& aMessage)
+ {
+ // By default, we don't serve other process than notifier server.
+ return (aMessage.SecureId().iId == KEikonServerSecureId);
+ }
+
+
+EXPORT_C void CAknNotifierServerAppService::ServiceL(const RMessage2& aMessage)
+ {
+ if (!AllowClientL(aMessage))
+ {
+ aMessage.Complete(KErrAccessDenied);
+ }
+ else
+ {
+ HandleMessageL(aMessage);
+ }
+ }
+
+
+void CAknNotifierServerAppService::ResolveBuffersL(const RMessage2& aMessage)
+ {
+ delete iInputBuf;
+ iInputBuf = 0;
+
+ delete iReplyBuf;
+ iReplyBuf = 0;
+
+ iInputBuf = HBufC8::NewL(aMessage.GetDesLengthL(KINPUTSLOT));
+
+ TPtr8 ptr = iInputBuf->Des();
+ aMessage.Read(KINPUTSLOT,ptr);
+
+ if (aMessage.Function() == EStartNotifier || aMessage.Function() == EUpdateNotifier)
+ {
+ iReplyBuf = HBufC8::NewL(aMessage.GetDesMaxLengthL(KREPLYSLOT));
+ }
+ }
+
+
+void CAknNotifierServerAppService::WriteReplyL(const RMessage2& aMessage)
+ {
+ aMessage.WriteL(KREPLYSLOT, *iReplyBuf);
+ aMessage.Complete(KErrNone);
+ }
+
+// End of file