diff -r 3785f754ee62 -r 5360b7ddc251 upnpsharing/upnpcontentserver/src/upnpcontentserversession.cpp --- a/upnpsharing/upnpcontentserver/src/upnpcontentserversession.cpp Fri Sep 17 08:31:21 2010 +0300 +++ b/upnpsharing/upnpcontentserver/src/upnpcontentserversession.cpp Mon Nov 01 12:37:49 2010 +0200 @@ -1,438 +1,440 @@ -/* -* Copyright (c) 2006-2007 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: CUpnpContentServerSession class implementation -* -*/ - - - - - -#include -#include //CArrayFix -#include //RDesReadStream -#include "upnpcontentserverdefs.h" -#include "upnpcontentserversession.h" -#include "upnpcontentserverclient.h" - -_LIT( KComponentLogfile, "contentserver.txt"); -#include "upnplog.h" - -using namespace UpnpContentServer; - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::NewL -// 2-phased constructor. -// -------------------------------------------------------------------------- -// -CUpnpContentServerSession* CUpnpContentServerSession::NewL( - CUpnpContentServer* aServer ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - CUpnpContentServerSession* self = - new (ELeave) CUpnpContentServerSession(); - CleanupStack::PushL( self ); - self->ConstructL( aServer ); - CleanupStack::Pop( self ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - return self; - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::CUpnpContentServerSession -// C++ constructor. -// -------------------------------------------------------------------------- -// -CUpnpContentServerSession::CUpnpContentServerSession( ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// void CUpnpContentServerSession::ConstructL -// 2nd phase constructor. -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::ConstructL( CUpnpContentServer* aServer ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - if ( !aServer ) - { - User::Leave( KErrArgument ); - } - iServer = aServer; - iHandler = iServer->Handler(); - iServer->AddSession(); - if ( iHandler ) - { - iHandler->SetContentSharingObserverL( this ); - } - else - { - User::Leave( KErrBadHandle ); - } - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::~CUpnpContentServerSession -// C++ destructor. -// -------------------------------------------------------------------------- -// -CUpnpContentServerSession::~CUpnpContentServerSession() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - // Sharing is off, client is disconnected, no sharing operation is ongoing - // -> close the server - if( iServer && iHandler ) - { - iServer->RemoveSession(); - if ( iHandler->CanStop() && iServer->CanStop() ) - { - iServer->Stop(); - __LOG("CUpnpContentServerSession::~CUpnpContentServerSession, \ -CActiveScheduler stopped"); - } - TRAP_IGNORE( iHandler->SetContentSharingObserverL( NULL ) ) - } - delete iResultBuffer; - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::ServiceL -// From CSession2, passes the request forward to DispatchMessageL. -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::ServiceL( const RMessage2& aMessage ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - TRAPD(err,DispatchMessageL(aMessage)); - if ( err != KErrNone ) - { - __LOG1( "Error: %d", err ); - aMessage.Complete( err ); - } - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::DispatchMessageL -// Handles the request from client. -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::DispatchMessageL( const RMessage2& aMessage ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - iHandler->SetContentSharingObserverL( this ); - switch( aMessage.Function() ) - { - case ERequestSelectionContent : - { - GetSelectionContentL( aMessage ); - // completed separately - } - break; - case EGetSelectionIndexes : - { - GetSelectionIndexesL( aMessage ); - aMessage.Complete( KErrNone ); - } - break; - case EChangeShareContent : - { - ChangeShareContentL( aMessage ); - aMessage.Complete( KErrNone ); - } - break; - case ERefreshShareContent : - { - RefreshShareContentL( aMessage ); - aMessage.Complete( KErrNone ); - } - break; - case ERequestProgressInfo : - { - RequestProgressInfoL( aMessage ); - aMessage.Complete( KErrNone ); - } - break; - case EStartConnectionMonitor : - { - StartConnectionMonitorL( aMessage ); - aMessage.Complete( KErrNone ); - } - break; - case EStopConnectionMonitor : - { - StopConnectionMonitorL(); - aMessage.Complete( KErrNone ); - } - break; - - default: - { - aMessage.Complete( KErrArgument ); - } - break; - } - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::GetSelectionContentL -// asynchronous -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::GetSelectionContentL( - const RMessage2& aMessage ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - TInt len( aMessage.GetDesLength(0) ); - - HBufC8* buffer = HBufC8::NewLC( len ); - TPtr8 ptr( buffer->Des() ); - aMessage.ReadL( 0, ptr ); - RDesReadStream stream; - stream.Open( ptr ); - CleanupClosePushL( stream ); - - TInt mediaType( stream.ReadInt32L() ); - iSelectionContentMsg = aMessage; - - // call to server - iHandler->GetSelectionContentL( mediaType ); - - CleanupStack::PopAndDestroy( &stream ); - CleanupStack::PopAndDestroy( buffer ); - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::GetSelectionIndexesL -// synchronous -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::GetSelectionIndexesL( - const RMessage2& aMessage ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - TInt len( aMessage.GetDesLength(0) ); - - RArray* selections = new ( ELeave ) - RArray( 5 ); - CleanupClosePushL( *selections ); - HBufC8* buffer = HBufC8::NewLC( len ); - TPtr8 ptr( buffer->Des() ); - aMessage.ReadL( 0, ptr ); - RDesReadStream stream; - stream.Open( ptr ); - CleanupClosePushL( stream ); - - TInt mediaType( stream.ReadInt32L() ); - // call to server - iHandler->GetSelectionIndexesL( *selections, mediaType ); - - TInt objectCount( selections->Count() ); - - delete iResultBuffer; - iResultBuffer = NULL; - - iResultBuffer = CBufFlat::NewL( KTintSize + KTintSize*objectCount ); - RBufWriteStream wstream; - wstream.Open( *iResultBuffer ); - CleanupClosePushL( wstream ); - - // append count and ints - wstream.WriteInt32L( objectCount ); - for( TInt i(0); i < objectCount; i++ ) - { - wstream.WriteInt32L( selections->operator[]( i ) ); - } - - // Write result back to client - aMessage.WriteL( 1, iResultBuffer->Ptr(0) ); - - CleanupStack::PopAndDestroy( &wstream ); - CleanupStack::PopAndDestroy( &stream ); - CleanupStack::PopAndDestroy( buffer ); - CleanupStack::PopAndDestroy( selections ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::ChangeShareContentL -// Handles the async request from client. -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::ChangeShareContentL( - const RMessage2& aMessage ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - TInt len( aMessage.GetDesLength(0) ); - RArray selections( len ); - CleanupClosePushL( selections ); - HBufC8* buffer = HBufC8::NewLC( len ); - TPtr8 ptr( buffer->Des() ); - aMessage.ReadL( 0, ptr ); - RDesReadStream stream; - stream.Open( ptr ); - CleanupClosePushL( stream ); - - TInt mediaType( stream.ReadInt32L() ); - TInt objCount( stream.ReadInt32L() ); - - // loop the TInt from stream - for( TInt i(0); i< objCount; i++) - { - selections.AppendL( stream.ReadInt32L() ); - } - - iHandler->ChangeShareContentL( selections, mediaType ); - - CleanupStack::PopAndDestroy( &stream ); - CleanupStack::PopAndDestroy( buffer ); - CleanupStack::PopAndDestroy( &selections ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::RequestProgressInfoL -// synchronous -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::RequestProgressInfoL( - const RMessage2& /*aMessage*/ ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - // The progress should be read using pubsub - // This call will be removed in upnpfw 2.1 - User::Leave( KErrNotSupported ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::RefreshShareContentL -// asynchronous -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::RefreshShareContentL( - const RMessage2& aMessage ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - TInt len( aMessage.GetDesLength(0) ); - HBufC8* buffer = HBufC8::NewLC( len ); - TPtr8 ptr( buffer->Des() ); - aMessage.ReadL( 0, ptr ); - RDesReadStream stream; - stream.Open( ptr ); - CleanupClosePushL( stream ); - - TInt mediaType( stream.ReadInt32L() ); - - // The sharing and refresh cannot be used simultaneously - // Using the same place to store message for completion - // - iChangeShareContentMsg = aMessage; - // call to handler. - iHandler->RefreshShareContentL( mediaType ); - CleanupStack::PopAndDestroy( &stream ); - CleanupStack::PopAndDestroy( buffer ); - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::CompleteSelectionContentL -// Completes the async GetSelectionContentL call -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::CompleteSelectionContentL( - const CDesCArray& aMarkedItems ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - TInt objectCount( aMarkedItems.MdcaCount() ); - - delete iResultBuffer; - iResultBuffer = NULL; - - iResultBuffer = CBufFlat::NewL( KTintSize + KTintSize*objectCount ); - RBufWriteStream wstream; - wstream.Open( *iResultBuffer ); - CleanupClosePushL( wstream ); - - // append count - wstream.WriteInt32L( objectCount ); - // append descriptors - for( TInt i(0); iPtr(0) ); - iSelectionContentMsg.Complete( KErrNone ); - CleanupStack::PopAndDestroy( &wstream ); - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::StartConnectionMonitorL -// synchronous -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::StartConnectionMonitorL( - const RMessage2& aMessage ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - TInt len( aMessage.GetDesLength(0) ); - HBufC8* buffer = HBufC8::NewLC( len ); - TPtr8 ptr( buffer->Des() ); - aMessage.ReadL( 0, ptr ); - RDesReadStream stream; - stream.Open( ptr ); - CleanupClosePushL( stream ); - - TInt iapId( stream.ReadInt32L() ); - - // call to server - iServer->RequestConnectionLostL( iapId ); - CleanupStack::PopAndDestroy( &stream ); - CleanupStack::PopAndDestroy( buffer ); - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentServerSession::StopConnectionMonitorL -// cancel connection lost -// -------------------------------------------------------------------------- -// -void CUpnpContentServerSession::StopConnectionMonitorL( ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - iServer->CancelConnectionLostL(); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// End of file +/* +* Copyright (c) 2006-2007 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: CUpnpContentServerSession class implementation +* +*/ + + + + + +#include +#include //CArrayFix +#include //RDesReadStream +#include "upnpcontentserverdefs.h" +#include "upnpcontentserversession.h" +#include "upnpcontentserverclient.h" + +_LIT( KComponentLogfile, "contentserver.txt"); +#include "upnplog.h" + +using namespace UpnpContentServer; + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::NewL +// 2-phased constructor. +// -------------------------------------------------------------------------- +// +CUpnpContentServerSession* CUpnpContentServerSession::NewL( + CUpnpContentServer* aServer ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + CUpnpContentServerSession* self = + new (ELeave) CUpnpContentServerSession(); + CleanupStack::PushL( self ); + self->ConstructL( aServer ); + CleanupStack::Pop( self ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + return self; + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::CUpnpContentServerSession +// C++ constructor. +// -------------------------------------------------------------------------- +// +CUpnpContentServerSession::CUpnpContentServerSession( ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// void CUpnpContentServerSession::ConstructL +// 2nd phase constructor. +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::ConstructL( CUpnpContentServer* aServer ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + if ( !aServer ) + { + User::Leave( KErrArgument ); + } + iServer = aServer; + iHandler = iServer->Handler(); + iServer->AddSession(); + if ( iHandler ) + { + iHandler->SetContentSharingObserverL( this ); + } + else + { + User::Leave( KErrBadHandle ); + } + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::~CUpnpContentServerSession +// C++ destructor. +// -------------------------------------------------------------------------- +// +CUpnpContentServerSession::~CUpnpContentServerSession() + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + // Sharing is off, client is disconnected, no sharing operation is ongoing + // -> close the server + if( iServer && iHandler ) + { + iServer->RemoveSession(); + if ( iHandler->CanStop() && iServer->CanStop() ) + { + iServer->Stop(); + __LOG("CUpnpContentServerSession::~CUpnpContentServerSession, \ +CActiveScheduler stopped"); + } + TRAP_IGNORE( iHandler->SetContentSharingObserverL( NULL ) ) + } + delete iResultBuffer; + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::ServiceL +// From CSession2, passes the request forward to DispatchMessageL. +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::ServiceL( const RMessage2& aMessage ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + TRAPD(err,DispatchMessageL(aMessage)); + if ( err != KErrNone ) + { + __LOG1( "Error: %d", err ); + aMessage.Complete( err ); + } + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::DispatchMessageL +// Handles the request from client. +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::DispatchMessageL( const RMessage2& aMessage ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + iHandler->InitializeL(); + iHandler->SetContentSharingObserverL( this ); + + switch( aMessage.Function() ) + { + case ERequestSelectionContent : + { + GetSelectionContentL( aMessage ); + // completed separately + } + break; + case EGetSelectionIndexes : + { + GetSelectionIndexesL( aMessage ); + aMessage.Complete( KErrNone ); + } + break; + case EChangeShareContent : + { + ChangeShareContentL( aMessage ); + aMessage.Complete( KErrNone ); + } + break; + case ERefreshShareContent : + { + RefreshShareContentL( aMessage ); + aMessage.Complete( KErrNone ); + } + break; + case ERequestProgressInfo : + { + RequestProgressInfoL( aMessage ); + aMessage.Complete( KErrNone ); + } + break; + case EStartConnectionMonitor : + { + StartConnectionMonitorL( aMessage ); + aMessage.Complete( KErrNone ); + } + break; + case EStopConnectionMonitor : + { + StopConnectionMonitorL(); + aMessage.Complete( KErrNone ); + } + break; + + default: + { + aMessage.Complete( KErrArgument ); + } + break; + } + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::GetSelectionContentL +// asynchronous +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::GetSelectionContentL( + const RMessage2& aMessage ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + TInt len( aMessage.GetDesLength(0) ); + + HBufC8* buffer = HBufC8::NewLC( len ); + TPtr8 ptr( buffer->Des() ); + aMessage.ReadL( 0, ptr ); + RDesReadStream stream; + stream.Open( ptr ); + CleanupClosePushL( stream ); + + TInt mediaType( stream.ReadInt32L() ); + iSelectionContentMsg = aMessage; + + // call to server + iHandler->GetSelectionContentL( mediaType ); + + CleanupStack::PopAndDestroy( &stream ); + CleanupStack::PopAndDestroy( buffer ); + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::GetSelectionIndexesL +// synchronous +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::GetSelectionIndexesL( + const RMessage2& aMessage ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + TInt len( aMessage.GetDesLength(0) ); + + RArray* selections = new ( ELeave ) + RArray( 5 ); + CleanupClosePushL( *selections ); + HBufC8* buffer = HBufC8::NewLC( len ); + TPtr8 ptr( buffer->Des() ); + aMessage.ReadL( 0, ptr ); + RDesReadStream stream; + stream.Open( ptr ); + CleanupClosePushL( stream ); + + TInt mediaType( stream.ReadInt32L() ); + // call to server + iHandler->GetSelectionIndexesL( *selections, mediaType ); + + TInt objectCount( selections->Count() ); + + delete iResultBuffer; + iResultBuffer = NULL; + + iResultBuffer = CBufFlat::NewL( KTintSize + KTintSize*objectCount ); + RBufWriteStream wstream; + wstream.Open( *iResultBuffer ); + CleanupClosePushL( wstream ); + + // append count and ints + wstream.WriteInt32L( objectCount ); + for( TInt i(0); i < objectCount; i++ ) + { + wstream.WriteInt32L( selections->operator[]( i ) ); + } + + // Write result back to client + aMessage.WriteL( 1, iResultBuffer->Ptr(0) ); + + CleanupStack::PopAndDestroy( &wstream ); + CleanupStack::PopAndDestroy( &stream ); + CleanupStack::PopAndDestroy( buffer ); + CleanupStack::PopAndDestroy( selections ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::ChangeShareContentL +// Handles the async request from client. +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::ChangeShareContentL( + const RMessage2& aMessage ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + TInt len( aMessage.GetDesLength(0) ); + RArray selections( len ); + CleanupClosePushL( selections ); + HBufC8* buffer = HBufC8::NewLC( len ); + TPtr8 ptr( buffer->Des() ); + aMessage.ReadL( 0, ptr ); + RDesReadStream stream; + stream.Open( ptr ); + CleanupClosePushL( stream ); + + TInt mediaType( stream.ReadInt32L() ); + TInt objCount( stream.ReadInt32L() ); + + // loop the TInt from stream + for( TInt i(0); i< objCount; i++) + { + selections.AppendL( stream.ReadInt32L() ); + } + + iHandler->ChangeShareContentL( selections, mediaType ); + + CleanupStack::PopAndDestroy( &stream ); + CleanupStack::PopAndDestroy( buffer ); + CleanupStack::PopAndDestroy( &selections ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::RequestProgressInfoL +// synchronous +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::RequestProgressInfoL( + const RMessage2& /*aMessage*/ ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + // The progress should be read using pubsub + // This call will be removed in upnpfw 2.1 + User::Leave( KErrNotSupported ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::RefreshShareContentL +// asynchronous +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::RefreshShareContentL( + const RMessage2& aMessage ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + TInt len( aMessage.GetDesLength(0) ); + HBufC8* buffer = HBufC8::NewLC( len ); + TPtr8 ptr( buffer->Des() ); + aMessage.ReadL( 0, ptr ); + RDesReadStream stream; + stream.Open( ptr ); + CleanupClosePushL( stream ); + + TInt mediaType( stream.ReadInt32L() ); + + // The sharing and refresh cannot be used simultaneously + // Using the same place to store message for completion + // + iChangeShareContentMsg = aMessage; + // call to handler. + iHandler->RefreshShareContentL( mediaType ); + CleanupStack::PopAndDestroy( &stream ); + CleanupStack::PopAndDestroy( buffer ); + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::CompleteSelectionContentL +// Completes the async GetSelectionContentL call +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::CompleteSelectionContentL( + const CDesCArray& aMarkedItems ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + TInt objectCount( aMarkedItems.MdcaCount() ); + + delete iResultBuffer; + iResultBuffer = NULL; + + iResultBuffer = CBufFlat::NewL( KTintSize + KTintSize*objectCount ); + RBufWriteStream wstream; + wstream.Open( *iResultBuffer ); + CleanupClosePushL( wstream ); + + // append count + wstream.WriteInt32L( objectCount ); + // append descriptors + for( TInt i(0); iPtr(0) ); + iSelectionContentMsg.Complete( KErrNone ); + CleanupStack::PopAndDestroy( &wstream ); + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::StartConnectionMonitorL +// synchronous +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::StartConnectionMonitorL( + const RMessage2& aMessage ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + TInt len( aMessage.GetDesLength(0) ); + HBufC8* buffer = HBufC8::NewLC( len ); + TPtr8 ptr( buffer->Des() ); + aMessage.ReadL( 0, ptr ); + RDesReadStream stream; + stream.Open( ptr ); + CleanupClosePushL( stream ); + + TInt iapId( stream.ReadInt32L() ); + + // call to server + iServer->RequestConnectionLostL( iapId ); + CleanupStack::PopAndDestroy( &stream ); + CleanupStack::PopAndDestroy( buffer ); + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// CUpnpContentServerSession::StopConnectionMonitorL +// cancel connection lost +// -------------------------------------------------------------------------- +// +void CUpnpContentServerSession::StopConnectionMonitorL( ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + iServer->CancelConnectionLostL(); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// End of file