mmserv/tms/tmscallserver/src/tmscallserver.cpp
changeset 0 71ca22bcf22a
child 14 80975da52420
--- /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<TMSCallServer*> (this)));
+    TRACE_PRN_FN_EXT;
+    return session;
+    }
+
+// End of file