contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/server/sraserver.cpp
/*
* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:
* Implementation of the streaming reference agent server.
*
*/
#include "sraserver.h"
static const TUint sraRangeCount = 1;
static const TInt sraRanges[sraRangeCount] =
{
0 //All requests
};
static const TUint8 sraElementsIndex[sraRangeCount] =
{
0 // Request must come from a client who has DRM capability.
};
static const CPolicyServer::TPolicyElement sraElements[] =
{
{_INIT_SECURITY_POLICY_C1(ECapabilityDRM), CPolicyServer::EFailClient},
};
static const CPolicyServer::TPolicy sraPolicy =
{
CPolicyServer::EAlwaysPass, // Allow all connects
sraRangeCount,
sraRanges,
sraElementsIndex,
sraElements,
};
CSraServer::CSraServer()
//constructor
: CPolicyServer(CActive::EPriorityStandard, sraPolicy, ESharableSessions),
iVersion(SraVersion())
{
//empty
}
CSraServer::~CSraServer()
//destructor
{
__ASSERT_DEBUG(iSessionCount == 0, PanicServer(EOutstandingSessions));
delete iShutdownTimer;
iFs.Close();
#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
SdpCodecStringPool::Close();
#endif
}
CSraServer* CSraServer::NewLC()
{
CSraServer* self = new(ELeave)CSraServer();
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
void CSraServer::ConstructL()
{
User::LeaveIfError(iFs.Connect());
User::LeaveIfError(iFs.ShareProtected());
User::LeaveIfError(iFs.CreatePrivatePath(iFs.GetSystemDrive()));
#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
SdpCodecStringPool::OpenL();
#endif
StartL(KSraName);
iShutdownTimer = CShutdownTimer::NewL(KSraShutdownPeriod);
iShutdownTimer->Restart();
}
CSession2* CSraServer::NewSessionL(const TVersion& aVersion, const RMessage2& /*aMessage*/) const
{
TBool supported = User::QueryVersionSupported(iVersion, aVersion); //(aCurrent, aRequested)
if(!supported)
{
User::Leave(KErrNotSupported);
}
return CSraSession::NewL();
}
void CSraServer::AddSession()
{
++iSessionCount;
iShutdownTimer->Cancel();
}
void CSraServer::RemoveSession()
{
if (--iSessionCount == 0)
{
iShutdownTimer->Restart();
}
}