diff -r 000000000000 -r d0791faffa3f mtpdataproviders/mtpimagedp/mediasyncserver/src/cmediasyncserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpimagedp/mediasyncserver/src/cmediasyncserver.cpp Tue Feb 02 01:11:40 2010 +0200 @@ -0,0 +1,202 @@ +// 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: +// + +/** + @file + @internalTechnology +*/ + +#include +#include + +#include "cmediasyncserver.h" +#include "cmediasyncserversession.h" +#include "cmediasyncobserver.h" +#include "cmediasyncserverdef.h" + +__FLOG_STMT(_LIT8(KComponent, "MediaSyncServer");) + +const TInt KMediaSyncFunctionCodeRanges[] = + { + EMediaSyncClientGetGSHHandle, + EMediaSyncClientShutdown, + EMediaSyncClientNotSupported, + }; + +const TUint KMediaSyncFunctionCodeRangeCount = (sizeof(KMediaSyncFunctionCodeRanges) + / sizeof(KMediaSyncFunctionCodeRanges[0])); + + +const TUint8 KMediaSyncPolicyElementNetworkAndLocal = 0; +const TUint8 KMediaSyncPolicyElementPowerMgmt = 1; + +const TUint8 KMediaSyncElementsIndex[KMediaSyncFunctionCodeRangeCount] = + { + KMediaSyncPolicyElementNetworkAndLocal, + KMediaSyncPolicyElementPowerMgmt, + CPolicyServer::ENotSupported, + }; + +const CPolicyServer::TPolicyElement KMediaSyncPolicyElements[] = + { + {_INIT_SECURITY_POLICY_C2(ECapabilityNetworkServices, ECapabilityLocalServices), CPolicyServer::EFailClient}, + {_INIT_SECURITY_POLICY_C1(ECapabilityPowerMgmt), CPolicyServer::EFailClient}, + }; + +const CPolicyServer::TPolicy KMediaSyncServerPolicy = + { + CPolicyServer::EAlwaysPass, //specifies all connect attempts should pass + KMediaSyncFunctionCodeRangeCount, + KMediaSyncFunctionCodeRanges, + KMediaSyncElementsIndex, // what each range is compared to + KMediaSyncPolicyElements // what policies range is compared to + }; + + +/** +Creates and executes a new CMTPServer instance. +@leave One of the system wide error codes, if a processing failure occurs. +*/ +void CMediaSyncServer::RunServerL() + { + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + + TFileName lockFileName; + fs.PrivatePath(lockFileName); + TDriveUnit driveNum = RFs::GetSystemDrive(); + lockFileName.Insert(0, driveNum.Name()); + lockFileName.Append(KMssLockName); + + RFile lockFile; + CleanupClosePushL(lockFile); + TInt ret = KErrNone; + if (!BaflUtils::FileExists(fs, lockFileName)) + { + BaflUtils::EnsurePathExistsL(fs, lockFileName); + ret = lockFile.Create(fs, lockFileName, EFileShareExclusive|EFileWrite); + } + else + { + ret = lockFile.Open(fs, lockFileName, EFileShareExclusive|EFileWrite); + } + + if (ret == KErrNone) + { + // Naming the server thread after the server helps to debug panics + User::LeaveIfError(User::RenameProcess(KMediaSyncServerName)); + + // Create and install the active scheduler. + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install(scheduler); + + // Create the server and leave it on the cleanup stack. + CMediaSyncServer* server = CMediaSyncServer::NewLC(fs); + + // Initialisation complete, signal the client + RProcess::Rendezvous(KErrNone); + + // Execute the server. + CActiveScheduler::Start(); + + // Server shutting down. + CleanupStack::PopAndDestroy(server); + + CleanupStack::PopAndDestroy(scheduler); // scheduler + } + else + { + RProcess::Rendezvous(KErrNone); + } + + CleanupStack::PopAndDestroy(&lockFile); + CleanupStack::PopAndDestroy(&fs); + } + +CMediaSyncServer* CMediaSyncServer::NewLC(RFs& aFs) + { + CMediaSyncServer* self = new (ELeave) CMediaSyncServer; + CleanupStack::PushL(self); + self->ConstructL(aFs); + return self; + } + +CMediaSyncServer::CMediaSyncServer() : + CPolicyServer(CActive::EPriorityStandard, KMediaSyncServerPolicy) + { + + } + +CMediaSyncServer::~CMediaSyncServer() + { + __FLOG(_L8("CMediaSyncServer::~CMediaSyncServer - Entry")); + + delete iDb; + delete iObserver; + + __FLOG(_L8("CMediaSyncServer::~CMediaSyncServer - Exit")); + __FLOG_CLOSE; + } + +void CMediaSyncServer::ConstructL(RFs& aFs) + { + __FLOG_OPEN(KMSSSubsystem, KComponent); + __FLOG(_L8("CMediaSyncServer::ConstructL - Entry")); + + iDb = CMediaSyncDatabase::NewL(aFs); + iObserver = CMediaSyncObserver::NewL(iDb); + iNeedFullSync = iDb->IsMssDbCorrupt(); + + StartL(KMediaSyncServerName); + + __FLOG(_L8("CMediaSyncObserver::ConstructL - Exit")); + } + +CSession2* CMediaSyncServer::NewSessionL(const TVersion&,const RMessage2&) const + { + __FLOG(_L8("CMediaSyncServer::NewSessionL - Entry")); + + CMediaSyncServer* ncThis = const_cast(this); + + __FLOG(_L8("CMediaSyncObserver::NewSessionL - Exit")); + return new(ELeave) CMediaSyncServerSession(ncThis); + } + +CMediaSyncObserver* CMediaSyncServer::MediaSyncObserver() const + { + return iObserver; + } + +CMediaSyncDatabase* CMediaSyncServer::MediaSyncDatabase() const + { + return iDb; + } + +TBool CMediaSyncServer::NeedFullSync() + { + return iNeedFullSync; + } + +void CMediaSyncServer::ClearFullSyncFlag() + { + __FLOG(_L8("CMediaSyncServer::ClearFullSyncFlag - Entry")); + + iNeedFullSync = EFalse; + iDb->ClearMssDbCorrupt(); + + __FLOG(_L8("CMediaSyncObserver::ClearFullSyncFlag - Exit")); + }