lbs/internal/lbstestserver/src/csecureserverbase.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /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 <e32debug.h>
+/// 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);
+	}