diff -r 7333d7932ef7 -r 8b7f4e561641 installationservices/swtransactionservices/source/server/stsserversession.cpp --- a/installationservices/swtransactionservices/source/server/stsserversession.cpp Tue Aug 31 15:21:33 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,221 +0,0 @@ -/* -* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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: -* Implements CStsServer. -* -*/ - - -/** - @file - @internalComponent - @released -*/ - -#include "stsserver.h" -#include "stsserversession.h" -#include -#include -#include -#include -#include "usiflog.h" - -namespace Usif -{ - -CStsServerSession::CStsServerSession(CStsServer& aStsserver) - : CScsSession(static_cast(aStsserver)) - { - } - -CStsServerSession::~CStsServerSession() - { - if (iTransactionPtr) - TRAP_IGNORE(static_cast(&iServer)->ReleaseTransactionL(iTransactionPtr)); - } - -CStsServerSession* CStsServerSession::NewL(CStsServer &aServer, const RMessage2& /*aMessage*/) - { - CStsServerSession* self = new (ELeave) CStsServerSession(aServer); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CStsServerSession::ConstructL() - { - CScsSession::ConstructL(); - } - - -_LIT(KStsPanicCategory, "StsServer"); -static const TInt KInvalidMessagePanicCode = KErrArgument; - -TBool CStsServerSession::DoServiceL(TInt aFunction, const RMessage2& aMessage) - { - DEBUG_PRINTF2(_L("CStsServerSession::DoServiceL() - Function %d"), static_cast(aFunction)); - - TBool ret = ETrue; //used in CScsSession::ServiceL(); if set to ETRue >> aMessage.Complete(KErrNone); is executed - TStsTransactionId transactionID; - TPckg idPkg(transactionID); - RBuf buf; - CStsServer* server=static_cast(&iServer); - - switch(static_cast(aFunction)) - { - case ECreateTransaction: - { - if(iTransactionPtr) - { - User::Leave(KErrInUse); - } - iTransactionPtr = server->CreateTransactionL(); - transactionID = iTransactionPtr->TransactionId(); - aMessage.WriteL(KIdIPCSlot, idPkg); - break; - } - case EOpenTransaction: - { - if(iTransactionPtr) - { - User::Leave(KErrInUse); - } - aMessage.ReadL(KIdIPCSlot, idPkg, 0); - iTransactionPtr = server->AttachTransactionL(transactionID); - break; - } - case ERegisterNew: - { - __ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode)); - buf.CreateL(KMaxFileName); - buf.CleanupClosePushL(); - aMessage.ReadL(KFilePathIPCSlot, buf, 0); - iTransactionPtr->RegisterNewL(buf); - CleanupStack::PopAndDestroy(&buf); - break; - } - case ECreateNew: - { - __ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode)); - // Taking the filename size from the IPC Arguments - // No need to do any validation of filename as it is done by File Server - TInt srcFileNameLen = aMessage.GetDesLengthL(KFilePathIPCSlot); - buf.CreateL(srcFileNameLen); - buf.CleanupClosePushL(); - aMessage.ReadL(KFilePathIPCSlot, buf, 0); - TPckgBuf pkgFileMode; - aMessage.ReadL(KFileModeIPCSlot, pkgFileMode, 0); - RFile newFile; - CleanupClosePushL(newFile); - iTransactionPtr->CreateNewL(buf, newFile, pkgFileMode()); - User::LeaveIfError(newFile.TransferToClient(aMessage, KFileHandleIPCSlot)); - ASSERT(aMessage.IsNull()); // message should have been completed - ret = EFalse; //message need not be completed in CScsSession::ServiceL() - CleanupStack::PopAndDestroy(2, &buf); - break; - } - case ERemove: - { - __ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode)); - buf.CreateL(KMaxFileName); - buf.CleanupClosePushL(); - aMessage.ReadL(KFilePathIPCSlot, buf, 0); - iTransactionPtr->RemoveL(buf); - CleanupStack::PopAndDestroy(&buf); - break; - } - case ERegisterTemporary: - { - __ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode)); - buf.CreateL(KMaxFileName); - buf.CleanupClosePushL(); - aMessage.ReadL(KFilePathIPCSlot, buf, 0); - iTransactionPtr->RegisterTemporaryL(buf); - CleanupStack::PopAndDestroy(&buf); - break; - } - case ECreateTemporary: - { - __ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode)); - // Taking the filename size from the IPC Arguments - // No need to do any validation of filename as it is done by File Server - TInt srcFileNameLen = aMessage.GetDesLengthL(KFilePathIPCSlot); - buf.CreateL(srcFileNameLen); - buf.CleanupClosePushL(); - aMessage.ReadL(KFilePathIPCSlot, buf, 0); - TPckgBuf pkgFileMode; - aMessage.ReadL(KFileModeIPCSlot, pkgFileMode, 0); - RFile newTempFile; - CleanupClosePushL(newTempFile); - iTransactionPtr->CreateTemporaryL(buf, newTempFile, pkgFileMode()); - User::LeaveIfError(newTempFile.TransferToClient(aMessage, KFileHandleIPCSlot)); - ASSERT(aMessage.IsNull()); // message should have been completed - ret = EFalse; //message need not be completed in CScsSession::ServiceL() - CleanupStack::PopAndDestroy(2, &buf); - break; - } - case EOverwrite: - { - __ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode)); - buf.CreateL(KMaxFileName); - buf.CleanupClosePushL(); - aMessage.ReadL(KFilePathIPCSlot, buf, 0); - TPckgBuf pkgFileMode; - aMessage.ReadL(KFileModeIPCSlot, pkgFileMode, 0); - RFile newFile; - CleanupClosePushL(newFile); - iTransactionPtr->OverwriteL(buf, newFile, pkgFileMode()); - User::LeaveIfError(newFile.TransferToClient(aMessage, KFileHandleIPCSlot)); - ASSERT(aMessage.IsNull()); // message should have been completed - ret = EFalse; //message need not be completed in CScsSession::ServiceL() - CleanupStack::PopAndDestroy(2, &buf); - break; - } - case ECommit: - { - __ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode)); - iTransactionPtr->CommitL(); - server->FinaliseTransactionL(iTransactionPtr); //releases transaction and erases pointer! - break; - } - case ERollBack: - { - __ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode)); - iTransactionPtr->RollBackL(); - server->FinaliseTransactionL(iTransactionPtr); //releases transaction and erases pointer! - break; - } - case EGetId: - { - __ASSERT_ALWAYS(iTransactionPtr, aMessage.Panic(KStsPanicCategory, KInvalidMessagePanicCode)); - transactionID = iTransactionPtr->TransactionId(); - //return ID back to client - aMessage.WriteL(KIdIPCSlot, idPkg); - break; - } - case ERollBackAllPending: - { - server->RollBackAllPendingL(); - break; - } - default: - { - User::Leave(KErrNotSupported); - break; - } - } - return ret; - } -}//end of namespace Usif