telephonyserver/etelserverandcore/SETEL/ET_SVR.CPP
changeset 0 3553901f7fa8
child 19 630d2f34d719
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserver/etelserverandcore/SETEL/ET_SVR.CPP	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,1207 @@
+// Copyright (c) 1997-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 <e32svr.h>
+#include "ET_SSTD.H"
+#include <e32cmn.h>
+#include "et_record.h"
+#include <u32hal.h>
+
+#ifdef __EABI__
+extern const TInt32 KPriorityClientSid;
+extern const TInt32 KLocationServicesNetworkGatewaySid;
+extern const TInt32 KSatEngineSid;
+#endif
+
+//
+// CDestroyDummySubSession class definitions
+//
+
+CDestroyDummySubSession* CDestroyDummySubSession::NewL(CTelServer* aTelServer,CTelObject* aTelObject)
+//
+//	Create an async one shot
+//
+	{
+	return new(ELeave)CDestroyDummySubSession(aTelServer,aTelObject);
+	}
+
+CDestroyDummySubSession::CDestroyDummySubSession(CTelServer* aTelServer,CTelObject* aTelObject)
+//
+// C'tor
+//
+	:CAsyncOneShot(CActive::EPriorityLow),
+	iTelObject(aTelObject), iTelServer(aTelServer)
+	{
+	__DECLARE_NAME(_S("CDestroyDummySubSession"));
+	}
+
+CDestroyDummySubSession::~CDestroyDummySubSession()
+	{
+	Cancel();
+	}
+
+void CDestroyDummySubSession::RunL()
+//
+// Destroy the tel object and the the server
+//
+	{
+	LOGTEXT("In RunL and about to Destroy the Tel Objects");
+	iOpen=EFalse;
+	iTelObject->TelObjectClose();
+	}
+
+//
+// CTelChannelHandler class definitions
+//
+
+CTelChannelHandler::CTelChannelHandler(CTelServer* aServer):
+    CCFModuleChannelHandler(CActive::EPriorityStandard)
+	/** Constructor
+	@internalComponent */
+	{
+	iServer=aServer;
+	}
+
+CTelChannelHandler* CTelChannelHandler::NewL(RCFChannel::TMsgQueues aRxQueues, 
+    RCFChannel::TMsgQueues aTxQueues, CTelServer* aServer)
+	/** Create channel handler instance and construct it. Standard pattern
+	@internalComponent */
+	{
+	CTelChannelHandler* pHandler = new (ELeave) CTelChannelHandler(aServer);
+	CleanupStack::PushL(pHandler);
+	pHandler->ConstructL(aRxQueues, aTxQueues);
+	CleanupStack::Pop(pHandler);
+	return pHandler;
+	}
+
+void CTelChannelHandler::CFMessageShutdown(const CommsFW::TCFShutdownMsg& aMessage)
+	{
+	iServer->CFMessageShutdown(aMessage);
+	}
+
+void CTelServer::CFMessageShutdown(const CommsFW::TCFShutdownMsg& aMessage)
+	/** 
+	@internalComponent */
+	{
+	if((aMessage.Type()==EOptional) || (aMessage.Type()==EGraceful))
+		{
+		LOGTEXT("CTelServer received Shutdown. Scheduling shutdown when there's no sessions.");
+		iShutGracefully = ETrue;
+		LOGTEXT2("Session Count is %d", iSessionCount);
+		if(iSessionCount==0)
+			{
+			LOGTEXT("Calling AsynOneShot::Call()");
+			iSch->Call();
+			}
+		}
+	else
+		{
+		LOGTEXT("CTelServer received Shutdown option EUnGraceful. Not supported, ignoring.");
+		}
+	}
+
+//
+// CTelSchedulerStop class definitions
+//
+
+CTelSchedulerStop* CTelSchedulerStop::NewL()
+//
+//	Create the TelScheduler Stop async one shot
+//
+	{
+	return new(ELeave)CTelSchedulerStop;
+	}
+
+CTelSchedulerStop::CTelSchedulerStop()
+//
+// C'tor
+//
+	:CAsyncOneShot(CActive::EPriorityLow)
+	{
+	__DECLARE_NAME(_S("CTelSchedulerStop"));
+	}
+
+CTelSchedulerStop::~CTelSchedulerStop()
+	{
+	Cancel();
+	}
+
+void CTelSchedulerStop::RunL()
+//
+// Stop the Active Scheduler (after any libraries have been unloaded)
+//
+	{
+	LOGTEXT("In RunL and about to stop CActiveScheduler");
+	CActiveScheduler::Stop();
+	}
+
+//
+// CTelServer class definitions
+//
+
+CTelServer* CTelServer::NewL(RCFChannel::TMsgQueues aRxQueues, RCFChannel::TMsgQueues aTxQueues)
+	{
+	CTelServer* pS = new (ELeave) CTelServer(EPriority);
+	CleanupStack::PushL(pS);
+	pS->ConstructL(aRxQueues, aTxQueues);
+	CleanupStack::Pop(pS);
+	return pS;
+	}
+
+CTelServer::CTelServer(TInt aPriority)
+	: CPolicyServer(aPriority, iPolicy, ESharableSessions), iSessionCount(0), iShutGracefully(EFalse)
+	{
+	__DECLARE_NAME(_S("CTelServer"));
+	}
+
+void CTelServer::ConstructL(RCFChannel::TMsgQueues aRxQueues, RCFChannel::TMsgQueues aTxQueues)
+	{
+	iPhoneManager=CPhoneManager::NewL();
+	iSch=CTelSchedulerStop::NewL();
+	iPriorityClientSession=NULL;
+	iChannelHandler = CTelChannelHandler::NewL(aRxQueues, aTxQueues, this);
+#if defined (__EABI__) 
+	iPriorityClientSid = KPriorityClientSid;
+	iLocationServicesNetworkGatewaySid = KLocationServicesNetworkGatewaySid;
+	iSatEngineSid = KSatEngineSid;
+#else // WINS
+	// for the emulator the SecureId of Master phone application is patched via the epoc.ini file 
+	UserSvr::HalFunction(EHalGroupEmulator,EEmulatorHalIntProperty,(TAny*)"etel_KPriorityClientSid",&iPriorityClientSid);
+	// for the emulator the SecureId of Location Services Network Gateway process is patched via the epoc.ini file
+	UserSvr::HalFunction(EHalGroupEmulator,EEmulatorHalIntProperty,(TAny*)"etel_KLocationServicesNetworkGatewaySid",&iLocationServicesNetworkGatewaySid);
+	// for the emulator the SecureId of the SAT engine is patched via the epoc.ini file
+	UserSvr::HalFunction(EHalGroupEmulator,EEmulatorHalIntProperty,(TAny*)"etel_KSatEngineSid",&iSatEngineSid);
+#endif
+    RECORD_HEADER
+	StartL(ETEL_SERVER_NAME);
+	}
+
+CTelServer::~CTelServer()
+	{
+	LOGTEXT("CTelServer::~CTelServer()");
+	delete iChannelHandler;
+	delete iPhoneManager;
+	delete iSch;
+	iEmergencyClientSessions.Reset();
+	}
+
+CSession2* CTelServer::NewSessionL(const TVersion &aVersion,const RMessage2& /*aMessage*/) const
+//
+// Create a new client for this server.
+//
+	{
+	TVersion v(KEtelMajorVersionNumber,KEtelMinorVersionNumber,KEtelBuildVersionNumber);
+	if (User::QueryVersionSupported(v,aVersion)==FALSE)
+		User::Leave(KErrNotSupported);
+	CTelSession* sess = new(ELeave) CTelSession(iPhoneManager);	
+	RECORD_SESSION_NEW(sess);
+	RECORD_COMPLETE(sess,0,KErrNone);
+	return sess;
+	}
+
+void CTelServer::Inc()
+//
+// Increase session count
+//
+	{
+	if((iSessionCount==0)&&(iSch->IsActive()))
+		{
+		iSch->Cancel();
+		}
+	iSessionCount++;
+	}
+
+TInt CTelServer::Count() const
+//
+// Session count
+//
+	{
+	return iSessionCount;
+	}
+
+void CTelServer::Dec()
+//
+// Decrement a session stop scheduler if no session
+//
+	{
+	LOGTEXT("Entered CTelServer::Dec");
+	__ASSERT_ALWAYS((iSessionCount>0),Fault(EEtelFaultNegativeSessionCount));
+	iSessionCount--;
+	LOGTEXT2("Session Count is %d", iSessionCount);
+	// If iShutGracefully==ETrue the Rootserver has informed us that it wants us to shutdown
+	// next time there is no sessions. If it is EFalse no such notification has arrived and 
+	// ETel continues running even though there are no sessions.
+	if((iSessionCount==0) && (iShutGracefully))
+		{
+		LOGTEXT("Calling AsynOneShot::Call()");
+		iSch->Call();
+		}
+	LOGTEXT("Exited from CTelServer::Dec");
+	}
+
+TBool CTelServer::IsPriorityClient(const CTelSession* aSession) const
+//
+// Check if aSession is the priority client session
+//
+	{
+	return (aSession==iPriorityClientSession);
+	}
+
+TInt CTelServer::SetPriorityClient(CTelSession* aSession)
+//
+// Set aSession as the priority client session if there is not one already.
+// Return KErrAlreadyExists if there is one already, KErrNoMemory if the
+// heap cannot be allocated.
+//
+	{
+	if (iPriorityClientSession==NULL)
+		{
+		iPriorityClientSession=aSession;
+		return KErrNone;
+		}
+	return KErrAlreadyExists;
+	}
+
+TInt CTelServer::RemovePriorityClient(CTelSession* aSession)
+//
+// Remove aSession as the priority client if it is the priority client
+// Returns KErrAccessDenied if aSession is not the priority client
+//
+	{
+	if (IsPriorityClient(aSession))
+		{
+		iPriorityClientSession=NULL;
+		return KErrNone;
+		}
+	return KErrAccessDenied;
+	}
+
+CPolicyServer::TCustomResult CTelServer::CustomSecurityCheckL(const RMessage2& aMsg, TInt& /*aAction*/, TSecurityInfo& /*aMissing*/)
+/**
+Performs a custom security policy check on an IPC. Requests from the TSY 
+the capabilities required to service the specified IPC.
+
+In the case of Etel RTelServer::SetPriorityClient and 
+RTelServer::SetPriorityClientV2 APIs which has IPC opcodes 
+EEtelServerSetPriorityClient, EEtelServerSetPriorityClientV2 respectively 
+a combination of NetworkControl and SID of the phone application is checked.
+
+In the case of ETelMM RMobileLocationServices::Open call which has IPC opcode 
+EEtelOpenFromSubSessionLcs, the SecureId of Location Services Network 
+Gateway is checked.
+
+For ETelMM RMobileCall::DialCallControl, which has IPC 
+EMobileCallDialCallControl, a check for NetworkServices and NetworkControl 
+capabilities is made and the SID of the SAT engine is checked.
+
+@param aMsg RMessage2 containing client capabilites and request IPC.
+@param aAction A reference to the action to take if the security check fails.
+@param aMissing  reference to the list of security attributes missing from the checked process.
+@return CPolicyServer::EPass or CPolicyServer::EFail
+*/
+
+	{
+	//Set the defualt required capability to always fail the check
+	TSecurityPolicy requiredCapabilities(TSecurityPolicy::EAlwaysFail);
+	TCustomResult retCode = EFail;
+	
+	CTelSession* session=static_cast<CTelSession*>(aMsg.Session());
+	if(session)
+		{
+		switch(aMsg.Function())
+			{
+		// RTelServer::SetPriorityClient is policed with NetworkControl capability and SecureId of master phone application
+		case EEtelServerSetPriorityClient:
+		case EEtelServerSetPriorityClientV2:
+			{
+			TSecurityPolicy securityPolicy(ECapabilityNetworkControl);
+			if(securityPolicy.CheckPolicy(aMsg) && aMsg.SecureId() == iPriorityClientSid)
+				{
+				retCode = EPass;	
+				}
+			break;
+			}
+		// RMobileLocationServices::Open call is policed with SecureId of Location Services Network Gateway process
+		case EEtelOpenFromSubSessionLcs:
+			{
+			if(aMsg.SecureId() == iLocationServicesNetworkGatewaySid)
+				{
+				retCode = EPass;
+				}
+			break;
+			}
+		// RMobileCall::DialCallControl and cancellation of this
+		// request is policed by NetworkControl and 
+		// NetworkServices capability and the SecureId of the SAT engine.
+		case EMobileCallDialCallControl:
+		case EMobileCallDialCallControlCancel:		
+			{
+			TSecurityPolicy securityPolicy(ECapabilityNetworkControl, ECapabilityNetworkServices);
+			if (securityPolicy.CheckPolicy(aMsg) && aMsg.SecureId() == iSatEngineSid)
+				{
+				retCode = EPass;
+				}
+			break;
+			}
+		default:
+			{
+			CTelObject* theObj=session->CObjectFromHandle(aMsg.Int3());
+			if(theObj)
+				{
+				//Get the policy for the incoming custom IPC request from the TSY
+				requiredCapabilities = theObj->GetRequiredPlatSecCaps(aMsg.Function()); 
+				}
+			//Check the capability of the client against the required capability 
+			//retrieved from the TSY
+			if(requiredCapabilities.CheckPolicy(aMsg))
+				{
+				retCode = EPass;
+				}
+			break;	
+			}
+			}
+		}
+	return retCode;
+	}
+	
+void CTelServer::SetEmergencyClientSession(CTelSession* aEmergencyClientSession)
+	{
+	iEmergencyClientSessions.Append(aEmergencyClientSession);
+	}
+
+TInt CTelServer::EmergencyClientSessionsCount()
+	{
+	return iEmergencyClientSessions.Count();
+	}
+
+TInt CTelServer::RemoveEmergencyClient(CTelSession* aSession)
+	{
+	for(int i =0;i<iEmergencyClientSessions.Count();i++)
+		{
+		if(iEmergencyClientSessions[i] == aSession)
+			{
+			iEmergencyClientSessions.Remove(i);
+			return KErrNone;
+			}
+		}
+	return KErrAccessDenied;
+	}
+
+TBool CTelServer::IsEmergencyClient(const CTelSession* aSession) const
+	{
+	for(int i =0;i<iEmergencyClientSessions.Count();i++)
+		{
+		if(iEmergencyClientSessions[i] == aSession)
+			{
+			return ETrue;
+			}
+		}
+	return EFalse;
+	}
+
+
+//
+// CTelScheduler class definitions
+//
+
+CTelScheduler* CTelScheduler::New()
+//
+// Create and install the active scheduler.
+//
+	{
+	CTelScheduler* pA=new CTelScheduler;
+	__ASSERT_ALWAYS(pA!=NULL,Fault(EEtelFaultMainSchedulerError));
+	CTelScheduler::Install(pA);
+	return pA;
+	}
+
+void CTelScheduler::Error(TInt) const
+//
+// Called if any Run() method leaves.
+//
+	{
+	Fault(EEtelFaultMainSchedulerError);
+	}
+
+EXPORT_C TInt EtelServerThread(TAny* aArg)
+//
+// The ETel Server Thread.
+//
+	{
+	// RThread::SetProtected is superceded by the security model
+	
+	__UHEAP_MARK;
+	LOGTEXT("----------New Log----------\015\012");
+	LOGTEXT("Entered ETel Server thread");
+	LOGTEXTREL("Entered ETel Server thread");
+	
+	CTrapCleanup* pT;
+	if ((pT=CTrapCleanup::New())==NULL)
+		{
+		Fault(EEtelFaultCreateTrapCleanup);
+		}
+	
+	//
+	// Start the scheduler and then the server
+	//
+	CTelScheduler* pScheduler = CTelScheduler::New();
+	if(!pScheduler)
+		{
+		Fault(EEtelFaultMainSchedulerError);
+		}
+	
+	TCFModuleInfo* pParameters = (TCFModuleInfo*) aArg;
+	CTelServer* pServer=NULL;
+	TRAPD(err, pServer=CTelServer::NewL(pParameters->iRxQueues, pParameters->iTxQueues));
+	
+	if(err!=KErrNone)
+		{
+		Fault(EEtelFaultSvrStartServer);
+		}
+
+	LOGTEXT("ETel:\tMeeting rendezvous\n");
+	RThread::Rendezvous(KErrNone);
+	CTelScheduler::Start();
+	LOGTEXT("ETel:\tScheduler has been stopped\n");
+
+	delete pT;
+	delete pServer;
+	delete pScheduler;
+
+	LOGTEXT("ETel:\tAbout to exit ETel thread function\n");
+	LOGTEXTREL("ETel:\tAbout to exit ETel thread function\n");
+	__UHEAP_MARKEND;
+
+	return(KErrNone);
+	}
+
+//Definition of ETel's policy table -
+//Dicates what capability checking takes place for any given IPC request
+
+const TUint CTelServer::iRangeCount = 332;
+const TInt CTelServer::iRanges[iRangeCount] = 
+	{
+	0,		//range is 0-61 inclusive
+	62,		//range is 62-70 inclusive
+	71,		//range is 71-72 inclusive
+	73,		//range is 73
+	74,		//range is 74
+	75,		//range is 75-76 inclusive
+	77,		//range is 77
+	78,		//range is 78-84 inclusive
+	85,		//range is 85
+	86,		//range is 86
+	87,		//range is 87
+	88,		//range is 88
+	89,		//range is 89-91 inclusive
+	92,		//range is 92-505 inclusive
+	506,		//range is 506
+	507,		//range is 507-507 inclusive
+	508,		//range is 508
+	509,		//range is 509-509 inclusive
+	510,		//range is 510
+	511,		//range is 511-519 inclusive
+	520,		//range is 520
+	521,		//range is 521-521 inclusive
+	522,		//range is 522
+	523,		//range is 523-523 inclusive
+	524,		//range is 524
+	525,		//range is 525-532 inclusive
+	533,		//range is 533
+	534,		//range is 534-539 inclusive
+	540,		//range is 540
+	541,		//range is 541-541 inclusive
+	542,		//range is 542
+	543,		//range is 543-543 inclusive
+	544,		//range is 544
+	545,		//range is 545-550 inclusive
+	551,		//range is 551
+	552,		//range is 552-562 inclusive
+	563,		//range is 563
+	564,		//range is 564-564 inclusive
+	565,		//range is 565
+	566,		//range is 566-566 inclusive
+	567,		//range is 567
+	568,		//range is 568-570 inclusive
+	571,		//range is 571
+	572,		//range is 572-574 inclusive
+	575,		//range is 575
+	576,		//range is 576-577 inclusive
+	578,		//range is 578
+	579,		//range is 579-579 inclusive
+	580,		//range is 580
+	581,		//range is 581-581 inclusive
+	582,		//range is 582
+	583,		//range is 583-584 inclusive
+	585,		//range is 585
+	586,		//range is 586
+	587,		//range is 587-590 inclusive
+	591,		//range is 591
+	592,		//range is 592-19999 inclusive
+	20000,		//range is 20000-20118 inclusive
+	20119,		//range is 20119-20500 inclusive
+	20501,		//range is 20501-20502 inclusive
+	20503,		//range is 20503-20507 inclusive
+	20508,		//range is 20508-20516 inclusive
+	20517,		//range is 20517-20519 inclusive
+	20520,		//range is 20520-20522 inclusive
+	20523,		//range is 20523-20523 inclusive
+	20524,		//range is 20524-20525 inclusive
+	20526,		//range is 20526-20529 inclusive
+	20530,		//range is 20530-20532 inclusive
+	20533,		//range is 20533-20533 inclusive
+	20534,		//range is 20534-20535 inclusive
+	20536,		//range is 20536-20537 inclusive
+	20538,		//range is 20538
+	20539,		//range is 20539-20539 inclusive
+	20540,		//range is 20540-20541 inclusive
+	20542,		//range is 20542-20543 inclusive
+	20544,		//range is 20544-20546 inclusive
+	20547,		//range is 20547-20547 inclusive
+	20548,		//range is 20548-20550 inclusive
+	20551,		//range is 20551-20553 inclusive
+	20554,		//range is 20554-20556 inclusive
+	20557,		//range is 20557-20557 inclusive
+	20558,		//range is 20558
+	20559,		//range is 20559-20559 inclusive
+	20560,		//range is 20560-20601 inclusive
+	20602,		//range is 20602-20603 inclusive
+	20604,		//range is 20604
+	20605,		//range is 20605-20606 inclusive
+	20607,		//range is 20607-20609 inclusive
+	20610,		//range is 20610-20610 inclusive
+	20611,		//range is 20611-20618 inclusive
+	20619,		//range is 20619-20999 inclusive
+	21000,		//range is 21000-21029 inclusive
+	21030,		//range is 21030-21499 inclusive
+	21500,		//range is 21500-21508 inclusive
+	21509,		//range is 21509-21509 inclusive
+	21510,		//range is 21510-21511 inclusive
+	21512,		//range is 21512-21513 inclusive
+	21514,		//range is 21514-21521 inclusive
+	21522,		//range is 21522-21522 inclusive
+	21523,		//range is 21523-21524 inclusive
+	21525,		//range is 21525-21525 inclusive
+	21526,		//range is 21526
+	21527,		//range is 21527-21528 inclusive
+	21529,		//range is 21529
+	21530,		//range is 21530-21999 inclusive
+	22000,		//range is 22000-22003 inclusive
+	22004,		//range is 22004
+	22005,		//range is 22005-22008 inclusive
+	22009,		//range is 22009
+	22010,		//range is 22010-22011 inclusive
+	22012,		//range is 22012
+	22013,		//range is 22013-22015 inclusive
+	22016,		//range is 22016
+	22017,		//range is 22017-22057 inclusive
+	22058,		//range is 22058-22500 inclusive
+	22501,		//range is 22501-22503 inclusive
+	22504,		//range is 22504
+	22505,		//range is 22505-22507 inclusive
+	22508,		//range is 22508-22508 inclusive
+	22509,		//range is 22509
+	22510,		//range is 22510-22510 inclusive
+	22511,		//range is 22511
+	22512,		//range is 22512
+	22513,		//range is 22513-22514 inclusive
+	22515,		//range is 22515-22515 inclusive
+	22516,		//range is 22516
+	22517,		//range is 22517-22524 inclusive
+	22525,		//range is 22525-22525 inclusive
+	22526,		//range is 22526
+	22527,		//range is 22527-22527 inclusive
+	22528,		//range is 22528
+	22529,		//range is 22529-22529 inclusive
+	22530,		//range is 22530
+	22531,		//range is 22531-22531 inclusive
+	22532,		//range is 22532-22543 inclusive
+	22544,		//range is 22544-22546 inclusive
+	22547,		//range is 22547-22552 inclusive
+	22553,		//range is 22553-22553 inclusive
+	22554,		//range is 22554-22556 inclusive
+	22557,		//range is 22557-22999 inclusive
+	23000,		//range is 23000-23028 inclusive
+	23029,		//range is 23029-23030 inclusive
+	23031,		//range is 23031-23035 inclusive
+	23036,		//range is 23036-23499 inclusive
+	23500,		//range is 23500-23502 inclusive
+	23503,		//range is 23503-23503 inclusive
+	23504,		//range is 23504-23528 inclusive
+	23529,		//range is 23529-23530 inclusive
+	23531,		//range is 23531-23535 inclusive
+	23536,		//range is 23536-23999 inclusive
+	24000,		//range is 24000-24010 inclusive
+	24011,		//range is 24011
+	24012,		//range is 24012-24014 inclusive
+	24015,		//range is 24015
+	24016,		//range is 24016-24019 inclusive
+	24020,		//range is 24020-24500 inclusive
+	24501,		//range is 24501
+	24502,		//range is 24502-24502 inclusive
+	24503,		//range is 24503-24508 inclusive
+	24509,		//range is 24509-24509 inclusive
+	24510,		//range is 24510
+	24511,		//range is 24511
+	24512,		//range is 24512-24514 inclusive
+	24515,		//range is 24515
+	24516,		//range is 24516-24519 inclusive
+	24520,		//range is 24520-24999 inclusive
+	25000,		//range is 25000-25007 inclusive
+	25008,		//range is 25008-25499 inclusive
+	25500,		//range is 25500-25507 inclusive
+	25508,		//range is 25508-25999 inclusive
+	26000,		//range is 26000-26003 inclusive
+	26004,		//range is 26004-26499 inclusive
+	26500,		//range is 26500-26503 inclusive
+	26504,		//range is 26504-26999 inclusive
+	27000,		//range is 27000-27006 inclusive
+	27007,		//range is 27007-27499 inclusive
+	27500,		//range is 27500-27506 inclusive
+	27507,		//range is 27507-27999 inclusive
+	28000,		//range is 28000-28002 inclusive
+	28003,		//range is 28003-28499 inclusive
+	28500,		//range is 28500-28502 inclusive
+	28503,		//range is 28503-28999 inclusive
+	29000,		//range is 29000-29004 inclusive
+	29005,		//range is 29005-29499 inclusive
+	29500,		//range is 29500
+	29501,		//range is 29501-29501 inclusive
+	29502,		//range is 29502-29504 inclusive
+	29505,		//range is 29505-29999 inclusive
+	30000,		//range is 30000-30002 inclusive
+	30003,		//range is 30003-30499 inclusive
+	30500,		//range is 30500-30502 inclusive
+	30503,		//range is 30503-30999 inclusive
+	31000,		//range is 31000-31015 inclusive
+	31016,		//range is 31016-31499 inclusive
+	31500,		//range is 31500
+	31501,		//range is 31501-31501 inclusive
+	31502,		//range is 31502
+	31503,		//range is 31503-31503 inclusive
+	31504,		//range is 31504
+	31505,		//range is 31505-31505 inclusive
+	31506,		//range is 31506
+	31507,		//range is 31507-31507 inclusive
+	31508,		//range is 31508
+	31509,		//range is 31509-31509 inclusive
+	31510,		//range is 31510-31511 inclusive
+	31512,		//range is 31512-31513 inclusive
+	31514,		//range is 31514
+	31515,		//range is 31515-31999 inclusive
+	32000,		//range is 32000-32001 inclusive
+	32002,		//range is 32002-32499 inclusive
+	32500,		//range is 32500-32501 inclusive
+	32502,		//range is 32502-32999 inclusive
+	33000,		//range is 33000-33010 inclusive
+	33011,		//range is 33011-33499 inclusive
+	33500,		//range is 33500-33510 inclusive
+	33511,		//range is 33511-33999 inclusive
+	34000,		//range is 34000-34003 inclusive
+	34004,		//range is 34004-34499 inclusive
+	34500,		//range is 34500-34503 inclusive
+	34504,		//range is 34504-34999 inclusive
+	35000,		//range is 35000-35009 inclusive
+	35010,		//range is 35010-35499 inclusive
+	35500,		//range is 35500-35507 inclusive
+	35508,		//range is 35508-35508 inclusive
+	35509,		//range is 35509
+	35510,		//range is 35510-39999 inclusive
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+	40000,		//range is 40000-40029 inclusive
+	40030,		//range is 40030-40499 inclusive
+#else 
+	40000,		//range is 40000-40027 inclusive
+	40028,		//range is 40028-40499 inclusive
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+	40500,		//range is 40500
+	40501,		//range is 40501-40503 inclusive
+	40504,		//range is 40504-40510 inclusive
+	40511,		//range is 40511-40511 inclusive
+	40512,		//range is 40512-40514 inclusive
+	40515,		//range is 40515-40516 inclusive
+	40517,		//range is 40517-40524 inclusive
+	40525,		//range is 40525-40525 inclusive
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+	40526,		//range is 40526-40529 inclusive
+	40530,		//range is 40530-40999 inclusive
+#else 
+	40526,		//range is 40526-40527 inclusive
+	40528,		//range is 40528-40999 inclusive
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+	41000,		//range is 41000-41011 inclusive
+	41012,		//range is 41012-41499 inclusive
+	41500,		//range is 41500-41511 inclusive
+	41512,		//range is 41512-41999 inclusive
+	42000,		//range is 42000-42016 inclusive
+	42017,		//range is 42017-42499 inclusive
+	42500,		//range is 42500-42511 inclusive
+	42512,		//range is 42512-42512 inclusive
+	42513,		//range is 42513-42515 inclusive
+	42516,		//range is 42516-42999 inclusive
+	43000,		//range is 43000-43005 inclusive
+	43006,		//range is 43006-43499 inclusive
+	43500,		//range is 43500-43505 inclusive
+	43506,		//range is 43506-43999 inclusive
+	44000,		//range is 44000-44001 inclusive
+	44002,		//range is 44002-44499 inclusive
+	44500,		//range is 44500-44501 inclusive
+	44502,		//range is 44502-44999 inclusive
+	45000,		//range is 45000-45001 inclusive
+	45002,		//range is 45002-45499 inclusive
+	45500,		//range is 45500-45501 inclusive
+	45502,		//range is 45502-45999 inclusive
+	46000,		//range is 46000-46006 inclusive
+	46007,		//range is 46007-46499 inclusive
+	46500,		//range is 46500-46506 inclusive
+	46507,		//range is 46507-59999 inclusive
+	60000,		//range is 60000-60027 inclusive
+	60028,		//range is 60028-60499 inclusive
+	60500,		//range is 60500-60527 inclusive
+	60528,		//range is 60528-60999 inclusive
+	61000,		//range is 61000-61021 inclusive
+	61022,		//range is 61022-61499 inclusive
+	61500,		//range is 61500-61521 inclusive
+	61522,		//range is 61522-61999 inclusive
+	62000,		//range is 62000
+	62001,		//range is 62001-62499 inclusive
+	62500,		//range is 62500
+	62501,		//range is 62501-62999 inclusive
+	63000,		//range is 63000-63001 inclusive
+	63002,		//range is 63002-63499 inclusive
+	63500,		//range is 63500
+	63501,		//range is 63501-63999 inclusive
+	64000,		//range is 64000-64004 inclusive
+	64005,		//range is 64005-64499 inclusive
+	64500,		//range is 64500-64504 inclusive
+	64505,		//range is 64505-64999 inclusive
+	65000,		//range is 65000-65004 inclusive
+	65005,		//range is 65005-65500 inclusive
+	65501,		//range is 65501-65504 inclusive
+	65505,		//range is 65505-65999 inclusive
+	66000,		//range is 66000
+	66001,		//range is 66001-66499 inclusive
+	66500,		//range is 66500
+	66501,		//range is 66501-79999 inclusive
+	80000,		//range is 80000-80018 inclusive
+	80019,		//range is 80019-80499 inclusive
+	80500,		//range is 80500-80518 inclusive
+	80519,		//range is 80519-80999 inclusive
+	81000,		//range is 81000-81001 inclusive
+	81002,		//range is 81002-81499 inclusive
+	81500,		//range is 81500-81501 inclusive
+	81502,		//range is 81502-81999 inclusive
+	82000,		//range is 82000-82002 inclusive
+	82003,		//range is 82003-82499 inclusive
+	82500,		//range is 82500
+	82501,		//range is 82501-82501 inclusive
+	82502,		//range is 82502
+	82503,		//range is 82503-82999 inclusive
+	83000,		//range is 83000-83007 inclusive
+	83008,		//range is 83008-83499 inclusive
+	83500,		//range is 83500-83507 inclusive
+	83508,		//range is 83508-83999 inclusive
+	84000,		//range is 84000
+	84001,		//range is 84001-84499 inclusive
+	84500,		//range is 84500
+	84501,		//range is 84501-84999 inclusive
+	85000,		//range is 85000-85001 inclusive
+	85002,		//range is 85002-85499 inclusive
+	85500,		//range is 85500-85501 inclusive
+	85502,		//range is 85502-85999 inclusive
+	86000,		//range is 86000
+	86001,		//range is 86001-86499 inclusive
+	86500,		//range is 86500
+	86501,		//range is 86501-86999 inclusive
+	87000,		//range is 87000
+	87001,		//range is 87001-87499 inclusive
+	87500,		//range is 87500
+	87501,		//range is 87501-87999 inclusive
+	88000,		//range is 88000-88001 inclusive
+	88002,		//range is 88002-88499 inclusive
+	88500,		//range is 88500-88501 inclusive
+	88502,		//range is 88502-999999 inclusive
+	1000000,		//range is 1000000-1000999 inclusive
+	1001000,		//range is 1001000-KMaxTInt inclusive
+	};
+
+
+
+const TUint8 CTelServer::iElementsIndex[iRangeCount] = 
+	{
+	11,
+	5,
+	11,
+	14,
+	0,
+	11,
+	CPolicyServer::ECustomCheck,
+	1,
+	8,
+	10,
+	11,
+	14,
+	CPolicyServer::ECustomCheck,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	1,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	1,
+	CPolicyServer::ENotSupported,
+	1,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	8,
+	10,
+	CPolicyServer::ENotSupported,
+	CPolicyServer::ECustomCheck,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	12,
+	11,
+	12,
+	11,
+	12,
+	11,
+	12,
+	11,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	11,
+	12,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	12,
+	11,
+	12,
+	CPolicyServer::ENotSupported,
+	11,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	14,
+	4,
+	14,
+	CPolicyServer::ENotSupported,
+	14,
+	CPolicyServer::ENotSupported,
+	14,
+	4,
+	14,
+	CPolicyServer::ENotSupported,
+	13,
+	11,
+	13,
+	11,
+	13,
+	CPolicyServer::ENotSupported,
+	13,
+	CPolicyServer::ENotSupported,
+	13,
+	CPolicyServer::ENotSupported,
+	13,
+	11,
+	13,
+	11,
+	13,
+	CPolicyServer::ENotSupported,
+	15,
+	CPolicyServer::ENotSupported,
+	15,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	1,
+	CPolicyServer::ENotSupported,
+	1,
+	CPolicyServer::ENotSupported,
+	2,
+	CPolicyServer::ENotSupported,
+	2,
+	CPolicyServer::ENotSupported,
+	3,
+	CPolicyServer::ENotSupported,
+	3,
+	CPolicyServer::ENotSupported,
+	3,
+	CPolicyServer::ENotSupported,
+	4,
+	CPolicyServer::ENotSupported,
+	4,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	8,
+	CPolicyServer::ENotSupported,
+	8,
+	CPolicyServer::ENotSupported,
+	9,
+	CPolicyServer::ENotSupported,
+	9,
+	CPolicyServer::ENotSupported,
+	10,
+	CPolicyServer::ENotSupported,
+	10,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	14,
+	CPolicyServer::ENotSupported,
+	14,
+	CPolicyServer::ENotSupported,
+	13,
+	CPolicyServer::ENotSupported,
+	13,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	6,
+	CPolicyServer::ENotSupported,
+	9,
+	CPolicyServer::ENotSupported,
+	9,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	14,
+	CPolicyServer::ENotSupported,
+	14,
+	CPolicyServer::ENotSupported,
+	0,
+	CPolicyServer::ENotSupported,
+	0,
+	CPolicyServer::ENotSupported,
+	3,
+	CPolicyServer::ENotSupported,
+	3,
+	CPolicyServer::ENotSupported,
+	4,
+	CPolicyServer::ENotSupported,
+	4,
+	CPolicyServer::ENotSupported,
+	9,
+	CPolicyServer::ENotSupported,
+	9,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	11,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	5,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	12,
+	CPolicyServer::ENotSupported,
+	14,
+	CPolicyServer::ENotSupported,
+	14,
+	CPolicyServer::ENotSupported,
+	13,
+	CPolicyServer::ENotSupported,
+	13,
+	CPolicyServer::ENotSupported,
+	1,
+	CPolicyServer::ENotSupported,
+	1,
+	CPolicyServer::ENotSupported,
+	7,
+	CPolicyServer::ENotSupported,
+	7,
+	CPolicyServer::ENotSupported,
+	8,
+	CPolicyServer::ENotSupported,
+	8,
+	CPolicyServer::ENotSupported,
+	9,
+	CPolicyServer::ENotSupported,
+	9,
+	CPolicyServer::ENotSupported,
+	CPolicyServer::ECustomCheck,
+	CPolicyServer::ENotSupported,
+	};
+
+
+const CPolicyServer::TPolicyElement CTelServer::iElements[] = 
+	{
+	{ _INIT_SECURITY_POLICY_C1( ECapabilityNetworkControl), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C2( ECapabilityNetworkControl, ECapabilityNetworkServices), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C3( ECapabilityNetworkControl, ECapabilityNetworkServices, ECapabilityWriteDeviceData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C2( ECapabilityNetworkControl, ECapabilityReadDeviceData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C2( ECapabilityNetworkControl, ECapabilityWriteDeviceData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C1( ECapabilityNetworkServices), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C2( ECapabilityNetworkServices, ECapabilityReadDeviceData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C3( ECapabilityNetworkServices, ECapabilityReadDeviceData, ECapabilityWriteDeviceData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C2( ECapabilityNetworkServices, ECapabilityReadUserData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C2( ECapabilityNetworkServices, ECapabilityWriteDeviceData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C2( ECapabilityNetworkServices, ECapabilityWriteUserData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C1( ECapability_None), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C1( ECapabilityReadDeviceData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C1( ECapabilityReadUserData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C1( ECapabilityWriteDeviceData), CPolicyServer::EFailClient},
+	{ _INIT_SECURITY_POLICY_C1( ECapabilityWriteUserData), CPolicyServer::EFailClient},
+	};
+
+
+const CPolicyServer::TPolicy CTelServer::iPolicy = 
+	{
+	CPolicyServer::EAlwaysPass,
+	iRangeCount,
+	iRanges,
+	iElementsIndex,
+	iElements
+	};