ipcm_plat/extended_connection_settings_api/inc/cmmanagerext.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 23:12:51 +0200
branchRCL_3
changeset 8 2e6c4614c58e
parent 0 5a93021fdf25
child 57 05bc53fe583b
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
* 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 "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:  Connection manager IF class.
*
*/

#ifndef CMMANAGEREXT_H
#define CMMANAGEREXT_H

// System includes
#include <e32std.h>
#include <e32base.h>
#include <e32cmn.h>
#include <metadatabase.h>
#include <ConeResLoader.h>
#include <cmmanagerdef.h>
#include <cmconnectionmethodext.h>
#include <cmdefconnvalues.h>

// FORWARD DECLARATIONS
class RCmDestinationExt;
class CCmManagerImpl;
class CGulIcon;

/**
 *  RCmManager is used to query and modify network destinations and connection
 *  methods.
 *
 *  @lib cmmanager.lib
 *  @since S60 v3.2
 */
NONSHARABLE_CLASS(RCmManagerExt)
    {
    //=====================================================================
    // Constructors/Destructors
    // 
    public:
    
        /** Inline constructor */
        inline RCmManagerExt();

    //=====================================================================
    // API functions
    public:
        
        /** Open session */
        IMPORT_C void OpenL();    

        /** Open session and create tables if they don't exist*/
        IMPORT_C void CreateTablesAndOpenL();    
        
        /**
        * Symbian constructor
        * Pushes the object on the cleanup stack
        *
        * @since S60 3.2
        */
        IMPORT_C void OpenLC();    
        
        /** Close session */
        IMPORT_C void Close();
        
        /**
        * GetBearerInfoXXX function can be used to query
        * bearer informantion that doesn't belong
        * to a specific connection method, such as 
        * ECmCoverage or ECmDefaultPriority etc.
        * NULL pointer, returned from string functions, means
        * attribute exists but has no value.
        * HBuf ownership is passed to the caller
        */
        IMPORT_C TUint32 GetBearerInfoIntL( TUint32 aBearerType,
                                  TUint32 aAttribute ) const;
        IMPORT_C TBool GetBearerInfoBoolL( TUint32 aBearerType,
                                 TUint32 aAttribute ) const;
        IMPORT_C HBufC* GetBearerInfoStringL( TUint32 aBearerType,
                                    TUint32 aAttribute ) const;
        IMPORT_C HBufC8* GetBearerInfoString8L( TUint32 aBearerType,
                                    TUint32 aAttribute ) const;

        /**
        * GetConnectionMethodInfoXXX function can be used to 
        * query any, non-bearer specific information about
        * a given connection method. This can be e.g. ECmBearerType,
        * ECmName, ECmStartPage etc.
        * NULL pointer, returned from string functions, means
        * attribute exists but has no value.
        * HBuf ownership is passed to the caller
        */
        IMPORT_C TUint32 GetConnectionMethodInfoIntL( TUint32 aIapId,
                                             TUint32 aAttribute ) const;
        IMPORT_C TBool GetConnectionMethodInfoBoolL( TUint32 aIapId,
                                            TUint32 aAttribute ) const;
        IMPORT_C HBufC* GetConnectionMethodInfoStringL( TUint32 aIapId,
                                               TUint32 aAttribute ) const;
        IMPORT_C HBufC8* GetConnectionMethodInfoString8L( TUint32 aIapId,
                                               TUint32 aAttribute ) const;
                
        /**
        * Creates a Destination with the passed name. 
        * @param aName the name of the new destination.
        * @return RCmDestinationExt new destination. ownership is passed to the 
        * caller
        */
        IMPORT_C RCmDestinationExt CreateDestinationL( const TDesC& aName );
        
        /**
        * Creates a connection method does not belong to any destination
        * @param aImplementationUid - bearer type of the new connection method
        * @return RCmConnectionMethodExt newly created connection method.
        */
        IMPORT_C RCmConnectionMethodExt CreateConnectionMethodL( 
                                                          TUint32 aBearerType );        
        
        /**
        * Copies a connection method belonging to one destination to 
        * another. The connection method becomes shared.
        * Calls UpdateL on the destination
        * @param aTargetDestination
        * @param aConnectionMethodId
        * @return TInt - index in the Connection Method list
        */
        IMPORT_C TInt CopyConnectionMethodL( 
                                    RCmDestinationExt& aTargetDestination,
                                    RCmConnectionMethodExt& aConnectionMethod );
                                        
        /**
        * Moves a connection method belonging to one destination to 
        * another. The connection method is removed from the source destination
        * @param aSourceDestination
        * @param aTargetDestination
        * @param aConnectionMethod
        * @return TInt - index in the Connection Method list
        */
        IMPORT_C TInt MoveConnectionMethodL( 
                                    RCmDestinationExt& aSourceDestination,
                                    RCmDestinationExt& aTargetDestination,
                                    RCmConnectionMethodExt& aConnectionMethod );
                                                                                  
        /**
        * Remove connection method from the destination
        * @param aDestination destination the connection method is attached to
        * @param aConnectionMethod connection method to be removed
        */
        IMPORT_C void RemoveConnectionMethodL( 
                                   RCmDestinationExt& aDestination,
                                   RCmConnectionMethodExt& aConnectionMethod );
                                   
        /**
        * Removes connection method from every destination and make it 
        * uncategorized.
        * @param aConnectionMethod connection method to be removed
        */
        IMPORT_C void RemoveAllReferencesL( 
                                    RCmConnectionMethodExt& aConnectionMethod );

    //=========================================================================
    // API functions - Getter-Setter
    public:
    
        /**
        * Returns the connection method queried by its ID.
        * @param aId if of the connection method
        * @return RCmConnectionMethodExt connection method instance
        */
        IMPORT_C RCmConnectionMethodExt ConnectionMethodL( 
                                                  TUint32 aConnectionMethodId );
        
        /**
        * Returns the list of connection methods that do not belong to any 
        * destination
        * @param aCMArray on return it is the array of IAP ids.
        * @param aCheckBearerType If ETrue only connection methods with 
        *                         supported bearer types are returned
        * @param aLegacyOnly when set to ETrue only Legacy IAP ids will
        *                         be returned
        * @param aEasyWlan when set to ETrue EasyWlan id is returned, too
        */
        IMPORT_C void ConnectionMethodL( RArray<TUint32>& aCMArray,
                                         TBool aCheckBearerType = ETrue,
                                         TBool aLegacyOnly = ETrue,
                                         TBool aEasyWlan = EFalse );
        
        /**
        * Returns the destination to which a specified 
        * connection method belongs, search is by destination ID
        * @param aDestinationId id of the destination
        * @return RCmDestinationExt network destination
        */
        IMPORT_C RCmDestinationExt DestinationL( TUint32 aDestinationId );
        
        /**
        * Returns an array of all destination id's
        * @param aDestArray array of all available network destination
        */ 
        IMPORT_C void AllDestinationsL( RArray<TUint32>& aDestArray );
        
        /**
        * Returns the copy of the bearer priority array. Ownership is passed.
        * @param aArray bearer priority array
        */          
        IMPORT_C void BearerPriorityArrayL( RArray<TBearerPriority>& aArray ) const;
        
        /**
        * Update bearer priority array
        * @param aArray array with new global bearer priority
        */          
        IMPORT_C void UpdateBearerPriorityArrayL( 
                                        const RArray<TBearerPriority>& aArray );
        

        /**
        * Clean up passed global bearer priority array. Delete
        * the elements and calls Reset and Close on the array.
        * @param aArray array to be cleaned up
        */
        IMPORT_C void CleanupGlobalPriorityArray( 
                                        RArray<TBearerPriority>& aArray ) const;
        
        /**
        * Query all of the supported bearer types.
        * @param aArray list of all supported bearer types.
        */          
        IMPORT_C void SupportedBearersL( RArray<TUint32>& aArray ) const;
        
        /**
        * Returns "Uncategorized" icon.
        * This fucton leaves if the client does not have a valid UI context
        * @return CGulIcon* Icon of uncategorized connection methods. Ownership 
        * is passed.
        */          
        IMPORT_C CGulIcon* UncategorizedIconL() const;
        
        /**
        * Returns the id of the EasyWlan connection method.
        *
        * @since S60 3.2
        * @return id of the EasyWLan connection method. 0 if not found.
        */
        IMPORT_C TUint32 EasyWlanIdL();

        /**
        * Returns the default connection method/SNAP.
        *
        * @since S60 3.2
        */
        IMPORT_C void ReadDefConnL( TCmDefConnValue& aDCSetting );   
        /**
        * Stores the default connection method/SNAP.
        *
        * @since S60 3.2
        */
        IMPORT_C void WriteDefConnL( const TCmDefConnValue& aDCSetting );  

        /**
        * Creates a Destination with the passed name and id. 
        * @param aName the name of the new destination.
        * @param aDestId Predefined id of the destination.
        * @return RCmDestinationExt newly created destination or leaves with
        * KErrAlreadyExists if there exists CM with the same Id.
        * Ownership is passed to the caller.
        */
        IMPORT_C RCmDestinationExt CreateDestinationL( const TDesC& aName,
                                                       TUint32      aDestId );
        
        /**
        * Creates a connection method does not belong to any destination
        * @param aImplementationUid - bearer type of the new connection
        * method
        * @param aConnMethodId Predefined id for the connection method
        * (id range is from 1 to max IAP record amount in CommsDat).
        * @return RCmConnectionMethodExt newly created connection
        * method or leaves with KErrAlreadyExists if there exists CM
        * with the same Id.
        */
        IMPORT_C RCmConnectionMethodExt CreateConnectionMethodL( TUint32 aImplementationUid,
                                                                 TUint32 aConnMethodId );

    private:
        /**
        * This is a private copy constructor without iplemetation.
        * The sole purpose of this declaration is to forbid the copying of 
        * the objects of this class.
        */          
        RCmManagerExt(RCmManagerExt&  );
        /**
        * This is a private copy constructor without iplemetation.
        * The sole purpose of this declaration is to forbid the copying of 
        * the objects of this class.
        */          
        RCmManagerExt& operator=( RCmManagerExt& );

    friend class CCmManagerImpl;
    //=========================================================================
    // Member data
    
    private:
    
        CCmManagerImpl* iImplementation;
    };
    
inline RCmManagerExt::RCmManagerExt()
    : iImplementation(NULL)
    {
    }
    
#endif // CMMANAGEREXT_H