networkhandling/networkhandlingengine/NetworkHandlingGsmInc/CNWNetworkViagLcEngine.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002-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:  This file contains the header file of the CNWNetworkViagLcEngine class.
*
*/



#ifndef CNWNETWORKVIAGLCENGINE_H
#define CNWNETWORKVIAGLCENGINE_H

//  INCLUDES
#include "CNWNetworkViagBaseEngine.h"
#include <f32file.h>


// OLD INCLUDES
#include "MNWNetworkTimer.h"
#include "NWHandlingEngine.h"
#include "CNWGsmMessageHandler.h"
#include <MCbsMcnObserver.h> //For McbsMcnObserver
#include <rmmcustomapi.h>
#include <e32property.h>

// CONSTANTS

// FORWARD DECLARATIONS
class CNWGsmSessionImplementation;
class CNWNetworkViagTimer;
class CMcn;
class CNWGsmMessageHandler;

// struct TViagElementReocord;
// CLASS DECLARATION


enum TNWRatType
    {
    ERatUtran     = 0x00,
    ERatGsm       = 0x40,  // 1000000
    ERatAny       = 0x80, //  10000000
    ERatUnvalid   = 0xC0, //  11000000
    };    

enum TNWViagUnitType
    {
    EUnitCellId,
    EUnitLac,
    EUnitNone
    };

// Descripes the Prefix 
class TNWViagFieldContent
    {
    public:
    TNWViagFieldContent()
        {
        iWildCarded = EFalse;
        iFieldLAC   = KErrNotFound;
        iUnitType   = EUnitNone;
        iUnit.Zero();
        };

    TBool     iWildCarded; // is wild card valid in current Field.     
    TInt      iFieldLAC; // If defined 
    TNWViagUnitType iUnitType;
    TBuf<128>       iUnit; // Max 128 units    
    };

// Section descriptor
class TNWViagSectionContent
    {
    public:
    TNWViagSectionContent()
            {
            iCodingScheme = KErrNotFound;
            iZoneId = KErrNotFound;
            iLastSection = ETrue;
            iField.Reset();
            };
    
    TInt iCodingScheme;                //coding scheme.
    TInt iZoneId;                    // Current zone id
    TBool iLastSection;                // Is the last section.   
    RArray<TNWViagFieldContent> iField;
    };
            
// Network coding 
class TViagElementReocord
    {                
    public:
    TViagElementReocord()
                    {
                    iRatType = ERatUnvalid;
                    iMCC     = KNullDesC;
                    iMNC     = KNullDesC;
                    iCellSubscribed = EFalse;
                    iCache.Reset();
                    };
    
    TNWRatType iRatType;             // Gsm, WCdma, Any ( GSM or WCDMA)
    TBuf<KNWCountryCodeLength> iMCC; // Country code.
    TBuf<KNWIdentityLength>    iMNC; // Network code.
    TBool iCellSubscribed;            // Informs is there any subscribed cells.   
    RArray<TNWViagSectionContent> iCache;
    };


/**
*  Monitors current network change event from MMEtel.
*  
*
*  @lib networkhandling.lib
*  @since Series 60_2.8
*/
class CNWNetworkViagLcEngine :  CBase 
    {
    public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        */
        static CNWNetworkViagLcEngine* NewL(
                        CNWNetworkViagBaseEngine& aBase,
                        TNWInfo& aNetworkInfo,
                        RMmCustomAPI& aCustomAPI,            
                        TNWInterInfo& aInterNetworkInfo);
        
        /**
        * Destructor.
        */
        virtual ~CNWNetworkViagLcEngine();


    public: // Functions from MCbsMcnObserver
        
        /**
        * Is called by CNWNetworkCurrentNetworkMonitor in case of 
        * cell re-selection.
        * @param 
        * @return Error code.
        */
        void CellReselection();

        /**
        * Decides which parser is used. Desicion is made according to 
        * Element file. 
        * @param aResponse        Struct containing all neccessary information 
        *                         got from SIM.
        * @param aElementFile     Used element file. 
        * @return Error code.
        */
        void ParseResult( TNWNetworkElementFile aElementFile, 
                const TDesC8&  aResponse );
        
        /**
        * Parse setting value from aResponse parameter and update it if wanted. 
        *
        * @param  aResponse      A reasponse data from SIM.
        * @return Error code.
        */
        void ParseSettings( const TDesC8&  aResponse );
        
        /**
        * Checks if current LAC file contains any cubscribed cells.
        *
        * @param 
        * @return Error code.
        */
        void ParseSubscribed( TNWNetworkElementFile aElementFile, 
                const TDesC8&  aResponse );
        
        /**
        * Parses zone tags from response and writes them to iZoneTags struct. 
        *
        * @param  aResponse    A reasponse data from Sim including tag information.
        * @return Error code.
        */
        void ParseTags( const TDesC8&  aResponse );
        
        /**
        * Finds a section information from given string and saves it to iCurrentCache struct.
        *
        * @param aParse    String containging section information
        * @return Error code.
        */
        TBool ParseSection( TLex8& aParse );
        
        /**
        * Parses fields from given string to iField .
        *
        * @param aParse    String containging field information
        * @return Error code.
        */
        TBool ParseField( TLex8& aParse );             
        
        /**
        * Updates version number to SIM
        *
        * @param None.
        * @return Error code.
        */
        void UpdateVersion( );
        
        /**
        * Gets activation bits. 
        *
        * @param aActivation   General HomeZone activation. 
        * @param aCbActivation  Cell Broadcast activation bit. Tells wheter CB is active or not. 
        * @return Error code.
        */
        void GetActivation(TBool& aActivation, TBool& aCbActivation );
        
        /**
        * Returns a boolean to indicate if there is at least one subscribed GSM cell. 
        *
        * @param 
        * @return subscribed   A boolean, ETrue if there is at least one subscibed GSM Cell
        */
        TBool IsGsmCellSubscribed();     
     
    private:

        /**
        * C++ default constructor.
        */
        CNWNetworkViagLcEngine( CNWNetworkViagBaseEngine& aBase,
                              TNWInfo& aNetworkInfo,
                              RMmCustomAPI& aCustomAPI,
                              TNWInterInfo& aInterNetworkInfo);


        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();
        
        /*
        * Resets a given Lc cache struct. 
        *
        * @param 
        * @return None.
        */
        void ResetLcCache( TViagElementReocord& aCurrentcache );

        /*
        * Updates founded homezone values 
        *
        * @param 
        * @return None.
        */    
        void WriteViagValues( TInt aSectionIndex );
        
        /*
        * Adds TUint in descriptor
        *
        * @param aBuffer    destination buffer
        * @param aData      data to be added
        * @return None.
        */    
        void AddInBufferAsTUint( TDes & aBuffer, const TUint aData );
    
        /*
        * Extends TUint to descriptor
        *
        * @param aDestData  destination buffer
        * @param aData      source data
        * @return None.
        */    
        void ExtendTUintIntoBuffer( TDes & aDestData, const TUint aData );
 
    private:
        /*
        * Handles network related matching stuff
        *
        * @param 
        * @return TBool
        */    
        TBool HandleNetworkCheck();
        
        /*
        * Makes the Cell id based matching
        * 
        * @param aCell Cell Id from network
        * @param aLac  Location Area code from Network
        * @param aSectionIndex  index of used Cache
        * @param aIndex field index to search 
        * @return TBool. ETrue if 
        */    
        TBool HandleCellMatch( const TDesC & aCell, 
                        const TDesC & aLac, 
                        TInt aSectionIndex, 
                        TInt aIndex );

        /*
        * Makes the LAC based matching
        *
        * @param aSectionIndex  index of used Cache
        * @param aIndex field index to search 
        * @param aLacBuf Location Area code from Network 
        * @return None.
        */    
        void HandleLACMatch( TInt aSectionIndex, TInt aIndex, 
                        const TDesC& aLacBuf );
        /*
        * converts cell id's to TInt and makes comprison
        *
        * @param aCell  Cell Id from network
        * @param aCmpCell Cell Id from SIM file.
        * @return KErrNone if given values matches.
        */                  
        TInt CompareTIntCellIdValues( const TDesC& aCell, 
                        const TDesC& aCmpCell );

    private:    // Data
        // owner..
        CNWNetworkViagBaseEngine& iBase;
        // Reference to the network info structure.
        TNWInfo&                iNWNetworkInfo;
        // Reference to the customAPI connection
        RMmCustomAPI&           iCustomAPI;   
        // Reference to the internal network info structure.
        TNWInterInfo&           iInterNetworkInfo;
        // boolean to tell wheter section is last in curren file. 
        TBool iLastSection;
        // Match is found.
        TBool iMatchFound;
        // General activation bit.
        TBool iActivation;
        // Cell Broadcast activation bit.
        TBool iCbActivation;
        // Current LC Cache
        TViagElementReocord*  iCurrentLcCache;    
        // version of HZ application in USIM card
        TInt iVersion;
        // Current coding scheme.
        TInt iCodingScheme;        
        // Number of Lac/Ci field in section.
        TInt iNumberOfFields;
        // Number of Cell id's.
        TInt iNumberOfUnits;            
        // Lc caches
        TViagElementReocord*  iLcCacheOne;
        TViagElementReocord*  iLcCacheTwo;
        TViagElementReocord*  iLcCacheThree;
        TViagElementReocord*  iLcCacheFour;
    };

#endif      // CNWNetworkViagLcEngine_H   
    
            
            
// End of File