diff -r e8c1ea2c6496 -r 8758140453c0 lbs/internal/lbstestserver/src/csecureserverbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lbs/internal/lbstestserver/src/csecureserverbase.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,189 @@ +// Copyright (c) 2006-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 "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// csesuresessionbase.cpp +// +// + +#include "csecureserverbase.h" +#include "cshutdowntimer.h" +#include +/// Lbs +#include "lbsdevloggermacros.h" + +/** +Create a new session, called from CPolicyServer + +@param aVersion TVersion reference +@param aMessage RMessage2 object reference +@return CSession2 based object pointer +@internalTechnology +@released + */ +CSession2* CSecureServerBase::NewSessionL(const TVersion &aVersion, const RMessage2& aMessage) const + { + TVersion v = GetServerVersion(); + if(!User::QueryVersionSupported(v, aVersion)) + { + User::Leave(KErrNotSupported); + } + CSession2* session = DoNewSessionL(aVersion, aMessage); + return session; + } + +/** +destrcutor, cancel if any outstanding request of shutdown timer and release it. + +@internalTechnology +@released + */ +CSecureServerBase::~CSecureServerBase() + { + LBSLOG(ELogP1,"->CSecureServerBase::~CSecureServerBase"); + if(iShutdownTimer) + { + if(iShutdownTimer->IsActive()) + iShutdownTimer->Cancel(); + } + delete iShutdownTimer; + iShutdownTimer = NULL; + LBSLOG(ELogP1,"->CSecureServerBase::~CSecureServerBase"); + } + +/** +Create shut down timer + +@internalTechnology +@released + */ +void CSecureServerBase::BaseConstructL(TBool aShutdownTimerRequired) + { + LBSLOG(ELogP1,"->CSecureServerBase::BaseConstructL"); + iBaseConstructCalled = ETrue; + if(aShutdownTimerRequired) + { + iShutdownTimer = new (ELeave) CShutdownTimer(); + iShutdownTimer->ConstructL(); + } + LBSLOG(ELogP1,"<-CSecureServerBase::BaseConstructL"); + } + +/** +constructor, create server base with specified priority and policy, default shut down time delay + +@param aPriority Defined server priority +@param aSecurityPolicy A TPolicy object reference, to define server security policy +@internalTechnology +@released + */ +CSecureServerBase::CSecureServerBase(TInt aPriority, const TPolicy& aSecurityPolicy) : CPolicyServer(aPriority, aSecurityPolicy), + iShutdownDelay(KDefaultShutdownDelay) + { + // nothing to do? + } + +/** +Increase the session count by 1 +The function is called whenever a new session is created, cancel the current outstanding request of shutdown timer + +@internalTechnology +@released + */ +void CSecureServerBase::IncSession() + { + LBSLOG(ELogP1,"->CSecureServerBase::IncSession"); + __ASSERT_ALWAYS(iBaseConstructCalled, PanicServer(EBaseConstructNotCalled)); + ++iSessionCount; + if(iShutdownTimer) + { + iShutdownTimer->Cancel(); + } + LBSLOG(ELogP1,"<-CSecureServerBase::IncSession"); + } + +/** +Decrease the session count by 1 +The function is called whenever a new session is released, start shutdown timer with current shut down timer delay + +@internalTechnology +@released + */ +void CSecureServerBase::DecSession() + { + LBSLOG(ELogP1,"->CSecureServerBase::DecSession"); + + __ASSERT_ALWAYS(iBaseConstructCalled, PanicServer(EBaseConstructNotCalled)); + --iSessionCount; + if(iSessionCount > 0) + return; // bail out early + // ~CSecureSessionBase calls this, but it can be called after + // ~CSecureServerBase(!) e.g. a forced shutdown of the server with clients still connected + // so we need to guard this. + if(iShutdownTimer) + { + iShutdownTimer->Start(iShutdownDelay); // otherwise start the shutdown timer. + } + LBSLOG(ELogP1,"<-CSecureServerBase::DecSession"); + } + +/** +Return the session count + +@return Session count +@internalTechnology +@released + */ +TInt CSecureServerBase::GetSessionCount() const + { + __ASSERT_ALWAYS(iBaseConstructCalled, PanicServer(EBaseConstructNotCalled)); + return iSessionCount; + } + +/** +Get the current shut down delay + +@return Shut down time delay +@internalTechnology +@released + */ +TTimeIntervalMicroSeconds32 CSecureServerBase::GetShutdownDelay() const + { + __ASSERT_ALWAYS(iBaseConstructCalled, PanicServer(EBaseConstructNotCalled)); + return iShutdownDelay; + } + +/** +Set shut down delay + +@param aDelay Shut down time delay +@internalTechnology +@released + */ +void CSecureServerBase::SetShutdownDelay(const TTimeIntervalMicroSeconds32 aDelay) + { + __ASSERT_ALWAYS(iBaseConstructCalled, PanicServer(EBaseConstructNotCalled)); + iShutdownDelay = aDelay; + } + +/** +Panic the server with specified panic reason code + +@param aPanicCode Panic reason code +@internalTechnology +@released + */ +void CSecureServerBase::PanicServer(TInt aPanicCode) const + { + _LIT(KSecureServerBase, "SecureServerBase"); + User::Panic(KSecureServerBase, aPanicCode); + }