diff -r 3785f754ee62 -r 5360b7ddc251 upnpsharing/upnpcontentserver/src/upnpcontentserverclient.cpp --- a/upnpsharing/upnpcontentserver/src/upnpcontentserverclient.cpp Fri Sep 17 08:31:21 2010 +0300 +++ b/upnpsharing/upnpcontentserver/src/upnpcontentserverclient.cpp Mon Nov 01 12:37:49 2010 +0200 @@ -1,447 +1,447 @@ -/* -* 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: RUpnpContentServerClient class implementation -* -*/ - - - - - - -// INCLUDES -#include -#include - -#include "upnpcontentserverclient.h" - -_LIT( KComponentLogfile, "contentserver.txt"); -#include "upnplog.h" - -// CONSTANTS -const TInt KDefaultBufferSize( 512 ); //default size for any receice buffer -const TInt KContentBufferSize( 10*1024 ); //size for media content buffer - -using namespace UpnpContentServer; - -//--------------------------------------------------------------------------- -// LaunchServer -// Launches the server -//--------------------------------------------------------------------------- -// -TInt LaunchServer() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - TInt res = KErrNone; - - // DLL launch - RProcess server; - res = server.Create( KUpnpContentServerNameAndDir, - KNullDesC ); - - // Loading failed. - if ( res == KErrNone ) - { - server.SetPriority( EPriorityLow ); - TRequestStatus status; - server.Rendezvous(status); - - if ( status != KRequestPending) - { - server.Kill(0); // abort startup - server.Close(); - res = KErrGeneral; - } - if( !res ) - { - server.Resume(); // Logon OK - start the server. - - User::WaitForRequest(status); - server.Close(); - res = status.Int(); - } - } - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - return res; - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::RUpnpContentServerClient -// C++ Constructor -// -------------------------------------------------------------------------- -// -EXPORT_C RUpnpContentServerClient::RUpnpContentServerClient() - : iSendBufferPtr( NULL, 0 ), - iSendBuffer( NULL ), - iReceiveBufferPtr( NULL, 0 ), - iReceiveBuffer( NULL ), - iContentBufferPtr( NULL, 0 ), - iContentBuffer( NULL ) - { - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::OpenL -// Creates connection to server -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::OpenL() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - TVersion version( KUpnpContentServerVersionMajor, - KUpnpContentServerVersionMinor, - 0 ); - - TInt res = CreateSession( KUpnpContentServer, version, - KDefaultMessageSlots ); - if ( res != KErrNone ) - { - __LOG1( "Error: %d", res ); - res = LaunchServer(); - if ( res != KErrNone ) - { - __LOG1( "Error: %d", res ); - } - User::LeaveIfError( res ); - res = CreateSession( KUpnpContentServer, version, - KDefaultMessageSlots ); - if ( res != KErrNone ) - { - __LOG1( "Error: %d", res ); - } - ShareAuto(); - } - User::LeaveIfError( res ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::Close -// close connection to server -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::Close() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - // close session - delete iSendBuffer; - iSendBuffer = NULL; - delete iReceiveBuffer; - iReceiveBuffer = NULL; - delete iContentBuffer; - iContentBuffer = NULL; - RSessionBase::Close(); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::StartUploadListenerL -// Starts the media server upload listener -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::StartUploadListenerL( ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - User::Leave( KErrNotSupported ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::StopUploadListenerL -// Stops the media server upload listener -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::StopUploadListenerL() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - User::Leave( KErrNotSupported ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::GetSelectionContentL -// Gets the names of existed albums/playlists -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::GetSelectionContentL( - UpnpContentServer::TUpnpMediaType aType, - TRequestStatus& aStatus ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - /* delete iSendBuffer; - iSendBuffer = NULL; - iSendBuffer = CBufFlat::NewL( KTintSize ); - - // Need to externalize a data to buffer to send it with IPC - RBufWriteStream sendstream; - sendstream.Open( *iSendBuffer ); - CleanupClosePushL( sendstream ); - sendstream.WriteInt32L( aType ); - iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); - - // Prepare receive buffers - delete iContentBuffer; - iContentBuffer = NULL; - iContentBuffer = HBufC8::NewL( KContentBufferSize ); - iContentBufferPtr.Set( iContentBuffer->Des() ); - - SendReceive( ERequestSelectionContent, - TIpcArgs( &iSendBufferPtr, &iContentBufferPtr ), - aStatus ); - CleanupStack::PopAndDestroy( &sendstream );*/ - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::GetSelectionContentResultL -// Ask the result of GetSelectionContentL call -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::GetSelectionContentResultL( - CDesCArray& aIDArray ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - if ( !iContentBuffer ) - { - User::Leave( KErrNotReady ); - } - - RDesReadStream stream; - stream.Open( iContentBufferPtr ); - CleanupClosePushL( stream ); - // leaves -25 if empty stream - TInt itemCount( 0 ); - TRAP_IGNORE( itemCount = stream.ReadUint32L() ); - - for ( TInt i(0); i < itemCount; i++ ) - { - const TInt desLen( static_cast( stream.ReadUint32L() )); - TBuf item; - stream.ReadL( item, desLen ); - aIDArray.AppendL( item ); - } - - CleanupStack::PopAndDestroy( &stream ); - delete iContentBuffer; - iContentBuffer = NULL; - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::ChangeSharedContentL -// Sends the selected indexes to server and starts sharing -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::ChangeSharedContentL( - UpnpContentServer::TUpnpMediaType aType, - const CArrayFix& aMarkedItems, - TRequestStatus& aStatus ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - TInt objectCount( aMarkedItems.Count() ); - if ( objectCount < 1 ) - { - __LOG1( "Error: %d", __LINE__ ); - User::Leave( KErrArgument ); - } - - delete iSendBuffer; - iSendBuffer = NULL; - // Calculate correct size for send buffer on basis of the amount - // of items user has selected - iSendBuffer = CBufFlat::NewL( objectCount * KTintSize + 2*KTintSize ); - - // Need to externalize a data to buffer to send it with IPC - RBufWriteStream stream; - stream.Open( *iSendBuffer ); - CleanupClosePushL( stream ); - stream.WriteInt32L( aType ); - stream.WriteInt32L( objectCount ); - for( TInt i(0); i< objectCount; i++ ) - { - stream.WriteInt32L( aMarkedItems[ i ] ); - } - iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); - - SendReceive( EChangeShareContent, - TIpcArgs( &iSendBufferPtr ), - aStatus ); - CleanupStack::PopAndDestroy( &stream ); - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::RefreshSharedContentL -// Refresh the shared content -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::RefreshSharedContentL( - UpnpContentServer::TUpnpMediaType aType, - TRequestStatus& aStatus ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - /* delete iSendBuffer; - iSendBuffer = NULL; - iSendBuffer = CBufFlat::NewL( KTintSize ); - - // Need to externalize a data to buffer to send it with IPC - RBufWriteStream stream; - stream.Open( *iSendBuffer ); - CleanupClosePushL( stream ); - stream.WriteInt32L( aType ); - iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); - - SendReceive( ERefreshShareContent, - TIpcArgs( &iSendBufferPtr ), - aStatus ); - CleanupStack::PopAndDestroy( &stream );*/ - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::GetSelectionIndexesL -// Gets the users previous selections as list of selected indexes -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::GetSelectionIndexesL( - UpnpContentServer::TUpnpMediaType aType, - TRequestStatus& aStatus ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - /* delete iSendBuffer; - iSendBuffer = NULL; - iSendBuffer = CBufFlat::NewL( KTintSize ); - - // Need to externalize a data to buffer to send it with IPC - RBufWriteStream sendstream; - sendstream.Open( *iSendBuffer ); - CleanupClosePushL( sendstream ); - sendstream.WriteInt32L( aType ); - iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); - - // Prepare receive buffers - PrepareReceiveBuffersL( KDefaultBufferSize ); - - SendReceive( EGetSelectionIndexes, - TIpcArgs( &iSendBufferPtr, &iReceiveBufferPtr ), - aStatus ); - CleanupStack::PopAndDestroy( &sendstream );*/ - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::GetSelectionIndexesResultL -// Ask the result of GetSelectionIndexesL call -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::GetSelectionIndexesResultL( - CArrayFix& aMarkedItems ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - if ( !iReceiveBuffer ) - { - User::Leave( KErrNotReady ); - } - - RDesReadStream stream; - stream.Open( iReceiveBufferPtr ); - CleanupClosePushL( stream ); - - // leaves -25 if empty stream - TInt itemCount( 0 ); - TRAP_IGNORE( itemCount = stream.ReadUint32L() ); - - for ( TInt i(0); i < itemCount; i++ ) - { - const TInt val = static_cast( stream.ReadUint32L() ); - aMarkedItems.AppendL( val ); - } - - CleanupStack::PopAndDestroy( &stream ); - delete iReceiveBuffer; - iReceiveBuffer = NULL; - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::StartConnectionMonitorL -// Start connection monitor in content server -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::StartConnectionMonitorL( - TInt aIapId, - TRequestStatus& aStatus ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - /* delete iSendBuffer; - iSendBuffer = NULL; - iSendBuffer = CBufFlat::NewL( KTintSize ); - - // Need to externalize a data to buffer to send it with IPC - RBufWriteStream sendstream; - sendstream.Open( *iSendBuffer ); - CleanupClosePushL( sendstream ); - sendstream.WriteInt32L( aIapId ); - iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); - - SendReceive( EStartConnectionMonitor, - TIpcArgs( &iSendBufferPtr ), - aStatus ); - CleanupStack::PopAndDestroy( &sendstream );*/ - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::StopConnectionMonitorL -// Stop connection monitor in content server -// -------------------------------------------------------------------------- -// -EXPORT_C void RUpnpContentServerClient::StopConnectionMonitorL( - TRequestStatus& aStatus ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - SendReceive( EStopConnectionMonitor, aStatus ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// RUpnpContentServerClient::PrepareReceiveBuffers -// Prepares the receive buffers -// -------------------------------------------------------------------------- -// -void RUpnpContentServerClient::PrepareReceiveBuffersL( TInt aSize ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - delete iReceiveBuffer; - iReceiveBuffer = NULL; - iReceiveBuffer = HBufC8::NewL( aSize ); - iReceiveBufferPtr.Set( iReceiveBuffer->Des() ); - __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: RUpnpContentServerClient class implementation +* +*/ + + + + + + +// INCLUDES +#include +#include + +#include "upnpcontentserverclient.h" + +_LIT( KComponentLogfile, "contentserver.txt"); +#include "upnplog.h" + +// CONSTANTS +const TInt KDefaultBufferSize( 512 ); //default size for any receice buffer +const TInt KContentBufferSize( 10*1024 ); //size for media content buffer + +using namespace UpnpContentServer; + +//--------------------------------------------------------------------------- +// LaunchServer +// Launches the server +//--------------------------------------------------------------------------- +// +TInt LaunchServer() + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + TInt res = KErrNone; + + // DLL launch + RProcess server; + res = server.Create( KUpnpContentServerNameAndDir, + KNullDesC ); + + // Loading failed. + if ( res == KErrNone ) + { + server.SetPriority( EPriorityLow ); + TRequestStatus status; + server.Rendezvous(status); + + if ( status != KRequestPending) + { + server.Kill(0); // abort startup + server.Close(); + res = KErrGeneral; + } + if( !res ) + { + server.Resume(); // Logon OK - start the server. + + User::WaitForRequest(status); + server.Close(); + res = status.Int(); + } + } + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + return res; + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::RUpnpContentServerClient +// C++ Constructor +// -------------------------------------------------------------------------- +// +EXPORT_C RUpnpContentServerClient::RUpnpContentServerClient() + : iSendBufferPtr( NULL, 0 ), + iSendBuffer( NULL ), + iReceiveBufferPtr( NULL, 0 ), + iReceiveBuffer( NULL ), + iContentBufferPtr( NULL, 0 ), + iContentBuffer( NULL ) + { + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::OpenL +// Creates connection to server +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::OpenL() + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + TVersion version( KUpnpContentServerVersionMajor, + KUpnpContentServerVersionMinor, + 0 ); + + TInt res = CreateSession( KUpnpContentServer, version, + KDefaultMessageSlots ); + if ( res != KErrNone ) + { + __LOG1( "Error: %d", res ); + res = LaunchServer(); + if ( res != KErrNone ) + { + __LOG1( "Error: %d", res ); + } + User::LeaveIfError( res ); + res = CreateSession( KUpnpContentServer, version, + KDefaultMessageSlots ); + if ( res != KErrNone ) + { + __LOG1( "Error: %d", res ); + } + ShareAuto(); + } + User::LeaveIfError( res ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::Close +// close connection to server +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::Close() + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + // close session + delete iSendBuffer; + iSendBuffer = NULL; + delete iReceiveBuffer; + iReceiveBuffer = NULL; + delete iContentBuffer; + iContentBuffer = NULL; + RSessionBase::Close(); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::StartUploadListenerL +// Starts the media server upload listener +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::StartUploadListenerL( ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + User::Leave( KErrNotSupported ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::StopUploadListenerL +// Stops the media server upload listener +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::StopUploadListenerL() + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + User::Leave( KErrNotSupported ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::GetSelectionContentL +// Gets the names of existed albums/playlists +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::GetSelectionContentL( + UpnpContentServer::TUpnpMediaType aType, + TRequestStatus& aStatus ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + delete iSendBuffer; + iSendBuffer = NULL; + iSendBuffer = CBufFlat::NewL( KTintSize ); + + // Need to externalize a data to buffer to send it with IPC + RBufWriteStream sendstream; + sendstream.Open( *iSendBuffer ); + CleanupClosePushL( sendstream ); + sendstream.WriteInt32L( aType ); + iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); + + // Prepare receive buffers + delete iContentBuffer; + iContentBuffer = NULL; + iContentBuffer = HBufC8::NewL( KContentBufferSize ); + iContentBufferPtr.Set( iContentBuffer->Des() ); + + SendReceive( ERequestSelectionContent, + TIpcArgs( &iSendBufferPtr, &iContentBufferPtr ), + aStatus ); + CleanupStack::PopAndDestroy( &sendstream ); + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::GetSelectionContentResultL +// Ask the result of GetSelectionContentL call +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::GetSelectionContentResultL( + CDesCArray& aIDArray ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + if ( !iContentBuffer ) + { + User::Leave( KErrNotReady ); + } + + RDesReadStream stream; + stream.Open( iContentBufferPtr ); + CleanupClosePushL( stream ); + // leaves -25 if empty stream + TInt itemCount( 0 ); + TRAP_IGNORE( itemCount = stream.ReadUint32L() ); + + for ( TInt i(0); i < itemCount; i++ ) + { + const TInt desLen( static_cast( stream.ReadUint32L() )); + TBuf item; + stream.ReadL( item, desLen ); + aIDArray.AppendL( item ); + } + + CleanupStack::PopAndDestroy( &stream ); + delete iContentBuffer; + iContentBuffer = NULL; + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::ChangeSharedContentL +// Sends the selected indexes to server and starts sharing +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::ChangeSharedContentL( + UpnpContentServer::TUpnpMediaType aType, + const CArrayFix& aMarkedItems, + TRequestStatus& aStatus ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + TInt objectCount( aMarkedItems.Count() ); + if ( objectCount < 1 ) + { + __LOG1( "Error: %d", __LINE__ ); + User::Leave( KErrArgument ); + } + + delete iSendBuffer; + iSendBuffer = NULL; + // Calculate correct size for send buffer on basis of the amount + // of items user has selected + iSendBuffer = CBufFlat::NewL( objectCount * KTintSize + 2*KTintSize ); + + // Need to externalize a data to buffer to send it with IPC + RBufWriteStream stream; + stream.Open( *iSendBuffer ); + CleanupClosePushL( stream ); + stream.WriteInt32L( aType ); + stream.WriteInt32L( objectCount ); + for( TInt i(0); i< objectCount; i++ ) + { + stream.WriteInt32L( aMarkedItems[ i ] ); + } + iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); + + SendReceive( EChangeShareContent, + TIpcArgs( &iSendBufferPtr ), + aStatus ); + CleanupStack::PopAndDestroy( &stream ); + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::RefreshSharedContentL +// Refresh the shared content +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::RefreshSharedContentL( + UpnpContentServer::TUpnpMediaType aType, + TRequestStatus& aStatus ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + delete iSendBuffer; + iSendBuffer = NULL; + iSendBuffer = CBufFlat::NewL( KTintSize ); + + // Need to externalize a data to buffer to send it with IPC + RBufWriteStream stream; + stream.Open( *iSendBuffer ); + CleanupClosePushL( stream ); + stream.WriteInt32L( aType ); + iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); + + SendReceive( ERefreshShareContent, + TIpcArgs( &iSendBufferPtr ), + aStatus ); + CleanupStack::PopAndDestroy( &stream ); + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::GetSelectionIndexesL +// Gets the users previous selections as list of selected indexes +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::GetSelectionIndexesL( + UpnpContentServer::TUpnpMediaType aType, + TRequestStatus& aStatus ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + delete iSendBuffer; + iSendBuffer = NULL; + iSendBuffer = CBufFlat::NewL( KTintSize ); + + // Need to externalize a data to buffer to send it with IPC + RBufWriteStream sendstream; + sendstream.Open( *iSendBuffer ); + CleanupClosePushL( sendstream ); + sendstream.WriteInt32L( aType ); + iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); + + // Prepare receive buffers + PrepareReceiveBuffersL( KDefaultBufferSize ); + + SendReceive( EGetSelectionIndexes, + TIpcArgs( &iSendBufferPtr, &iReceiveBufferPtr ), + aStatus ); + CleanupStack::PopAndDestroy( &sendstream ); + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::GetSelectionIndexesResultL +// Ask the result of GetSelectionIndexesL call +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::GetSelectionIndexesResultL( + CArrayFix& aMarkedItems ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + if ( !iReceiveBuffer ) + { + User::Leave( KErrNotReady ); + } + + RDesReadStream stream; + stream.Open( iReceiveBufferPtr ); + CleanupClosePushL( stream ); + + // leaves -25 if empty stream + TInt itemCount( 0 ); + TRAP_IGNORE( itemCount = stream.ReadUint32L() ); + + for ( TInt i(0); i < itemCount; i++ ) + { + const TInt val = static_cast( stream.ReadUint32L() ); + aMarkedItems.AppendL( val ); + } + + CleanupStack::PopAndDestroy( &stream ); + delete iReceiveBuffer; + iReceiveBuffer = NULL; + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::StartConnectionMonitorL +// Start connection monitor in content server +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::StartConnectionMonitorL( + TInt aIapId, + TRequestStatus& aStatus ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + + delete iSendBuffer; + iSendBuffer = NULL; + iSendBuffer = CBufFlat::NewL( KTintSize ); + + // Need to externalize a data to buffer to send it with IPC + RBufWriteStream sendstream; + sendstream.Open( *iSendBuffer ); + CleanupClosePushL( sendstream ); + sendstream.WriteInt32L( aIapId ); + iSendBufferPtr.Set( iSendBuffer->Ptr(0) ); + + SendReceive( EStartConnectionMonitor, + TIpcArgs( &iSendBufferPtr ), + aStatus ); + CleanupStack::PopAndDestroy( &sendstream ); + + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::StopConnectionMonitorL +// Stop connection monitor in content server +// -------------------------------------------------------------------------- +// +EXPORT_C void RUpnpContentServerClient::StopConnectionMonitorL( + TRequestStatus& aStatus ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + SendReceive( EStopConnectionMonitor, aStatus ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +// -------------------------------------------------------------------------- +// RUpnpContentServerClient::PrepareReceiveBuffers +// Prepares the receive buffers +// -------------------------------------------------------------------------- +// +void RUpnpContentServerClient::PrepareReceiveBuffersL( TInt aSize ) + { + __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); + delete iReceiveBuffer; + iReceiveBuffer = NULL; + iReceiveBuffer = HBufC8::NewL( aSize ); + iReceiveBufferPtr.Set( iReceiveBuffer->Des() ); + __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); + } + +//End of File