diff -r 000000000000 -r 71ca22bcf22a mmserv/tms/tmscallserver/src/tmscallserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/tms/tmscallserver/src/tmscallserver.cpp Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,141 @@ +/* + * Copyright (c) 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: Telephony Multimedia Service + * + */ + +#include "tmscallserver.h" +#include "delaytimer.h" +#include "tmsutility.h" +#include "tmscallsession.h" + +using namespace TMS; + +const TInt KShutDownDelay = 0; //0 sec + +// ----------------------------------------------------------------------------- +// TMSCallServer::TMSCallServer +// +// ----------------------------------------------------------------------------- +// +TMSCallServer::TMSCallServer(TMSServer* aTMSServer) : + CServer2(CActive::EPriorityHigh, EGlobalSharableSessions), + iTMSServer(aTMSServer), + iDelayTimer(NULL), + iSessionCount(0) + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallServer::~TMSCallServer +// +// ----------------------------------------------------------------------------- +// +TMSCallServer::~TMSCallServer() + { + TRACE_PRN_FN_ENT; + if (iDelayTimer) + { + iDelayTimer->Cancel(); + delete iDelayTimer; + } + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallServer::NewL +// +// ----------------------------------------------------------------------------- +// +TMSCallServer* TMSCallServer::NewL(TMSServer* aTMSServer) + { + TRACE_PRN_FN_ENT; + TMSCallServer* self = new (ELeave) TMSCallServer(aTMSServer); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + TRACE_PRN_FN_EXT; + return self; + } + +// ----------------------------------------------------------------------------- +// TMSCallServer::ConstructL +// +// ----------------------------------------------------------------------------- +// +void TMSCallServer::ConstructL() + { + TRACE_PRN_FN_ENT; + // Call base class to Start server + StartL(KNullDesC); + iDelayTimer = TMSCallDelayTimer::NewL(); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallServer::AddSession +// +// ----------------------------------------------------------------------------- +// +void TMSCallServer::AddSession() + { + TRACE_PRN_FN_ENT; + iSessionCount++; + iDelayTimer->Cancel(); + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallServer::DropSession +// +// ----------------------------------------------------------------------------- +// +void TMSCallServer::DropSession() + { + TRACE_PRN_FN_ENT; + iSessionCount--; + if (iSessionCount == 0) + { + iDelayTimer->SetDelay(TTimeIntervalMicroSeconds32(KShutDownDelay)); + } + TRACE_PRN_FN_EXT; + } + +// ----------------------------------------------------------------------------- +// TMSCallServer::NewSessionL +// +// ----------------------------------------------------------------------------- +// +CSession2* TMSCallServer::NewSessionL(const TVersion& aVersion, + const RMessage2& /*aMessage*/) const + { + TRACE_PRN_FN_ENT; + const TVersion version(KTMSCallServerMajorVersionNumber, + KTMSCallServerMinorVersionNumber, + KTMSCallServerBuildVersionNumber); + + if (!User::QueryVersionSupported(version, aVersion)) + { + User::Leave(KErrNotSupported); + } + + TMSCallSession* session = + TMSCallSession::NewL(*(const_cast (this))); + TRACE_PRN_FN_EXT; + return session; + } + +// End of file