diff -r 2669f8761a99 -r fbd2e7cec7ef xdmprotocols/XcapProtocol/XcapAppUsage/inc/XcapAppUsage.h --- /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 + +#include +#include +#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 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* )¶ms ) ); + } + break; + case EXdmDirectory: + { + TUid KDefaultImplementationUid = { 0x10207419 }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmTestDocType: + { + TUid KDefaultImplementationUid = { 0x1020741A }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmPoCGroup: + { + TUid KDefaultImplementationUid = { 0x1020741B }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmPoCUserAccessPolicy: + { + TUid KDefaultImplementationUid = { 0x1020741C }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmSharedXdm: + { + TUid KDefaultImplementationUid = { 0x1020741D }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmRlsServices: + { + TUid KDefaultImplementationUid = { 0x1020741E }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmResourceLists: + { + TUid KDefaultImplementationUid = { 0x10275080 }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmIetfCommonPolicy: + { + TUid KDefaultImplementationUid = { 0x10275081 }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmOmaCommonPolicy: + { + TUid KDefaultImplementationUid = { 0x10275082 }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmIetfPresenceRules: + { + TUid KDefaultImplementationUid = { 0x10275083 }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; + case EXdmOmaPresenceRules: + { + TUid KDefaultImplementationUid = { 0x102750AB }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; +// PRES-CONTENT STARTS + case EXdmPresContent: + { + TUid KDefaultImplementationUid = { 0x20028701 }; + TRAPD( error, ptr = REComSession::CreateImplementationL( + KDefaultImplementationUid, + _FOFF( CXcapAppUsage, iDestructorKey ), + ( TAny* )¶ms ) ); + } + break; +// PRES-CONTENT ENDS + default: + User::Leave( KErrNotSupported ); + } + return reinterpret_cast( ptr ); + } + + +#endif //__XCAPAPPUSAGE__ + + +// End of File +