--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/s60/src/hsactivitysession_p.cpp Wed Mar 24 13:06:03 2010 +0200
@@ -0,0 +1,286 @@
+/*
+* 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: Application entry point
+*
+*/
+#include "hsactivityserver_p.h"
+#include "hsactivitysession_p.h"
+#include "hsactivityglobals.h"
+#include "hsserializer.h"
+#include <qglobal.h>
+
+const char ActivityPrimaryKeyFormat [] = "%1:%2";
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+HsActivitySessionPrivate::HsActivitySessionPrivate(HsActivityDbClientInterface& storage)
+: mStorage(storage), mAppId(KErrNotFound)
+{
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+HsActivitySessionPrivate::~HsActivitySessionPrivate()
+{
+ CancelNotify();
+ mData.Close();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::ServiceL(const RMessage2& message)
+{
+ mActivity.clear();
+ mResult.clear();
+ mName.clear();
+
+ int errNo(KErrNone);
+ switch(message.Function()) {
+ case AddActivity: HandleAddActivityL(message); break;
+ case UpdateActivity: HandleUpdateActivityL(message); break;
+ case RemoveActivity: HandleRemoveActivityL(message); break;
+ case RemoveApplicationActivities: HandleRemoveApplicationActivitiesL(message); break;
+ case Activities: HandleActivitiesL(message);break;
+ case ApplicationActivities: HandleApplicationActivitiesL(message);break;
+ case LaunchActivity: HandleLaunchActivityL(message);break;
+ case WaitActivity: HandleWaitActivityL(message);return; //!!!!! This message shouldn't be compleated !!!!!
+ case GetData: HandleGetDataL(message); break;
+ case CancelWait: HandleCancelWaitActivity(message); break;
+ default:
+ message.Panic(KErr400, CServer2::EBadMessageNumber);
+ }
+ message.Complete(KErrNone);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::ServiceError(const RMessage2 &message, TInt error)
+{
+ message.Complete(error);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleAddActivityL(const RMessage2& message)
+{
+ ReadDataL(message);
+ LeaveIfNotZero(mStorage.addActivity(mActivity));
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleUpdateActivityL(const RMessage2& message)
+{
+ ReadDataL(message);
+ LeaveIfNotZero(mStorage.updateActivity(mActivity));
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleRemoveActivityL(const RMessage2& message)
+{
+ ReadDataL(message);
+ LeaveIfNotZero(mStorage.removeActivity(mActivity));
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleRemoveApplicationActivitiesL(const RMessage2& message)
+{
+ ReadDataL(message);
+ LeaveIfNotZero(mStorage.removeApplicationActivities(mActivity));
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleActivitiesL(const RMessage2& message)
+{
+ int errNo(KErrNone);
+ QT_TRYCATCH_LEAVING(errNo = mStorage.activities(mResult));
+ LeaveIfNotZero(errNo);
+ mData << mResult;
+ TPckgC<int> dataSize(mData.Size());
+ message.WriteL(1, dataSize);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleApplicationActivitiesL(const RMessage2& message)
+{
+ int errNo(KErrNone);
+ ReadDataL(message);
+ QT_TRYCATCH_LEAVING(errNo = mStorage.applicationActivities(mResult, mActivity));
+ LeaveIfNotZero(errNo);
+ mData << mResult;
+ TPckgC<int> dataSize(mData.Size());
+ message.WriteL(1, dataSize);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleLaunchActivityL(const RMessage2& message)
+{
+ ReadDataL(message);
+ LaunchActivityL();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleWaitActivityL(const RMessage2& message)
+{
+ ReadDataL(message);
+ WaitActivityL(message);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleCancelWaitActivity(const RMessage2& /*message*/)
+ {
+ CancelNotify();
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::HandleGetDataL(const RMessage2& message)
+{
+ message.WriteL(0, mData);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::LaunchActivityL()
+{
+ CServer2* const server(const_cast<CServer2*>(Server()));
+ if(mActivity.end() == mActivity.find(ActivityApplicationKeyword) ||
+ mActivity.end() == mActivity.find(ActivityActivityKeyword)) {
+ User::Leave(KErrCorrupt);
+ }
+ static_cast<HsActivityServerPrivate*>
+ (server)->notifyL(mActivity.find(ActivityApplicationKeyword).value().toInt(),
+ mActivity.find(ActivityActivityKeyword).value().toString());
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::LaunchActivityL(const RMessage2 &message,
+ const QString &name )
+{
+ if (mData.MaxSize() < name.toAscii().length()){
+ mData.ReAlloc( name.toAscii().length());
+ }
+ mData.Copy(reinterpret_cast<const TUint8*>(name.toAscii().data()),
+ name.toAscii().length());
+ TPckgC<int> dataSize(mData.Size());
+ message.WriteL(1, dataSize);
+ message.Complete(KErrNone);
+}
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::WaitActivityL(const RMessage2& msg)
+{
+ CServer2* const server(const_cast<CServer2*>(Server()));
+ if(mActivity.end() == mActivity.find(ActivityApplicationKeyword)) {
+ User::Leave(KErrCorrupt);
+ }
+ mAppId = mActivity.find(ActivityApplicationKeyword).value().toInt();
+ static_cast<HsActivityServerPrivate*>
+ (server)->waitNotification(mAppId, msg);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::CancelNotify()
+ {
+ if ( mAppId != KErrNotFound )
+ {
+ CServer2* const server(const_cast<CServer2*>(Server()));
+ static_cast<HsActivityServerPrivate*>(server)->cancelNotify(mAppId);
+ mAppId = KErrNotFound;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::CancelNotify(RMessage2& message)
+ {
+ message.Complete(KErrCancel);
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::ReadDataL(const RMessage2& src)
+{
+ int srcLength = src.GetDesLength(0);
+ User::LeaveIfError(srcLength);
+ RBuf8 buffer;
+ CleanupClosePushL(buffer);
+ buffer.CreateL(srcLength);
+ src.ReadL( 0, buffer, 0);
+ if (buffer.Length() != srcLength) {
+ User::Leave(KErrCorrupt);
+ }
+ mActivity << buffer;
+ CleanupStack::PopAndDestroy(&buffer);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivitySessionPrivate::LeaveIfNotZero(int errNo)
+{
+ if (KErrNone != errNo) {
+ User::LeaveIfError(errNo);
+ User::Leave(KErrGeneral);
+ }
+}