--- 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
+