--- /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 <smldmadapter.h>
+
+// 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<TSmlDmMappingInfo>& 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/<x>/ 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/<x>/ 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/<x>/AdditionalSTUNServer node
+ * @since Series 60_3.2
+ */
+ CSmlDmAdapter::TError UpdateAdditionalSTUNServerObjectL(
+ const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const TDesC8& aObject,
+ const TInt aStatusRef );
+
+ /**
+ * Updates DomainSpecific/<x>/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<TSmlDmMappingInfo>& 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<TSmlDmMappingInfo>& 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<CNATFWDomainEntry>* iNATFWDomainEntries;
+
+ /**
+ * Array of pointers to all IAP entries.
+ * Own.
+ */
+ CArrayPtrFlat<CNATFWIAPEntry>* 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