diff -r ccd8e69b5392 -r 496ad160a278 mmsharing/mmshmanagersrv/src/musmanagerserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshmanagersrv/src/musmanagerserver.cpp Fri Jun 11 13:36:18 2010 +0300 @@ -0,0 +1,217 @@ +/* +* 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: ?Description +* +*/ + + +#include "musmanagerserver.h" +#include "musunittesting.h" +#include "muslogger.h" +#include "musmanageripccommon.h" +#include "musmanagerserverclosetimer.h" +#include "musmanagerservercore.h" +#include "musmanagerserverplatsecpolicy.h" +#include "musmanagerserversession.h" + +// CONSTANTS +const TUint KServerCloseWaitTime = 500; // milliseconds + +// ----------------------------------------------------------------------------- +// CMusManagerServer::NewL +// ----------------------------------------------------------------------------- +// +CMusManagerServer* CMusManagerServer::NewL() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServer* CMusManagerServer::NewL()" ); + + CMusManagerServer* self = CMusManagerServer::NewLC(); + CleanupStack::Pop( self ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServer* CMusManagerServer::NewL()" ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::NewLC +// ----------------------------------------------------------------------------- +// +CMusManagerServer* CMusManagerServer::NewLC() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServer* CMusManagerServer::NewLC()" ); + + CMusManagerServer* self = new( ELeave ) CMusManagerServer( EPriorityHigh ); + CleanupStack::PushL( self ); + self->ConstructL(); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServer* CMusManagerServer::NewLC()" ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::CMusManagerServer +// ----------------------------------------------------------------------------- +// +CMusManagerServer::CMusManagerServer ( TInt aPriority ) + : CPolicyServer( aPriority, KMusManagerServerPlatSecPolicy ) + { + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::ConstructL +// ----------------------------------------------------------------------------- +// +void CMusManagerServer::ConstructL() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServer::ConstructL()" ); + + iActiveScheduler = new( ELeave ) CActiveScheduler (); + CActiveScheduler::Install( iActiveScheduler ); + + StartL( KMusManagerServerName ); + + iCloseTimer = CMusManagerServerCloseTimer::NewL(); + + iServerCore = CMusManagerServerCore::NewL( *this ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServer::ConstructL()" ); + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::~CMusManagerServer +// ----------------------------------------------------------------------------- +// +CMusManagerServer::~CMusManagerServer() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServer::~CMusManagerServer()" ); + + delete iCloseTimer; + //iServerCore.StopMonitoring(); + delete iServerCore; + + delete iActiveScheduler; + CActiveScheduler::Install( NULL ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServer::~CMusManagerServer()" ); + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::IncrementSessions +// ----------------------------------------------------------------------------- +// +void CMusManagerServer::StopServer() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServer::StopServer()" ); + iCloseTimer->StopActiveSchedulerAfter( KServerCloseWaitTime ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServer::StopServer()" ); + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::IncrementSessions +// ----------------------------------------------------------------------------- +// +void CMusManagerServer::IncrementSessions() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServer::IncrementSessions()" ); + + iSessionCount++; + + if ( iCloseTimer->IsActive() ) + { + iCloseTimer->Cancel(); + } + MUS_LOG1( "mus: [MUSSRV] <- CMusManagerServer::IncrementSessions( %d )", + iSessionCount ); + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::DecrementSessions +// ----------------------------------------------------------------------------- +// +void CMusManagerServer::DecrementSessions() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServer::DecrementSessions()" ); + + iSessionCount--; + + if( iSessionCount == 0 ) + { + iServerCore->EventNoSessions(); + } + MUS_LOG1( "mus: [MUSSRV] <- CMusManagerServer::DecrementSessions( %d )", + iSessionCount ); + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::RunError +// ----------------------------------------------------------------------------- +// +TInt CMusManagerServer::RunError(TInt aError) + { + MUS_LOG1( "mus: [MUSSRV] -> CMusManagerServer::RunError( %d )", + aError ); + + if ( aError == KErrBadDescriptor ) + { + // A bad descriptor error implies a badly programmed client, + // so panic it; otherwise report the error to the client + Message().Panic( KMusManagerServer(), EBadDescriptor ); + } + else + { + Message().Complete( aError ); + } + // + // The leave will result in an early return from CServer::RunL(), skipping + // the call to request another message. So do that now in order to keep the + // server running. + ReStart(); + + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServer::RunError()" ); + return KErrNone; // handled the error fully + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::NewSessionL +// ----------------------------------------------------------------------------- +// +CSession2* CMusManagerServer::NewSessionL( + const TVersion &aVersion, + const RMessage2& /*aMessage*/ ) const + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServer::NewSessionL()" ); + + // check we're the right version + if ( !User::QueryVersionSupported( TVersion( KMusManagerServerMajorVersionNumber, + KMusManagerServerMinorVersionNumber, + KMusManagerServerBuildVersionNumber), + aVersion ) ) + { + User::Leave( KErrNotSupported ); + } + // make new session + CMusManagerServerSession* session = CMusManagerServerSession::NewL( + const_cast( *this ), + *iServerCore ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServer::NewSessionL()" ); + return session; + + } + +// ----------------------------------------------------------------------------- +// CMusManagerServer::SessionCount +// ----------------------------------------------------------------------------- +// +TUint CMusManagerServer::SessionCount() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServer::SessionCount()" ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServer::SessionCount()" ); + return iSessionCount; + }