usbmgmt/usbmgrtest/ObexClassController/ObexUsbClassController/ClassControllerServerSession/src/classContServer.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgrtest/ObexClassController/ObexUsbClassController/ClassControllerServerSession/src/classContServer.cpp Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2005-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 <e32debug.h>
+
+#include "../../public/clientServerShared.h"
+#include "classContServer.h"
+#include "classContServerSession.h"
+
+/**
+ * Creates a new instance of CClassContServer, a CServer2
+ * derived class.
+ */
+CClassContServer* CClassContServer::NewLC()
+ {
+ CClassContServer* s = new(ELeave) CClassContServer;
+ CleanupStack::PushL(s);
+ s->ConstructL();
+ s->StartL(KServerName);
+ return s;
+ }
+/**
+ * Destructor
+ */
+CClassContServer::~CClassContServer()
+ {
+ delete iShutdownTimer;
+ }
+
+/**
+ * Constructor
+ */
+CClassContServer::CClassContServer() : CServer2(EPriorityStandard)
+ {
+ }
+
+
+/**
+ * 2nd phase construction. This exists to create a new timer and start a 5 second
+ * timing period.
+ */
+void CClassContServer::ConstructL()
+ {
+ iShutdownTimer = CPeriodic::NewL(CActive::EPriorityStandard);
+ StartShutdownTimer();
+ }
+
+
+/**
+ * This function is called by the session object when a session has been terminated.
+ * It creates a new timer of 5 seconds, this time the 5 seconds will run to
+ * completion and the timers RunL function will be called, stopping the active scheduler.
+ */
+
+void CClassContServer::SessionRemoved()
+ {
+ iSession = NULL;
+ StartShutdownTimer();
+ }
+
+
+/**
+ * Function to instansiate a new CSession2 object, function leaves if a session
+ * already exists. After a session has been created the CServerTimer object
+ * gets cancelled.
+ */
+CSession2* CClassContServer::NewSessionL(const TVersion& /*aVersion*/, const RMessage2& aMessage) const
+ {
+ // before we continue check the secure ID of the send of aMessage
+ if (aMessage.SecureId() != KUsbSvrSecureId)
+ User::Leave(KErrPermissionDenied);
+
+ CClassContServer* ncthis = const_cast<CClassContServer*>(this);
+ // Only allow one session
+ if (iSession)
+ User::Leave(KErrAlreadyExists);
+ ncthis->iSession = CClassContServerSession::NewL(*ncthis);
+ ncthis->CancelShutdownTimer();
+ return iSession;
+ }
+
+
+
+
+void CClassContServer::StartShutdownTimer()
+ {
+ if ( !iShutdownTimer->IsActive() )
+ {
+ // Start the timer, delay events for 5 seconds, subsequent
+ // firings will not occur.
+ iShutdownTimer->Start(KShutdownDelay, KShutdownInterval,
+ TCallBack(CClassContServer::ShutdownTimerFired, this));
+ }
+ }
+
+void CClassContServer::CancelShutdownTimer()
+ {
+ iShutdownTimer->Cancel();
+ }
+
+TInt CClassContServer::ShutdownTimerFired(TAny* /*aThis*/)
+ {
+ CActiveScheduler::Stop();
+ return KErrNone;
+ }