diff -r 095bea5f582e -r 0ac9a5310753 mmserv/sts/stsserver/src/stsserver.cpp --- a/mmserv/sts/stsserver/src/stsserver.cpp Tue Aug 31 15:43:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,216 +0,0 @@ -/* - * Copyright (c) 2010 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: - * This file is the implementation of the Symbian STS Server. This - * file handles the Symbian specific server creation/deletation - * activities, and adding/removing sessions. The actual STS - * functionality is handled in the STS class. - */ - -// Include Files -#include "stsserver.h" -#include "stsserversession.h" -#include "sts.h" - -// Total number of ranges -const TUint KStsRangeCount = 3; - -// Definition of the ranges of IPC numbers -const TInt KStsRanges[KStsRangeCount] = - { - 0, 2, KStsCmdLast + 1 - }; - -// Policy to implement for each of the above ranges -const TUint8 KStsElementsIndex[KStsRangeCount] = - { - CPolicyServer::EAlwaysPass, - CPolicyServer::ECustomCheck, - CPolicyServer::ENotSupported - }; - -// Package all the above together into a policy -const CPolicyServer::TPolicy KStsPolicy = - { - CPolicyServer::EAlwaysPass, // specifies all connect attempts should pass - KStsRangeCount, // number of ranges - KStsRanges, // ranges array - KStsElementsIndex, // elements<->ranges index - NULL - }; - -// CStsServer IMPLEMENTATION - -CStsServer* CStsServer::NewLC() - { - CStsServer* self = new (ELeave) CStsServer(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CStsServer::CStsServer() : - CPolicyServer(0, KStsPolicy, ESharableSessions), iSts(0) - { - } - -void CStsServer::ConstructL() - { - StartL(KStsServerName); - iSts = CSts::Create(); - if (iSts == 0) - { - User::Leave(KErrNoMemory); - } - } - -CStsServer::~CStsServer() - { - iSessions.ResetAndDestroy(); - CSts::Delete(iSts); - } - -// Performs security checks based on the tone or Alarm type. -CPolicyServer::TCustomResult CStsServer::CustomSecurityCheckL( - const RMessage2& aMsg, TInt& /*aAction*/, TSecurityInfo& aMissing) - { - CPolicyServer::TCustomResult result; - - switch (aMsg.Function()) - { - case StsMsg_PlayTone: - case StsMsg_PlayToneAlarm: - { - CSystemToneService::TToneType tone = - (CSystemToneService::TToneType) aMsg.Int0(); - result = SecurityCheckTone(tone, aMsg, aMissing); - } - break; - case StsMsg_PlayAlarm: - { - CSystemToneService::TAlarmType alarm = - (CSystemToneService::TAlarmType) aMsg.Int0(); - result = SecurityCheckAlarm(alarm, aMsg, aMissing); - } - break; - default: - result = CPolicyServer::EFail; - } - - return result; - } - -CPolicyServer::TCustomResult CStsServer::SecurityCheckAlarm( - CSystemToneService::TAlarmType aAlarm, const RMessage2& /*aMsg*/, - TSecurityInfo& /*aMissing*/) - { - CPolicyServer::TCustomResult result; - switch (aAlarm) - { - default: - result = CPolicyServer::EPass; - } - return result; - } - -CPolicyServer::TCustomResult CStsServer::SecurityCheckTone( - CSystemToneService::TToneType aTone, const RMessage2& /*aMsg*/, - TSecurityInfo& /*aMissing*/) - { - CPolicyServer::TCustomResult result; - switch (aTone) - { - default: - result = CPolicyServer::EPass; - } - return result; - } - -CSession2* CStsServer::NewSessionL(const TVersion& aVersion, const RMessage2& /*aMessage*/) const - { - if (aVersion.iMajor != KStsServerMajorVersion || aVersion.iMinor - != KStsServerMinorVersion || aVersion.iBuild != KStsServerBuild) - { - User::Leave(KErrNotSupported); - } - else - { - //TODO: Add trace here - }// end if - - CStsServer& nonConstThis = *const_cast (this); - - // Construct a new session, passing it a pointer to the server object. This function - // is const, so the const-ness must be cast away from the this pointer. - CSession2* returnValue = new (ELeave) CStsServerSession(nonConstThis, - *iSts); - - return returnValue; - } - -void CStsServer::AddSession(CStsServerSession* aSession) - { - iSessions.Append(aSession); - } - -void CStsServer::DropSession(CStsServerSession* aSession) - { - // Find the current session in the list of sessions. - TInt index = iSessions.Find(aSession); - - if (index != KErrNotFound) - { - // Remove the session from the list of sessions. - iSessions.Remove(index); - } - else - { - //TODO: Add trace here - } // end if - - if (iSessions.Count() == 0) - { - // No more clients. Shutdown the server. - CActiveScheduler::Stop(); - } - } - -// SERVER LAUNCHING FUNCTIONALITY - -EXPORT_C void CStsServer::RunServerL() - { - // naming the server thread after the server helps to debug panics - User::LeaveIfError(User::RenameThread(KStsServerName)); - - // create and install the active scheduler - CActiveScheduler* scheduler = new (ELeave) CActiveScheduler(); - CleanupStack::PushL(scheduler); - CActiveScheduler::Install(scheduler); - - // create the server (leave it on the cleanup stack) - CStsServer* server = CStsServer::NewLC(); - - // Initialisation complete, now signal the client. - RProcess::Rendezvous(KErrNone); - - // Ready to run - // Start wait loop, will return when server is shutdown - CActiveScheduler::Start(); - - // Cleanup the server - CleanupStack::PopAndDestroy(server); - - // Cleanup scheduler after shutdown - CleanupStack::PopAndDestroy(scheduler); - }