/*
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
* which accompanies this distribution, and is available
* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Definition of attributes used by every Connection Methods.
*
*/

#ifndef CMCONNECTIONMETHODDEF_H
#define CMCONNECTIONMETHODDEF_H

// INCLUDES
#include <e32base.h>

// CONSTANTS

// Beginning of the CMManager enum range (internal use)
const TUint KLanBaseSpecificAttributes = 20000;
const TUint KLanBaseIfNetworks = 20100; 
// End of the CMManager enum range (internal use)
const TUint KLanBaseRangeMax = 29999;

/**  ECOM interface UID */
const TUint KCMPluginInterfaceUid = 0x10207377;

namespace CMManager
    {
    //Enumeration for possible values of seamlessness field 
    //in IAP Metadata table 
    /**  Naming method options */
    enum TNamingMethod
        {
        ENamingNothing,     ///< Do nothing with name set via ECmName
        ENamingUnique,      ///< Make name unique when ECmName is set.
        ENamingNotAccept    ///< Do not accept duplication. It will leave with
                            ///< KErrArgument.
        };
    
    // Enumeration for IPv6 types
    enum TIPv6Types
        {
        EIPv6Unspecified,   ///< Unspecified IPv6 type
        EIPv6WellKnown,     ///< Well known IPv6 type
        EIPv6UserDefined    ///< User defined IPv6 type
        };
    
    enum TSeamlessnessValue
        {
        ESeamlessnessNotRoamedTo,   // NOT supported
        ESeamlessnessConfirmFirst,  // Confirm first
        ESeamlessnessShowprogress,  // Shows progress
        ESeamlessnessFullySeamless  // NOT supported
        };
    
    
    /// Unspecified IPv4 address
    _LIT( KUnspecifiedIPv4, "0.0.0.0" );
    
    /// Known IPv6 name server 1
    _LIT( KKnownIp6NameServer1, "fec0:000:0000:ffff::1" );
    /// Known IPv6 name server 2
    _LIT( KKnownIp6NameServer2, "fec0:000:0000:ffff::2" );
    
    /// Dynamic IPv6 address
    _LIT( KDynamicIpv6Address, "0:0:0:0:0:0:0:0" );

    /// Default proxy protocol name
    _LIT( KDefProxyProtocolName, "http" );
    
    /// Default proxy port number
    _LIT( KDefaultProxyPortNumber, "0" );

    /// IPv4 network protocol
    _LIT( KDefIspIfNetworksIPv4, "ip" );
    /// IPv6 network protocol
    _LIT( KDefIspIfNetworksIPv6, "ip6" );
    /// IPv4 and IPv6 network protocols
    _LIT( KDefIspIfNetworksIPv4IPv6, "ip,ip6" );
    /// IPv4 and IPv6 network protocols for LAN bearers
    _LIT( KDefIspIfNetworksIPv4IPv6LAN, "ip" );

    _LIT( KDaemonManagerName, "NetCfgExtnDhcp" );
    _LIT( KConfigDaemonName, "!DhcpServ" );


    /**
    * This enum lists all the common attributes of Connection Methods.
    */
    enum TConnectionMethodCommonAttributes
        {
        /**
        * The following attributes can be queried via both 
        * the manager interface's and connection method interface's ::Get functions.
        */
        ECmCoverage,                /**<
                                    * Checks if there's coverage for this bearer.
                                    * (TBool - default: none - read only)
                                    */
                        
        ECmDefaultPriority,         /**<
                                    * Default global priority of the CM's bearer 
                                    * type.
                                    * (TUint32 - default: none - read only)
                                    */
                        
        ECmDestination,             /**<
                                    * ETrue if this connection method is 
                                    * an embedded destination.
                                    * (TBool - default: none - read only)
                                    */
                            
        ECmBearerHasUi,             /**<
                                    * Indicates whether the bearer has any UI.
                                    * (TBool - default: none - read only)
                                    */

        ECmIPv6Supported,           /**<
                                    * Returns ETrue if IPv6 is supported.
                                    * (TBool - default: none - read only)
                                    */
                                    
        ECmDefaultUiPriority,       /**<
                                    * Priority of this bearer type when shown in UI for 
                                    * configuring a new IAP.
                                    * (TUint32 - default: none - read only)
                                    */

        ECmBearerIcon = 100,        /**<
                                    * Return the bearer specific icon. Assumes that
                                    * there's an existing EEikEnv in the client.                        
                                    * Type cast return value from TUint32 to 
                                    * CGuiIcon*.
                                    * Return value 0 means bearer has no icon.
                                    * (TUint32 - default: none - read only)
                                    */ 
                        
        ECmBearerAvailableIcon,     /**<
                                    * Return the bearer available specific icon. 
                                    * Assumes that there's an existing EEikEnv 
                                    * in the client. Type cast return value from 
                                    * TUint32 to CGuiIcon*.
                                    * Return value 0 means bearer has no icon.
                                    * (TUint32 - default: none - read only)
                                    */
                        
        ECmBearerAvailableName = 200,   /**<
                                        * Name of the bearer. Can be used in 
                                        * layout 
                                        * list_double_large_graphic_popup_menu_pane.
                                        * (String - default: none - read only)
                                        */
                        
        ECmBearerSupportedName,     /**<
                                    * Name of the bearer. Can be used in 
                                    * layout list_single_popup_menu_pane_1.
                                    * (String - default: none - read only)
                                    */
                        
        ECmBearerAvailableText,     /**<
                                    * Localized text 'Available'. Can be used in 
                                    * layout 
                                    * list_double_large_graphic_popup_menu_pane.
                                    * (String - default: none - read only)
                                    */
                        
        ECmBearerNamePopupNote,     /**<
                                    * Localized text of the bearer type name.
                                    * Can be used in layout popup note.
                                    * (String - default: none - read only)
                                    */

        ECmCommsDBBearerType,       /**<
                                    * For backward compatibility, connection method
                                    * can return its CommsDB specific bearer type.
                                    * (TUint32 - default: none - read only)
                                    * Leaves with KErrUnknown if no associated bearer 
                                    * type exists in CommsDat.
                                    */
                                
        ECmBearerSettingName,       /**<
                                    * Name of the data bearer used when 
                                    * accessing external network.
                                    * (String - default: none - read only)
                                    */
        
        ECmVirtual,                 /**<
                                    * Is the given connection method virtual?
                                    * (TBool - default: none - read only)
                                    */

        /**
        * These are not bearer specific, but controling attributes.
        */    
        ECmInvalidAttribute = 400,  /**<
                                    * Client application can check which attribute 
                                    * was incorrect in UpdateL().
                                    * (TUint32 - default: none - read only)
                                    */
                                    
        ECmAddToAvailableList,      /**<
                                    * Bearer type has to be added to the avaialable
                                    * bearer type list.
                                    * (TBool - default: EFalse - read only)
                                    */                   
                        
        ECmLoadResult,              /**<
                                    * Result of the load process. KErrNone if there
                                    * was no error. Otherwise a system wide
                                    * error code.
                                    * (TUint32 - default: KErrNone - read only)
                                    */
        
        /**
        * Attributes the can be queried only via
        * - connection method's GetXXXAttributeL()
        * - connection manager's function GetConnectionMethodInfoXXXL()
        * functions
        */
        ECmBearerType = 500,        /**<   
                                    * Bearer type of the CM 
                                    * (TUint - default: none - read only)
                                    */
                        
        ECmName,                    /**<   
                                    * Name of the CM
                                    * (String - default: none)
                                    */
        
        ECmIapId,                   /**<    
                                    * IAP id
                                    * (TUint32 - default: none - read only)
                                    */
                        
        ECmStartPage,               /**<
                                    * Start page of the connection method
                                    * (String - default: empty string)
                                    */

        ECmHidden,                  /**<
                                    * Connection method is hidden. 
                                    * (not supported yet)
                                    * (TBool - default: EFalse)
                                    */

        ECmProtected,               /**<
                                    * This connection method is protected. 
                                    * Modifying it needs NetworkControl capability.
                                    * (TBool - default: EFalse)
                                    */
                        
        ECmNamingMethod,            /**<
                                    * See acceptable values in TNamingControl.
                                    * (TUint32 - default: ENamingUnique)
                                    */             
        
        ECmSeamlessnessLevel,   /**<
                                * Defines whether an IAP can be roamed to.
                                * See details in TSeamlessnessValue.
                                * (TUint32 - default: ESeamlessnessConfirmFirst )
                                */
                                
        ECmElementID,           /**<
                                * Element id of the connection method in IAP table.
                                * (TUint32 - default: none - read only)
                                */
        
        ECmNetworkId,           /**<
                                * Network id of the connection method.
                                * (TUint32 - default: none - read only)
                                */
                                
        ECmConnected,           /**<
                                * Is network connection created with connection
                                * method?
                                * (TBool - default: none - read only)
                                */

        ECmId,                  /**<    
                                * ID to uniquely identify the connection
                                * methods
                                * It is guaranteed that every connection
                                * method has an ECmId
                                * (TUint32 - default: none - read only)
                                */

        ECmWapId,               /**
		                        * Provided for backwards compatibility only.
                                * The record ID of the connection methods' 
                                * corresponding WAP_ACCESS_POINT record, which
                                * use had been deprecated as the main ID 
                                * should now be ECmIapId, ECmElementID or ECmId.
                                * (TUint32 - default: none - read only)
                                */

        ECmIapServiceId,        /**
		                        * Provided for backwards compatibility only.
                                * The record ID of the connection methods' 
                                * service record
                                * (TUint32 - default: none - read only)
                                */

        /**
        * The following attributes are stored in the connection method's 
        * meta data record.
        */
        ECmMetaHighlight = 600, /**<
                                * Set to indicate that this connection method is
                                * highlighted in Agent dialog. Only one connection
                                * method can have this flag set.
                                * (TBool - default: EFalse)
                                */
                                
        ECmMetaHiddenAgent,     /**<
                                * Set to hide this connection method in Agent
                                * dialog.
                                * (TBool - default: EFalse)
                                */
                                
        // These attributes can be used with virtual bearer type
        // connection methods.
        ECmNextLayerIapId,      /**<
                                * Returns the linked connection method's IAP id.
                                * (TUint32 - default: None)
                                */
                                
        ECmNextLayerSNAPId,     /**<
                                * Returns the linked connection method's SNAP id.
                                * (TUint32 - default: None)
                                */
        
        // Proxy attributes
        ECmProxyUsageEnabled = 1000,    /**<
                                        * Set to enable/disable proxy setting
                                        * of connection method.
                                        * Disabling: record is deleted from proxy 
                                        * when UpdateL() is called.
                                        * Proxy record is deleted on UpdateL() 
                                        * if ECmProxyServerName is an empty string.
                                        * It can be queried only via the 
                                        * connection method's GetXXXAttributeL()
                                        * (TBool: default: EFalse)
                                        */
     
        ECmProxyServerName,             /**<
                                        * Name of the host.
                                        * It can be queried only via the 
                                        * connection method's GetXXXAttributeL()
                                        * (String - default: none)
                                        */
                                        
        ECmProxyProtocolName,           /**<
                                        * Name of the protocol for which this proxy 
                                        * can be used.
                                        * It can be queried only via the 
                                        * connection method's GetXXXAttributeL()
                                        * (String - default: none)
                                        */
                                        
        ECmProxyPortNumber,             /**< 
                                        * Port number
                                        * It can be queried only via the 
                                        * connection method's GetXXXAttributeL()
                                        * (TUint32 - default: none)
                                        */
                                        
        ECmProxyExceptions,             /**<
                                        * ";" separated list of the addresses for 
                                        * which the proxy server should not be used.
                                        * It can be queried only via the 
                                        * connection method's GetXXXAttributeL()
                                        * (String - default: none)
                                        */
                                        
        ECmProxyRangeMax = 1999,        /**<
                                        * Marks the end of the proxy range
                                        */
                                  
        ECmChargeCardUsageEnabled = 2000,   /**<
                                            * Same as in ECmProxyUsageEnabled but 
                                            * for charge card. 
                                            * (TBool - default: EFalse)
                                            */      
                                            
        ECmChargeCardAccountNumber,         /**<
                                            * Account number
                                            * (String - default: none)
                                            */
                                            
        ECmChargeCardPIN,                   /**<
                                            * PIN number
                                            * (String - default: none)
                                            */
        
        ECmChargeCardLocalRule,             /**<
                                            * Order of dialling account number, 
                                            * PIN and phone number for local calls.
                                            * (String - default: none)
                                            */
                                            
        ECmChargeCardNatRule,               /**<
                                            * Order of dialling account number, 
                                            * PIN and phone number for national 
                                            * calls.
                                            * (String - default: none)
                                            */

        ECmChargeCardIntlRule,              /**<
                                            * Order of  dialling account number, 
                                            * PIN and phone number for 
                                            * international calls.
                                            * (String - default: none)
                                            */
        
        ECmChargeCardRangeMax = 2999,       /**<
                                            * Marks the end of the chargecard range
                                            */
                                            
        ECmLocationUsageEnabled = 3000,     /**<
                                            * Same as in ECmProxyUsageEnabled but 
                                            * for location. 
                                            * (TBool - default: EFalse)
                                            */
                                            
        ECmLocationIntlPrefixCode,          /**<
                                            * International prefix code.
                                            * (String - default: none)
                                            */
                                            
        ECmLocationNatPrefixCode,           /**<
                                            * National prefix code.
                                            * (String - default: none)
                                            */
                                            
        ECmLocationNatCode,                 /**<
                                            * National code
                                            * (String - default: none)
                                            */
                                            
        ECmLocationAreaCode,                /**<
                                            * Area code.
                                            * (String - default: none)
                                            */
                                            
        ECmLocationDialOutCode,             /**<
                                            * Number to dial for an outside line.
                                            * (String - default: none)
                                            */
                                            
        ECmLocationDisableCallWaitingCode,  /**<
                                            * Code to dial to disable call waiting 
                                            * facility.
                                            * (String - default: none)
                                            */
                                            
        ECmLocationMobile,                  /**<
                                            * Mobile phone?
                                            * (TBool - default: none)
                                            */
                                            
        ECmLocationUsePulseDial,            /**<
                                            * Use pulse dialling?
                                            * (TBool - default: none)
                                            */
                                            
        ECmLocationWaitForDialTone,         /**<
                                            * Wait for the dial tone?
                                            * (TBool - default: none)
                                            */
                                            
        ECmLocationPauseAfterDialOut,       /**<
                                            * Pause time after dial out.
                                            * (TUint32 - default: none)
                                            */
                                            
        ECmLocationRangeMax = 3999,         /**<
                                            * Marks the end of the location
                                            * range
                                            */
        
        // WAP specific attributes
        ECmWapIPGatewayAddress = 4000,      /**<
                                            * WAP Gateway address, in this case an 
                                            * IP address.
                                            * (String - default: none)
                                            */
                                            
        ECmWapIPWSPOption,          /**<
                                    * Enum value indicating whether 
                                    * connection-oriented 
                                    * or connectionless API should be used.
                                    * See valid values in TWapWSPOption.
                                    * (TUint32 - default: 
                                    * ECmWapWspOptionConnectionless)
                                    */
                                            
        ECmWapIPSecurity,           /**<
                                    * Attempt secure WTLS connection to the gateway
                                    * (TBool - default: EFalse)
                                    */
        
        ECmWapIPProxyPort,          /**<
                                    * Proxy port number. Required for WAP2.0 only.
                                    * (TUint32 - default: none)
                                    */
                                            
        ECmWapIPProxyLoginName,     /**<
                                    * Proxy login name. Required for WAP2.0 only.
                                    * (String - default: none)
                                    */
                                            
        ECmWapIPProxyLoginPass,     /**<
                                    * Proxy login password. 
                                    * Required for WAP2.0 only.
                                    * (String - default: none)
                                    */
                                            
        ECmWapRangeMax = 4099,      /**<
                                    * Marks the end of the WAP specific range
                                    */

        /** 
        * The following attributes are common for many bearer types.
        * It's not sure that every IF or IP attribute is supported by
        * all bearer types.
        * It's not possible to query these attributes via 
        * GetConnectionInfoXXX() functions.
        */
        ECmCommonAttributesStart = 5000, /**<
                                         * Marks the beginning of the common
                                         * attributes
                                         */
        
        ECmIFName,                  /**<
                                    * Interface name
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIFParams,                /**<
                                    * Interface parameter string
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIFNetworks,              /**<
                                    * List of network protocols
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIFPromptForAuth,         /**<
                                    * Prompt user for authentication
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (TBool - default: none)
                                    */
                                    
        ECmIFAuthName,              /**<
                                    * Authentication user name used by PPP
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIFAuthPass,              /**<
                                    * Authentication password used by PPP
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIFAuthRetries,           /**<
                                    * Number of times for retrying authentication
                                    * if it fails
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (TUint32 - default: none)
                                    */
        
        ECmIPNetmask = 5050,        /**<
                                    * IP net mask of interface
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIPGateway,               /**<
                                    * IP address of gateway
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIPAddFromServer,         /**<
                                    * Get IP address from server?
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (TBool - default: none)
                                    */
                                    
        ECmIPAddress,               /**<
                                    * IP address of interface
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIPDNSAddrFromServer,     /**<
                                    * Get DNS addresses from server?
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (TBool - default: none)
                                    */
                                    
        ECmIPNameServer1,           /**<
                                    * IP address of primary name server
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIPNameServer2,           /**<
                                    * IP address of secondary name server
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIP6DNSAddrFromServer,    /**<
                                    * Get IP6 DNS addresses from server?
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (TBool - default: none)
                                    */
                                    
        ECmIP6NameServer1,          /**<
                                    * IP6 address of primary name server
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIP6NameServer2,          /**<
                                    * IP6 address of secondary name server
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIPAddrLeaseValidFrom,    /**<
                                    * IP address valid from this time, used to
                                    * store dynamically assigned address lease
                                    * info
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
                                    
        ECmIPAddrLeaseValidTo,      /**<
                                    * IP address valid for use until this time,
                                    * used to store dynamically assigned
                                    * address lease info
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
        
        ECmConfigDaemonManagerName = 5100, /**<
                                            * Name of the ECom configuration
                                            * daemon manager component. This
                                            * component interfaces with the
                                            * server identified in
                                            * ECmConfigDaemonName. If
                                            * specified, ECmConfigDaemonName
                                            * should also be specified.                                            
                                            * It can be queried only via the 
                                            * connection method's GetXXXAttributeL()
                                            * (String - default: none)
                                            */
                                            
        ECmConfigDaemonName,        /**<
                                    * Name of the configuration daemon server.
                                    * This server is used to provide further
                                    * configuration for a connection, e.g.
                                    * dynamic IP address assignment. If
                                    * specified, ECmConfigDaemonManagerName
                                    * should also be specified.
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (String - default: none)
                                    */
        
        ECmEnableLPCExtension = 5110,   /**<
                                        * Enable LCP extensions?
                                        * It can be queried only via the 
                                        * connection method's GetXXXAttributeL()
                                        * (TBool - default: none)
                                        */
                                        
        ECmDisablePlainTextAuth,        /**<
                                        * Disable plaintext authentication?
                                        * It can be queried only via the 
                                        * connection method's GetXXXAttributeL()
                                        * (TBool - default: none)
                                        */
                                        
        ECmCommonAttributesEnd = 5999,  /**<
                                        * Marks the end of common attributes
                                        */
        
        /**
        * The following methods can be queried only via 
        * connection method's GetXXXAttributeL()
        */
        ECmSpecialAttributes = 6000,   /**<
                                        * Marks the beginning of special
                                        * attributes
                                        */
        
        ECmIsLinked,                /**<
                                    * Is connection method linked to any
                                    * virtual connection method?
                                    * It can be queried only via the 
                                    * connection method's GetXXXAttributeL()
                                    * (TBool - default: none)
                                    */
                                    
        ECmSpecialAttributesEnd = 8999  /**<
                                        * Marks the end of special attributes
                                        */
        };

    /**  WAP WSP options */        
    enum TWapWSPOption
        {
        /**
        * Indicates that connectionless APIs should be used
        */
        ECmWapWspOptionConnectionless,
        
        /**
        * Indicates that connection oriented APIs should be used
        */
        ECmWapWspOptionConnectionOriented
        };
       
    }   // namespace CMManager

#endif // CMCONNECTIONMETHODDEF_H
