adaptationlayer/tsy/nokiatsy_dll/src/cmmnetoperatornamehandler.cpp
changeset 8 6295dc2169f3
parent 5 8ccc39f9d787
child 9 8486d82aef45
equal deleted inserted replaced
7:fa67e03b87df 8:6295dc2169f3
     1 /*
     1 /*
     2 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
     2 * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of the License "Eclipse Public License v1.0"
     5 * under the terms of the License "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    53 
    53 
    54 // PNN record indentifiers in HPLMN.
    54 // PNN record indentifiers in HPLMN.
    55 const TUint8 KNetNoHplmnPnnRecordNumber = 0x00;
    55 const TUint8 KNetNoHplmnPnnRecordNumber = 0x00;
    56 const TUint8 KNetHplmnPnnRecordNumber = 0x01;
    56 const TUint8 KNetHplmnPnnRecordNumber = 0x01;
    57 
    57 
    58 // Max buffer length for Operator name.
       
    59 const TInt KMaxLengthOfOperatorName = 124;
       
    60 
       
    61 // Max data string length in FULL_NAME or SHORT_NAME.
    58 // Max data string length in FULL_NAME or SHORT_NAME.
    62 // Length is enough big to hold max data length converted
    59 // Length is enough big to hold max data length converted
    63 // to 7-bit characters.
    60 // to 7-bit characters.
    64 const TInt KDataStringMaxLength = 300;
    61 const TInt KDataStringMaxLength = 300;
    65 
    62 
    67 const TUint8 KSiftedSixTimes = 0x06;
    64 const TUint8 KSiftedSixTimes = 0x06;
    68 const TUint8 KSpareBitsMask = 0x07; // Mask bits 1-3.
    65 const TUint8 KSpareBitsMask = 0x07; // Mask bits 1-3.
    69 const TUint8 KCountryInitialsMask = 0x08; // Mask bit 4.
    66 const TUint8 KCountryInitialsMask = 0x08; // Mask bit 4.
    70 const TUint8 KCodingSchemeMask = 0x70; // Mask bits 5-7.
    67 const TUint8 KCodingSchemeMask = 0x70; // Mask bits 5-7.
    71 
    68 
    72 // Wild char mask for BCD code checking.
    69 // Wild char 'D' for OPL rule checking.
    73 const TUint8 KBCDWildChar = 0x0D;
    70 const TUint16 KWildCharD = 0x000D;
    74 // Character mask.
    71 // Wild char 'F' for OPL rule checking.
    75 const TUint8 KBCDOneCharMask = 0x0F;
    72 const TUint16 KWildCharF = 0x000F;
    76 
    73 
    77 // Extended table.
    74 // Extended table.
    78 const TUint8 KExtendedTable = 0x1B;
    75 const TUint8 KExtendedTable = 0x1B;
    79 
    76 
    80 // Message data buffer length for PMM write request (74 bytes).
    77 // Message data buffer length for PMM write request (74 bytes).
   205     iOperNameInfo.iName.Zero();
   202     iOperNameInfo.iName.Zero();
   206 
   203 
   207     // Initialization of Operator Name String (ONS).
   204     // Initialization of Operator Name String (ONS).
   208     iOperatorNameString.Zero();
   205     iOperatorNameString.Zero();
   209 
   206 
       
   207     // Initialize custom EONS and NITZ name buffers.
       
   208     iCustomNitzLongNameString.Zero();
       
   209     iCustomNitzShortNameString.Zero();
       
   210     iCustomEonsNameString.Zero();
       
   211 
   210     // Operator PLMN list available flag initialization.
   212     // Operator PLMN list available flag initialization.
   211     iOplListAvailable = EFalse;
   213     iOplListAvailable = EFalse;
   212 
   214 
   213     // OPL rules read flag initialization.
   215     // OPL rules read flag initialization.
   214     iOplRulesRead = EFalse;
   216     iOplRulesRead = EFalse;
   270     // Reset NITZ data.
   272     // Reset NITZ data.
   271     iNitzName.iMCC = 0;
   273     iNitzName.iMCC = 0;
   272     iNitzName.iMNC = 0;
   274     iNitzName.iMNC = 0;
   273     iNitzName.iLongName.Zero();
   275     iNitzName.iLongName.Zero();
   274     iNitzName.iShortName.Zero();
   276     iNitzName.iShortName.Zero();
       
   277     iCustomNitzLongNameString.Zero();
       
   278     iCustomNitzShortNameString.Zero();
   275 
   279 
   276     // Initialize.
   280     // Initialize.
   277     TUint tempMCC( 0 ); // Mobile Country Code
   281     TUint tempMCC( 0 ); // Mobile Country Code
   278     TUint tempMNC( 0 ); // Mobile Network Code
   282     TUint tempMNC( 0 ); // Mobile Network Code
   279     TUint sbStartOffSet( 0 );
   283     TUint sbStartOffSet( 0 );
   328             ENetNitzName,
   332             ENetNitzName,
   329             iNitzName.iMCC,
   333             iNitzName.iMCC,
   330             nitzFullNameData,
   334             nitzFullNameData,
   331             longNitzName );
   335             longNitzName );
   332 
   336 
       
   337         // Store NITZ Long name for custom request use.
       
   338         iCustomNitzLongNameString.Copy( longNitzName );
       
   339 
   333         // Store NITZ Long name.
   340         // Store NITZ Long name.
   334         iNitzName.iLongName.Copy( longNitzName.Left(
   341         iNitzName.iLongName.Copy( longNitzName.Left(
   335             iNitzName.iLongName.MaxLength() ) );
   342             iNitzName.iLongName.MaxLength() ) );
   336         }
   343         }
   337 
   344 
   363             ENetNitzName,
   370             ENetNitzName,
   364             iNitzName.iMCC,
   371             iNitzName.iMCC,
   365             nitzShortNameData,
   372             nitzShortNameData,
   366             shortNitzName );
   373             shortNitzName );
   367 
   374 
       
   375         // Store NITZ Short name for custom request use.
       
   376         iCustomNitzShortNameString.Copy( shortNitzName );
       
   377 
   368         // Store NITZ Short name.
   378         // Store NITZ Short name.
   369         iNitzName.iShortName.Copy( shortNitzName.Left(
   379         iNitzName.iShortName.Copy( shortNitzName.Left(
   370             iNitzName.iShortName.MaxLength() ) );
   380             iNitzName.iShortName.MaxLength() ) );
   371         }
   381         }
   372 
   382 
   373 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iMCC: %d", iNitzName.iMCC);
   383 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iMCC: %d", iNitzName.iMCC);
   374 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iMNC: %d", iNitzName.iMNC);
   384 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iMNC: %d", iNitzName.iMNC);
   375 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iLongName: %S", &iNitzName.iLongName);
   385 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iLongName: %S", &iNitzName.iLongName);
   376 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iShortName: %S", &iNitzName.iShortName);
   386 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iShortName: %S", &iNitzName.iShortName);
       
   387 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iCustomNitzLongNameString: %S", &iCustomNitzLongNameString);
       
   388 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::NetNitzNameInd - iCustomNitzShortNameString: %S", &iCustomNitzShortNameString);
   377 OstTrace1( TRACE_NORMAL, DUP3_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iMCC=%u", iNitzName.iMCC );
   389 OstTrace1( TRACE_NORMAL, DUP3_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iMCC=%u", iNitzName.iMCC );
   378 OstTrace1( TRACE_NORMAL, DUP4_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iMNC=%u", iNitzName.iMNC );
   390 OstTrace1( TRACE_NORMAL, DUP4_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iMNC=%u", iNitzName.iMNC );
   379 OstTraceExt1( TRACE_NORMAL, DUP5_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iLongName=%S", iNitzName.iLongName );
   391 OstTraceExt1( TRACE_NORMAL, DUP5_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iLongName=%S", iNitzName.iLongName );
   380 OstTraceExt1( TRACE_NORMAL, DUP6_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iShortName=%S", iNitzName.iShortName );
   392 OstTraceExt1( TRACE_NORMAL, DUP6_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iNitzName.iShortName=%S", iNitzName.iShortName );
       
   393 OstTraceExt1( TRACE_NORMAL, DUP7_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iCustomNitzLongNameString=%S", iCustomNitzLongNameString );
       
   394 OstTraceExt1( TRACE_NORMAL, DUP8_CMMNETOPERATORNAMEHANDLER_NETNITZNAMEIND, "CMmNetOperatorNameHandler::NetNitzNameInd - iCustomNitzShortNameString=%S", iCustomNitzShortNameString );
   381 
   395 
   382     // Compare NITZ name got in NET_NITZ_NAME_IND to stored values in PMM.
   396     // Compare NITZ name got in NET_NITZ_NAME_IND to stored values in PMM.
   383     CompareNitzNameToPmmValues();
   397     CompareNitzNameToPmmValues();
       
   398 
       
   399     // last received NET_MODEM_REG_STATUS_IND is needed to handle again
       
   400     // so that NITZ information is updated to upper layers
       
   401     iNetMessHandler->HandleLastNetModemRegStatusInd();
   384     }
   402     }
   385 
   403 
   386 // -----------------------------------------------------------------------------
   404 // -----------------------------------------------------------------------------
   387 // CMmNetOperatorNameHandler::ConvertOperatorName
   405 // CMmNetOperatorNameHandler::ConvertOperatorName
   388 // Convert received data to operator name string according to coding scheme.
   406 // Convert received data to operator name string according to coding scheme.
  1795             // Copy NITZ data got from PMM.
  1813             // Copy NITZ data got from PMM.
  1796             iNitzNamePmm.iMCC = tempMCC;
  1814             iNitzNamePmm.iMCC = tempMCC;
  1797             iNitzNamePmm.iMNC = tempMNC;
  1815             iNitzNamePmm.iMNC = tempMNC;
  1798             iNitzNamePmm.iLongName.Copy( tempLongName );
  1816             iNitzNamePmm.iLongName.Copy( tempLongName );
  1799             iNitzNamePmm.iShortName.Copy( tempShortName );
  1817             iNitzNamePmm.iShortName.Copy( tempShortName );
  1800 
  1818             iCustomNitzLongNameString.Copy( tempLongName );
       
  1819             iCustomNitzShortNameString.Copy( tempShortName );
  1801             // Copy name data to iNitzName struct to keep PMM data in handle.
  1820             // Copy name data to iNitzName struct to keep PMM data in handle.
  1802             iNitzName = iNitzNamePmm;
  1821             iNitzName = iNitzNamePmm;
  1803             }
  1822             }
  1804         }
  1823         }
  1805     else
  1824     else
  2083     return tempPnnIdentifier;
  2102     return tempPnnIdentifier;
  2084     }
  2103     }
  2085 
  2104 
  2086 // -----------------------------------------------------------------------------
  2105 // -----------------------------------------------------------------------------
  2087 // CMmNetOperatorNameHandler::OplRuleRecordChecker
  2106 // CMmNetOperatorNameHandler::OplRuleRecordChecker
  2088 // Checks one OPL rule record against received Operator Code in BCD format
  2107 // Checks one OPL rule record against received Operator Code and LAC value.
  2089 // and LAC value.
       
  2090 // -----------------------------------------------------------------------------
  2108 // -----------------------------------------------------------------------------
  2091 //
  2109 //
  2092 void CMmNetOperatorNameHandler::OplRuleRecordChecker
  2110 void CMmNetOperatorNameHandler::OplRuleRecordChecker
  2093         (
  2111         (
  2094         TUint8 aIndex, // Record index
  2112         TUint8 aIndex, // Record index
  2097         )
  2115         )
  2098     {
  2116     {
  2099 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker");
  2117 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker");
  2100 OstTrace0( TRACE_NORMAL, CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker" );
  2118 OstTrace0( TRACE_NORMAL, CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker" );
  2101 
  2119 
  2102     // Temp data.
  2120     // Buffer for SIM Operator code, length is 3.
  2103     TUint8 operCodeChar( 0 );
  2121     TBuf8<KBCDLength> simOperatorCode;
  2104     TUint8 plmnListChar( 0 );
  2122 
  2105 
  2123     TUint16 bcchMcc1( 0 );
  2106     // Setting ret value to KErrNone first to get compare working.
  2124     TUint16 bcchMcc2( 0 );
  2107     TInt ret( KErrNone );
  2125     TUint16 bcchMcc3( 0 );
  2108 
  2126 
  2109     // Compare one BCD code byte at time.
  2127     TUint16 bcchMnc1( 0 );
  2110     for ( TUint8 i = 0; i < KBCDLength; i++ )
  2128     TUint16 bcchMnc2( 0 );
  2111         {
  2129     TUint16 bcchMnc3( 0 );
  2112         if ( KErrNone == ret )
  2130 
  2113             {
  2131     TUint16 simMcc1( 0 );
  2114             // Check upper part of byte.
  2132     TUint16 simMcc2( 0 );
  2115             operCodeChar = ( aOperCode[i] >> 4 ) & KBCDOneCharMask;
  2133     TUint16 simMcc3( 0 );
  2116             plmnListChar =
  2134 
  2117                 ( iOperatorPlmnListTable[aIndex].iOperCodeBCD[i] >> 4 ) &
  2135     TUint16 simMnc1( 0 );
  2118                 KBCDOneCharMask;
  2136     TUint16 simMnc2( 0 );
  2119 
  2137     TUint16 simMnc3( 0 );
  2120             ret = BCDCharChecker( operCodeChar, plmnListChar );
  2138 
  2121 
  2139     TUint bcchMccNumber( 0 );
  2122             // Continue checking lower part if previous matches.
  2140 
  2123             if ( KErrNone == ret )
  2141     // BCCH MCC/MNC mapping.
       
  2142     CMmStaticUtility::GetMccCodes( aOperCode, &bcchMcc1, &bcchMcc2, &bcchMcc3 );
       
  2143     CMmStaticUtility::GetMncCodes( aOperCode, &bcchMnc1, &bcchMnc2, &bcchMnc3 );
       
  2144 
       
  2145 TFLOGSTRING4("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - BCCH MCC1 MCC2 MCC3 : %X %X %X", bcchMcc1, bcchMcc2, bcchMcc3);
       
  2146 TFLOGSTRING4("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - BCCH MNC1 MNC2 MNC3 : %X %X %X", bcchMnc1, bcchMnc2, bcchMnc3);
       
  2147 OstTraceExt3( TRACE_NORMAL, DUP6_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - BCCH MCC1 MCC2 MCC3 : %hx %hx %hx", bcchMcc1, bcchMcc2, bcchMcc3 );
       
  2148 OstTraceExt3( TRACE_NORMAL, DUP7_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - BCCH MNC1 MNC2 MNC3 : %hx %hx %hx", bcchMnc1, bcchMnc2, bcchMnc3 );
       
  2149 
       
  2150     // BCCH MCC.
       
  2151     bcchMccNumber = 100 * bcchMcc1 + 10 * bcchMcc2 + bcchMcc3;
       
  2152 
       
  2153     // SIM operator code in BCD string format.
       
  2154     simOperatorCode.Copy( iOperatorPlmnListTable[aIndex].iOperCodeBCD );
       
  2155 
       
  2156     // SIM MCC/MNC mapping.
       
  2157     CMmStaticUtility::GetMccCodes( simOperatorCode, &simMcc1, &simMcc2, &simMcc3 );
       
  2158     CMmStaticUtility::GetMncCodes( simOperatorCode, &simMnc1, &simMnc2, &simMnc3 );
       
  2159 
       
  2160 TFLOGSTRING4("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - SIM MCC1 MCC2 MCC3 : %X %X %X", simMcc1, simMcc2, simMcc3);
       
  2161 TFLOGSTRING4("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - SIM MNC1 MNC2 MNC3 : %X %X %X", simMnc1, simMnc2, simMnc3);
       
  2162 OstTraceExt3( TRACE_NORMAL, DUP8_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - SIM MCC1 MCC2 MCC3 : %hx %hx %hx", simMcc1, simMcc2, simMcc3 );
       
  2163 OstTraceExt3( TRACE_NORMAL, DUP9_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - SIM MNC1 MNC2 MNC3 : %hx %hx %hx", simMnc1, simMnc2, simMnc3 );
       
  2164 
       
  2165     // Flag for OPL rule checking.
       
  2166     TBool digitMatch( EFalse );
       
  2167 
       
  2168     // - BCD value of 'D' in any of the MCC and/or MNC digits shall be used
       
  2169     //   to indicate a "wild" value for that corresponding MCC/MNC digit.
       
  2170     //   3GPP spec 31.102/4.2.59.
       
  2171     // - Other special cases for handling of OPL rules.
       
  2172     //   3GPP 23.122 Annex A.
       
  2173 
       
  2174     // SIM MCC = BCCH MCC.
       
  2175     if ( ( bcchMcc1 == simMcc1 || KWildCharD == simMcc1 )
       
  2176         && ( bcchMcc2 == simMcc2 || KWildCharD == simMcc2 )
       
  2177         && ( bcchMcc3 == simMcc3 || KWildCharD == simMcc3 ) )
       
  2178         {
       
  2179         // 1st and 2nd digit SIM MNC and BCCH MNC match.
       
  2180         if ( ( bcchMnc1 == simMnc1 || KWildCharD == simMnc1 )
       
  2181             && ( bcchMnc2 == simMnc2 || KWildCharD == simMnc2 ) )
       
  2182             {
       
  2183             // 3rd digit SIM MNC and BCCH MNC match.
       
  2184             if ( bcchMnc3 == simMnc3 || KWildCharD == simMnc3 )
  2124                 {
  2185                 {
  2125                 // Check lower part of byte.
  2186                 // Match.
  2126                 operCodeChar = aOperCode[i] & KBCDOneCharMask;
  2187                 digitMatch = ETrue;
  2127                 plmnListChar =
       
  2128                     iOperatorPlmnListTable[aIndex].iOperCodeBCD[i] &
       
  2129                     KBCDOneCharMask;
       
  2130 
       
  2131                 ret = BCDCharChecker( operCodeChar, plmnListChar );
       
  2132                 }
  2188                 }
  2133             }
  2189             else
       
  2190                 {
       
  2191                 // Check whether the PLMN is from country where '0'
       
  2192                 // and 'F' are treated equally in MNC digit 3.
       
  2193                 // BCCH MCC in the range 302, 310-316.
       
  2194                 if ( 302 == bcchMccNumber
       
  2195                     || 310 == bcchMccNumber
       
  2196                     || 311 == bcchMccNumber
       
  2197                     || 312 == bcchMccNumber
       
  2198                     || 313 == bcchMccNumber
       
  2199                     || 314 == bcchMccNumber
       
  2200                     || 315 == bcchMccNumber
       
  2201                     || 316 == bcchMccNumber )
       
  2202                     {
       
  2203                     if ( ( 0 == bcchMnc3 && KWildCharF == simMnc3 )
       
  2204                         || ( KWildCharF == bcchMnc3 && 0 == simMnc3 ) )
       
  2205                         {
       
  2206                         // Match.
       
  2207                         digitMatch = ETrue;
       
  2208                         }
       
  2209                     else
       
  2210                         {
       
  2211                         // No match.
       
  2212                         digitMatch = EFalse;
       
  2213                         }
       
  2214                     }
       
  2215                 else
       
  2216                     {
       
  2217                     // No match.
       
  2218                     digitMatch = EFalse;
       
  2219                     }
       
  2220                 }
       
  2221             }
       
  2222         else
       
  2223             {
       
  2224             // No match.
       
  2225             digitMatch = EFalse;
       
  2226             }
       
  2227         }
       
  2228     else
       
  2229         {
       
  2230         // No match.
       
  2231         digitMatch = EFalse;
  2134         }
  2232         }
  2135 
  2233 
  2136     // Compare Location Area Value information.
  2234     // Compare Location Area Value information.
  2137     // LAC should be in between upper and lower limit.
  2235     // LAC should be in between upper and lower limit.
  2138     //
  2236     //
  2139     // If BCD code match then continue to check LAC values.
  2237     // If MCC and MNC code match then continue to check LAC values.
  2140     if ( KErrNone == ret )
  2238     if ( digitMatch )
  2141         {
  2239         {
  2142 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - BCD code match");
  2240 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - MCC and MNC match");
  2143 OstTrace0( TRACE_NORMAL, DUP1_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - BCD code match" );
  2241 OstTrace0( TRACE_NORMAL, DUP1_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - MCC and MNC match" );
       
  2242 
       
  2243 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - BCCH LAC: %d", aLac);
       
  2244 TFLOGSTRING3("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - SIM LAC between: %d - %d", iOperatorPlmnListTable[aIndex].iLACUpperLimit, iOperatorPlmnListTable[aIndex].iLACLowerLimit);
       
  2245 OstTrace1( TRACE_NORMAL, DUP10_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - BCCH LAC: %u", aLac );
       
  2246 OstTraceExt2( TRACE_NORMAL, DUP11_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - SIM LAC between: %u - %u", iOperatorPlmnListTable[aIndex].iLACUpperLimit, iOperatorPlmnListTable[aIndex].iLACLowerLimit );
       
  2247 
  2144         if ( ( aLac <= iOperatorPlmnListTable[aIndex].iLACUpperLimit )
  2248         if ( ( aLac <= iOperatorPlmnListTable[aIndex].iLACUpperLimit )
  2145             && ( aLac >= iOperatorPlmnListTable[aIndex].iLACLowerLimit ) )
  2249             && ( aLac >= iOperatorPlmnListTable[aIndex].iLACLowerLimit ) )
  2146             {
  2250             {
  2147 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - LAC match => OPL Rule match");
  2251 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - LAC match => OPL Rule match");
  2148 OstTrace0( TRACE_NORMAL, DUP2_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - LAC match => OPL Rule match" );
  2252 OstTrace0( TRACE_NORMAL, DUP2_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - LAC match => OPL Rule match" );
  2149             // Both BCD code and LAC value match.
  2253             // MCC, MNC and LAC value match.
  2150             // Set iOplRuleMatch value to ETrue.
  2254             // Set iOplRuleMatch value to ETrue.
  2151             // This informs that OPL record match.
  2255             // This informs that OPL record match.
  2152             iOplRuleMatch = ETrue;
  2256             iOplRuleMatch = ETrue;
  2153             }
  2257             }
  2154         else
  2258         else
  2161             iOplRuleMatch = EFalse;
  2265             iOplRuleMatch = EFalse;
  2162             }
  2266             }
  2163         }
  2267         }
  2164     else
  2268     else
  2165         {
  2269         {
  2166 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - BCD code didn't match => OPL Rule doesn't match");
  2270 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - MCC or MNC didn't match => OPL Rule doesn't match");
  2167 OstTrace0( TRACE_NORMAL, DUP4_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - BCD code didn't match => OPL Rule doesn't match" );
  2271 OstTrace0( TRACE_NORMAL, DUP4_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker - MCC or MNC didn't match => OPL Rule doesn't match" );
  2168         // Set iOplRuleMatch value to EFalse.
  2272         // Set iOplRuleMatch value to EFalse.
  2169         // This informs that OPL record didn't match.
  2273         // This informs that OPL record didn't match.
  2170         iOplRuleMatch = EFalse;
  2274         iOplRuleMatch = EFalse;
  2171         }
  2275         }
  2172 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - OPL Rule Match value T/F: %d", iOplRuleMatch);
  2276 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::OplRuleRecordChecker - OPL Rule Match value T/F: %d", iOplRuleMatch);
  2173 OstTrace1( TRACE_NORMAL, DUP6_CMMNETOPERATORNAMEHANDLER_OPLRULERECORDCHECKER, "CMmNetOperatorNameHandler::OplRuleRecordChecker;iOplRuleMatch=%d", iOplRuleMatch );
       
  2174     }
       
  2175 
       
  2176 // -----------------------------------------------------------------------------
       
  2177 // CMmNetOperatorNameHandler::BCDCharChecker
       
  2178 // Check BCD char against rule to find out is that matching with OPL list.
       
  2179 // -----------------------------------------------------------------------------
       
  2180 //
       
  2181 TInt CMmNetOperatorNameHandler::BCDCharChecker
       
  2182         (
       
  2183         TUint8 aOperCodeChar,
       
  2184         TUint8 aPlmnListChar
       
  2185         )
       
  2186     {
       
  2187 TFLOGSTRING3("TSY: CMmNetOperatorNameHandler::BCDCharChecker - Operator code char : Plmn list char = %X : %X", aOperCodeChar, aPlmnListChar);
       
  2188 OstTraceExt2( TRACE_NORMAL, DUP2_CMMNETOPERATORNAMEHANDLER_BCDCHARCHECKER, "CMmNetOperatorNameHandler::BCDCharChecker - Operator code char : Plmn list char = %hhx : %hhx", aOperCodeChar, aPlmnListChar );
       
  2189 
       
  2190     TInt ret( KErrGeneral );
       
  2191 
       
  2192     // Check character.
       
  2193     // Operator code character needs to match OPL list Operator character
       
  2194     // or if OPL list character value is 'D' it indicates "wild" value what
       
  2195     // corresponding to all values.
       
  2196     if ( aOperCodeChar == aPlmnListChar || KBCDWildChar == aPlmnListChar )
       
  2197         {
       
  2198 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::BCDCharChecker - Character match");
       
  2199 OstTrace0( TRACE_NORMAL, DUP1_CMMNETOPERATORNAMEHANDLER_BCDCHARCHECKER, "CMmNetOperatorNameHandler::BCDCharChecker - Character match" );
       
  2200         // Character match.
       
  2201         ret = KErrNone;
       
  2202         }
       
  2203     // No else, ret is already set to KErrGeneral.
       
  2204 
       
  2205     return ret;
       
  2206     }
  2277     }
  2207 
  2278 
  2208 // -----------------------------------------------------------------------------
  2279 // -----------------------------------------------------------------------------
  2209 // CMmNetOperatorNameHandler::CopyEonsName
  2280 // CMmNetOperatorNameHandler::CopyEonsName
  2210 // Copy EONS Long and Short names if exist.
  2281 // Copy EONS Long and Short names if exist.
  2228         // Copy EONS Long name.
  2299         // Copy EONS Long name.
  2229         aNetworkData.iLongName.Copy( iEonsName.iLongName );
  2300         aNetworkData.iLongName.Copy( iEonsName.iLongName );
  2230 
  2301 
  2231         // Add Operator name info data.
  2302         // Add Operator name info data.
  2232         iOperNameInfo.iType = RMmCustomAPI::EOperatorNameFlexiblePlmn;
  2303         iOperNameInfo.iType = RMmCustomAPI::EOperatorNameFlexiblePlmn;
  2233         iOperNameInfo.iName.Copy( iEonsName.iLongName );
  2304         iOperNameInfo.iName.Copy( iCustomEonsNameString );
  2234 
  2305 
  2235         // Copy Short EONS name if exist.
  2306         // Copy Short EONS name if exist.
  2236         if ( 0 < iEonsName.iShortName.Length() )
  2307         if ( 0 < iEonsName.iShortName.Length() )
  2237             {
  2308             {
  2238 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::CopyEonsName - EONS Short name");
  2309 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::CopyEonsName - EONS Short name");
  2273             // Copy NITZ Long name.
  2344             // Copy NITZ Long name.
  2274             aNetworkData.iLongName.Copy( iNitzName.iLongName );
  2345             aNetworkData.iLongName.Copy( iNitzName.iLongName );
  2275 
  2346 
  2276             // Add Operator name info data.
  2347             // Add Operator name info data.
  2277             iOperNameInfo.iType = RMmCustomAPI::EOperatorNameNitzFull;
  2348             iOperNameInfo.iType = RMmCustomAPI::EOperatorNameNitzFull;
  2278             iOperNameInfo.iName.Copy( iNitzName.iLongName );
  2349             iOperNameInfo.iName.Copy( iCustomNitzLongNameString );
  2279             }
  2350             }
  2280 
  2351 
  2281         // Copy Short NITZ name if exist.
  2352         // Copy Short NITZ name if exist.
  2282         if ( 0 < iNitzName.iShortName.Length() )
  2353         if ( 0 < iNitzName.iShortName.Length() )
  2283             {
  2354             {
  2287             // If NITZ Long name not exist.
  2358             // If NITZ Long name not exist.
  2288             if ( 0 == iNitzName.iLongName.Length() )
  2359             if ( 0 == iNitzName.iLongName.Length() )
  2289                 {
  2360                 {
  2290                 // Add Operator name info data.
  2361                 // Add Operator name info data.
  2291                 iOperNameInfo.iType = RMmCustomAPI::EOperatorNameNitzShort;
  2362                 iOperNameInfo.iType = RMmCustomAPI::EOperatorNameNitzShort;
  2292                 iOperNameInfo.iName.Copy( iNitzName.iShortName );
  2363                 iOperNameInfo.iName.Copy( iCustomNitzShortNameString );
  2293                 }
  2364                 }
  2294             }
  2365             }
  2295         }
  2366         }
  2296     }
  2367     }
  2297 
  2368 
  3072     if ( UICC_STATUS_OK == aStatus && dataLength > 2 && aFileData[0] == 0x43 )
  3143     if ( UICC_STATUS_OK == aStatus && dataLength > 2 && aFileData[0] == 0x43 )
  3073         {
  3144         {
  3074         // Reset EONS names.
  3145         // Reset EONS names.
  3075         iEonsName.iLongName.Zero();
  3146         iEonsName.iLongName.Zero();
  3076         iEonsName.iShortName.Zero();
  3147         iEonsName.iShortName.Zero();
       
  3148         iCustomEonsNameString.Zero();
  3077 
  3149 
  3078         // Temporary buffer for full EONS name. Full name is mandatory.
  3150         // Temporary buffer for full EONS name. Full name is mandatory.
  3079         TBuf<KMaxLengthOfOperatorName> longEonsName;
  3151         TBuf<KMaxLengthOfOperatorName> longEonsName;
  3080         // Get the length of full EONS name
  3152         // Get the length of full EONS name
  3081         TUint8 lengthOfFullName( aFileData[1] );
  3153         TUint8 lengthOfFullName( aFileData[1] );
  3085         ConvertOperatorName(
  3157         ConvertOperatorName(
  3086             ENetEonsName,
  3158             ENetEonsName,
  3087             iEonsName.iMCC,
  3159             iEonsName.iMCC,
  3088             eonsFullNameData,
  3160             eonsFullNameData,
  3089             longEonsName );
  3161             longEonsName );
       
  3162 
       
  3163         // Store EONS Long name for custom request use.
       
  3164         iCustomEonsNameString.Copy( longEonsName );
       
  3165 
  3090         // Store EONS long name.
  3166         // Store EONS long name.
  3091         iEonsName.iLongName.Copy( longEonsName.Left(
  3167         iEonsName.iLongName.Copy( longEonsName.Left(
  3092             iEonsName.iLongName.MaxLength() ) );
  3168             iEonsName.iLongName.MaxLength() ) );
       
  3169 
  3093         // Check if long name was read succesfully.
  3170         // Check if long name was read succesfully.
  3094         if ( 0 < iEonsName.iLongName.Length() )
  3171         if ( 0 < iEonsName.iLongName.Length() )
  3095             {
  3172             {
  3096             // PNN record read successfully.
  3173             // PNN record read successfully.
  3097             pnnRecordAvailable = ETrue;
  3174             pnnRecordAvailable = ETrue;
  3123 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iMCC: %d", iEonsName.iMCC);
  3200 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iMCC: %d", iEonsName.iMCC);
  3124 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iMNC: %d", iEonsName.iMNC);
  3201 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iMNC: %d", iEonsName.iMNC);
  3125 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iLongName: %S", &iEonsName.iLongName);
  3202 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iLongName: %S", &iEonsName.iLongName);
  3126 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iShortName: %S", &iEonsName.iShortName);
  3203 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iShortName: %S", &iEonsName.iShortName);
  3127 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iPNNIdentifier: %d", iEonsName.iPNNIdentifier);
  3204 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iEonsName.iPNNIdentifier: %d", iEonsName.iPNNIdentifier);
       
  3205 TFLOGSTRING2("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - iCustomEonsNameString: %S", &iCustomEonsNameString);
       
  3206 
  3128 OstTrace1( TRACE_NORMAL, CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iMCC=%u", iEonsName.iMCC );
  3207 OstTrace1( TRACE_NORMAL, CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iMCC=%u", iEonsName.iMCC );
  3129 OstTrace1( TRACE_NORMAL, DUP1_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iMNC=%u", iEonsName.iMNC );
  3208 OstTrace1( TRACE_NORMAL, DUP1_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iMNC=%u", iEonsName.iMNC );
  3130 OstTraceExt1( TRACE_NORMAL, DUP2_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iLongName=%S", iEonsName.iLongName );
  3209 OstTraceExt1( TRACE_NORMAL, DUP2_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iLongName=%S", iEonsName.iLongName );
  3131 OstTraceExt1( TRACE_NORMAL, DUP3_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iShortName=%S", iEonsName.iShortName );
  3210 OstTraceExt1( TRACE_NORMAL, DUP3_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iShortName=%S", iEonsName.iShortName );
  3132 OstTraceExt1( TRACE_NORMAL, DUP4_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iPNNIdentifier=%hhu", iEonsName.iPNNIdentifier );
  3211 OstTraceExt1( TRACE_NORMAL, DUP4_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iEonsName.iPNNIdentifier=%hhu", iEonsName.iPNNIdentifier );
       
  3212 OstTraceExt1( TRACE_NORMAL, DUP23_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL;iCustomEonsNameString=%S", iCustomEonsNameString );
  3133         }
  3213         }
  3134     else
  3214     else
  3135         {
  3215         {
  3136 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - Error occured, data not available");
  3216 TFLOGSTRING("TSY: CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL - Error occured, data not available");
  3137 OstTrace0( TRACE_NORMAL, DUP5_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL- Error occured, data not available" );
  3217 OstTrace0( TRACE_NORMAL, DUP5_CMMNETOPERATORNAMEHANDLER_UICCOPERATORRESPREADPNNL, "CMmNetOperatorNameHandler::UiccOperatorRespReadPnnL- Error occured, data not available" );
  3139         // Data not available. Cause may be that file does not exist
  3219         // Data not available. Cause may be that file does not exist
  3140         // on (U)SIM card, or requested record does not exist in file.
  3220         // on (U)SIM card, or requested record does not exist in file.
  3141         // Reset EONS names.
  3221         // Reset EONS names.
  3142         iEonsName.iLongName.Zero();
  3222         iEonsName.iLongName.Zero();
  3143         iEonsName.iShortName.Zero();
  3223         iEonsName.iShortName.Zero();
       
  3224         iCustomEonsNameString.Zero();
  3144         }
  3225         }
  3145 
  3226 
  3146     // This completes NetModemRegStatusInd method IPC
  3227     // This completes NetModemRegStatusInd method IPC
  3147     // EMobilePhoneNotifyCurrentNetworkChange value with EONS name.
  3228     // EMobilePhoneNotifyCurrentNetworkChange value with EONS name.
  3148     if ( iFromGetOperatorName )
  3229     if ( iFromGetOperatorName )