--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javaregistry/legacy/server/src/javaregserversession.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,365 @@
+/*
+* Copyright (c) 2005-2006 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: javaregserversession implementation
+*
+*/
+
+
+#include "javaregserversession.h"
+#include "javaregdef.h"
+#include "javaregproperty.h"
+#include "javapropertyarray.h"
+#include "javareguidarrayconv.h"
+#include "javaregserver.h"
+#include "logger.h"
+
+using namespace Java::Manager::Registry;
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+CJavaRegServerSession::CJavaRegServerSession() :
+ iBackupSession(EFalse),
+ iLegacy(EFalse)
+{
+}
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+CJavaRegServerSession::~CJavaRegServerSession()
+{
+ // if it was a backup session move registry back to NoBackup state
+ if (iBackupSession)
+ {
+ Server()->SetBackupState(ENoBackup);
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Returns the iLegacy member
+// ---------------------------------------------------------------------------
+TBool CJavaRegServerSession::IsLegacy() const
+{
+ return iLegacy;
+}
+
+
+// ---------------------------------------------------------------------------
+// Returns server object
+// ---------------------------------------------------------------------------
+CJavaRegServer* CJavaRegServerSession::Server() const
+{
+ return const_cast< CJavaRegServer* >(
+ static_cast< const CJavaRegServer* >(CSession2::Server()));
+}
+
+
+// ---------------------------------------------------------------------------
+// ServiceL
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::ServiceL(const RMessage2& aMessage)
+{
+ TRAPD(err, DispatchMessageL(aMessage));
+ aMessage.Complete(err);
+}
+
+
+// ---------------------------------------------------------------------------
+// DispatchMessageL
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::DispatchMessageL(const RMessage2& aMessage)
+{
+ JELOG(EJavaStorage, "CJavaRegServerSession::DispatchMessageL()");
+
+ TInt function = aMessage.Function();
+
+ switch (function)
+ {
+ case EInitializeServerUseIntegr:
+ InitializeServerUseIntegrL(aMessage);
+ break;
+
+ case EEntryExists:
+ EntryExistsL(aMessage);
+ break;
+
+ case EGetEntryUids:
+ GetEntryUidsL(aMessage);
+ break;
+
+ case EGetEntry:
+ {
+ GetEntryL(aMessage);
+ break;
+ }
+
+ case EGetEntryFromAll:
+ {
+ GetEntryL(aMessage, ETrue);
+ }
+ break;
+
+ case EFindEntries:
+ FindEntriesL(aMessage);
+ break;
+
+ case EFindAllEntries:
+ FindAllEntriesL(aMessage);
+ break;
+
+ case ESetBackupState:
+ SetBackupState(aMessage);
+ break;
+
+ default:
+ User::Leave(KErrNotSupported);
+ }
+}
+
+// ---------------------------------------------------------------------------
+// InitializeServerUseIntegrL
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::InitializeServerUseIntegrL(
+ const RMessage2& aMessage)
+{
+ JELOG(EJavaStorage, "CJavaRegServerSession::InitializeServerUseIntegrL()");
+
+ TBool useIntegrity = aMessage.Int0();
+ iLegacy = aMessage.Int1();
+ if (useIntegrity)
+ {
+ TTime currentTime;
+ currentTime.UniversalTime();
+ TInt64 transactionId = currentTime.Int64();
+ }
+}
+
+
+// ---------------------------------------------------------------------------
+// EntryExistsL
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::EntryExistsL(const RMessage2& aMessage)
+{
+ JELOG(EJavaStorage, "CJavaRegServerSession::EntryExistsL()");
+
+ Server()->LeaveIfRestoringL();
+
+ // obtain uid
+ TUid uid = UidFromMessageL(0, aMessage);
+
+ // check if entry exists for uid
+ TBool result = Server()->EntryExistsL(uid);
+
+ // write back result
+ TPckgBuf<TBool> resultBuf(result);
+ aMessage.WriteL(1, resultBuf) ;
+}
+
+
+// ---------------------------------------------------------------------------
+// GetEntryUidsL
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::GetEntryUidsL(const RMessage2& aMessage)
+{
+ JELOG(EJavaStorage, "CJavaRegServerSession::GetEntryUidsL()");
+
+ Server()->LeaveIfRestoringL();
+
+ TInt drive = aMessage.Int2();
+ RArray<TUid> uids;
+ CleanupClosePushL(uids);
+
+ Server()->GetEntryUidsL(uids, drive);
+ WriteBackUidArrayL(uids, aMessage) ;
+ CleanupStack::PopAndDestroy(&uids);
+}
+
+
+// ---------------------------------------------------------------------------
+// GetEntryL
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::GetEntryL(const RMessage2& aMessage,
+ TBool aAllEntries)
+{
+ JELOG(EJavaStorage, "CJavaRegServerSession::GetEntryL()");
+
+ Server()->LeaveIfRestoringL();
+
+ // read uid
+ TUid uid = UidFromMessageL(2, aMessage);
+
+ // get property
+ CJavaPropertyArray* props = NULL;
+ Server()->GetEntryL(uid, props, aAllEntries);
+
+ TInt neededLength = 0;
+
+ // if there is property write it back
+ if (props)
+ {
+ CleanupStack::PushL(props);
+ TInt allocatedLength = aMessage.GetDesMaxLengthL(0);
+ neededLength = props->Size();
+
+ if (allocatedLength >= neededLength)
+ {
+ HBufC8* propBuffer = props->SerializedPropertiesL();
+ CleanupStack::PushL(propBuffer);
+ aMessage.WriteL(0, propBuffer->Des());
+ CleanupStack::PopAndDestroy(propBuffer);
+ }
+ else
+ {
+ WLOG(EJavaStorage,
+ "Allocated length is to small. Send back the needed length.");
+ }
+
+ // Delete because not cached.
+ props->DeleteProperties();
+ CleanupStack::PopAndDestroy(props);
+ }
+
+ // write back needed length
+ TPckgBuf<TInt> lengthPckg(neededLength);
+ aMessage.WriteL(1, lengthPckg);
+}
+
+
+// ---------------------------------------------------------------------------
+// FindEntries
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::FindEntriesL(const RMessage2& aMessage)
+{
+ JELOG(EJavaStorage, "CJavaRegServerSession::FindEntriesL()");
+
+ Server()->LeaveIfRestoringL();
+
+ RArray<TUid> uids;
+ CleanupClosePushL(uids);
+
+ // read properties
+ CJavaPropertyArray* props = PropertiesFromMessageL(2, aMessage);
+ CleanupStack::PushL(props);
+
+ Server()->FindEntriesL(*props, uids);
+
+ CleanupStack::PopAndDestroy(props);
+
+ WriteBackUidArrayL(uids, aMessage) ;
+
+ CleanupStack::PopAndDestroy(&uids);
+}
+
+
+// ---------------------------------------------------------------------------
+// FindAllEntries
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::FindAllEntriesL(const RMessage2& aMessage)
+{
+ JELOG(EJavaStorage, "CJavaRegServerSession::FindEntriesL()");
+
+ Server()->LeaveIfRestoringL();
+
+ RArray<TUid> uids;
+ CleanupClosePushL(uids);
+
+ // read properties
+ CJavaPropertyArray* props = PropertiesFromMessageL(2, aMessage);
+ CleanupStack::PushL(props);
+
+ Server()->FindAllEntriesL(*props, uids);
+
+ CleanupStack::PopAndDestroy(props);
+
+ WriteBackUidArrayL(uids, aMessage) ;
+
+ CleanupStack::PopAndDestroy(&uids);
+}
+
+
+// ---------------------------------------------------------------------------
+// SetBackupState
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::SetBackupState(const RMessage2& aMessage)
+{
+ JELOG(EJavaStorage, "CJavaRegServerSession::SetBackupState()");
+
+ TBackupState state = (TBackupState) aMessage.Int0();
+ Server()->SetBackupState(state);
+ iBackupSession = ETrue;
+}
+
+
+// ---------------------------------------------------------------------------
+// UidFromMessageL
+// ---------------------------------------------------------------------------
+TUid CJavaRegServerSession::UidFromMessageL(TInt aIndex,
+ const RMessage2& aMessage)
+{
+ TUid uid = TUid::Uid(0);
+ TPckg<TUid> uidPack(uid);
+ aMessage.ReadL(aIndex, uidPack);
+ return uid;
+}
+
+
+// ---------------------------------------------------------------------------
+// PropertiesFromMessageL
+// ---------------------------------------------------------------------------
+CJavaPropertyArray* CJavaRegServerSession::PropertiesFromMessageL(
+ TInt aIndex,
+ const RMessage2& aMessage)
+{
+ TInt length = aMessage.GetDesLengthL(aIndex);
+ HBufC8* propBuffer = HBufC8::NewLC(length);
+ TPtr8 ptr = propBuffer->Des();
+ aMessage.ReadL(aIndex, ptr);
+ CJavaPropertyArray* props = CJavaPropertyArray::NewL(propBuffer);
+ CleanupStack::PopAndDestroy(propBuffer);
+
+ return props;
+}
+
+
+// ---------------------------------------------------------------------------
+// WriteBackUidArrayL
+// ---------------------------------------------------------------------------
+void CJavaRegServerSession::WriteBackUidArrayL(RArray<TUid>& aUids,
+ const RMessage2& aMessage)
+{
+ HBufC16* uidBuffer = NULL;
+ JavaRegUidArrayConverter::StoreTUidsL(aUids, uidBuffer);
+ CleanupStack::PushL(uidBuffer);
+
+ TInt allocatedLength = aMessage.GetDesMaxLengthL(0);
+ TInt neededLength = uidBuffer->Length();
+
+ if (allocatedLength >= neededLength)
+ {
+ aMessage.WriteL(0, uidBuffer->Des());
+ }
+ else
+ {
+ WLOG(EJavaStorage,
+ "Allocated length is to small. Send back the needed length.");
+ }
+
+ CleanupStack::PopAndDestroy(uidBuffer);
+
+ // write back needed length
+ TPckgBuf<TInt> lengthPckg(neededLength);
+ aMessage.WriteL(1, lengthPckg);
+}