diff -r f5050f1da672 -r 04becd199f91 javamanager/javaregistry/legacy/server/src/javaregserversession.cpp --- /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 resultBuf(result); + aMessage.WriteL(1, resultBuf) ; +} + + +// --------------------------------------------------------------------------- +// GetEntryUidsL +// --------------------------------------------------------------------------- +void CJavaRegServerSession::GetEntryUidsL(const RMessage2& aMessage) +{ + JELOG(EJavaStorage, "CJavaRegServerSession::GetEntryUidsL()"); + + Server()->LeaveIfRestoringL(); + + TInt drive = aMessage.Int2(); + RArray 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 lengthPckg(neededLength); + aMessage.WriteL(1, lengthPckg); +} + + +// --------------------------------------------------------------------------- +// FindEntries +// --------------------------------------------------------------------------- +void CJavaRegServerSession::FindEntriesL(const RMessage2& aMessage) +{ + JELOG(EJavaStorage, "CJavaRegServerSession::FindEntriesL()"); + + Server()->LeaveIfRestoringL(); + + RArray 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 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 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& 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 lengthPckg(neededLength); + aMessage.WriteL(1, lengthPckg); +}