phoneclientserver/EnPolicy/Src/DosEnPolicy/CDOSEmergencyNumberPolicy.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/phoneclientserver/EnPolicy/Src/DosEnPolicy/CDOSEmergencyNumberPolicy.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,399 +0,0 @@
-/*
-* Copyright (c) 2004-2005 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:  Provides DOS emergency number policy API implementation.
-*
-*/
-
-
-// INCLUDE FILES
-#include "cdosemergencynumberpolicy.h" 
-#include <mmtsy_names.h>
-#include <telservicesvariant.hrh>
-
-#include <centralrepository.h>
-#include <telservicesinternalcrkeys.h>
-#include <defaultemergencynumberscrkeys.h>
-
-// CONSTANT
-const TInt KDosEmergencyNumberMaxLength = 6;
-//Prefix for Sip.
-_LIT( KSipPrefix, "sip:" );
-//Prefix for Tel.
-_LIT( KTelPrefix, "tel:" );
-//Prefix for Sos.
-_LIT( KSosPrefix, "sos:" );
-// @ char
-_LIT( KAt, "@" );
-// Prefix length
-const TInt KPrefixLength = 4;
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CDosEmergencyNumberPolicy::~CDosEmergencyNumberPolicy()
-// -----------------------------------------------------------------------------
-//
-CDosEmergencyNumberPolicy::~CDosEmergencyNumberPolicy()
-    {
-    if ( iListener )
-        {
-        iListener->StopListening();
-        delete iListener;
-        }
-    delete iCenRep;
-
-    iProductSpecificList.Zero();
-
-    iCustomPhone.Close();
-    iMobilePhone.Close();
-    }
-
-// -----------------------------------------------------------------------------
-// CDosEmergencyNumberPolicy::ConstructL()
-// -----------------------------------------------------------------------------
-//
-void CDosEmergencyNumberPolicy::ConstructL( RTelServer& aETelServer )
-    {
-    iETelServer = aETelServer;
-
-    User::LeaveIfError( iMobilePhone.Open( iETelServer , KMmTsyPhoneName ) );
-    User::LeaveIfError( iCustomPhone.Open( iMobilePhone) );
-
-    TInt variantReadOnlyValues = 0;
-    TInt err = KErrNone;
-
-    CRepository* variationFlags = CRepository::NewL( KCRUidTelSrvVariation );
-    err = variationFlags->Get( KTelSrvVariationFlags , variantReadOnlyValues );
-
-    if ( err != KErrNotFound )
-        {
-        User::LeaveIfError( err );
-        }  
-
-    if ( KTelSrvLVFlagAdvancedENCheck & variantReadOnlyValues )
-        {
-        iAdvancedCheck = ETrue;
-        }
-    else
-        {
-        iAdvancedCheck = EFalse;
-        }
-    
-    delete variationFlags;
-
-    iCenRep = CRepository::NewL( KCRUidDefaultEmergencyNumbers );    
-    iListener = CCenRepNotifyHandler::NewL( 
-        *this, 
-        *iCenRep, 
-        CCenRepNotifyHandler::EStringKey, 
-        KDefaultEmergencyNumbersList );
-    
-    iListener->StartListeningL();
-    
-    ReadProductSpecificNumbers();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CDosEmergencyNumberPolicy::IsEmergencyNumberL 
-// 
-// -----------------------------------------------------------------------------
-//
-TInt CDosEmergencyNumberPolicy::IsEmergencyNumber ( 
-                                    TPhCltTelephoneNumber& aTelNumber, 
-                                    TPhCltEmergencyNumberQueryMode aMode,
-                                    TBool& aIsEmergencyNumber )
-    {   
-    TPhCltTelephoneNumber checkedTelNumber(aTelNumber);
-    ParseNumber( checkedTelNumber );
-    aIsEmergencyNumber = EFalse;
-    RMmCustomAPI::TEmerNumberCheckMode  checkedNumberMode;
-    if ( checkedNumberMode.iNumber.MaxLength() >= checkedTelNumber.Length() ) // aTelNumber -> checkedTelNumber
-        {
-        checkedNumberMode.iNumber = checkedTelNumber; // aTelNumber -> checkedTelNumber
-        }
-    else
-        {
-        // too long, cannot be checked
-        return KErrArgument;
-        }
-
-    // set check type
-    switch ( aMode )
-        {
-        case EPhCltEmergencyNumberQueryModeAdvanced:
-            {
-            // check if it is a product specific number.
-            if ( IsInListByAdvancedMode( checkedTelNumber ) ) // aTelNumber -> checkedTelNumber
-                {
-                aTelNumber = checkedTelNumber; // aTelNumber -> checkedTelNumber
-                aIsEmergencyNumber = ETrue;
-                return KErrNone;
-                }
-            
-            // if TSY doesn't support advanced mode, then check by S60 advanced mode
-            // based on TSY normal mode check.
-            if ( ! iAdvancedCheck )
-                {
-                TInt length = 
-                    Min( checkedTelNumber.Length(), KDosEmergencyNumberMaxLength ); // aTelNumber -> checkedTelNumber
-                checkedNumberMode.iCheckMode = RMmCustomAPI::EEmerNumberCheckNormal;
-
-                TInt result = KErrArgument;
-                while ( ( length > 0 ) && ! aIsEmergencyNumber )
-                    {
-                    checkedNumberMode.iNumber = checkedTelNumber.Right( length ); // aTelNumber -> checkedTelNumber
-                    result = iCustomPhone.CheckEmergencyNumber( 
-                            checkedNumberMode, aIsEmergencyNumber );
-
-                    if ( result == KErrNone && aIsEmergencyNumber )
-                        {
-                        aTelNumber = checkedNumberMode.iNumber;
-                        }
-
-                    length--;
-                    }
-
-                return result;
-                }
-            else
-                {
-                checkedNumberMode.iCheckMode = 
-                    RMmCustomAPI::EEmerNumberCheckAdvanced;
-                }
-            }
-            break;
-        case EPhCltEmergencyNumberQueryModeNormal:
-        case EPhCltEmergencyNumberQueryModeNormalWriteback:
-            // check if it is a product specific number.
-            if ( IsInListByNormalMode( checkedTelNumber ) ) // aTelNumber -> checkedTelNumber
-                {
-                aTelNumber = checkedTelNumber; // aTelNumber -> checkedTelNumber
-                aIsEmergencyNumber = ETrue;
-                return KErrNone;
-                }
-
-            // flow thru
-        default:
-            checkedNumberMode.iCheckMode = 
-                RMmCustomAPI::EEmerNumberCheckNormal;
-            break;
-        }
-
-    // do checking   
-    TInt err = iCustomPhone.CheckEmergencyNumber ( 
-      checkedNumberMode, aIsEmergencyNumber );
-
-    aTelNumber = checkedNumberMode.iNumber;
-   
-    return err;
-    }
-
-// -----------------------------------------------------------------------------
-// CDosEmergencyNumberPolicy::ReadProductSpecificNumbers
-// 
-// Reads product specific values from central repository
-// -----------------------------------------------------------------------------
-//
-void CDosEmergencyNumberPolicy::ReadProductSpecificNumbers()
-    {
-    // This is done only once in bootup phase.
-    iProductSpecificList.Zero();
-
-    TInt err = KErrNone;
-
-
-        err = iCenRep->Get( KDefaultEmergencyNumbersList, 
-                                iProductSpecificList );
-
-    if ( err != KErrNone )
-        {
-        // just to make sure, if central repository has modified it,
-        // even when there was an error.
-        iProductSpecificList.Zero();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CDosEmergencyNumberPolicy::IsInListByAdvancedMode
-// 
-// Checks if the number is in list by advanced mode check.
-//
-// -----------------------------------------------------------------------------
-//
-TBool CDosEmergencyNumberPolicy::IsInListByAdvancedMode ( TDes& aNumber )
-    {    
-    TLex list( iProductSpecificList );
-    TLexMark mark;
-    TPtrC token_candidate( KNullDesC() ) ; 
-    
-    for ( TInt i = 0; i < KEnPolicySDEmergencyNumberListLength; i++ )
-        {
-        list.Mark( mark );
-        list.SkipCharacters();
-        TPtrC token;
-        token.Set( list.MarkedToken( mark ) );
-        if ( token.Length() && ( token == aNumber.Right( token.Length() ) ) )
-            {
-            // _DDPRINT( 4, "ENPolicy.SDM.IsInListAdvanced.ok.", place );
-            if( token_candidate == KNullDesC )
-                { 
-                token_candidate.Set( token ); 
-                } 
-            else 
-                { 
-                if( token.Length() > token_candidate.Length() ) 
-                    { 
-                    token_candidate.Set( token );                          
-                    } 
-                } 
-            } 
-        list.Inc(); 
-        } 
-        
-    if( token_candidate != KNullDesC ) 
-        { 
-        aNumber = token_candidate; 
-        return ETrue; 
-        }    
-
-    return EFalse;   
-    }
-
-// -----------------------------------------------------------------------------
-// CDosEmergencyNumberPolicy::IsInListByNormalMode
-// 
-// Checks if the number is in list by normal mode check.
-//
-// -----------------------------------------------------------------------------
-//
-TBool CDosEmergencyNumberPolicy::IsInListByNormalMode( const TDesC& aNumber )
-    {
-    TInt length = aNumber.Length();
-    TInt place = iProductSpecificList.Find( aNumber ); // first number of aNumber
-
-    // _DDPRINT( 4, "ENPolicy.SDM.IsInListNormal.ok.", place );    // debug print
-
-    if ( place < 0 )
-        {
-        // negative value is an error, not found!
-        // return immediately
-        return EFalse;
-        }
-
-    TInt endOfMatch = place + length; // end of number + 1
-
-    // we check the begining
-    if ( place > 0 )
-        {
-        // we are not in the begining of buffer, so we have to check
-        // char before that
-        if ( iProductSpecificList[ place -1 ] != KEnPolicySDNumberSeparator )
-            {
-            // this was just a substring numbers before that
-            return EFalse;
-            }
-        }
-
-    // beginning was ok, so we can continue
-    
-    // now checking the end
-    // there must be atleast one empty space in the end that
-    // we do the checking of number end.
-    if ( endOfMatch < ( iProductSpecificList.Length() - 2 ) )
-        {
-        if ( iProductSpecificList[ endOfMatch ] != KEnPolicySDNumberSeparator )
-            {
-            return EFalse;
-            }
-        }
-        
-    //match is wrong, only part of ememergency number is matched
-    int newmatchlen = 0;
-    for (int i = place; i < iProductSpecificList.Length(); i++)
-        {
-        if(iProductSpecificList [i] != KEnPolicySDNumberSeparator )
-            newmatchlen++;
-        else
-            break;  
-        }
-        
-        if (length != newmatchlen)
-            {
-            return EFalse;
-            }
-        
-
-    // if we get so far, its ok.
-    return ETrue;
-    }
-    
-// -----------------------------------------------------------------------------
-// CDosEmergencyNumberPolicy::ParserNumber
-// 
-// Removes sip prefixis beging of the number and end of the number after @ char.
-// @ character is also removed.
-//
-// -----------------------------------------------------------------------------
-//
-void CDosEmergencyNumberPolicy::ParseNumber( TPhCltTelephoneNumber& aTelNumber )
-    {
-    // Does number contains prefix. If yes then remove it
-    
-    if ( 0 == aTelNumber.FindC( KSipPrefix ) ||
-         0 == aTelNumber.FindC( KTelPrefix ) ||
-           0 == aTelNumber.FindC( KSosPrefix ) )
-        {
-        aTelNumber.Delete( 0, KPrefixLength );
-          }
-        // Does Number contains domain part. If yes remove it at beging of @ character.
-      TInt atIndex = aTelNumber.Find( KAt );
-      TInt telNumberLength = aTelNumber.Length();
-        if ( 0 < atIndex && 
-             atIndex < telNumberLength )
-        {
-            aTelNumber.Delete( atIndex, telNumberLength - atIndex );
-            }
-    }
-
-// -----------------------------------------------------------------------------
-// CDosEmergencyNumberPolicy::HandleNotifyString
-// 
-// Inherited from MCenRepNotifyHandlerCallback.
-// -----------------------------------------------------------------------------
-//
-void CDosEmergencyNumberPolicy::HandleNotifyString( 
-    TUint32 aId, const TDesC16& aNewValue )
-    {
-    if( aId == KDefaultEmergencyNumbersList )
-        {
-        iProductSpecificList.Zero();
-        iProductSpecificList.Copy( aNewValue );
-        }
-
-    }
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-
-// -----------------------------------------------------------------------------
-// NewEnPolicy()
-// 
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CEmergencyNumberPolicy* NewEnPolicyL()
-    {
-    return new (ELeave) CDosEmergencyNumberPolicy;
-    }
-
-// End of File