realtimenetprots/sipfw/ProfileAgent/Profile/api/sipconcreteprofile.h
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/Profile/api/sipconcreteprofile.h	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,848 @@
+/*
+* Copyright (c) 2007-2009 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:
+* Name        : sipconcreteprofile.h
+* Part of     : SIP / SIP Profile Agent / SIP Concrete Profile
+* Version     : %version: 2.1.3 %
+*
+*/
+
+
+
+#ifndef CSIPCONCRETEPROFILE_H
+#define CSIPCONCRETEPROFILE_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <s32strm.h>
+#include <uri8.h>
+#include <sipprofiletypeinfo.h>
+
+// FORWARD DECLARATIONS
+class CSIPProfileParameter;
+class TExtensionIntParam;
+class TExtensionBoolParam;
+class CExtensionDescrParam;
+class CExtensionDescrArrayParam;
+
+// CLASS DECLARATION
+/**
+* @publishedPartner
+* @released
+*
+* A container for SIP profile data for one SIP profile. 
+* Provides functions for setting and getting profile parameters and
+* serializing the profile data to a write stream and 
+* reading the data from a read stream.
+*
+* @lib sipprofile.lib
+*/
+class CSIPConcreteProfile : public CBase
+    {
+    public: // Enumerations
+
+        /** Profile states */
+        enum TStatus
+            {
+            /** Unregistered */
+            EUnregistered = 1,
+            /** Unregistration in progress*/
+            EUnregistrationInProgress,
+            /** Registration is in progress */
+            ERegistrationInProgress,
+            /** Registered */
+            ERegistered
+            };
+
+    public: // Constructors and destructor 
+
+        /**
+        * Constructs an object of type CSIPConcreteProfile.
+        * @return new instance
+        */
+        IMPORT_C static CSIPConcreteProfile* NewL();
+
+        /**
+        * Constructs an object of type CSIPConcreteProfile 
+        * and adds a pointer to it to the cleanup stack.
+        * @return new instance
+        */
+        IMPORT_C static CSIPConcreteProfile* NewLC();
+
+        /**
+        * Clones profile. All non-dynamic values except profile id are copied.
+        * @return new instance, the ownership is transferred
+        */
+        IMPORT_C CSIPConcreteProfile* CloneL() const;
+
+        /**
+        * Clones profile. All values are copied.
+        * @return new instance, the ownership is transferred
+        */
+		IMPORT_C CSIPConcreteProfile* CloneWithDynamicValuesL() const;
+
+        /**
+        * Destructor.
+        */
+        IMPORT_C ~CSIPConcreteProfile();
+
+    public: // New functions
+
+        /**
+        * Sets the profile id
+        * @param aProfileId profile id
+        */
+        IMPORT_C void SetId(TUint32 aProfileId);
+
+        /**
+        * Gets the profile Id
+        * @return profile Id
+        */
+        IMPORT_C TUint32 Id() const;
+
+        /*
+        * Sets the profile type
+        * @param aProfileType the type of the profile
+        */
+        IMPORT_C void SetProfileType(const TSIPProfileTypeInfo& aProfileType);
+
+        /**
+        * Gets profile type.
+        * @return profile type
+        */
+        IMPORT_C const TSIPProfileTypeInfo& ProfileType() const;
+
+        /**
+        * Sets the provider's name
+        * @param aProviderName provider's name
+        */
+        IMPORT_C void SetProviderNameL(const TDesC8& aProviderName);
+
+        /**
+        * Gets the provider's name
+        * @return provider's name, KNullDesC8 if not defined
+        */
+        IMPORT_C const TDesC8& ProviderName() const;
+
+        /**
+        * Sets the IAP ID for the connection
+        * @param aIapId a IAP ID
+        */
+        IMPORT_C void SetIapId(TUint32 aIapId);
+
+        /**
+        * Gets the IAP ID used by the profile
+        * @return IAP ID
+        */
+        IMPORT_C TUint32 IapId() const;
+
+        /**
+        * Sets the AOR (public user identity) used for the profile
+        * @aAOR AORs to bet set
+        */
+        IMPORT_C void SetAORL(const TDesC8& aAOR);
+
+        /**
+        * Gets the AOR (public user identity) used for the profile
+        * @return the AOR
+        */
+        IMPORT_C const TDesC8& AOR() const;
+
+        /**
+        * Gets the AOR used for the profile parsed as a URI
+        * @return the AOR as a URI
+        */
+        IMPORT_C const TUriC8& AORUri8() const;
+
+        /**
+        * Enables/disables the usage of SigComp
+        * @param aOn ETrue enables SigComp for the profile,
+        *        EFalse disables it
+        */
+        IMPORT_C void EnableSigComp(TBool aOn=ETrue);
+
+        /**
+        * Checks if the profile uses SigComp
+        * @return ETrue if it uses, EFalse if not
+        */
+        IMPORT_C TBool IsSigCompEnabled() const;
+
+        /**
+        * Enables/disables the usage of security negotiation
+        * @param aOn ETrue enables security negotiation for the
+        *        profile, EFalse disables it.
+        */
+        IMPORT_C void EnableSecurityNegotiation(TBool aOn=ETrue);
+
+        /**
+        * Checks if the profile uses SIP security negotiation
+        * @return ETrue if it uses, EFalse if not
+        */
+        IMPORT_C TBool IsSecurityNegotiationEnabled() const;
+
+        /**
+        * Enables/disables auto registration
+        * @param aOn ETrue enables profile auto-registration,
+        *        EFalse disables it.
+        */
+        IMPORT_C void SetAutoRegistrationEnabled(TBool aOn=ETrue);
+
+        /**
+        * Checks if the profile is marked for auto-registration
+        * @return ETrue if marked, EFalse otherwise
+        */
+        IMPORT_C TBool IsAutoRegistrationEnabled() const;
+
+        /**
+        * Sets the server's URI
+        * @param aServer the type of the server
+        * @param aURI a server address as a URI
+        */
+        IMPORT_C void SetServerL(
+            TUint32 aServer,
+            const TDesC8& aURI);
+
+        /**
+        * Gets the server's URI
+        * @param aServer the type of the server
+        * @return server's URI, KNullDesC8 if not defined
+        */
+        IMPORT_C const TDesC8& Server(TUint32 aServer) const;
+
+        /**
+        * Sets a server's parameter
+        * @param aServer the type of the server
+        * @param aServerParam the type of the parameter
+        * @param aValue parameter's value
+        */
+        IMPORT_C void SetServerParameterL(
+            TUint32 aServer,
+            TUint32 aServerParam,
+            const TDesC8& aValue);
+
+        /**
+        * Gets a server's parameter
+        * @param aServer the type of the server
+        * @param aServerParam the type of the parameter
+        * @return parameter's value, KNullDesC8 if not defined
+        */
+        IMPORT_C const TDesC8& ServerParameter(
+            TUint32 aServer,
+            TUint32 aServerParam) const;
+
+        /**
+        * Sets a server's extension parameter
+        * @param aServer the type of the server
+        * @param aName the parameter's name
+        * @param aValue parameter's value
+        */
+        IMPORT_C void SetServerExtensionParameterL(
+            TUint32 aServer,
+            const TDesC8& aName,
+            const TDesC8& aValue);
+
+        /**
+        * Gets a server's extension parameter
+        * @param aServer the type of the server
+        * @param aName the parameter's name
+        * @return parameter's value, KNullDesC8 if not defined
+        */
+        IMPORT_C const TDesC8& ServerExtensionParameter(
+            TUint32 aServer,
+            const TDesC8& aName) const;
+
+        /**
+        * Sets Contact-header parameters for the profile.
+        * Each array element contains one parameter.
+        * @param aParams parameters to set
+        */
+        IMPORT_C void SetContactHeaderParamsL(const MDesC8Array& aParams);
+
+        /**
+        * Gets all the Contact-header params defined for the profile.
+        * Each array element contains one parameter.
+        * @return array of Contact-header parameters
+        */
+        IMPORT_C const MDesC8Array& ContactHeaderParams() const;
+
+        /**
+        * Sets extra SIP headers for the profile.
+        * Each array element contains one header including 
+        * the name and the value, for example "HeaderName: value".
+        * @param aParams parameters to set
+        */
+        IMPORT_C void SetSIPHeadersL(const MDesC8Array& aHeaders);
+        
+        /**
+        * Gets all extra SIP headers defined for the profile.
+        * Each array element contains one header including 
+        * the name and the value, for example "HeaderName: value".
+        * @return array of params
+        */
+        IMPORT_C const MDesC8Array& SIPHeaders() const;
+
+        /**
+        * Sets the user's private identity
+        * @param aPrivateIdentity user's private identity
+        */
+        IMPORT_C void SetPrivateIdentityL(
+            const TDesC8& aPrivateIdentity);
+
+        /**
+        * Gets the user private identity
+        * @return user's private identity, KNullDesC8 if not defined
+        */
+        IMPORT_C const TDesC8& PrivateIdentity() const;
+
+        /**
+        * Sets an extension parameter of type TUint32.
+        * @param aID parameter identifier
+        * @param aValue parameter value
+        */
+        IMPORT_C void SetExtensionParameterL(
+            TUint32 aID,
+            TUint32 aValue);
+
+        /**
+        * Gets an extension parameter of type TUint32.
+        * @param aID parameter identifier
+        * @param aParam OUT: parameter's value, if found.
+        * @return KErrNone If parameter value was retrieved
+        *          KErrNotFound If no such parameter exists
+        */
+        IMPORT_C TInt ExtensionParameter(
+            TUint aID,
+            TUint32& aValue) const;
+
+        /**
+        * Sets an extension parameter of type TBool.
+        * @param aID parameter identifier
+        * @param aValue parameter value
+        */
+        IMPORT_C void SetExtensionParameterL(
+            TUint32 aID,
+            TBool aValue);
+        
+        /**
+        * Gets an extension parameter of type TBool.
+        * @param aID parameter identifier
+        * @param aParam OUT: parameter's value, if found.
+        * @return KErrNone If parameter value was retrieved
+        *          KErrNotFound If no such parameter exists
+        */
+        IMPORT_C TInt ExtensionParameter(
+            TUint aID,
+            TBool& aValue) const;
+
+        /**
+        * Sets an extension parameter that is of descriptor type.
+        * Empty descriptor removes the parameter.
+        * @param aID parameter identifier
+        * @param aValue parameter value
+        */             
+        IMPORT_C void SetExtensionParameterL(
+            TUint32 aID,
+            const TDesC8& aValue);
+        
+        /**
+        * Gets an extension parameter that is of descriptor type.
+        * @param aID parameter identifier
+        * @param aParam OUT: parameter's value, if found.
+        * @return KErrNone If parameter value was retrieved
+        *          KErrNotFound If no such parameter exists
+        */
+        IMPORT_C TInt ExtensionParameter(
+            TUint aID,
+            TDesC8 const *& aValue) const;
+
+        /**
+        * Sets an extension parameters that is of descriptor array type.
+        * @param aID parameter identifier
+        * @param aValue parameter value
+        */             
+        IMPORT_C void SetExtensionParameterL(
+            TUint32 aID,
+            const MDesC8Array& aValue);
+
+        /**
+        * Gets an extension parameter that is of descriptor array type.
+        * @param aID parameter identifier
+        * @param aParam OUT: parameter's value, if found.
+        * @return KErrNone If parameter value was retrieved
+        *          KErrNotFound If no such parameter exists
+        */
+        IMPORT_C TInt ExtensionParameter(
+            TUint aID,
+            MDesC8Array const *& aValue) const;
+
+        /**
+        * Deserializes the profile from the stream
+        * @param aReadStream stream holding serialized profile
+        * @param aAll ETrue, if all values deserialized, 
+        *         EFalse, if only non-dynamic values
+        * @return new instance, the ownership is transferred
+        */
+        IMPORT_C static CSIPConcreteProfile* InternalizeL(
+            RReadStream& aReadStream, 
+            TBool aAll = ETrue);
+
+        /**
+        * Gets the size of the serialized profile
+        * @param aAll ETrue, if all values serialized, 
+        *        EFalse, if only non-dynamic values
+        * @return size needed to serialize profile
+        */
+        IMPORT_C TUint ExternalizedSizeL(TBool aAll = ETrue) const;
+
+        /**
+        * Serializes the profile to the stream
+        * @param aWriteStream stream where profile is to be serialized
+        * @param aAll ETrue, if all values serialized, 
+        *        EFalse, if only non-dynamic values
+        */
+        IMPORT_C void ExternalizeL(
+            RWriteStream& aWriteStream, 
+            TBool aAll = ETrue) const;
+
+        /**
+        * Sets/resets the profile to be the default one.
+        * @param aOn ETrue sets the profile as default,
+        *        EFalse removes the setting
+        */
+        IMPORT_C void SetDefault(TBool aOn=ETrue);
+
+        /**
+        * Checks if the profile is the default one
+        * @return ETrue if the profile is the default one, EFalse if not
+        */
+        IMPORT_C TBool IsDefault() const;
+
+        /**
+        * Sets the negotiated security mechanism in use
+        * @param aMechanism negotiated security mechanism
+        */
+        IMPORT_C void SetNegotiatedSecurityMechanismL(const TDesC8& aMechanism);
+
+        /**
+        * Gets the negotiated security mechanism
+        * @return negotiated security mechanism
+        */
+        IMPORT_C const TDesC8& NegotiatedSecurityMechanism() const;
+
+        /**
+        * Sets the dynamic proxy address in use.
+        * Dynamic proxy address is discovered on run-time, 
+        * for eaxmple using DHCP.
+        * @param aDynamicProxy proxy address
+        */
+        IMPORT_C void SetDynamicProxyL(const TDesC8& aDynamicProxy);
+
+        /**
+        * Gets the dynamic proxy address in use.
+        * Dynamic proxy address is discovered on run-time, 
+        * for eaxmple using DHCP.        
+        * @return proxy address in use
+        */
+        IMPORT_C const TDesC8& DynamicProxy() const;
+
+        /**
+        * Sets dynamically registered AORs for the profile
+        * @param aAORs AORs to set
+        */
+        IMPORT_C void SetRegisteredAORsL(const MDesC8Array& aAORs);
+
+        /**
+        * Gets dynamically registered AORs defined for the profile
+        * @return array of AORs
+        */
+        IMPORT_C const MDesC8Array& RegisteredAORs() const;
+
+        /**
+        * Deserialize registered AORs into profile from stream
+        * @param aReadStream stream holding serialized profile
+        */
+        IMPORT_C void InternalizeRegisteredAORsL(RReadStream& aReadStream);
+
+        /**
+        * Serialize registered AORs from profile to stream
+        * @param aWriteStream stream where profile is to be serialized
+        */
+        IMPORT_C void ExternalizeRegisteredAORsL(
+            RWriteStream& aWriteStream) const;
+
+        /**
+        * Get size of serialized registered AORs from profile 
+        * @return size needed to serialize profile
+        */
+        IMPORT_C TUint ExternalizedRegisteredAORsSizeL() const;
+
+        /**
+        * Sets the status of the profile
+        * @param aStatus status of the profile
+        */
+        IMPORT_C void SetStatus(CSIPConcreteProfile::TStatus aStatus);
+
+        /**
+        * Gets the status of the profile
+        * @return status of the profile
+        */
+        IMPORT_C CSIPConcreteProfile::TStatus Status() const;
+
+        /**
+        * Sets the internal registration context id of the profile.
+        * In practice this is the value of MSIPRegistrationContext::ContextId()
+        * for a CSIPRegistrationBinding related to the profile.
+        * @param aId context id
+        */
+        IMPORT_C void SetContextId(TUint32 aId);
+
+        /**
+        * Gets the internal registration context id of the profile.
+        * In practice this is the value of MSIPRegistrationContext::ContextId()
+        * for a CSIPRegistrationBinding related to the profile.        
+        * @return context id
+        */
+        IMPORT_C TUint32 ContextId() const;
+
+        /**
+        * Sets last occurred error during registration
+        * @param aError occurred error code
+        */
+        IMPORT_C void SetLastRegistrationError(TInt aError);
+
+        /**
+        * Gets last occurred error during registration
+        * @return last occurred error code, KErrNone if no error
+        */
+        IMPORT_C TInt LastRegistrationError() const;
+        
+        /**
+        * Sets the profile enabled
+        * @param aIsEnabled ETrue if profile is enabled
+        */
+        IMPORT_C void SetEnabled(TBool aIsEnabled);    
+        
+        /**
+        * Checks whether the profile has been enabled by at least one user.
+        * @return ETrue if the profile has been enabled by at least one user
+        */
+        IMPORT_C TBool IsEnabled() const;        
+        
+    public: // For internal use
+    
+        /**
+        * Sets the storage id used when updating 
+        * the profile to permanent storage
+        * @param aId storage id
+        */
+        IMPORT_C void SetStorageId(TUint32 aId);
+
+        /**
+        * Gets the storage id used when updating 
+        * the profile to permanent storage
+        * @return storage id
+        */
+        IMPORT_C TUint32 StorageId() const;
+        
+        /**
+        * Gets extension parameter count of type MDesC8Array.
+        * @return parameter count
+        */
+		IMPORT_C TInt ExtensionDesArrayParameterCount() const;
+		
+        /**
+        * Gets extension parameter count of type TDesC8.
+        * @return parameter count
+        */
+		IMPORT_C TInt ExtensionDesParameterCount() const;
+		
+        /**
+        * Gets extension parameter count of type TUint32.
+        * @return parameter count
+        */
+        IMPORT_C TInt ExtensionIntParameterCount() const;
+
+		/**
+        * Gets the extension parameter
+        * @param aIndex parameter's index in the extension array
+        * @param aID OUT: parameter's identifier, if found
+        * @param aValue OUT: parameter's value, if found
+        * @return KErrNone If parameter value was retrieved
+        *         KErrNotFound If no such parameter exists
+        */
+		IMPORT_C TInt ExtensionParameter(
+			TInt aIndex,
+			TUint& aID,
+			TUint32& aValue) const;
+
+        
+        /**
+        * Gets extension parameter count of type TBool.
+        * @return parameter count
+        */
+        IMPORT_C TInt ExtensionBoolParameterCount() const;
+		
+		/**
+        * Gets the extension parameter
+        * @param aIndex parameter's index in the extension array
+        * @param aID OUT: parameter's identifier, if found
+        * @param aValue OUT: parameter's value, if found
+        * @return KErrNone If parameter value was retrieved
+        *         KErrNotFound If no such parameter exists
+        */
+		IMPORT_C TInt ExtensionParameter(
+			TInt aIndex,
+			TUint& aID,
+			TBool& aValue ) const;
+
+		/**
+        * Gets the extension parameter
+        * @param aIndex parameter's index in the extension array
+        * @param aID OUT: parameter's identifier, if found
+        * @param aValue OUT: parameter's value, if found
+        * @return KErrNone If parameter value was retrieved
+        *         KErrNotFound If no such parameter exists
+        */
+		IMPORT_C TInt ExtensionParameter(
+			TInt aIndex,
+			TUint& aID,
+			MDesC8Array const *& aValue ) const;
+
+		/**
+        * Gets the extension parameter
+        * @param aIndex parameter's index in the extension array
+        * @param aID OUT: parameter's identifier, if found
+        * @param aValue OUT: parameter's value, if found
+        * @return KErrNone If parameter value was retrieved
+        *         KErrNotFound If no such parameter exists
+        */
+		IMPORT_C TInt ExtensionParameter(
+			TInt aIndex,
+			TUint& aID,
+			TDesC8 const *& aValue ) const;
+        
+		/**
+        * Gets the server extension parameter
+		* @param aServer the type of the server
+        * @param aIndex parameter's index in the extension array
+        * @param aKey OUT: parameter's identifier, if found
+        * @param aValue OUT: parameter's value, if found
+        * @return KErrNone If parameter value was retrieved
+        *         KErrNotFound If no such parameter exists
+        */
+		IMPORT_C TInt ServerExtensionParameter(
+			TUint32 aServer,
+			TInt aIndex,
+			TDesC8 const *& aKey,
+			TDesC8 const *& aValue) const;
+
+		/**
+        * Gets server extension parameter count
+        * @param aServer the type of the server
+        * @return parameter count
+        */
+		IMPORT_C TInt ServerExtensionParameterCount( TUint32 aServer) const;
+		
+		/**
+        * Gets the server parameter
+		* @param aServer the type of the server
+        * @param aIndex parameter's index in the extension array
+        * @param aID OUT: parameter's identifier, if found
+        * @param aValue OUT: parameter's value, if found
+        * @return KErrNone If parameter value was retrieved
+        *         KErrNotFound If no such parameter exists
+        */
+		IMPORT_C TInt ServerParameter(
+			TUint32 aServer, 
+			TInt aIndex,
+			TUint& aID,
+			TDesC8 const *& aValue) const;
+
+        /**
+        * Gets server parameter count
+        * @param aServer the type of the server
+        * @return server parameter count
+        */
+        IMPORT_C TInt ServerParameterCount(TUint32 aServer) const;
+        
+        /**
+        * Validate the profile Parameters on being consistent
+        * @return ETrue if the profile parameters are consistent.
+        */
+        IMPORT_C TBool ValidateProfileParamsL();
+
+    public: // For internal use 
+
+        TBool operator==(const CSIPConcreteProfile& aProfile);
+
+        TInt32 LastCompareResult() const;
+
+        static CDesC8ArrayFlat* CopyDesArrayL(const MDesC8Array& aArray);
+
+        static void ExternalizeDesArrayL(const MDesC8Array& aArray, 
+                                           RWriteStream& aWriteStream);
+
+        static CDesC8ArrayFlat* InternalizeDesArrayL(RReadStream& aReadStream);
+    
+        enum TComparison
+            {
+            EId = 1,
+            EName = 2,
+            EIAPId = 4,
+            ERegistrar = 8,
+            ERegistrarParameters = 16,
+            ERegistrarExtensionParameters = 32,
+            EOutboundProxy = 64,
+            EOutboundProxyParameters = 128,
+            EOutboundProxyExtensionParameters = 256,
+            EPrivateIdentity = 512,
+            EAOR = 1024,
+            ESigComp = 2048,
+            ESecurityNegotiation = 4096,
+            EAutoRegistration = 8192,
+            ETypeInfo = 16384,
+            EExtensionParameters = 32768,
+            EProxyResolving = 65536,
+            EContactHeaderParams = 131072,
+            ESIPHeaders = 262144
+            };    
+
+    private: // Constructors
+
+        CSIPConcreteProfile();
+        void ConstructL();
+
+    private: // New functions
+
+        void DoInternalizeL(
+            RReadStream& aReadStream, 
+            TBool aAll = ETrue);
+
+        const TDesC8& Parameter(
+            const RPointerArray<CSIPProfileParameter>* aArray,
+            const TDesC8& aName) const;
+        
+        void SetParameterL(
+            RPointerArray<CSIPProfileParameter>* aArray,
+            const TDesC8& aName,
+            const TDesC8& aValue);
+
+        TInt IndexOf(
+            const TDesC8& aKey, 
+            const RPointerArray<CSIPProfileParameter>* aArray) const;
+
+        void SetOutboundProxyL(const TDesC8& aOutboundProxy);
+
+        void SetRegistrarL(const TDesC8& aRegistrar);
+        
+        void InternalizeRegistrarL(RReadStream& aReadStream);
+        
+        void InternalizeProxyL(RReadStream& aReadStream);
+        
+        void InternalizeExtensionParamsL(RReadStream& aReadStream);
+
+        void CloneExtensionParamsL(CSIPConcreteProfile& aNewObject) const;
+
+        TInt ExtensionIntParamIndex(TUint32 aID) const;
+        
+        TInt ExtensionBoolParamIndex(TUint32 aID) const;
+        
+        TInt ExtensionDescrParamIndex(TUint32 aID) const;
+        
+        TInt ExtensionDescrArrayParamIndex(TUint32 aID) const;
+
+        HBufC8* CreateContactUserNameLC() const;
+
+        TUint8 GetNextBits(
+            const TDesC8& aBuf,
+            TInt aBits,
+            TUint& aCounter) const;
+            
+        /**
+        * Clones profile.
+        * @param aWithDynamicValues Should all values be copied
+        * @return new instance of the profile, the ownership is transferred
+        */
+		CSIPConcreteProfile* CloneL(TBool aWithDynamicValues) const;
+		
+		/**
+		*Fetch the Snap ID*
+		* @param aValue the SNAP Name
+		* @return SNAP ID
+		*/
+				
+		TUint32 FetchSNAPIDL(const TDesC8& aValue);
+				
+		/**
+		*Fetch IAP ID*
+		* @param aValue the IAP Name
+		* @return IAP ID
+		*/
+				
+		TUint32 FetchIAPIDL(const TDesC8& aValue);
+
+
+
+    private: // Data
+
+        // Basic data
+        TSIPProfileTypeInfo    iSIPProfileType;
+        TUint32    iSIPProfileId;
+        TUint32    iStorageId;
+        TUint32    iSIPIAPId;
+        HBufC8*    iSIPProviderName;
+        HBufC8*    iSIPPrivateIdentity;
+        CUri8*    iSIPAORUri8;
+        TBool iSIPSigComp;
+        TBool iSecurityNegotiation;
+        TBool iSIPAutoRegistered;        
+        CDesC8ArrayFlat* iSIPContactHeaderParams;
+        CDesC8ArrayFlat* iSIPHeaders;
+
+        // Outbound proxy related parameters
+        HBufC8*    iSIPOutboundProxy;
+        RPointerArray<CSIPProfileParameter> iSIPOutboundProxyParameter;
+        RPointerArray<CSIPProfileParameter> iSIPOutboundProxyExtParameter;
+        
+        // Registrar related parameters
+        HBufC8*    iSIPRegistrar;
+        RPointerArray<CSIPProfileParameter> iSIPRegistrarParameter;
+        RPointerArray<CSIPProfileParameter> iSIPRegistrarExtParameter;
+
+        // Extension parameters
+        RArray<TExtensionIntParam> iExtensionIntParams;
+        RArray<TExtensionBoolParam> iExtensionBoolParams;        
+        RPointerArray<CExtensionDescrParam> iExtensionDescrParams;
+        RPointerArray<CExtensionDescrArrayParam> iExtensionDescrArrayParams;
+        
+        // Dynamic data
+        TBool iDefaultProfile;
+        TBool iIsEnabled; 
+        TStatus iStatus;
+        TUint32    iContextId;
+        TInt iLastRegistrationError;
+        TInt32 iLastComparisonResult;
+        TBool iDynamicProxyResolving;
+        HBufC8*    iDynamicProxy;
+        HBufC8*    iSIPNegotiatedSecurityMechanism;
+        CDesC8ArrayFlat* iSIPRegisteredAORs;
+        
+    private: // For testing purposes
+#ifdef CPPUNIT_TEST 
+        friend class CSIPConcreteProfileTest;     
+#endif
+    };
+
+#endif // CSIPCONCRETEPROFILE_H