diff -r 000000000000 -r 1bce908db942 natplugins/natpdevmgmtnatfwadapter/inc/nsmldmnatfwtraversaladapter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/natplugins/natpdevmgmtnatfwadapter/inc/nsmldmnatfwtraversaladapter.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,636 @@ +/* +* Copyright (c) 2005-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: Device Management NAT-FW Traversal adapter +* +*/ + + +#ifndef __NSMLDMNATFWTRAVERSALADAPTER_H__ +#define __NSMLDMNATFWTRAVERSALADAPTER_H__ + +// INCLUDES +#include + +// CLASS DECLARATION +class CNATFWDomainEntry; +class CNATFWIAPEntry; +class CRepository; + +/** + * TDMNATFWStatusInfo + * For buffering DM commands for NAT-FW + * @since Series 60_3.1 + */ +class TDMNATFWStatusInfo + { + +public: + + enum TCommandType + { + EDMAddDomain, + EDMUpdateDomain, + EDMDeleteDomain, + EDMAddIAP, + EDMUpdateIAP, + EDMDeleteIAP, + EDMAddSTUN, + EDMUpdateSTUN, + EDMDeleteSTUN, + EDMAddTURN, + EDMUpdateTURN, + EDMDeleteTURN + }; + +public: // data members + + // Key id for this command + TUint32 iKeyId; + + // Status reference for this command + TInt iStatusRef; + + // command type + TCommandType iCommandType; + + // Settings location for interior nodes. + TInt iLocation; + }; + +/** + * CNSmlDmNATFWTraversalAdapter + * Main implementation of NAT-FW Traversal Adapter + * @since Series 60_3.1 + */ +class CNSmlDmNATFWTraversalAdapter : public CSmlDmAdapter + { +public: // enumerations + + enum TNatProtocol + { + EProtocolNone = 0, + EStunProtocol, + ETurnProtocol, + EIceProtocol + }; + +public: + + static CNSmlDmNATFWTraversalAdapter* NewL( MSmlDmCallback* aDmCallback ); + static CNSmlDmNATFWTraversalAdapter* NewLC( MSmlDmCallback* aDmCallback ); + virtual ~CNSmlDmNATFWTraversalAdapter(); + +private: + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aDDFVersion for returning DDF version of adapter + */ + void DDFVersionL( CBufBase& aDDFVersion ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aDDF for returning DDF structure of adapter + */ + void DDFStructureL( MSmlDmDDFObject& aDDF ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aURI URI of the object + * @param aLUID LUID of the object + * @param aObject Data of the object. + * @param aType MIME type of the object + * @param aStatusRef Reference to correct command + */ + void UpdateLeafObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aObject, + const TDesC8& aType, + const TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aURI URI of the object + * @param aLUID LUID of the object + * @param aStream Data of the object. + * @param aType MIME type of the object + * @param aStatusRef Reference to correct command + */ + void UpdateLeafObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + RWriteStream*& aStream, + const TDesC8& aType, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aURI URI of the object + * @param aLUID LUID of the object + * @param aStatusRef Reference to correct command + */ + void DeleteObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aURI URI of the object + * @param aLUID LUID of the object + * @param aType MIME type of the object + * @param aResultsRef Reference to correct results + * @param aStatusRef Reference to correct command + */ + void FetchLeafObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aType, + const TInt aResultsRef, + const TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aURI URI of the object + * @param aLUID LUID of the object + * @param aType MIME type of the object + * @param aResultsRef Reference to correct results + * @param aStatusRef Reference to correct command + */ + void FetchLeafObjectSizeL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aType, + TInt aResultsRef, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aURI URI from dm-module + * @param aLUID LUID of the parent object + * @param aPreviousURISegmentList from dm-module + * @param aResultsRef results reference from dm-module + * @param aStatusRef Reference to correct command + */ + void ChildURIListL( + const TDesC8& aURI, + const TDesC8& aLUID, + const CArrayFix& aPreviousURISegmentList, + const TInt aResultsRef, + const TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aURI URI of the object + * @param aParentLUID LUID of the parent object + * @param aStatusRef Reference to correct command + */ + void AddNodeObjectL( + const TDesC8& aURI, + const TDesC8& aParentLUID, + const TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aURI URI from dm-module + * @param aLUID LUID of the object + * @param aArgument Argument for the command + * @param aType MIME type of the object + * @param aStatusRef Reference to correct command + */ + void ExecuteCommandL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aArgument, + const TDesC8& aType, + const TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aURI URI from dm-module + * @param aLUID LUID of the object + * @param aStream Argument for the command + * @param aType MIME type of the object + * @param aStatusRef Reference to correct command + */ + void ExecuteCommandL( + const TDesC8& aURI, + const TDesC8& aLUID, + RWriteStream*& aStream, + const TDesC8& aType, + const TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aTargetURI Target URI for the command + * @param aTargetLUID LUID of the target object + * @param aSourceURI Source URI for the command + * @param aSourceLUID LUID of the source object + * @param aType MIME type of the objects + * @param aStatusRef Reference to correct command + */ + void CopyCommandL( + const TDesC8& aTargetURI, + const TDesC8& aTargetLUID, + const TDesC8& aSourceURI, + const TDesC8& aSourceLUID, + const TDesC8& aType, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * + */ + void StartAtomicL(); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * + */ + void CommitAtomicL(); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * + */ + void RollbackAtomicL(); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * @param aItemSize size limit for stream usage + * @return TBool ETrue for streaming support + */ + TBool StreamingSupport( TInt& aItemSize ); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * + */ + void StreamCommittedL(); + + /** + * From MSmlDmAdapter + * @since Series 60_3.1 + * + */ + void CompleteOutstandingCmdsL(); + +private: + + CNSmlDmNATFWTraversalAdapter( TAny* aEcomArguments ); + + /** + * Fetches leaf object values + * @since Series 60_3.1 + * @param aURI, URI of the object + * @param aLUID, LUID of the object + * @param aObject, data of the object. + * @return TError Status code of operation + */ + CSmlDmAdapter::TError FetchObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + CBufBase& aObject ); + + /** + * Fetches Domain specific leaf object values + * @since Series 60_3.1 + * @param aURI, URI of the object + * @param aLUID, LUID of the object + * @param aObject, data of the object. + * @return TError Status code of operation + */ + CSmlDmAdapter::TError FetchDomainObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + TDes8& aSegmentResult ); + + /** + * Fetches IAP specific leaf object values + * @since Series 60_3.1 + * @param aURI, URI of the object + * @param aLUID, LUID of the object + * @param aObject, data of the object. + * @return TError Status code of operation + */ + CSmlDmAdapter::TError FetchIAPObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + TDes8& aSegmentResult, + CBufBase& aObject ); + + /** + * Fetches AdditionalSTUNServer// leaf object values + * @since Series 60_3.2 + * @param aURI, URI of the object + * @param aLUID, LUID of the object + * @param aObject, data of the object. + * @return TError Status code of operation + */ + CSmlDmAdapter::TError FetchAdditionalSTUNServerObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + TDes8& aSegmentResult ); + + /** + * Fetches STUNSpecific/STUNServer// leaf object values + * @since Series 60_3.2 + * @param aURI, URI of the object + * @param aLUID, LUID of the object + * @param aObject, data of the object. + * @return TError Status code of operation + */ + CSmlDmAdapter::TError FetchTURNServerObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + TDes8& aSegmentResult ); + + /** + * Updates DomainSpecific node + * @since Series 60_3.2 + */ + CSmlDmAdapter::TError UpdateDomainSpecificObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aObject, + const TInt aStatusRef ); + + /** + * Updates IAPSpecific node + * @since Series 60_3.2 + */ + CSmlDmAdapter::TError UpdateIAPSpecificObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aObject, + const TInt aStatusRef ); + + /** + * Updates DomainSpecific//AdditionalSTUNServer node + * @since Series 60_3.2 + */ + CSmlDmAdapter::TError UpdateAdditionalSTUNServerObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aObject, + const TInt aStatusRef ); + + /** + * Updates DomainSpecific//TURNSpecific/TURNServer node + * @since Series 60_3.2 + */ + CSmlDmAdapter::TError UpdateTURNServerObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aObject, + const TInt aStatusRef ); + + /** + * Lists the Domain specific children of the node + * @since Series 60_3.2 + */ + CSmlDmAdapter::TError DomainChildURIListL( + const TDesC8& aURI, + const TDesC8& aLUID, + CBufBase* const aURISegmentList, + const CArrayFix& aPreviousURISegmentList ); + + /** + * Lists the IAP specific children of the node + * @since Series 60_3.2 + */ + CSmlDmAdapter::TError IAPChildURIListL( + const TDesC8& aURI, + const TDesC8& aLUID, + CBufBase* const aURISegmentList, + const CArrayFix& aPreviousURISegmentList ); + + /** + * Loads NAT-FW profile information + * @since Series 60_3.1 + */ + void LoadProfilesL(); + + /** + * Saves NAT-FW profile information + * @since Series 60_3.1 + */ + void SaveProfilesL(); + + /** + * Adds NAT-FW settings + * @param aRep Central Repository for NAT-FW Traversal settings. + * @since Series 60_3.2 + */ + void AddSettingsL( CRepository* aRep ); + + /** + * Updates NAT-FW settings + * @param aRep Central Repository for NAT-FW Traversal settings. + * @since Series 60_3.2 + */ + void UpdateSettingsL( CRepository* aRep ); + + /** + * Deletes NAT-FW settings + * @param aRep Central Repository for NAT-FW Traversal settings. + * @since Series 60_3.2 + */ + void DeleteSettingsL( CRepository* aRep ); + + /** + * Gets domain specific settings from CenRep. + * @since Series 60_3.1 + * @param aDomainKeyId CenRep domain key to get. + * @param aEntry, domain entry to store values. + */ + void GetDomainSettingsL( TUint32 aDomainKeyId, + CNATFWDomainEntry& aEntry ); + + /** + * Gets IAP specific settings from CenRep. + * @since Series 60_3.1 + * @param aIAPKey CenRep IAP key to get. + * @param aEntry, IAP entry to store values. + */ + void GetIAPSettingsL( TUint32 aIAPKey, + CNATFWIAPEntry& aEntry ); + + /** + * Finds domain location in buffered entries. + * @since Series 60_3.1 + * @param aLUID, LUID value to look. + * @return TInt, location in entries. + */ + TInt FindDomainLocation( const TDesC8& aLUID ); + + /** + * Finds domain location in buffered entries. + * @since Series 60_3.1 + * @param aDomainKey, CenRep key value to look. + * @return TInt, location in entries. + */ + TInt FindDomainLocation( TUint32 aDomainKey ); + + /** + * Finds IAP location in buffered entries. + * @since Series 60_3.1 + * @param aLUID, LUID value to look. + * @return TInt, location in entries. + */ + TInt FindIAPLocation( const TDesC8& aLUID ); + + /** + * Finds IAP location in buffered entries. + * @since Series 60_3.1 + * @param aLUID, CenRep key value to look. + * @return TInt, location in entries. + */ + TInt FindIAPLocation( TUint32 aIAPKey ); + + /** + * Converts descriptor to TUint. + * @since Series 60_3.1 + * @param aDes descriptor to convert. + * @return TUint, converted value. + */ + TUint DesToTUint( const TDesC8& aDes ); + + /** + * Find accesspoint with AP adapter and sets it to IAP specific entry. + * @since Series 60_3.1 + * @param aObject, PrefConRef value to be set. + * @param aProfileLoc, entry location to set IAP ID. + * @return TInt, IAP Id found. + */ + TInt SetConRefL( const TDesC8& aObject, TInt aProfileLoc ); + + /** + * Find PrefConRef value (AP/APIdxxx) with AP adapter. + * @since Series 60_3.1 + * @param aObject, PrefConRef value to be set. + * @param aProfileLoc, entry location to get IAP ID. + * @return TInt, IAP Id found. + */ + TBool GetConRefL( CBufBase& aObject, TInt aProfileLoc ); + + /** + * Converts descriptor to int. + * @since Series 60_3.0 + * @param aDes descriptor to convert. + * @return TInt. Converted value. + */ + TInt DesToInt( const TDesC8& aDes ); + + /** + * Removes last uri segment from aURI + * @since Series 60_3.0 + * @param aDes Descriptor to handle + * @return pointer to uri + */ + TPtrC8 RemoveLastURISeg( const TDesC8& aURI ); + + /** + * Gets number of uri segments. + * @since Series 60_3.0 + * @param aURI Descriptor to handle + * @return TInt. Number of URI segments. + */ + TInt NumOfURISegs( const TDesC8& aURI ); + + /** + * Gets last uri segment. + * @since Series 60_3.0 + * @param aURI Descriptor to handle + * @return TPtrC8. Pointer to beginning of last uri segment. + */ + TPtrC8 LastURISeg( const TDesC8& aURI ); + + /** + * Removes ./ from uri + * @since Series 60_3.0 + * @param aURI Descriptor to handle + * @return pointer to uri + */ + TPtrC8 RemoveDotSlash( const TDesC8& aURI ); + +private: // Data + + /** + * For returning data to DM module. + * Not own. + */ + MSmlDmCallback* iDmCallback; + + /** + * Profile ID currently being modified. + */ + TInt iProfileID; + + /** + * Array of pointers to all Domain entries. + * Own. + */ + CArrayPtrFlat* iNATFWDomainEntries; + + /** + * Array of pointers to all IAP entries. + * Own. + */ + CArrayPtrFlat* iNATFWIAPEntries; + + /** + * For buffering DM commands. + */ + RArray< TDMNATFWStatusInfo > iNATFWCommandBuffer; + + /** + * For knowing status of dm-module. + */ + TInt iStatus; + + /** + * For returning results to dm-module. + * Not own. + */ + CBufBase *iResults; + +private: // Friend class for testing + + #if defined( TEST_EUNIT ) + friend class UT_CNSmlDmNATFWTraversalAdapter; + #endif + }; + +#endif // __NSMLDMNATFWTRAVERSALADAPTER_H__ + +// End of File