networkprotocolmodules/networkprotocolmodule/LbsNetSim/src/lbsnetsimserver.cpp
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocolmodules/networkprotocolmodule/LbsNetSim/src/lbsnetsimserver.cpp	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,192 @@
+// 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 "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:
+//
+
+#include <ecom/ecom.h>
+#include "lbsnetsim.h"
+#include "lbsnetsimserver.h"
+#include "lbsnetsimsession.h"
+#include "lbsnetsimtesthandler.h"
+#include "lbsnetsimgatewayhandler.h"
+#include "lbsnetsimassistancedataprovider.h"
+
+
+//
+// Policy Stuff
+const TUint KRangeCount = 6;
+
+const TInt KRanges[KRangeCount] = {0, 3, 1000, 1017, 2000, 2020};
+const TUint8 KElementsIndex[KRangeCount] = { CPolicyServer::EAlwaysPass, 
+											 CPolicyServer::ENotSupported, 
+											 CPolicyServer::EAlwaysPass,
+											 CPolicyServer::ENotSupported,
+											 CPolicyServer::EAlwaysPass,
+											 CPolicyServer::ENotSupported };
+const CPolicyServer::TPolicyElement KPolicies[1] = 
+	{{_INIT_SECURITY_POLICY_C1(ECapabilityDiskAdmin), CPolicyServer::EFailClient}};
+const CPolicyServer::TPolicy KPolicy = 
+	{
+	CPolicyServer::EAlwaysPass,
+	KRangeCount,
+	KRanges,
+	KElementsIndex,
+	KPolicies
+	};
+//
+
+
+/**
+*/
+CSession2* CLbsNetSimServer::NewSessionL(const TVersion& /*aVersion*/, const RMessage2& /*aMessage*/) const
+	{
+	// Need to castaway the const
+	CLbsNetSimServer* self = const_cast<CLbsNetSimServer*>(this);
+	CSession2* newSession = new (ELeave) CLbsNetSimSession(self);
+	self->IncClientCount();	
+	return newSession;
+	}
+
+
+/**
+*/
+TInt CLbsNetSimServer::StartServer()
+	{
+	__UHEAP_MARK;
+	
+	CTrapCleanup* cleanupStack = CTrapCleanup::New();
+
+	TInt ret = KErrNoMemory;
+	if (cleanupStack)
+		{
+		TRAP(ret, StartServerL());
+		delete cleanupStack;
+		}
+	
+	__UHEAP_MARKEND;
+	
+	return ret;
+	}
+	
+CLbsNetSimServer::~CLbsNetSimServer()
+	{
+	delete iAssistanceDataProvider;
+	delete iTestHandler;
+	delete iGatewayHandler;
+	
+	REComSession::FinalClose();
+	}
+
+		
+/**
+*/		
+MLbsNetSimSessionHandler* CLbsNetSimServer::GetGatewayHandler()
+	{
+	return iGatewayHandler;
+	}
+
+
+/**
+*/
+MLbsNetSimSessionHandler* CLbsNetSimServer::GetTestHandler()
+	{
+	return iTestHandler;
+	}
+
+void CLbsNetSimServer::IncClientCount()
+	{
+	++iClientCount;
+	}
+	
+void CLbsNetSimServer::DecClientCount()
+	{
+	--iClientCount;
+	if (iClientCount <=0)
+		{
+		CActiveScheduler::Stop();
+		}
+	}
+
+//
+// Private Methods
+
+/**
+*/
+CLbsNetSimServer::CLbsNetSimServer(TInt aPriority) :
+	CPolicyServer(aPriority, KPolicy)
+	{
+	}
+
+
+/**
+*/
+CLbsNetSimServer* CLbsNetSimServer::NewL()
+	{
+	CLbsNetSimServer* self = new(ELeave) CLbsNetSimServer(EPriorityStandard);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	
+	return self;
+	}
+
+
+/**
+*/
+void CLbsNetSimServer::ConstructL()
+	{
+	iAssistanceDataProvider = CLbsNetSimAssistanceDataProvider::NewL();
+	iTestHandler = CLbsNetSimTestHandler::NewL(*iAssistanceDataProvider);
+	iGatewayHandler = CLbsNetSimGatewayHandler::NewL(*iAssistanceDataProvider);
+	
+	iTestHandler->SetGatewayHandler(iGatewayHandler);
+	iGatewayHandler->SetTestHandler(iTestHandler);
+	}
+
+/**
+*/
+void CLbsNetSimServer::StartServerL()
+	{
+#ifndef EKA2
+	// Rename thread to aid debugging
+	User::LeaveIfError(RThread().Rename(KLbsNetSimServerName));
+#endif
+
+	// Start scheduler
+	CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(scheduler);
+	CActiveScheduler::Install(scheduler);
+
+	// Start server
+	CLbsNetSimServer* server = CLbsNetSimServer::NewL();
+	CleanupStack::PushL(server);
+
+	server->StartL(KLbsNetSimServerName);
+
+	// Signal we have started
+	RProcess().Rendezvous(KErrNone);
+
+	// Start the active schedular
+	CActiveScheduler::Start();
+
+	// Cleanup
+	CleanupStack::PopAndDestroy(2, scheduler);
+	}
+
+
+//
+// Global start up
+int E32Main(void)
+	{
+	return CLbsNetSimServer::StartServer();
+	}