mmsharing/mmshavailability/src/musavanetworkavailability.cpp
changeset 22 496ad160a278
equal deleted inserted replaced
15:ccd8e69b5392 22:496ad160a278
       
     1 /*
       
     2 * Copyright (c) 2005-2007 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:   Provide interface for the client requestin availability class.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include "musavanetworkavailability.h"
       
    21 #include "musavaavailabilityobserver.h"
       
    22 #include "musavasettingsimp.h"
       
    23 #include "musavanetworkavailability.h"
       
    24 #include "mussesseioninformationapi.h"
       
    25 #include "musavaobserver.h"
       
    26 #include "musavasharedobject.h"
       
    27 #include "muslogger.h"
       
    28 #include "musavacalleventmonitor.h"
       
    29 
       
    30 #include <e32base.h>
       
    31 
       
    32 const TInt KSipUriArrayGranularity = 1;
       
    33 
       
    34 CMusAvaNetworkAvailability* CMusAvaNetworkAvailability::NewL(
       
    35     MMusAvaAvailabilityObserver& aObserver,
       
    36     CMusAvaSettingsImp& aSettings )
       
    37     {
       
    38     CMusAvaNetworkAvailability* self =
       
    39         CMusAvaNetworkAvailability::NewLC(
       
    40             aObserver,
       
    41             aSettings );
       
    42 
       
    43     CleanupStack::Pop( self );
       
    44     return self;
       
    45     }
       
    46 
       
    47 
       
    48 CMusAvaNetworkAvailability* CMusAvaNetworkAvailability::NewLC(
       
    49     MMusAvaAvailabilityObserver& aObserver,
       
    50     CMusAvaSettingsImp& aSettings )
       
    51     {
       
    52     CMusAvaNetworkAvailability* self =
       
    53         new( ELeave ) CMusAvaNetworkAvailability(
       
    54             aObserver,
       
    55             aSettings );
       
    56 
       
    57     CleanupStack::PushL( self );
       
    58     self->ConstructL();
       
    59     return self;
       
    60     }
       
    61 
       
    62 
       
    63 CMusAvaNetworkAvailability::~CMusAvaNetworkAvailability()
       
    64     {
       
    65     if ( iPhoneStatus )
       
    66         {
       
    67         iPhoneStatus->Cancel();
       
    68         }
       
    69     delete iPhoneStatus;
       
    70     iPhoneStatus = NULL;
       
    71     }
       
    72 
       
    73 
       
    74 CMusAvaNetworkAvailability::CMusAvaNetworkAvailability(
       
    75     MMusAvaAvailabilityObserver& aObserver,
       
    76     CMusAvaSettingsImp& aSettings )
       
    77     :CMusAvaAvailability( aObserver ),
       
    78     iSettings( aSettings )
       
    79     {
       
    80     }
       
    81 
       
    82 
       
    83 void CMusAvaNetworkAvailability::ConstructL()
       
    84     {
       
    85     iPhoneStatus = CMusAvaCallEventMonitor::NewL( *this );
       
    86     }
       
    87 
       
    88 
       
    89 // -------------------------------------------------------------------------
       
    90 //  Starts the loopy execution.
       
    91 // -------------------------------------------------------------------------
       
    92 //
       
    93 void CMusAvaNetworkAvailability::DoExecuteL()
       
    94     {
       
    95      MUS_LOG( "mus: [MUSAVA]  -> CMusAvaNetworkAvailability::\
       
    96      Execute()" )
       
    97 
       
    98     // read the current value and subscribe for changes
       
    99     // that's done in RunL    
       
   100     switch (iPhoneStatus->CallStatusL())
       
   101         {
       
   102             case NMusSessionInformationApi::ECallConnected:                 
       
   103                 {
       
   104 				TBuf<CMusAvaCallEventMonitor::KMusTelNumberMaxLength> telNumber;
       
   105 				TBool isSipUri( EFalse );
       
   106 				iPhoneStatus->GetTelNumberL( telNumber, isSipUri );
       
   107 				SetRemoteHostL( telNumber, isSipUri );
       
   108 				iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() );
       
   109 				SetState( MMusAvaObserver::EMusAvaStatusAvailable );
       
   110 				break;
       
   111                 }      
       
   112             case NMusSessionInformationApi::ECallHold:  
       
   113                  SetState( MMusAvaObserver::EMusAvaStatusCallOnHold );
       
   114                  break;
       
   115             case NMusSessionInformationApi::EConferenceCall:
       
   116                  SetState( MMusAvaObserver::EMusAvaStatusConferenceCall );
       
   117                  break;
       
   118             case NMusSessionInformationApi::ENoCall:
       
   119                  SetState( MMusAvaObserver::EMusAvaStatusNoCall );
       
   120                  break;
       
   121             default:
       
   122                  SetState( MMusAvaObserver::EMusAvaStatusNoCall );
       
   123                  break;
       
   124         }
       
   125 
       
   126     // subscribe for the future changes.
       
   127     iPhoneStatus->StartMonitoringL();
       
   128 
       
   129     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaNetworkAvailability::\
       
   130                 ExecutePatternL()" )
       
   131     }
       
   132 
       
   133 
       
   134 void CMusAvaNetworkAvailability::Stop()
       
   135     {
       
   136     iPhoneStatus->Cancel();
       
   137     SetState( MMusAvaObserver::EMusAvaStatusNotExecuted );
       
   138     }
       
   139 
       
   140 
       
   141 MMusAvaObserver::TAvailabilityName CMusAvaNetworkAvailability::Name()
       
   142     {
       
   143     return MMusAvaObserver::EMusAvaNameNetworkStatus;
       
   144     }
       
   145 
       
   146 // -------------------------------------------------------------------------
       
   147 //  This function is called when a cs call is connected.
       
   148 // -------------------------------------------------------------------------
       
   149 //
       
   150 void CMusAvaNetworkAvailability::CallConnectedL( const TDesC& aTelNumber,
       
   151                                                  TBool aIsSipUri)
       
   152     {
       
   153     MUS_LOG( "mus: [MUSAVA]  \
       
   154                 -> CMusAvaNetworkAvailability::CallConnectedL()" )
       
   155     // try to resolve to contact information of the remote host
       
   156 	SetRemoteHostL( aTelNumber, aIsSipUri );
       
   157     iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() );
       
   158     SetState( MMusAvaObserver::EMusAvaStatusAvailable );
       
   159 
       
   160     MUS_LOG( "mus: [MUSAVA]  \
       
   161                 <- CMusAvaNetworkAvailability::CallConnectedL()" )
       
   162     }
       
   163 
       
   164 
       
   165 // -------------------------------------------------------------------------
       
   166 //  This function is called when a cs call goes into a state
       
   167 //  that is not connected.
       
   168 // -------------------------------------------------------------------------
       
   169 //
       
   170 void CMusAvaNetworkAvailability::ConferenceCallL()
       
   171     {
       
   172     MUS_LOG( "mus: [MUSAVA]  \
       
   173             -> CMusAvaNetworkAvailability::ConferenceCallL()" )
       
   174     //Report line status
       
   175     SetState( MMusAvaObserver::EMusAvaStatusConferenceCall );
       
   176     MUS_LOG( "mus: [MUSAVA]  \
       
   177                 <- CMusAvaNetworkAvailability::ConferenceCallL()" )
       
   178     }
       
   179 
       
   180 
       
   181 // -------------------------------------------------------------------------
       
   182 //  This function is called when a cs call goes hold
       
   183 // -------------------------------------------------------------------------
       
   184 //
       
   185 void CMusAvaNetworkAvailability::CallHoldL( const TDesC& aTelNumber,
       
   186                                             TBool aIsSipUri)
       
   187     {
       
   188     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaNetworkAvailability::CallHoldL()" )
       
   189     //Report line status
       
   190     SetRemoteHostL( aTelNumber, aIsSipUri );
       
   191     iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() );
       
   192     SetState( MMusAvaObserver::EMusAvaStatusCallOnHold );
       
   193     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaNetworkAvailability::CallHoldL()" )
       
   194     }
       
   195 
       
   196 
       
   197 // -------------------------------------------------------------------------
       
   198 //  This function is called when a cs call goes into a state
       
   199 //  that is not connected.
       
   200 // -------------------------------------------------------------------------
       
   201 //
       
   202 void CMusAvaNetworkAvailability::NoActiveCallL()
       
   203     {
       
   204     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaNetworkAvailability::NoActiveCallL()" )
       
   205 
       
   206     iSettings.SetTelNumberL( KNullDesC() );
       
   207     CDesCArrayFlat* sipUris =
       
   208     	new ( ELeave ) CDesCArrayFlat( KSipUriArrayGranularity );
       
   209 	CleanupStack::PushL( sipUris );
       
   210 	iSettings.SetSipAddressesL( sipUris );
       
   211 	CleanupStack::Pop( sipUris );                    
       
   212 
       
   213     //Report line status
       
   214     //Availability status
       
   215     SetState( MMusAvaObserver::EMusAvaStatusNoCall );
       
   216 
       
   217     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaNetworkAvailability::NoActiveCallL()" )
       
   218     }
       
   219 
       
   220 
       
   221 void CMusAvaNetworkAvailability::SetRemoteHostL( const TDesC& aTelNumber,
       
   222 												 TBool aIsSipUri )
       
   223 	{
       
   224 	MUS_LOG1( "mus: [MUSAVA]  -> CMusAvaNetworkAvailability::SetRemoteHostL(%d)",
       
   225 			  aIsSipUri )
       
   226 	  
       
   227 	if ( aIsSipUri )
       
   228 		{
       
   229 		CDesCArrayFlat* sipUris =
       
   230 			new ( ELeave ) CDesCArrayFlat( KSipUriArrayGranularity );
       
   231 		CleanupStack::PushL( sipUris );
       
   232 		sipUris->AppendL( aTelNumber );
       
   233 		iSettings.SetSipAddressesL( sipUris );
       
   234 		CleanupStack::Pop( sipUris );
       
   235 		
       
   236 		iSettings.SetUriForContactResolvingL( aTelNumber );
       
   237 		}
       
   238 	else
       
   239 		{
       
   240 		iSettings.SetTelNumberL( aTelNumber );
       
   241 		}
       
   242 
       
   243 	MUS_LOG( "mus: [MUSAVA]  <- CMusAvaNetworkAvailability::SetRemoteHostL()" )
       
   244 	}