diff -r 000000000000 -r a2952bb97e68 mmappcomponents/harvester/server/src/mpxharvesterserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/harvester/server/src/mpxharvesterserver.cpp Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 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: Harvester Server +* +*/ + + +#include +#include + +#include "mpxharvestercommon.h" +#include "mpxharvesterserver.h" +#include "mpxharvesterengine.h" +#include "mpxharvestersession.h" +#include "mpxharvesterserverdefs.h" + +// CONSTANTS + +// Server Security Policy +const TUint KMPXHarvesterServerRangeCount = 2; +const TInt KMPXHarvesterServerRanges[KMPXHarvesterServerRangeCount] = + { + 0, //range is [0-EHvsServerOpCount) + EHvsServerOpCount //range is [EHvsServerOpCount-KMaxTInt] + }; +const TUint8 KMPXHarvesterSeverElementsIndex[KMPXHarvesterServerRangeCount] = + { + 0, + CPolicyServer::ENotSupported + }; + +const CPolicyServer::TPolicyElement KMPXHarvesterServerPolicyElements[] = + { + {_INIT_SECURITY_POLICY_C1(ECapabilityWriteDeviceData), + CPolicyServer::EFailClient} + }; + +const CPolicyServer::TPolicy KMPXHarvesterServerPolicy = + { + CPolicyServer::EAlwaysPass, //specifies all connect attempts should pass + KMPXHarvesterServerRangeCount, + KMPXHarvesterServerRanges, + KMPXHarvesterSeverElementsIndex, + KMPXHarvesterServerPolicyElements + }; + + +// ============================ LOCAL FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// Start Harvester Server +// ---------------------------------------------------------------------------- +// +LOCAL_C void StartServerL() + { + User::LeaveIfError(User::RenameThread(KMPXHarvesterServerName)); + CActiveScheduler* scheduler = new(ELeave)CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install(scheduler); + CMPXHarvesterServer* server = CMPXHarvesterServer::NewL(); + CleanupStack::PushL(server); + RProcess::Rendezvous(KErrNone); + CActiveScheduler::Start(); + CActiveScheduler::Install(NULL); + CleanupStack::PopAndDestroy(server); + CleanupStack::PopAndDestroy(scheduler); + } + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +CMPXHarvesterServer* CMPXHarvesterServer::NewL() + { + CMPXHarvesterServer *server = new(ELeave) CMPXHarvesterServer( + EMPXHarvesterServerPriority, + KMPXHarvesterServerPolicy); + CleanupStack::PushL(server); + server->ConstructL(); + CleanupStack::Pop(server); + return server; + } + +// ---------------------------------------------------------------------------- +// C++ constructor can NOT contain any code that might leave. +// ---------------------------------------------------------------------------- +// +CMPXHarvesterServer::CMPXHarvesterServer(TInt aPriority, const TPolicy &aPolicy) + : CPolicyServer(aPriority, aPolicy) + {} + +// ---------------------------------------------------------------------------- +// Destructor +// ---------------------------------------------------------------------------- +// +CMPXHarvesterServer::~CMPXHarvesterServer() + { + delete iEngine; + } + +// ---------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------- +// +void CMPXHarvesterServer::ConstructL() + { + iEngine = CMPXHarvesterEngine::NewL(); + StartL(KMPXHarvesterServerName); + RProcess().SetPriority(::EPriorityLow); + } + +// ---------------------------------------------------------------------------- +// Increments number of sessions this server holds +// ---------------------------------------------------------------------------- +// +void CMPXHarvesterServer::AddClient() + { + iClients++; + } + + +// ---------------------------------------------------------------------------- +// Decrement the number of clients currently connected to the harvester server +// ---------------------------------------------------------------------------- +// +void CMPXHarvesterServer::RemoveClient() + { + iClients--; + ASSERT(iClients>=0); + } + +// ---------------------------------------------------------------------------- +// Create a new session +// ---------------------------------------------------------------------------- +// +CSession2* CMPXHarvesterServer::NewSessionL(const TVersion& aVersion, + const RMessage2& /*aMessage*/) const + { + TVersion v(KMPXHarvesterServerMajorVersionNumber, + KMPXHarvesterServerMinorVersionNumber, + KMPXHarvesterServerBuildVersionNumber); + if (!User::QueryVersionSupported(v,aVersion)) + { + User::Leave(KErrNotSupported); + } + return CMPXHarvesterSession::NewL(*(const_cast(this)), + *iEngine); + } + +// ---------------------------------------------------------------------------- +// Server exe entry +// ---------------------------------------------------------------------------- +// +TInt E32Main() + { + __UHEAP_MARK; + // + CTrapCleanup* cleanup=CTrapCleanup::New(); + TInt r(KErrNoMemory); + if (cleanup) + { + TRAP(r,StartServerL()); + } + + delete cleanup; + __UHEAP_MARKEND; + return r; + } +