upnpavcontroller/upnpavcontrollerserver/inc/upnpuploadsession.h
branchnew development branch with rendering state machine and other goodies
changeset 38 5360b7ddc251
parent 0 7f85d04be362
--- a/upnpavcontroller/upnpavcontrollerserver/inc/upnpuploadsession.h	Fri Sep 17 08:31:21 2010 +0300
+++ b/upnpavcontroller/upnpavcontrollerserver/inc/upnpuploadsession.h	Mon Nov 01 12:37:49 2010 +0200
@@ -1,801 +1,334 @@
-/*
-* Copyright (c) 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:      implementation for session towards a media server
-*
-*/
-
-
-
-
-
-
-#ifndef C_UPNPUPLOADSESSION_H
-#define C_UPNPUPLOADSESSION_H
-
-// EXTERNAL INCLUDES
-#include <e32base.h>
-#include <upnpavcontrolpointobserver.h>
-
-// INTERNAL INCLUDES
-#include "httptransferobserver.h"
-#include "upnpfiletransfersessionbase.h"
-#include "tupnpfiletransferevent.h"
-
-// FORWARD DECLARATIONS
-class CHttpUploader;
-class CUpnpFileTransferItem;
-class CUPnPResourceHelper;
-class CUpnpDlnaProtocolInfo;
-class CUpnpObject;
-class CUpnpAttribute;
-
-// CLASS DECLARATION
-/**
- * Implements AV Controller server side upload session
- *
- * @since S60 v3.2
- */
-class CUPnPUploadSession :  public CUPnPFileTransferSessionBase,
-                            public MHttpTransferObserver,
-                            public MUpnpAVControlPointObserver
-    {
-        
-public:
-
-    /**
-     * Static 1st phase constructor
-     *
-     * @param aServer AV Controller server handle
-     * @param aSessionId session id
-     * @param aUuid device Uuid
-     */
-    static CUPnPUploadSession* NewL( CUpnpAVControllerServer& aServer,
-        TInt aSessionId, const TDesC8& aUuid );
-    
-    /**
-     * Destructor
-     */
-    virtual ~CUPnPUploadSession();
-    
-private:
-
-    /**
-     * Private constructor
-     *
-     * @param aServer AV Controller server handle
-     * @param aSessionId session id
-     */
-    CUPnPUploadSession( CUpnpAVControllerServer& aServer,
-        TInt aSessionId );
-    
-    /**
-     * 2ns phase constructor
-     *
-     * @param aUuid device uuid
-     */
-    void ConstructL( const TDesC8& aUuid );
-
-private: // From MHttpTransferObserver
-    
-    /**
-     * See httptransferobserver.h
-     */
-    void TransferProgress( TAny* aKey, TInt aBytes, TInt aTotalBytes );
-
-    /**
-     * See httptransferobserver.h
-     */
-    void ReadyForTransferL( TAny* aKey );
-
-    /**
-     * See httptransferobserver.h
-     */
-    void TransferCompleted( TAny* aKey, TInt aStatus );
-
-private: // From MUpnpAVControlPointObserver
-
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void RcSetVolumeResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/, 
-        const TDesC8& /*aInstance*/, 
-        const TDesC8& /*aChannel*/, 
-        const TDesC8& /*aDesiredVolume*/ ) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void RcVolumeResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/, 
-        const TDesC8& /*aInstance*/, 
-        const TDesC8& /*aChannel*/, 
-        const TDesC8& /*aCurrentVolume*/) {}
-         
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void RcSetMuteResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/, 
-        const TDesC8& /*aInstance*/, 
-        const TDesC8& /*aChannel*/, 
-        const TDesC8& /*aDesiredMute*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void RcMuteResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/, 
-        const TDesC8& /*aInstance*/, 
-        const TDesC8& /*aChannel*/, 
-        const TDesC8& /*aCurrentMute*/) {} 
-
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtSetTransportUriResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aCurrentUri*/,
-        const TDesC8& /*aCurrentUriMetaData*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    virtual void AvtSetNextTransportUriResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aNextUri*/,
-        const TDesC8& /*aNextUriMetaData*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtMediaInfoResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aNrTracks*/,
-        const TDesC8& /*aMediaDuration*/,
-        const TDesC8& /*aCurrentUri*/,
-        const TDesC8& /*aCurrentUriMetaData*/,
-        const TDesC8& /*aNextUri*/,
-        const TDesC8& /*aNextUriMetaData*/,
-        const TDesC8& /*aPlayMedium*/,
-        const TDesC8& /*aRecordMedium*/,
-        const TDesC8& /*aWriteStatus*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtGetTransportInfoResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aCurrenTransportState*/,
-        const TDesC8& /*aCurrentTransportStatus*/,
-        const TDesC8& /*aCurrentSpeed*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtPositionInfoResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aTrack*/,
-        const TDesC8& /*aTrackDuration*/,
-        const TDesC8& /*aTrackMetaData*/,
-        const TDesC8& /*aTrackURI*/,
-        const TDesC8& /*aRelTime*/,
-        const TDesC8& /*aAbsTime*/,
-        const TDesC8& /*aRelCount*/,
-        const TDesC8& /*aAbsCount*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtDeviceCapabilitiesResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aPlayMedia*/,
-        const TDesC8& /*aRecMedia*/,
-        const TDesC8& /*aRecQualityMode*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtTransportSettingsResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aPlayMode*/,
-        const TDesC8& /*aRecQualityMode*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtStopResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtPlayResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aSpeed*/) {}
-    
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtPauseResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtRecordResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtSeekResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aUnit*/,
-        const TDesC8& /*aTarget*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtNextResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtPreviousResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/) {}
-    
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtSetPlayModeResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aNewPlayMode*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtSetRecordModeResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aInstanceId*/,
-        const TDesC8& /*aNewRecordQuality*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsSearchCapabilitiesResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aSearchCaps*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsSortCapabilitiesResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aSortCaps*/) {}
-
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsSystemUpdateIdResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        TInt /*aSystemUpdateId*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsBrowseResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aObjectID*/,
-        const TDesC8& /*aBrowseFlag*/,
-        const TDesC8& /*aFilter*/,
-        TInt /*aIndex*/,
-        TInt /*aRequest*/,
-        const TDesC8& /*aSortCriteria*/,
-        const TDesC8& /*aResult*/,
-        TInt /*aReturned*/,
-        TInt /*aMatches*/,
-        const TDesC8& /*aUpdateID*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsSearchResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aContainerId*/,
-        const TDesC8& /*aSearchCriteria*/,
-        const TDesC8& /*aFilter*/,
-        TInt /*aIndex*/,
-        TInt /*aRequest*/,
-        const TDesC8& /*aSortCriteria*/,
-        const TDesC8& /*aResult*/,
-        TInt /*aReturned*/,
-        TInt /*aMatches*/,
-        const TDesC8& /*aUpdateID*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsDestroyObjectResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aObjectId*/ ) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsUpdateObjectResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aObjectId*/,
-        const TDesC8& /*aCurrentTagValue*/,
-        const TDesC8& /*aNewTagValue*/ ) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsImportResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aSourceURI*/,
-        const TDesC8& /*aDestinationURI*/,
-        const TDesC8& /*aTransferId*/ ) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsExportResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aSourceURI*/,
-        const TDesC8& /*aDestinationURI*/,
-        const TDesC8& /*aTransferId*/ ) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsStopTransferResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aTransferId*/ ) {}
-    
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    virtual void CdsCTransferProgressResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aTransferId*/,
-        const TDesC8& /*aTransferStatus*/,
-        const TDesC8& /*aTransferLength*/,            
-        const TDesC8& /*aTransferTotal*/ ) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsDeleteResourceResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aResourceUri*/ ) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsCreateReferenceResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aContainerId*/, 
-        const TDesC8& /*aObjectId*/, 
-        const TDesC8& /*aNewId*/ ) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsCreateObjectResponse(
-        const TDesC8& aUuid,
-        TInt aSessionId,
-        TInt aErr,
-        const TDesC8& aContainerID, 
-        const TDesC8& aElements, 
-        const TDesC8& aObjectID, 
-        const TDesC8& aResult );
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CmProtocolInfoResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aSource*/, 
-        const TDesC8& /*aSink*/ ) {}
-    
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CmPrepareResponse(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aRemoteProtocolInfo*/,
-        const TDesC8& /*aPeerConnectionManager*/,
-        const TDesC8& /*aPeerConnectionId*/,
-        const TDesC8& /*aDirection*/,
-        TInt /*aConnection*/,
-        TInt /*aTransport*/,
-        TInt /*aRsc*/ ) {}
-    
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CmComplete(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        TInt /*aConnection*/ ) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CmCurrentConnections(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        const TDesC8& /*aConnections*/) {}
-        
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CmCurrentInfo(
-        const TDesC8& /*aUuid*/,
-        TInt /*aSessionId*/,
-        TInt /*aErr*/,
-        TInt /*rscId*/, 
-        TInt /*transportId*/, 
-        const TDesC8& /*aProtocolInfo*/,
-        const TDesC8& /*aPeerConnectionManager*/, 
-        TInt /*peerId*/, 
-        const TDesC8& /*aDirection*/, 
-        const TDesC8& /*aStatus*/ ) {}
-
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsUpdateEvent(
-            const TDesC8& /*aUuid*/,
-            TInt /*aSystemUpdateId*/
-            ) {}
-            
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsContainerEvent(
-            const TDesC8& /*aUuid*/,
-            const TDesC8& /*aConteinerIds*/
-            ) {}
-            
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CdsTransferEvent(
-            const TDesC8& /*aUuid*/,
-            const TDesC8& /*aTransferIds*/
-            ) {}
-            
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void RcLastChangeEvent(
-            const TDesC8& /*aUuid*/,
-            const TDesC8& /*aLastChange*/
-            ) {}
-            
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void AvtLastChangeEvent(
-            const TDesC8& /*aUuid*/,
-            const TDesC8& /*aLastChange*/
-            ) {}
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CmSourceEvent(
-            const TDesC8& /*aUuid*/,
-            const TDesC8& /*aSource*/
-            ) {}
-            
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CmSinkEvent(
-            const TDesC8& /*aUuid*/,
-            const TDesC8& /*aSink*/
-            ) {}
-            
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void CmConnectionsEvent(
-            const TDesC8& /*aUuid*/,
-            const TDesC8& /*aConnections*/
-            ) {}
-
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void HttpResponseL( CUpnpHttpMessage* /*aMessage*/ ) {}
-
-public:
-
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void DeviceDiscoveredL( CUpnpDevice* /*aDevice*/ ) {} 
-
-    /**
-     * See upnpavcontrolpointobserver.h
-     */
-    void DeviceDisappearedL( CUpnpDevice* /*aDevice*/ ) {}
-     
-public: // New functions
-
-    /**
-     * Starts upload
-     *
-     * @param aMessage message
-     */
-    void StartUploadL( const RMessage2& aMessage );
-    
-    /**
-     * Cancels upload
-     *
-     * @param aMessage message
-     */
-    void CancelUploadL( const RMessage2& aMessage );
-
-    /**
-     * Cancels uploads
-     *
-     * @param aMessage message
-     */
-    void CancelAllUploadsL( const RMessage2& aMessage );
-    
-    /**
-     * Start tracking progress
-     *
-     * @param aMessage message
-     */
-    void StartTrackingUploadProgressL( const RMessage2& aMessage );
-
-    /**
-     * Stop tracking progress
-     *
-     * @param aMessage message
-     */
-    void StopTrackingUploadProgressL( const RMessage2& aMessage );
-
-    /**
-     * Saves a message to receive events
-     *
-     * @param aMessage message
-     */
-    void GetUploadEventL( const RMessage2& aMessage );
-    
-    /**
-     * Cancels events
-     *
-     * @param aMessage message
-     */
-    void CancelGetUploadEventL( const RMessage2& aMessage );
-
-    /**
-     * Handles UPnP device disappears.
-     *
-     * @param aDevice Device that disappeared.
-     */
-    void DeviceDisappearedL( CUpnpAVDeviceExtended& aDevice );
-
-private:
-
-    /**
-     * Set mandatory transfer headers
-     *
-     * @param aInfo protocolInfo
-     * @param aKey transfer id
-     */
-    void SetHeadersL( const TDesC8& aInfo, TAny* aKey );
-    
-    /**
-     * Prepares for upload
-     *
-     * @param aEvent transfer event
-     */
-    void ReadyForTransferL( TUpnpFileTransferEvent& aEvent );
-  
-    /**
-     * Parsers CreateObject-response
-     *
-     * @param aResponse CreateObject-response
-     * @return importUri
-     */
-    HBufC8* ParseCreateObjectResponseL( const TDesC8& aResponse );
-    
-    
-    /**
-     * Handles CreateObject-response
-     *
-     * @param aResponse aObjectID object id
-     * @param aResult CreateObject-response
-     */
-    void HandleObjectResponseL( const TDesC8& aObjectID,
-        const TDesC8& aResult );
-        
-    /**
-     * Finds and return importUri from an item
-     *
-     * @param aObject UPnP item
-     * @return importUri
-     */
-    HBufC8* ImportURIFromItemL( const CUpnpObject& aObject );
-    
-    /**
-     * Converts DLNA compliant protocolInfo to UPnP protocolInfo
-     *
-     * @param aInfo DLNA protolInfo
-     */
-    void ProtocolInfoToUPnPL( const CUpnpAttribute* aInfo );    
-    
-    /**
-     * Issues active scheduler's wait stop request(with/without callback)
-     *
-     * @param none
-     * @return none
-     */
-    void StopWait();
-
-    /**
-     * Callback for active scheduler's wait stop request
-     *
-     */
-    static TInt SchedulerStoppedCallBack( TAny* aPtr );
-    
-    /**
-     * Does necessary action on active scheduler's wait stop complete
-     *
-     * @param none
-     * @return none
-     */
-    void DoSchedulerStoppedCallBack();
-    
-private:
-
-    /**
-     * Http Uploader, used to upload files
-     *
-     * Owned
-     */
-    CHttpUploader*                          iUploader;
-    
-    /**
-     * Used to synchronize CreateObject-action 
-     */
-    CActiveSchedulerWait                    iWait;
-            
-    /**
-     * Resource helper array
-     *
-     * Owned
-     */
-    RPointerArray<CUPnPResourceHelper>      iResources;
-        
-    /**
-     * Resource index
-     */
-    TInt                                    iResourceIndex;
-    
-    /**
-     * Stores error (status) code from CreateObject-action
-     */
-    TInt                                    iAsyncError;
-    
-    /**
-     * Session id for CreateObject-action
-     */
-    TInt                                    iIPSessionId;
-    
-    /**
-     * Scheduler stop request
-     */
-    TBool                                   iSchedulerStopped;
-    };
-
-#endif // C_UPNPUPLOADSESSION_H
-
-// End of file
-
+/*
+* Copyright (c) 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:      implementation for session towards a media server
+*
+*/
+
+
+
+
+
+
+#ifndef C_UPNPUPLOADSESSION_H
+#define C_UPNPUPLOADSESSION_H
+
+// EXTERNAL INCLUDES
+#include <e32base.h>
+
+// INTERNAL INCLUDES
+#include "httptransferobserver.h"
+#include "upnpfiletransfersessionbase.h"
+#include "tupnpfiletransferevent.h"
+#include "upnpavcontrolpointobserver.h"
+
+// FORWARD DECLARATIONS
+class CHttpUploader;
+class CUPnPResourceHelper;
+class CUpnpObject;
+class CUpnpAttribute;
+class CUpnpDevice;
+
+// CLASS DECLARATION
+/**
+ * Implements AV Controller server side upload session
+ *
+ * @since S60 v3.2
+ */
+class CUPnPUploadSession : public CUPnPFileTransferSessionBase,
+                           private MHttpTransferObserver,
+                           private MUpnpAVControlPointObserver
+    {
+        
+public:
+
+    /**
+     * Static 1st phase constructor
+     *
+     * @param aServer AV Controller server handle
+     * @param aSessionId session id
+     * @param aUuid device Uuid
+     */
+    static CUPnPUploadSession* NewL( CUpnpAVControllerServer& aServer,
+        TInt aSessionId, const TDesC8& aUuid );
+    
+    /**
+     * Destructor
+     */
+    virtual ~CUPnPUploadSession();
+    
+private:
+
+    /**
+     * Private constructor
+     *
+     * @param aServer AV Controller server handle
+     * @param aSessionId session id
+     */
+    CUPnPUploadSession( CUpnpAVControllerServer& aServer,
+        TInt aSessionId );
+    
+    /**
+     * 2ns phase constructor
+     *
+     * @param aUuid device uuid
+     */
+    void ConstructL( const TDesC8& aUuid );
+
+private: // From MHttpTransferObserver
+    
+    /**
+     * See httptransferobserver.h
+     */
+    void TransferProgress( TAny* aKey, TInt aBytes, TInt aTotalBytes );
+
+    /**
+     * See httptransferobserver.h
+     */
+    void ReadyForTransferL( TAny* aKey );
+
+    /**
+     * See httptransferobserver.h
+     */
+    void TransferCompleted( TAny* aKey, TInt aStatus );
+
+private: // From MUpnpAVControlPointObserver
+
+    /**
+    * @see MUpnpAVControlPointObserver::ActionResponseL
+    */
+    void ActionResponseL( CUpnpAction* aAction );
+    
+    /**
+    * @see MUpnpAVControlPointObserver::StateUpdatedL
+    */
+    void StateUpdatedL( CUpnpService* aService );
+
+    /**
+    * @see MUpnpAVControlPointObserver::HttpResponseL
+    */
+    void HttpResponseL( CUpnpHttpMessage* aMessage );
+    
+    /**
+    * @see MUpnpAVControlPointObserver::DeviceDiscoveredL
+    */
+    void DeviceDiscoveredL( CUpnpDevice* aDevice );
+    
+    /**
+    * @see MUpnpAVControlPointObserver::DeviceDisappearedL
+    */
+    void DeviceDisappearedL( CUpnpDevice* aDevice );
+
+private: // network event handling
+
+    /**
+     * Handles response for ContentDirectory CreateObject command
+     */
+    void CdsCreateObjectResponse(
+        TInt aErr,
+        const TDesC8& aObjectID, 
+        const TDesC8& aResult );
+
+public: // New functions
+
+    /**
+     * Starts upload
+     *
+     * @param aMessage message
+     */
+    void StartUploadL( const RMessage2& aMessage );
+
+    /**
+     * Cancels upload
+     *
+     * @param aMessage message
+     */
+    void CancelUploadL( const RMessage2& aMessage );
+
+    /**
+     * Cancels uploads
+     *
+     * @param aMessage message
+     */
+    void CancelAllUploadsL( const RMessage2& aMessage );
+    
+    /**
+     * Start tracking progress
+     *
+     * @param aMessage message
+     */
+    void StartTrackingUploadProgressL( const RMessage2& aMessage );
+
+    /**
+     * Stop tracking progress
+     *
+     * @param aMessage message
+     */
+    void StopTrackingUploadProgressL( const RMessage2& aMessage );
+
+    /**
+     * Saves a message to receive events
+     *
+     * @param aMessage message
+     */
+    void GetUploadEventL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels events
+     *
+     * @param aMessage message
+     */
+    void CancelGetUploadEventL( const RMessage2& aMessage );
+
+    /**
+     * Handles UPnP device disappears.
+     *
+     * @param aDevice Device that disappeared.
+     */
+    void DeviceDisappearedL( CUpnpAVDeviceExtended& aDevice );
+
+private:
+
+    /**
+     * Set mandatory transfer headers
+     *
+     * @param aInfo protocolInfo
+     * @param aKey transfer id
+     */
+    void SetHeadersL( const TDesC8& aInfo, TAny* aKey );
+    
+    /**
+     * Prepares for upload
+     *
+     * @param aEvent transfer event
+     */
+    void ReadyForTransferL( TUpnpFileTransferEvent& aEvent );
+  
+    /**
+     * Parsers CreateObject-response
+     *
+     * @param aResponse CreateObject-response
+     * @return importUri
+     */
+    HBufC8* ParseCreateObjectResponseL( const TDesC8& aResponse );
+    
+    
+    /**
+     * Handles CreateObject-response
+     *
+     * @param aResponse aObjectID object id
+     * @param aResult CreateObject-response
+     */
+    void HandleObjectResponseL( const TDesC8& aObjectID,
+        const TDesC8& aResult );
+        
+    /**
+     * Finds and return importUri from an item
+     *
+     * @param aObject UPnP item
+     * @return importUri
+     */
+    HBufC8* ImportURIFromItemL( const CUpnpObject& aObject );
+    
+    /**
+     * Converts DLNA compliant protocolInfo to UPnP protocolInfo
+     *
+     * @param aInfo DLNA protolInfo
+     */
+    void ProtocolInfoToUPnPL( const CUpnpAttribute* aInfo );    
+    
+    /**
+     * Issues active scheduler's wait stop request(with/without callback)
+     *
+     * @param none
+     * @return none
+     */
+    void StopWait();
+
+    /**
+     * Callback for active scheduler's wait stop request
+     *
+     */
+    static TInt SchedulerStoppedCallBack( TAny* aPtr );
+    
+    /**
+     * Does necessary action on active scheduler's wait stop complete
+     *
+     * @param none
+     * @return none
+     */
+    void DoSchedulerStoppedCallBack();
+
+    /**
+     * Sends CreateObject command to remote CDS
+     * returns the related HTTP session id
+     */
+    int CreateObjectL( const TDesC8& aContainerId, const TDesC8& aElements );
+
+    /**
+     * Sends DestroyObject command to remote CDS
+     * returns the related HTTP session id
+     */
+    int DestroyObjectL( const TDesC8& aObjectId );
+
+private:
+
+    /**
+     * Http Uploader, used to upload files
+     *
+     * Owned
+     */
+    CHttpUploader*                          iUploader;
+    
+    /**
+     * Used to synchronize CreateObject-action 
+     */
+    CActiveSchedulerWait                    iWait;
+            
+    /**
+     * Resource helper array
+     *
+     * Owned
+     */
+    RPointerArray<CUPnPResourceHelper>      iResources;
+    
+    /**
+     * CUpnpDevice used by AvControlPoint.
+     */
+    const CUpnpDevice*                      iCpDevice; // Not own.    
+        
+    /**
+     * Resource index
+     */
+    TInt                                    iResourceIndex;
+    
+    /**
+     * Stores error (status) code from CreateObject-action
+     */
+    TInt                                    iAsyncError;
+    
+    /**
+     * Session id for CreateObject-action
+     */
+    TInt                                    iIPSessionId;
+    
+    /**
+     * Scheduler stop request
+     */
+    TBool                                   iSchedulerStopped;
+    };
+
+#endif // C_UPNPUPLOADSESSION_H
+
+// End of file
+