--- a/mmsharing/mmshavailability/src/musavaregisteravailability.cpp Tue Feb 02 00:09:07 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,599 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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".
-* Version : %version: 42.1.4.1.3 % << Don't touch! Updated by Synergy at check-out.
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Provide interface for the client requestin availability class.
-*
-*/
-
-
-
-#include "musavaregisteravailability.h"
-#include "musavaavailabilityobserver.h"
-#include "musunittesting.h"
-#include "musavaobserver.h"
-#include "musavaavailability.h"
-#include "musavasharedobject.h"
-#include "muslogger.h"
-#include "musavasettingsimp.h"
-#include "musavasip.h"
-#include "musavaconnectionmonitor.h"
-#include "mussettings.h"
-#include "musavaclientresolverutil.h"
-
-#include <e32base.h>
-#include <sipprofile.h>
-#include <sipprofileregistry.h>
-#include <sipprofileregistryobserver.h>
-#include <escapeutils.h>
-
-
-// -----------------------------------------------------------------------------
-// Symbian two-phase constructor
-// -----------------------------------------------------------------------------
-//
-CMusAvaRegisterAvailability* CMusAvaRegisterAvailability::NewL(
- MMusAvaAvailabilityObserver& aObserver,
- CMusAvaSettingsImp& aSettings )
- {
- CMusAvaRegisterAvailability* self =
- CMusAvaRegisterAvailability::NewLC(
- aObserver,
- aSettings );
- CleanupStack::Pop( self );
- return self;
- }
-
-
-// ----------------------------------------------------------------------------
-// Two-phased constructor.
-// ----------------------------------------------------------------------------
-//
-CMusAvaRegisterAvailability* CMusAvaRegisterAvailability::NewLC(
- MMusAvaAvailabilityObserver& aObserver,
- CMusAvaSettingsImp& aSettings )
- {
- CMusAvaRegisterAvailability* self =
- new (ELeave) CMusAvaRegisterAvailability(
- aObserver,
- aSettings );
- CleanupStack::PushL (self);
- self->ConstructL();
- return self;
- }
-
-
-// ------------------------------------------------------------------------------
-// Destructor.
-// ------------------------------------------------------------------------------
-//
-CMusAvaRegisterAvailability::~CMusAvaRegisterAvailability()
- {
- if ( iSharedObj )
- {
- iSharedObj->MusAvaSip().RemoveAdapter( *this );
- iSharedObj->DeleteSingleton();
- }
- }
-
-
-// ------------------------------------------------------------------------------
-// Symbian 2nd phase constructor can leave.
-// ------------------------------------------------------------------------------
-//
-void CMusAvaRegisterAvailability::ConstructL()
- {
- iSharedObj = CMusAvaSharedObject::GetSingletonL();
- iSharedObj->MusAvaSip().AddAdapterL( *this );
- iOperatorVariant = MultimediaSharingSettings::OperatorVariantSettingL();
- }
-
-
-// -----------------------------------------------------------------------------
-// Constructor.
-// -----------------------------------------------------------------------------
-//
-CMusAvaRegisterAvailability::CMusAvaRegisterAvailability(
- MMusAvaAvailabilityObserver& aObserver,
- CMusAvaSettingsImp& aSettings )
- :CMusAvaAvailability( aObserver ),
- iSettings( aSettings )
- {
- }
-
-
-// -----------------------------------------------------------------------------
-// Executes for the master - salve pattern.
-// -----------------------------------------------------------------------------
-//
-void CMusAvaRegisterAvailability::DoExecuteL()
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::DoExecuteL " )
- SetState( MMusAvaObserver::EMusAvaStatusInProgress );
- RegisterL();
- // TBD: SetState( MMusAvaObserver::EMusAvaNameRegistration );
-
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::DoExecuteL " )
- }
-
-
-// -----------------------------------------------------------------------------
-// Stop the execution.
-// -----------------------------------------------------------------------------
-//
-void CMusAvaRegisterAvailability::Stop()
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::Stop" )
- CSIPProfile* profile = iSharedObj->MusAvaSip().Profile();
- if ( profile )
- {
- CSIPProfileRegistry* registry = NULL; // not own, so not deleted
- TRAPD( error_register, registry =
- &iSharedObj->MusAvaSip().ProfileRegistryL() );
- if ( error_register == KErrNone )
- {
- MUS_LOG( "mus: [MUSAVA] Sip profile registry found" )
- TInt error = registry->Disable( *profile );
- MUS_LOG1( "mus: [MUSAVA] Disable Sip profile ( %d )", error )
- }
- }
-
- SetState( MMusAvaObserver::EMusAvaStatusNotExecuted );
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::Stop" )
- }
-
-
-// -----------------------------------------------------------------------------
-// CMusAvaRegisterAvailability::Name
-//
-// -----------------------------------------------------------------------------
-//
-MMusAvaObserver::TAvailabilityName CMusAvaRegisterAvailability::Name()
- {
- return MMusAvaObserver::EMusAvaNameRegistration;
- }
-
-
-// -----------------------------------------------------------------------------
-// An event related to SIP Profile has accorred
-// -----------------------------------------------------------------------------
-//
-void CMusAvaRegisterAvailability::ProfileRegistryEventOccurred(
- TUint32 aProfileId,
- MSIPProfileRegistryObserver::TEvent aEvent)
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::\
- ProfileRegistryEventOccurred " )
-
- CSIPProfile* profile = iSharedObj->MusAvaSip().Profile();
- if ( !profile )
- {
- MUS_LOG( "mus: [MUSAVA] no sip profile found, returning!" )
- return;
- }
-
-
- TUint32 profileId = 0;
- TUint connectionId = 0;
-
- profile->GetParameter( KSIPProfileId, profileId );
-
- if ( aProfileId == profileId )
- {
- switch (aEvent)
- {
- case MSIPProfileRegistryObserver::EProfileCreated:
- {
- MUS_LOG( "mus: [MUSAVA] Profile is created" )
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability\
- ::ProfileRegistryEventOccurred" )
- }
- break;
-
- case MSIPProfileRegistryObserver::EProfileUpdated:
- {
- MUS_LOG( "mus: [MUSAVA] Profile is updated" )
- }
- break;
-
- case MSIPProfileRegistryObserver::EProfileRegistered:
- {
- MUS_LOG( "mus: [MUSAVA] Profile is registred" )
-
- // Make sure that valid connection exists when registered
- CSIPConnection* sipConnection = NULL;
- TRAPD( err, sipConnection = iSharedObj->MusAvaSip().ConnectionL() );
- if ( err != KErrNone ||
- !sipConnection ||
- sipConnection->State() == CSIPConnection::EUnavailable ||
- sipConnection->State() == CSIPConnection::ESuspended ||
- sipConnection->State() == CSIPConnection::EInactive )
- {
- MUS_LOG1( "mus: [MUSAVA] CreateSIPConnectionL \
- leave #%d", err )
- SetState( MMusAvaObserver::MMusAvaObserver::EMusAvaConnectionErr );
- }
- else
- {
- TRAP( err, connectionId =
- iSharedObj->ConnectionMonitor().ConnectionIDL() );
- if ( err == KErrNotFound )
- {
- SetState( MMusAvaObserver::EMusAvaConnectionErr );
- }
- else
- {
- iSharedObj->ConnectionMonitor().SetConnectionID(
- connectionId );
- if( err != KErrNone )
- {
- MUS_LOG1( "mus: [MUSAVA] ConnectionIdL \
- leave #%d", err )
- }
- }
- }
-
- MUS_LOG( "mus: [MUSAVA] Enable profile." )
- TRAP( err, EnableRegisterL() );
- if( err != KErrNone )
- {
- MUS_LOG1( "mus: [MUSAVA] EnableRegisterL leave #%d",
- err )
- }
-
- TRAP( err, CreateSipAddressProposalL(); );
- if( err != KErrNone )
- {
- MUS_LOG1( "mus: [MUSAVA] CreateSipAddressProposalL \
- err #%d", err )
- }
-
- SetState( MMusAvaObserver::EMusAvaStatusAvailable );
-
- // update sipprofile in settings
- if ( profileId != iSettings.SipProfileId() )
- {
- MUS_LOG1( "mus: [MUSAVA] Profile id in settings before\
- update:%d", iSettings.SipProfileId() )
- iSettings.SetSipProfileId( profileId );
- MUS_LOG1( "mus: [MUSAVA] Profile id in settings after\
- update:%d", iSettings.SipProfileId() )
- }
- else
- {
- MUS_LOG( "Profile is not needed to update!!!!!" )
- }
- }
- break;
-
- case MSIPProfileRegistryObserver::EProfileDeregistered:
- {
- MUS_LOG( "mus: [MUSAVA] Profile is deregistered" )
- SetState( MMusAvaObserver::EMusAvaStatusNotRegistered );
- iSharedObj->MusAvaSip().DeleteSIPConnection();
- }
- break;
-
- case MSIPProfileRegistryObserver::EProfileDestroyed:
- {
- MUS_LOG( "mus: [MUSAVA] Profile is destroyed " )
- SetState( MMusAvaObserver::EMusAvaStatusNotRegistered );
- }
- break;
-
- default:
- MUS_LOG( "mus: [MUSAVA] Unknown Profile Id" )
- break;
- }
- }
- else
- {
- MUS_LOG( "mus: [MUSAVA] aProfileId != profileId" )
- }
-
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::\
- ProfileRegistryEventOccurred" )
- }
-
-// -----------------------------------------------------------------------------
-// An asynchronous error has occurred related to SIP profile
-// Event is send to those observers, who have the
-// corresponding profile instantiated.
-// -----------------------------------------------------------------------------
-//
-void CMusAvaRegisterAvailability::ProfileRegistryErrorOccurred(
- TUint32 aProfileId,
- TInt aError )
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::\
- ProfileRegistryErrorOccurred" )
-
- CSIPProfile* profile = iSharedObj->MusAvaSip().Profile();
- if ( !profile )
- {
- return;
- }
-
- TUint32 profileId;
-
- profile->GetParameter( KSIPProfileId, profileId );
-
- if( profileId == aProfileId )
- {
- if ( iOperatorVariant == MusSettingsKeys::EOperatorSpecific &&
- aError == KErrGeneral )
- {
- MUS_LOG( "SIP profile is disabled by the user" )
- SetState( MMusAvaObserver::EMusActivationError );
- }
- else
- {
- MUS_LOG1("Error %d",aError )
- SetState( MMusAvaObserver::EMusAvaStatusNotRegistered );
- }
- }
-
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::\
- ProfileRegistryErrorOccurred" )
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusAvaRegisterAvailability::CreateSipAddressProposalL()
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::\
- CreateSipAddressProposalL() " )
-
- HBufC* domain = iSharedObj->MusAvaSip().OwnDomainLC();
-
- const TDesC& telNumber = iSettings.TelNumber();
-
- iSettings.SetSipAddressProposalL( telNumber, *domain );
-
- CleanupStack::PopAndDestroy( domain );
-
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::\
- CreateSipAddressProposalL() " )
- }
-
-
-// -----------------------------------------------------------------------------
-// Connection state has changed.
-// iSipConnection has to be instantiated for us to get these callbacks.
-// from base class MSIPConnectionObserver
-// -----------------------------------------------------------------------------
-//
-TInt CMusAvaRegisterAvailability::ConnectionStateChanged(
- CSIPConnection::TState aState )
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::\
- ConnectionStateChanged" )
- TInt err = 0;
- switch ( aState )
- {
- case CSIPConnection::EInit:
- {
- MUS_LOG( "mus: [MUSAVA] aState == CSIPConnection::EInit" )
- break;
- }
- case CSIPConnection::EActive:
- {
- MUS_LOG( "mus: [MUSAVA] aState == CSIPConnection::EActive" )
- break;
- }
- case CSIPConnection::ESuspended:
- {
- MUS_LOG( "mus: [MUSAVA] aState == CSIPConnection::ESuspended" )
- SetState( MMusAvaObserver::EMusAvaConnectionErr );
- break;
- }
- case CSIPConnection::EInactive:
- {
- MUS_LOG( "mus: [MUSAVA] aState == CSIPConnection::EInactive" )
- // If we get here, then PDP context is probably
- // unavailable => close an existing PDP context.
- MUS_LOG( "mus: [MUSAVA] now calling CloseExistingConnectionL" )
- iSharedObj->ConnectionMonitor().KillPdpContext();
- TRAPD( leaveCode, err = RegisterL() )
- if ( !leaveCode || err )
- {
- SetState( MMusAvaObserver::EMusAvaConnectionErr );
- }
- else
- {
- SetState( MMusAvaObserver::EMusAvaStatusAvailable );
- }
- break;
- }
- case CSIPConnection::EUnavailable:
- {
- MUS_LOG( "mus: [MUSAVA] aState == CSIPConnection::EUnavailable" )
- SetState( MMusAvaObserver::EMusAvaConnectionErr );
- break;
- }
- default:
- {
- MUS_LOG( "mus: [MUSAVA] in default branch => ESipConnUnknown" )
- break;
- }
- }
-
- MUS_LOG( "mus: [MUSAVA]: <- CMusAvaRegisterAvailability::ConnectionStateChanged" )
-
- return ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// Initialize SIP Registration.
-// -----------------------------------------------------------------------------
-//
-TBool CMusAvaRegisterAvailability::InitializeRegister()
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::\
- InitializeRegister " )
-
- MUS_LOG( "mus: [MUSAVA] Create SIP Profile " )
- TBool profileCreated = EFalse;
- TRAPD( err, profileCreated = iSharedObj->MusAvaSip().CreateProfileL() );
- if ( err || !profileCreated )
- {
- MUS_LOG( "mus: [MUSAVA] Profile is not created " )
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::\
- InitializeRegister " )
- SetState( MMusAvaObserver::EMusAvaStatusNoSipProfile );
- return EFalse;
- }
-
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::\
- InitializeRegister " )
-
- return ETrue;
- }
-
-
-// -----------------------------------------------------------------------------
-// SIP Registration.
-// -----------------------------------------------------------------------------
-//
-TBool CMusAvaRegisterAvailability::RegisterL()
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::RegisterL " )
-
- MUS_LOG( "mus: [MUSAVA] Checks if the profile is not enabled - \
- Enable" )
- if ( !InitializeRegister())
- {
- MUS_LOG( "mus: [MUSAVA] SIP register initilisation fails " )
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::\
- Register " )
- return EFalse;
- }
-
- EnableRegisterL();
- if ( !UpdateSIPProfile() )
- {
- return EFalse;
- }
- return RegistrationStatusL();
- }
-
-// -----------------------------------------------------------------------------
-// Enable SIP Registration.
-// -----------------------------------------------------------------------------
-//
-void CMusAvaRegisterAvailability::EnableRegisterL()
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::EnableRegisterL " )
- MUS_LOG( "mus: [MUSAVA] Fetch SIP ProfileRegistry" )
-
- CSIPProfileRegistry& registry = iSharedObj->MusAvaSip().ProfileRegistryL();
- MUS_LOG( "mus: [MUSAVA] Profile status" )
- if ( !registry.IsEnabled( *iSharedObj->MusAvaSip().Profile() ) )
- {
- MUS_LOG("mus: [MUSAVA] Calling EnableL()" )
- registry.EnableL( *iSharedObj->MusAvaSip().Profile(),
- iSharedObj->MusAvaSip().ConnectionObserver() );
- }
-
- // Try to write client information to CenRep of client resolver.
- // This functionality is needed in __VOIP enabled terminals.
- // In __VOIP disabled builds this will fail because of a lack of needed
- // CenRep UID. To avoid branching, we just try to do this and let it fail
- // in normal build.
- CMusAvaClientResolverUtil* resolver =
- iSharedObj->MusAvaSip().ClientResolverUtil();
- if ( resolver )
- {
- TRAP_IGNORE( resolver->RegisterClientWithUserL(
- *iSharedObj->MusAvaSip().Profile() ) )
- }
-
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::EnableRegisterL " )
- }
-
-
-// -----------------------------------------------------------------------------
-// Update SIP Registration.
-// -----------------------------------------------------------------------------
-//
-TBool CMusAvaRegisterAvailability::UpdateSIPProfile()
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::UpdateSIPProfile " )
- TUint32 profileId = 0; // Initial value doesn't matter.
- // but better to set it to default profile
- TInt err = iSharedObj->MusAvaSip().Profile()->GetParameter(
- KSIPProfileId, profileId );
- if( err == KErrNone)
- {
- MUS_LOG1("mus: [MUSAVA] Set SIP Profile ID in Central Repositary \
- to %d",profileId )
- iSettings.SetSipProfileId( profileId );
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::UpdateSIPProfile " )
- return ETrue;
- }
- else
- {
- MUS_LOG1("mus: [MUSAVA] SIP Profile ID is not found. \
- remove Id away from Central Repositary %d",err )
- iSettings.SetSipProfileId( err );
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::UpdateSIPProfile " )
- return EFalse;
- }
- }
-
-// -----------------------------------------------------------------------------
-// SIP profile Registration status.
-// -----------------------------------------------------------------------------
-//
-TBool CMusAvaRegisterAvailability::RegistrationStatusL()
- {
- MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::RegistrationStatusL " )
- MUS_LOG("mus: [MUSAVA] Checking profile registration" )
-
- TBool registered;
-
- TInt err = iSharedObj->MusAvaSip().Profile()->GetParameter(
- KSIPProfileRegistered, registered );
-
- if( err != KErrNone || !registered )
- {
- MUS_LOG2( "mus: [MUSAVA] Profile not registered, get error=%d, \
- register value=%d", err, registered )
-
- SetState( MMusAvaObserver::EMusAvaStatusInProgress );
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::RegistrationStatusL " )
- return EFalse;
- }
- else
- {
- MUS_LOG("mus: [MUSAVA] profile is registred " )
-
- iSharedObj->MusAvaSip().ConnectionL();
-
- MUS_LOG("mus: [MUSAVA] connection created " )
-
- HBufC* domain = iSharedObj->MusAvaSip().OwnDomainLC();
- const TDesC& telNumber = iSettings.TelNumber();
-
- iSettings.SetSipAddressProposalL( telNumber, *domain );
-
- CleanupStack::PopAndDestroy( domain );
- SetState( MMusAvaObserver::EMusAvaStatusAvailable );
- MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::RegistrationStatusL " )
- return ETrue;
- }
- }
-