natplugins/natpdevmgmtnatfwadapter/inc/nsmldmnatfwtraversaladapter.h
changeset 0 1bce908db942
--- /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