convergedconnectionhandler/cchserver/src/cchetelnetworkstatusnotifier.cpp
branchRCL_3
changeset 21 f742655b05bf
parent 20 65a3ef1d5bd0
child 22 d38647835c2e
equal deleted inserted replaced
20:65a3ef1d5bd0 21:f742655b05bf
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  CCchEtelNetworkStatusNotifier implementation
       
    15  *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDES
       
    20 #include "cchetelnetworkstatusnotifier.h"
       
    21 #include "cchclientserver.h"
       
    22 #include "cchuihandler.h"
       
    23 #include <mmtsy_names.h>
       
    24 #include "cchlogger.h"
       
    25 
       
    26 
       
    27 const TUint KCCHEtelRetryDelay  = 1000;
       
    28 // ============================ MEMBER FUNCTIONS ==============================
       
    29 
       
    30 // ----------------------------------------------------------------------------
       
    31 // CCchEtelNetworkStatusNotifier::NewL() 
       
    32 // ----------------------------------------------------------------------------
       
    33 CCchEtelNetworkStatusNotifier* CCchEtelNetworkStatusNotifier::NewL( 
       
    34     MCchEtelNetworkStatusObserver& aEtelNetworkStatusObserver )
       
    35     {
       
    36     CCchEtelNetworkStatusNotifier* self = new(ELeave) 
       
    37         CCchEtelNetworkStatusNotifier( aEtelNetworkStatusObserver );
       
    38     CleanupStack::PushL( self );
       
    39     self->ConstructL();
       
    40     CleanupStack::Pop( self );
       
    41     return self;
       
    42     }
       
    43 
       
    44 // ----------------------------------------------------------------------------
       
    45 // CCchEtelNetworkStatusNotifier::CCchEtelNetworkStatusNotifier() 
       
    46 // ----------------------------------------------------------------------------
       
    47 CCchEtelNetworkStatusNotifier::CCchEtelNetworkStatusNotifier( 
       
    48     MCchEtelNetworkStatusObserver& aEtelNetworkStatusObserver ) 
       
    49     : CActive( EPriorityStandard ), 
       
    50     iEtelNetworkStatusObserver( aEtelNetworkStatusObserver ),
       
    51     iRegistrationStatus( RMobilePhone::ERegistrationUnknown ),
       
    52     iDelay( KCCHEtelRetryDelay )
       
    53     {
       
    54     CActiveScheduler::Add( this );
       
    55     }
       
    56 
       
    57 // ----------------------------------------------------------------------------
       
    58 // CCchEtelNetworkStatusNotifier::ConstructL() 
       
    59 // ----------------------------------------------------------------------------
       
    60 void CCchEtelNetworkStatusNotifier::ConstructL()
       
    61     {    
       
    62     iTimer.CreateLocal();
       
    63     iState = ECCHEtelConnect;
       
    64     Connect();
       
    65     }
       
    66 
       
    67 // ----------------------------------------------------------------------------
       
    68 // CCchEtelNetworkStatusNotifier::~CCchEtelNetworkStatusNotifier() 
       
    69 // ----------------------------------------------------------------------------
       
    70 
       
    71 CCchEtelNetworkStatusNotifier::~CCchEtelNetworkStatusNotifier()
       
    72     {
       
    73     if( IsActive() )
       
    74     	{
       
    75         Cancel();    	
       
    76     	}
       
    77     iPhone.Close();
       
    78     iEtelServer.UnloadPhoneModule( KMmTsyModuleName );
       
    79     iTimer.Close();
       
    80     }
       
    81 
       
    82 // -----------------------------------------------------------------------------
       
    83 // CCchEtelNetworkStatusNotifier::Connect
       
    84 // Handle notification from pubsub session.
       
    85 // -----------------------------------------------------------------------------
       
    86 //
       
    87 void CCchEtelNetworkStatusNotifier::Connect() 
       
    88     {
       
    89     CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::Connect IN" );
       
    90     TInt error( 0 );
       
    91 
       
    92     switch( iState )
       
    93         {
       
    94         case ECCHEtelConnect:
       
    95             error = iEtelServer.Connect();
       
    96             if( error )
       
    97                 {
       
    98                 break;                    
       
    99                 }
       
   100             iState = ECCHEtelLoadModule;
       
   101                 
       
   102         case ECCHEtelLoadModule:
       
   103             error = iEtelServer.LoadPhoneModule( KMmTsyModuleName );
       
   104             if( error )
       
   105                 {
       
   106                 break;                    
       
   107                 }
       
   108             iState = ECCHEtelOpenPhone;
       
   109             
       
   110         case ECCHEtelOpenPhone:
       
   111             error = iPhone.Open( iEtelServer, KMmTsyPhoneName );
       
   112             if( error )
       
   113                 {
       
   114                 break;                    
       
   115                 }
       
   116             else
       
   117                 {
       
   118                 iState = ECCHEtelConnected;                    
       
   119                 iPhone.GetNetworkRegistrationStatus( iStatus, iRegistrationStatus );
       
   120                 }
       
   121                 
       
   122         }
       
   123     if ( error )
       
   124         {
       
   125         iTimer.After( iStatus, iDelay  );
       
   126         iDelay += KCCHEtelRetryDelay;
       
   127         }
       
   128     SetActive();
       
   129     
       
   130     CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::Connect OUT" );
       
   131     }
       
   132 
       
   133 // -----------------------------------------------------------------------------
       
   134 // CCchEtelNetworkStatusNotifier::RunL
       
   135 // Handle notification from pubsub session.
       
   136 // -----------------------------------------------------------------------------
       
   137 //
       
   138 void CCchEtelNetworkStatusNotifier::RunL()
       
   139     {
       
   140     CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::RunL IN" );
       
   141     
       
   142     if ( iState == ECCHEtelConnected )
       
   143        {
       
   144        OrderNotification();
       
   145        
       
   146        if ( RMobilePhone::ENotRegisteredNoService == iRegistrationStatus &&
       
   147                iLastRegistrationStatus != iRegistrationStatus )
       
   148            {
       
   149            iEtelNetworkStatusObserver.MobileNetworkNoService();
       
   150            }
       
   151        
       
   152        iLastRegistrationStatus = iRegistrationStatus;      
       
   153        }
       
   154     else 
       
   155        {
       
   156        Connect();
       
   157        }
       
   158 
       
   159     CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::RunL OUT" );
       
   160     }
       
   161 // -----------------------------------------------------------------------------
       
   162 // CCchEtelNetworkStatusNotifier::DoCancel
       
   163 // Handle cancel order on this active object.
       
   164 // -----------------------------------------------------------------------------
       
   165 //
       
   166 void CCchEtelNetworkStatusNotifier::DoCancel()
       
   167     {
       
   168     CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::DoCancel IN" );
       
   169     if ( EFalse == iNotified )
       
   170         {
       
   171         iPhone.CancelAsyncRequest( 
       
   172             EMobilePhoneGetNetworkRegistrationStatus );
       
   173         }
       
   174     else
       
   175         {
       
   176         iPhone.CancelAsyncRequest( 
       
   177             EMobilePhoneNotifyNetworkRegistrationStatusChange );
       
   178         }
       
   179     iNotified = EFalse;    
       
   180     
       
   181     CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::DoCancel OUT" );
       
   182     }
       
   183 
       
   184 // -----------------------------------------------------------------------------
       
   185 // CCchEtelNetworkStatusNotifier::OrderNotification
       
   186 // Order new notification from CenRep.
       
   187 // -----------------------------------------------------------------------------
       
   188 //
       
   189 void CCchEtelNetworkStatusNotifier::OrderNotification()
       
   190     {
       
   191     CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::OrderNotification IN" );
       
   192     
       
   193     iNotified = ETrue;
       
   194     iPhone.NotifyNetworkRegistrationStatusChange( 
       
   195         iStatus, 
       
   196         iRegistrationStatus );
       
   197     SetActive();
       
   198     
       
   199     CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::OrderNotification OUT" );
       
   200     }
       
   201 
       
   202 // -----------------------------------------------------------------------------
       
   203 // CCchEtelNetworkStatusNotifier::IsNetworkStatusNoService
       
   204 // Is network status no service.
       
   205 // -----------------------------------------------------------------------------
       
   206 //
       
   207 TBool CCchEtelNetworkStatusNotifier::IsNetworkStatusNoService() const
       
   208     {
       
   209     CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::IsNetworkStatusNoService" );
       
   210     
       
   211     if ( RMobilePhone::ENotRegisteredNoService == iRegistrationStatus )
       
   212         {
       
   213         return ETrue;
       
   214         }
       
   215     else
       
   216         {
       
   217         return EFalse;
       
   218         }
       
   219     }
       
   220 
       
   221 // End of file