diff -r 000000000000 -r f5a58ecadc66 upnp/upnpstack/dlnawebserver/src/upnphttpserverruntime.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnp/upnpstack/dlnawebserver/src/upnphttpserverruntime.cpp Tue Feb 02 01:12:20 2010 +0200 @@ -0,0 +1,174 @@ +/** @file +* Copyright (c) 2005-2006 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: CUpnpHttpServerRuntime is a single runtime. +* +*/ + +#include "upnphttpserverruntime.h" +#include "upnpconnectionmanagerproxy.h" +#include "upnphttpserver.h" +#include "upnpsettings.h" + +static const TUint KSocketServerConnectionSlots = 60; + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::CUpnpHttpServerRuntime +// ----------------------------------------------------------------------------- +// +CUpnpHttpServerRuntime::CUpnpHttpServerRuntime( TUint /*aUnusedIapId*/, + MUpnpHttpServerObserver& aObserver ): + iObserver( aObserver ) + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::~CUpnpHttpServerRuntime +// ----------------------------------------------------------------------------- +// +CUpnpHttpServerRuntime::~CUpnpHttpServerRuntime() + { + delete iHttpServer; + CloseSocketServer(); + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::NewLC +// ----------------------------------------------------------------------------- +// +CUpnpHttpServerRuntime* CUpnpHttpServerRuntime::NewLC( + TUint aUnusedIapId, MUpnpHttpServerObserver& aObserver ) + { + CUpnpHttpServerRuntime* self = new (ELeave) CUpnpHttpServerRuntime( aUnusedIapId, aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::NewL +// ----------------------------------------------------------------------------- +// +CUpnpHttpServerRuntime* CUpnpHttpServerRuntime::NewL( + TUint aUnusedIapId, MUpnpHttpServerObserver& aObserver ) + { + CUpnpHttpServerRuntime* self = CUpnpHttpServerRuntime::NewLC( aUnusedIapId, aObserver ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::ConstructL +// ----------------------------------------------------------------------------- +// +void CUpnpHttpServerRuntime::ConstructL() + { + // connecting to needed servers + OpenSocketServerL(); + GetIapAndStartServerL(); + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::GetIapAndStartServer +// ----------------------------------------------------------------------------- +// +void CUpnpHttpServerRuntime::GetIapAndStartServerL() + { + // Gets IAP + CUpnpConnectionManagerProxy *proxy = CUpnpConnectionManagerProxy::NewLC( iSocketServ ); + User::LeaveIfError( proxy->EnsureStart() ); + TInt iap = proxy->ActiveIap(); + + TInt bufferSize = CUpnpSettings::GetFileBufferSizeL(); + // creating Http server + iHttpServer = CUpnpHttpServer::NewL( &iObserver, &iSocketServ, iap ); + iHttpServer->SetFileReadBufferSize( bufferSize ); + iHttpServer->SetFileWriteBufferSize( bufferSize ); + + CleanupStack::PopAndDestroy( proxy ); + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::SetCreator +// ----------------------------------------------------------------------------- +// +EXPORT_C void CUpnpHttpServerRuntime::SetCreator( MUpnpHttpServerTransactionCreator& aCreator ) + { + iTransactionCreator = &aCreator; + iHttpServer->SetTransactionCreator( &aCreator ); + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::HttpServer +// ----------------------------------------------------------------------------- +// +CUpnpHttpServer& CUpnpHttpServerRuntime::HttpServer() + { + return *iHttpServer; + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::DeleteServer +// ----------------------------------------------------------------------------- +// +void CUpnpHttpServerRuntime::DeleteServer() + { + if ( iHttpServer ) + { + // server should be stopped to notify failed transfers + iHttpServer->Stop(); + delete iHttpServer; + iHttpServer = NULL; + CloseSocketServer(); + } + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::StartServerL +// ----------------------------------------------------------------------------- +// +void CUpnpHttpServerRuntime::StartServerL( const TInt aPort ) + { + OpenSocketServerL(); + if ( !iHttpServer ) + { + GetIapAndStartServerL(); + } + iHttpServer->SetTransactionCreator( iTransactionCreator ); + iHttpServer->StartL( aPort ); + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::OpenSocketServerL +// ----------------------------------------------------------------------------- +// +void CUpnpHttpServerRuntime::OpenSocketServerL() + { + if ( !iIsSocketOpened ) + { + User::LeaveIfError( iSocketServ.Connect( KSocketServerConnectionSlots ) ); + iIsSocketOpened = ETrue; + } + } + +// ----------------------------------------------------------------------------- +// CUpnpHttpServerRuntime::CloseSocketServer +// ----------------------------------------------------------------------------- +// +void CUpnpHttpServerRuntime::CloseSocketServer() + { + iSocketServ.Close(); + iIsSocketOpened = EFalse; + } +