diff -r 000000000000 -r b497e44ab2fc syncmlfw/dm/callbackServer/src/nsmldmcallbackserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/dm/callbackServer/src/nsmldmcallbackserver.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,222 @@ +/* +* Copyright (c) 2005 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: DM callback server source file +* +*/ + + + +// --------------------------------------------------------------------------- +// Includes +// --------------------------------------------------------------------------- + +#include + +#include +#include + +#include "nsmldmcallbackserver.h" + +// --------------------------------------------------------------------------- +// constants +// --------------------------------------------------------------------------- + +const TUint32 KNSmlSOSServer = 0x101F99FB; +const TUint32 KTarmDMUtilServer = 0x10207843; //tarm +const TUint32 KFotaServer = 0x102072C4; //fota +const TUint32 KNSmlDMHostServer1ID = 270506498; // 0x101F9A02 +const TUint32 KNSmlDMHostServer2ID = 270506499; // 0x101F9A03 +const TUint32 KNSmlDMHostServer3ID = 270506500; // 0x101F9A04 +const TUint32 KNSmlDMHostServer4ID = 270506501; // 0x101F9A05 + + +// --------------------------------------------------------------------------- +// E32Main +// --------------------------------------------------------------------------- +GLDEF_C TInt E32Main() // main function called by E32 +{ + LaunchServer(); + return KErrNone; +} + +// --------------------------------------------------------------------------- +// LaunchServer() +// The only exported function of exedll for launching the server +// --------------------------------------------------------------------------- +TInt LaunchServer() + { + // check server not already started + TFindServer findServer(KNSmlDmCallbackServerName); + TFullName name; + if ( findServer.Next(name) == KErrNone ) + { // found server already + return KErrGeneral; + } + + TInt error = CNSmlDmCallbackServer::ThreadFunction( NULL ); + return error; + } + +// =========================================================================== +// CNSmlDmCallbackServer +// =========================================================================== + + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::PanicServer +// --------------------------------------------------------------------------- +void CNSmlDmCallbackServer::PanicServer( TNSmlDmCallbackServerPanic aPanic ) + { + _LIT(KTxtServer,"NSmlDmCallbackServer"); + User::Panic(KTxtServer,aPanic); + } + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::ThreadFunction +// --------------------------------------------------------------------------- +TInt CNSmlDmCallbackServer::ThreadFunction(TAny* /*aStarted*/) + { + __UHEAP_MARK; + // create cleanup stack + CTrapCleanup* cleanup = CTrapCleanup::New(); + if ( !cleanup ) + { + PanicServer(ECleanupCreateError); + } + // construct and install active scheduler + CActiveScheduler* scheduler = new CActiveScheduler; + __ASSERT_ALWAYS( scheduler,PanicServer(EMainSchedulerError) ); + CActiveScheduler::Install( scheduler ); + + // construct server + CNSmlDmCallbackServer* server=0; + TRAPD( err, server = CNSmlDmCallbackServer::NewL()); + RProcess::Rendezvous( err ); + // start handling requests + CActiveScheduler::Start(); + + delete server; + delete scheduler; + delete cleanup; + __UHEAP_MARKEND; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::NewL() +// --------------------------------------------------------------------------- +CNSmlDmCallbackServer* CNSmlDmCallbackServer::NewL() + { + CNSmlDmCallbackServer* self = new (ELeave) CNSmlDmCallbackServer(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + self->StartL(KNSmlDmCallbackServerName); + return self; + } + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::CNSmlDmCallbackServer() +// --------------------------------------------------------------------------- +CNSmlDmCallbackServer::CNSmlDmCallbackServer() : + CServer2(EPriorityStandard, ESharableSessions) + { + } + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::ConstructL() +// --------------------------------------------------------------------------- +void CNSmlDmCallbackServer::ConstructL() + { + iDbHandler = CNSmlDmDbHandler::NewL(); + } + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::~CNSmlDmCallbackServer() +// --------------------------------------------------------------------------- +CNSmlDmCallbackServer::~CNSmlDmCallbackServer() + { + delete iDbHandler; + } + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::NewSessionL() +// --------------------------------------------------------------------------- +CSession2* CNSmlDmCallbackServer::NewSessionL( const TVersion& aVersion, + const RMessage2& aMessage ) const + { + TVersion v(KNSmlDmCallbackServerVersionMajor, + KNSmlDmCallbackServerVersionMinor, 0); + + if( !User::QueryVersionSupported(v,aVersion) ) + { + User::Leave(KErrNotSupported); + } + + TUint32 idOfCaller = aMessage.SecureId().iId; + if ( idOfCaller != KNSmlSOSServer && + idOfCaller != KNSmlDMHostServer1ID && + idOfCaller != KNSmlDMHostServer2ID && + idOfCaller != KNSmlDMHostServer3ID && + idOfCaller != KNSmlDMHostServer4ID && + idOfCaller != KTarmDMUtilServer && + idOfCaller != KFotaServer // fota + ) + { + _LIT_SECURITY_POLICY_S0 ( mySidPolicy, KNSmlSOSServerSecureID ); + mySidPolicy().CheckPolicy ( aMessage ); + } + + return CNSmlDmCallbackSession::NewL( (CNSmlDmCallbackServer&)*this ); + } + + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::Increase() +// --------------------------------------------------------------------------- +void CNSmlDmCallbackServer::Increase() + { + iCount++; + } + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::Decrease() +// --------------------------------------------------------------------------- +void CNSmlDmCallbackServer::Decrease() + { + iCount--; + if ( iCount < 1 ) + { + CActiveScheduler::Stop(); + } + } + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::Count() +// --------------------------------------------------------------------------- +TInt CNSmlDmCallbackServer::Count() + { + return iCount; + } + + +// --------------------------------------------------------------------------- +// CNSmlDmCallbackServer::DbHandler() +// --------------------------------------------------------------------------- +CNSmlDmDbHandler* CNSmlDmCallbackServer::DbHandler() + { + return iDbHandler; + } + +// End of file