upnpmediaserver/mediaserverengine/src/upnpmediaservereventhandler.cpp
author Sampo Huttunen <sampo.huttunen@nokia.com>
Wed, 24 Nov 2010 09:39:46 +0200
branchIOP_Improvements
changeset 45 a6c41ca11adf
parent 0 7f85d04be362
permissions -rw-r--r--
Updated the SIS package, there was some BC issue with the earlier version. Also updated the platform UID to S^3 version.

/** @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:  Media Server event handler
*
*/


// INCLUDE FILES
#include "upnpmediaservereventhandler.h"
#include "upnpmediaserversession.h"
#include "upnpfiletransfereventlist.h"
#include "upnpfiletransferevent.h"
#include "upnpmediaserver.pan"
#include <s32mem.h>

// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CUpnpMediaServerEventHandler* CUpnpMediaServerEventHandler::NewL(CUpnpMediaServer* aServer)
    {
    CUpnpMediaServerEventHandler* self = CUpnpMediaServerEventHandler::NewLC(aServer); 
    CleanupStack::Pop( self ) ;
    return self ;
    }

// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::NewLC
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CUpnpMediaServerEventHandler* CUpnpMediaServerEventHandler::NewLC(CUpnpMediaServer* aServer)
    {
    CUpnpMediaServerEventHandler* self = new (ELeave) CUpnpMediaServerEventHandler(aServer);
    CleanupStack::PushL( self );
    self->ConstructL() ;
    return self ;
    }

// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::EventMediaServerSubscribeEventsL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
void CUpnpMediaServerEventHandler::EventMediaServerSubscribeEvents( const RMessage2& aMessage )
    {    
    iMediaServer->SubscribeEvents(this);
    aMessage.Complete( KErrNone );
    }

// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::EventMediaServerUnsubscribeEventsL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
void CUpnpMediaServerEventHandler::EventMediaServerUnsubscribeEvents( const RMessage2& aMessage )
    {        
    if ( iListenRequestPending )
        {
        iCurrentMessage.Complete( KErrNone );
        }
    iMediaServer->UnsubscribeEvents(this);    
    aMessage.Complete( KErrNone );
    }

// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::EventMediaServerServerListenTransferEventL
// Serves event listening request
// -----------------------------------------------------------------------------
//
void CUpnpMediaServerEventHandler::EventMediaServerServerListenTransferEventL( const RMessage2& aMessage )
    {    
    iCurrentMessage = aMessage;
    
    if ( iFileTransferEventList->GetPointerArray().Count() > 0 )
        {   
        ListenTransferEventCompleteL();
        }
    else
        {
        iListenRequestPending = ETrue;
        }    
    }

// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::EventMediaServerGetTransferEventBodyL
// Sends event list body to client
// -----------------------------------------------------------------------------
//
void CUpnpMediaServerEventHandler::EventMediaServerGetTransferEventBodyL( const RMessage2& aMessage )
    {
    aMessage.WriteL(0, *iResponseBuffer);
    aMessage.Complete( KErrNone );
    delete iResponseBuffer;
    iResponseBuffer = NULL;
    }

// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::CUpnpMediaServerEventHandler
// Constructor.
// -----------------------------------------------------------------------------
//
CUpnpMediaServerEventHandler::CUpnpMediaServerEventHandler(CUpnpMediaServer* aServer)
    :iMediaServer(aServer), iRespLengthPkg(iRespLength)
    {
    }


// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::~CUpnpMediaServerEventHandler()
// Destructor.
// -----------------------------------------------------------------------------
//
CUpnpMediaServerEventHandler::~CUpnpMediaServerEventHandler()
    {
    if(iMediaServer)
        {        
        iMediaServer->UnsubscribeEvents(this);
        }
    delete iResponseBuffer;
    delete iFileTransferEventList;
    }


// -----------------------------------------------------------------------------
// CUpnpMediaServerSession::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CUpnpMediaServerEventHandler::ConstructL()
    {
    iFileTransferEventList = CUpnpFileTransferEventList::NewL();
	}

// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::FileTransferEvent
// File transfer event callback method.(from MUpnpContentDirectoryObserver)
// -----------------------------------------------------------------------------
//
void CUpnpMediaServerEventHandler::FileTransferEvent( CUpnpFileTransferEvent *aEvent )
    {
    TRAP_IGNORE( ServeEventL( aEvent ) );
    }


// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::ServeEventL
// Serves incoming transfer event
// -----------------------------------------------------------------------------
//
void CUpnpMediaServerEventHandler::ServeEventL(CUpnpFileTransferEvent *aEvent) 
    {
    iFileTransferEventList->GetPointerArray().AppendL( aEvent->CloneL() );
    if (iListenRequestPending)
        {
        ListenTransferEventCompleteL();
        }
    }

// -----------------------------------------------------------------------------
// CUpnpMediaServerEventHandler::ListenTransferEventCompleteL
// Serialize events queue and sends buffer length to client
// -----------------------------------------------------------------------------
//
void CUpnpMediaServerEventHandler::ListenTransferEventCompleteL()
    {
    iResponseBuffer = iFileTransferEventList->ToDes8L(); 
    iFileTransferEventList->GetPointerArray().ResetAndDestroy();
    iRespLength = iResponseBuffer->Des().Size();
    iCurrentMessage.WriteL(0, iRespLengthPkg);
    iCurrentMessage.Complete( KErrNone );
    iListenRequestPending = EFalse;
    }