xdmprotocols/XcapProtocol/XcapAppUsage/inc/XcapAppUsage.h
branchRCL_3
changeset 35 fbd2e7cec7ef
parent 0 c8caa15ef882
child 12 e6a66db4e9d0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xdmprotocols/XcapProtocol/XcapAppUsage/inc/XcapAppUsage.h	Wed Sep 01 12:23:14 2010 +0100
@@ -0,0 +1,498 @@
+/*
+* Copyright (c) 2005 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:  CXcapAppUsage
+*
+*/
+
+
+
+
+#ifndef __XCAPAPPUSAGE__
+#define __XCAPAPPUSAGE__
+
+// INCLUDES
+#include <ecom.h>
+
+#include <XdmEngine.h>
+#include <XdmProtocolUidList.h>
+#include "XcapAppUsageDef.h"
+
+// CONSTANTS
+#ifdef _DEBUG
+_LIT( KXdmAppUsageLogDir,                          "Xdm" );
+_LIT( KXdmAppUsageLogFile,                         "XcapAppUsage.txt" );
+const TInt KAppUsageLogBufferMaxSize                = 2000;
+#endif
+
+_LIT( KXdmDefaultNsAttrName, "xmlns");
+_LIT( KXdmNonDefaultNsAttrName, "xmlns:");
+const TInt KXdmMaxPrefixLength = 10;
+
+// FORWARD DECLARATIONS
+class CXdmDocument;
+class MXcapUriInterface;
+
+// NOTE
+// If _NAMESPACES_TO_NODE_SELECTOR flag is defined, used namespaces will be added to the node selector
+// when updating partial documents.
+// The default namespace of the usage will not be added.
+#define _NAMESPACES_TO_NODE_SELECTOR
+
+// If _ADD_NAMESPACE_ATTRIBUTES flag is defined, namespace information is
+// added as an node atttribute when updating partial documents.
+// The default namespace of the usage will not be added.
+#define _ADD_NAMESPACE_ATTRIBUTES
+
+/**
+* A helper class for  parameter passing from
+* the XCAP protocol to the application usage
+*
+* NOTE: There will most probably be more than one parameter!
+*
+*/
+class TXcapAppUsageParams
+    {
+    public:
+        
+        /**
+        * @param CXdmEngine& XDM Engine
+        * @return TXcapAppUsageParams
+        */
+        TXcapAppUsageParams( const CXdmEngine& aXdmEngine ) :
+                             iXdmEngine( aXdmEngine ){}
+    
+    public:
+    
+        const CXdmEngine&    iXdmEngine;
+    };
+
+// CLASS DECLARATION
+/**
+* Application usage base class
+*/
+class CXcapAppUsage : public CBase
+    {
+    public:
+
+        /**
+        * Symbian OS constructor
+        * @param aXdmEngine XdmEngine reference
+        * @param aDocumentType Type of the document
+        * @return CXcapAppUsage*
+        * REMOVE THIS WHEN USAGE IN ENGINE CHANGED!!!
+        */
+        static CXcapAppUsage* NewL( const CXdmEngine& aXdmEngine,
+                                    const TXdmDocType aDocumentType );
+                                    
+        /**
+        * Symbian OS constructor
+        * @param aXdmEngine XdmEngine reference
+        * @param aDocumentType Type of the document
+        * @return CXcapAppUsage*
+        */
+        IMPORT_C CXcapAppUsage* NewL( const CXdmEngine& aXdmEngine,
+                                    const TInt aDocumentType );
+        
+        /**
+        * Destructor
+        */
+        virtual ~CXcapAppUsage();
+    
+        /**
+        * Validate the document in the parameter.
+        * Calls ValidateNodeL( aXdmNode ) method from derived class
+        * for each node in document and ValidateAttributeL( aXdmNodeAttr )
+        * for each attribute in document. If the document is outgoing, 
+        * calls also AddNamespaceInformationL method from derived class.
+        * @param aXdmDocument document reference
+        * @param aAddNamespaces if true, the namespaces will be added
+        * @return KErrNone or error code.
+        */
+        IMPORT_C TInt Validate( CXdmDocument& aXdmDocument, TBool aAddNamespaces ) ;
+                                 
+        /**
+        * Validate the node in the parameter.
+        * Calls ValidateNodeL( aXdmNode ) method from derived class for 
+        * current node and it's descendants and ValidateAttributeL( aXdmNodeAttr )
+        * for each attribute. Stores the uri of the node.
+        * @param aXdmNode node reference
+        * @param TBool aIsGetOrDelete indication of http get or delete
+        * @return KErrNone or error code.
+        */
+        IMPORT_C TInt Validate( CXdmDocumentNode& aXdmNode, 
+                                MXcapUriInterface* aUriInterface,
+                                TBool aIsGetOrDelete ) ;
+                                                     
+    
+    
+    public:  // Application Usage API
+        
+        /**
+        * AUID for this usage
+        * @return AUID
+        */
+        virtual TPtrC8 AUID() const = 0;
+           
+        /**
+        * MIME type for this usage
+        * @return MIME type
+        */
+        virtual TPtrC8 ContentType() const = 0;
+        
+        /**
+        * Default namespace for this usage
+        * @return Default namespace definition
+        */
+        virtual TPtrC8 DefaultNamespace() const = 0;
+        
+        /**
+        * Validate the node in the parameter
+        * This method is called by base class for each node
+        * in document, here we have to check element datatype,
+        * restrictions for values and also do all checking that concerns  
+        * the structure of the element. If the datatype is some of
+        * the common datatypes defined in xcapappusage.h, the node
+        * can pe passed to the base class for value validation.
+        * @param CXdmDocumentNode& node reference
+        * @return True, if the node belongs to the current namespace
+        */
+        virtual TBool ValidateNodeL( CXdmDocumentNode& aXdmNode ) = 0;
+        
+        /**
+        * Validate the attribute in the parameter
+        * This method is called by base class for each attribute
+        * in document, here we have to define data types
+        * for attributes, and pass them to the base class
+        * for the actual data checking.
+        * @param aXdmNodeAttr attribute reference
+        */
+        virtual void ValidateAttributeL( const CXdmNodeAttribute& aXdmNodeAttr ) = 0;
+          
+        /**
+        * Add namespaces and namespace prefixes used in document
+        * @param aXdmDocument document reference
+        */
+        virtual void AddNamespaceInformationL( CXdmDocument& aXdmDocument ) = 0;
+                              
+                              
+    protected:
+        
+        /**
+        * C++ constructor
+        */
+        CXcapAppUsage( const CXdmEngine& aXdmEngine );
+    
+        /**
+        * Validates basic data types
+        * @param aDataType type of the data
+        * @param aXdmNode node reference
+        */
+        void ValidateDataL ( TDataType aDataType, CXdmDocumentNode& aXdmNode );
+       
+       /**
+        * Validates basic data types
+        * @param aDataType type of the data
+        * @param aXdmNodeAttr attribute reference
+        */
+        void ValidateDataL ( TDataType aDataType, const CXdmNodeAttribute& aXdmNodeAttr );
+        
+        /**
+        * If outgoing document, adds namespacePrefix 
+        * to the node in parameter
+        * @param aXdmNode node reference
+        * @param aPrefix namespace prefix
+        */
+        void SetPrefixL( CXdmDocumentNode& aXdmNode, const TDesC8& aPrefix );
+        
+        /**
+        * Helper method for string comparison
+        * @param aLeft first string
+        * @param aRight second string
+        * @return ETrue, if the strings are equal
+        */
+        TBool Match( const TDesC& aLeft, const TDesC& aRight );
+        
+        /**
+        * Helper method for string comparison
+        * @param aLeft first string
+        * @param aRight second string
+        * @return ETrue, if the strings are equal
+        */
+        TBool Match( const TDesC8& aLeft, const TDesC8& aRight );
+        
+        /**
+        * To be used when an error occurs, however if the node is
+        * for http get or delete request, this do not leave
+        * @param aErrorCode function will leave with this error code
+        */
+        void LeaveWithErrorL( TInt aErrorCode );
+        
+#ifdef _DEBUG        
+        /**
+        * Writes logs to file.
+        */
+        void WriteToLog( TRefByValue<const TDesC8> aFmt,... );
+#endif
+    
+    private:
+        
+        /**
+        * Validate the document in the parameter.
+        * @param aXdmDocument document reference
+        */
+        void DoValidateL( CXdmDocument& aXdmDocument ) ;
+        
+        /**
+        * Validate the node in the parameter. 
+        * @param aXdmNode node reference
+        */
+        void DoValidateL( CXdmDocumentNode& aXdmNode ) ;
+        
+        /**
+        * Validates basic data types
+        * @param aDataType type of the data
+        * @param aData validated data
+        */
+        void ValidateDataL ( TDataType aDataType, TDesC8& aData );
+        
+        /**
+        * Updates member variables for used namespaces
+        * @param aPrefix prefix of the namespace
+        */        
+        void AddUsedNamespace( const TDesC8& aPrefix ) ;
+
+        /**
+        * Resets member variables for used namespaces
+        */
+        void ResetUsedNamespaces( ); 
+        
+        /**
+        * Appends namespace information to the node's uri interface. 
+        * Called if _NAMESPACES_TO_NODE_SELECTOR defined.
+        * @param aUriInterface interface for storing the uri
+        */
+        void AppendUsedNamespacesL( MXcapUriInterface* aUriInterface ); 
+        
+        /**
+        * Creates namespace attribute for the node. 
+        * Called if _ADD_NAMESPACE_ATTRIBUTES is defined
+        * and validating partial document.
+        * @param aXdmNode node for storing the uri
+        */
+        void CreateNamespaceAttributesL( CXdmDocumentNode& aXdmNode, MXcapUriInterface* aUriInterface );
+           
+        /**
+        * Removes namespace attributes from the node
+        * and it's child nodes
+        * @param aXdmNode 
+        */
+        void RemoveNamespaceAttributesL( CXdmDocumentNode& aXdmNode ); 
+        
+        /**
+        * Adds namespace attributes that are used in 
+        * partial document
+        * @param aXdmNode 
+        */
+        void AppendNamespaceAttributesL( CXdmDocumentNode& aXdmNode ) ;
+        
+        /**
+        * Creates namespace attribute for node
+        * @param aXdmNode 
+        * @param aPrefix prefix of the namespace
+        * @param aNamespace namespace definition
+        */
+        void CreateNamespaceAttributeL( CXdmDocumentNode& aXdmNode, const TDesC8& aPrefix, const TDesC8& aNamespace );
+        
+        
+        /**
+        * Goes through all nodes and checks if 
+        * default namespace is used in document fragment
+        * the namespace given in parameter
+        * @param aXdmNode 
+        * @return ETrue or EFalse
+        */
+        TBool DefaultNamespaceUsed( CXdmDocumentNode& aXdmNode );
+        
+    protected:  // Data
+    
+        CXdmEngine&                 iXdmEngine;
+       
+    private:  // Data
+    
+        TBool                       iAddNamespaces;
+        TBool                       iNsToNodeSelector;
+        TBool                       iAddNsAttributes;
+        TBool                       iIsGetOrDelete;
+        TUid                        iDestructorKey;
+		// Variables for used namespaces
+		// Add new one here if needed
+        TBool iRL;
+        TBool iCR;
+        TBool iCP ;
+        TBool iPR;
+        TBool iLS;
+        TBool iPOC;
+        TBool iOPR;
+        TBool iRLS;
+        TBool iOU;
+    // add new prefix definitions here 
+
+
+    };
+
+
+// ----------------------------------------------------
+// CXcapAppUsage::NewL
+// Create a new application usage implementation
+// REMOVE THIS WHEN USAGE IN ENGINE CHANGED!!!
+// ----------------------------------------------------
+//
+inline CXcapAppUsage* CXcapAppUsage::NewL( const CXdmEngine& aXdmEngine,
+                                           const TXdmDocType aDocumentType )
+    {
+    TAny* ptr = NULL;
+    TXcapAppUsageParams params( aXdmEngine );
+    switch( aDocumentType )
+        {
+        case EXdmCapabilities:
+            {
+            TUid KDefaultImplementationUid = { 0x10207418 };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+        case EXdmDirectory:
+            {
+            TUid KDefaultImplementationUid = { 0x10207419 };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+        case EXdmTestDocType:
+            {
+            TUid KDefaultImplementationUid = { 0x1020741A };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+        case EXdmPoCGroup:
+            {
+            TUid KDefaultImplementationUid = { 0x1020741B };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+        case EXdmPoCUserAccessPolicy:
+            {
+            TUid KDefaultImplementationUid = { 0x1020741C };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+        case EXdmSharedXdm:
+            {
+            TUid KDefaultImplementationUid = { 0x1020741D };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+       case EXdmRlsServices:
+            {
+            TUid KDefaultImplementationUid = { 0x1020741E };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+      case EXdmResourceLists:
+            {
+            TUid KDefaultImplementationUid = { 0x10275080 };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+      case EXdmIetfCommonPolicy:
+            {
+            TUid KDefaultImplementationUid = { 0x10275081 };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+      case EXdmOmaCommonPolicy:
+            {
+            TUid KDefaultImplementationUid = { 0x10275082 };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+      case EXdmIetfPresenceRules:
+            {
+            TUid KDefaultImplementationUid = { 0x10275083 };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+      case EXdmOmaPresenceRules:
+            {
+            TUid KDefaultImplementationUid = { 0x102750AB };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                   KDefaultImplementationUid,
+                   _FOFF( CXcapAppUsage, iDestructorKey ),
+                   ( TAny* )&params ) );
+            }
+            break;
+// PRES-CONTENT STARTS
+      case EXdmPresContent:
+            {
+            TUid KDefaultImplementationUid = { 0x20028701 };
+            TRAPD( error, ptr = REComSession::CreateImplementationL( 
+                KDefaultImplementationUid,
+                _FOFF( CXcapAppUsage, iDestructorKey ),
+               ( TAny* )&params ) );
+            }
+            break;
+// PRES-CONTENT ENDS
+        default:
+            User::Leave( KErrNotSupported );
+        }
+    return reinterpret_cast<CXcapAppUsage*>( ptr );
+    }
+    
+    
+#endif          //__XCAPAPPUSAGE__
+
+
+// End of File
+