diff -r 000000000000 -r 7f85d04be362 upnpavcontroller/upnpavcontrollerhelper/inc/upnplocalitemresolver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpavcontroller/upnpavcontrollerhelper/inc/upnplocalitemresolver.h Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,278 @@ +/* +* 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: Resolver for local items +* +*/ + + + + + + +#ifndef UPNPLOCALITEMRESOLVER_H +#define UPNPLOCALITEMRESOLVER_H + +// INCLUDES +#include +#include "upnpavbrowsingsessionobserver.h" // base class +#include "upnpitemresolver.h" // base class +#include // a member + +// FORWARD DECLARATIONS +class MUPnPAVController; +class MUPnPAVBrowsingSession; +class CUpnpFileSharing; +class CUpnpItem; +class CUpnpSecAccessController; +class CUPnPPeriodic; + +// CLASS DECLARATION + +/** +* Resolves remote upnp items from a plain item id. +* This resolving is done by executing a upnp metadata browse, or +* possibly several ones of those. +* +* @lib upnpavcontrollerhelper.lib +* @since S60 3.2 +*/ +class CUPnPLocalItemResolver + : public CActive + , public MUPnPAVBrowsingSessionObserver + , public MUPnPItemResolver + { +public: // construction/destruction + + /** + * static constructor + * + * @since Series 60 3.2 + * @param aFilePath, local item to be resolved + * @param aAvController, AVController + * @param aSelector, resource selector + * @param aOptimisationFlags flags to optimise the algorithm + * @return LocaltemResolver instance + */ + static CUPnPLocalItemResolver* NewL( + const TDesC& aFilePath, + MUPnPAVController& aAvController, + MUPnPResourceSelector& aSelector, + TInt aOptimisationFlags ); + + /** + * destructor + * @since Series 60 3.2 + */ + virtual ~CUPnPLocalItemResolver(); + +private: + + /** + * default constructor + * + * @since Series 60 3.2 + * @param aAvController, AVController + * @param aSelector, resource selector + */ + CUPnPLocalItemResolver( + MUPnPAVController& aAvController, + MUPnPResourceSelector& aSelector, + TInt aOptimisationFlags ); + + /** + * 2nd phase constructor + * + * @param aFilePath, local item to be resolved + */ + void ConstructL( const TDesC& aFilePath ); + +private: // Business logic methods + + /** + * Allows/denied access to the files to which the given item's res- + * elements are pointing. + * + * @since Series 60 3.2 + * @param aItem the item + * @param aAccessAllowed ETrue to allow and EFalse to deny the access + */ + void SetAccesstoItemResources( CUpnpItem& aItem, TBool aAccessAllowed ); + +public: // the interface + + /** + * see UPnPItemResolver + */ + void ResolveL( + MUPnPItemResolverObserver& aObserver + ); + + /** + * see UPnPItemResolver + */ + const CUpnpItem& Item() const; + + + /** + * see UPnPItemResolver + */ + const CUpnpElement& Resource() const; + +protected: // From CActive + + /** + * See CActive + */ + void RunL(); + + /** + * See CActive + */ + void DoCancel(); + + /** + * See CActive + */ + TInt RunError( TInt aError ); + +protected: // overrides to CUPnPBrowsingSessionObserverProxy + + + /** + * see MUPnPAVSessionObserverBase + */ + void ReserveLocalMSServicesCompleted( TInt aError ); + + +private: // private methods + + /** + * initiate the sharing process + */ + void DoShareL(); + + /** + * initiate the unsharing process + */ + void DoUnshareL(); + + /** + * Completes ongoing async operation + */ + void Complete( TInt aError ); + + /** + * Clean up all resources + */ + void Cleanup(); + + /** + * internal state machinery + */ + enum TInternalState { + EStateIdle, // no data, ready for starting + EStateCreatingItem, // CreateItemFromFileLC called + EStateStartingMS, // starting the local mediaserver + EStateSharing, // sharing the local file + EStateUnsharing, // unsharing the local file + EStateReady, // Ready. Can free. + EStateCancel // command to cancel ongoing process + }; + +private: // Call back methods of MUPnPAVBrowsingSessionObserver + + /* Not used */ + void BrowseResponse( + const TDesC8& /*aBrowseResponse*/, + TInt /*aError*/, + TInt /*aMatches*/, + TInt /*aTotalCount*/, + const TDesC8& /*aUpdateId*/ + ) {} + void SearchResponse( + const TDesC8& /*aSearchResponse*/, + TInt /*aError*/, + TInt /*aMatches*/, + TInt /*aTotalCount*/, + const TDesC8& /*aUpdateId*/ + ) {} + void SearchCapabilitiesResponse( + TInt /*aError*/, + const TDesC8& /*aSearchCapabilities*/ + ) {} + void CreateContainerResponse( TInt /*aError*/, + const TDesC8& /*aObjectId*/ ) {} + void DeleteObjectResponse( TInt /*aError*/ ) {} + + void MediaServerDisappeared( + TUPnPDeviceDisconnectedReason /*aReason*/ ) {} + + +private: // Timer callback + /** + * timer callback + * unsharing is sometimes jammed and timer is used for cancelling + * unshare call + */ + static TInt TimerExpired( TAny* aArg ); + +private: // members + + // local file path (Owned). + HBufC* iFilePath; + + // avcontroller + MUPnPAVController& iAvController; + + // temporary session for starting local mediaserver + MUPnPAVBrowsingSession* iTempSession; + + // resource selector + MUPnPResourceSelector& iSelector; + + // observer for this utility. Note: NOT OWNED + MUPnPItemResolverObserver* iObserver; + + // state of the class + TInternalState iState; + + // the first level browse result item (Owned). + CUpnpItem* iSharedItem; + + // The selected resource within the last level item. + const CUpnpElement* iResource; + + // The mediaserver (required to get the server IP address) + RUpnpMediaServerClient iMediaServer; + + // optimisation flags + TInt iOptimisationFlags; + + // S60 file sharing metadata interface + CUpnpFileSharing* iFileSharing; + + // security access controller + CUpnpSecAccessController* iAccessController; + + // wait until unshare finishes + CActiveSchedulerWait* iWait; + + // timer to cancel unshare + CUPnPPeriodic* iTimer; + }; + + +#endif // UPNPLOCALITEMRESOLVER_H + +// End of File