diff -r b31261fd4e04 -r ccd8e69b5392 mmsharing/mmshavailability/src/musavasip.cpp --- a/mmsharing/mmshavailability/src/musavasip.cpp Tue Feb 02 00:09:07 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,492 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: 30.1.4 % << Don't touch! Updated by Synergy at check-out. -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: This is main SIP class for MusAvailability Plug-in -* -*/ - - - -// INCLUDE FILES -#include "musavasip.h" -#include "musavasharedobject.h" -#include "musavasipobserver.h" -#include "musavasipconnectionobserver.h" -#include "musavailabilityplugin.hrh" -#include "musavasipprofileregistryobserver.h" -#include "muslogger.h" -#include "mussettingskeys.h" -#include "mussettings.h" -#include "musavaclientresolverutil.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -const TInt KMaxUriLength = 512; - -// ----------------------------------------------------------------------------- -// C++ destructor. -// ----------------------------------------------------------------------------- -// -CMusAvaSip::~CMusAvaSip() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::~CMusAvaSip()" ) - // Try to remove client information from CenRep of client resolver. - // This functionality is needed in __VOIP enabled builds. - // In normal build 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. - MUS_LOG( "mus: [MUSAVA] Deleting CSIPProfile instance" ) - if ( iSipProfile && iClientResolverUtil ) - { - TRAP_IGNORE( - iClientResolverUtil->UnRegisterClientWithUserL( *iSipProfile ) ) - } - delete iSipProfile; - delete iClientResolverUtil; - - MUS_LOG( "mus: [MUSAVA] Deleting CSIPProfileRegistry instance" ) - delete iSipProfileRegistry; - MUS_LOG( "mus: [MUSAVA] Deleting SIP registry observer" ) - delete iSipProfileRegistryObserver; - MUS_LOG( "mus: [MUSAVA] Deleting CSIPConnection instance" ) - delete iSipConnection; - MUS_LOG( "mus: [MUSAVA] Deleting SIP connection observer" ) - delete iSipConnectionObserver; - MUS_LOG( "mus: [MUSAVA] Deleting CSIP instance" ) - delete iSip; - delete iSipObserver; - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::~CMusAvaSip()" ) - } - - -// ----------------------------------------------------------------------------- -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CMusAvaSip* CMusAvaSip::NewL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::NewL()" ) - CMusAvaSip* self = new (ELeave) CMusAvaSip(); - CleanupStack::PushL (self); - self->ConstructL(); - CleanupStack::Pop( self ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::NewL()" ) - return self; - } - - -// ----------------------------------------------------------------------------- -// C++ Constructor -// ----------------------------------------------------------------------------- -// -CMusAvaSip::CMusAvaSip() - { - iSipProfileRegistry = NULL; - iSipProfile = NULL; - iSipConnection = NULL; - } - - -// ----------------------------------------------------------------------------- -// Symbian second-phase constructor. -// ----------------------------------------------------------------------------- -// -void CMusAvaSip::ConstructL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::ConstructL()" ) - // create observer classes (that are not dependant on actual instances) - iSipObserver = CMusAvaSipObserver::NewL(); - iSipConnectionObserver = CMusAvaSipConnectionObserver::NewL(); - iSipProfileRegistryObserver = CMusAvaSipProfileRegistryObserver::NewL(); - - TUid KUidMusAva = { 0x1028238D }; - // create sip instance - iSip = CSIP::NewL( KUidMusAva, *iSipObserver ); - - /** - * Try to instantiate utility object that handles special client resolving - * in __VOIP enabled terminals. In __VOIP disabled terminals creation of - * this object will fail because of missing UID in CenRep and thus this - * pointer can be NULL. If this object does not exist, standard client - * resolving will be used. - */ - TRAP_IGNORE( iClientResolverUtil = CMusAvaClientResolverUtil::NewL() ) - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::ConstructL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusAvaSip::AddAdapterL( MMusAvaSipConnectionAdapter& aAdapter, TInt aIndex ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::\ - AddAdapterL( MMusAvaSipConnectionAdapter& aAdapter )" ) - iSipConnectionObserver->AddObserverL( aAdapter, aIndex ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::\ - AddAdapterL( MMusAvaSipConnectionAdapter& aAdapter )" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusAvaSip::RemoveAdapter( MMusAvaSipConnectionAdapter& aAdapter ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::\ - RemoceAdapter( MMusAvaSipConnectionAdapter& aAdapter )" ) - iSipConnectionObserver->RemoveObserver( aAdapter ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::\ - RemoceAdapter( MMusAvaSipConnectionAdapter& aAdapter )" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusAvaSip::AddAdapterL( MMusAvaSipAdapter& aAdapter, TInt aIndex ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::\ - AddAdapterL( MMusAvaSipAdapter& aAdapter )" ) - iSipObserver->AddObserverL( aAdapter, aIndex ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::\ - AddAdapterL( MMusAvaSipAdapter& aAdapter )" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusAvaSip::RemoveAdapter( MMusAvaSipAdapter& aAdapter ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::RemoveAdapter( MMusAvaSipAdapter& aAdapter )" ) - iSipObserver->RemoveObserver( aAdapter ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::RemoveAdapter( MMusAvaSipAdapter& aAdapter )" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusAvaSip::AddAdapterL( MMusAvaSipProfileRegistryAdapter& aAdapter ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::\ - AddAdapterL( MMusAvaSipProfileRegistryAdapter& aAdapter )" ) - iSipProfileRegistryObserver->AddAdapterL( aAdapter ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::\ - AddAdapterL( MMusAvaSipProfileRegistryAdapter& aAdapter )" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusAvaSip::RemoveAdapter( MMusAvaSipProfileRegistryAdapter& aAdapter ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::\ - RemoveAdapter( MMusAvaSipProfileRegistryAdapter& aAdapter )" ) - iSipProfileRegistryObserver->RemoveAdapter( aAdapter ); - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::\ - RemoveAdapter( MMusAvaSipProfileRegistryAdapter& aAdapter )" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -CSIPConnection* CMusAvaSip::ConnectionL( TBool aForceCreation ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::Connection()" ) - if ( aForceCreation ) - { - CreateSIPConnectionL(); - } - __ASSERT_ALWAYS( iSipConnection, User::Leave( KErrSIPInvalidRegistrationState ) ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::Connection()" ) - return iSipConnection; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -MSIPConnectionObserver& CMusAvaSip::ConnectionObserver() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::ConnectionObserver()" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::ConnectionObserver()" ) - return *iSipConnectionObserver; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -TBool CMusAvaSip::CreateProfileL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::CreateProfileL()" ) - - TBool retVal = ETrue; - if ( CreateSipProfile() ) - { - TInt err = iSipProfile->GetParameter( KSIPAccessPointId, iIapId ); - if ( err != KErrNone ) - { - MUS_LOG1( "SIP Access Point not found = %d", err ) - retVal = EFalse; - } - } - else - { - retVal = EFalse; - } - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::CreateProfileL()" ) - return retVal; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -TBool CMusAvaSip::CreateSipProfile() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::CreateSipProfile()" ) - if ( iSipProfile ) - { - MUS_LOG( "mus: [MUSAVA] Profile is already created" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::CreateSipProfile()" ) - return ETrue; - } - - CSIPProfileRegistry* registry = NULL; - - //get profile registry - MUS_LOG( "mus: [MUSAVA] Fetch profile registry" ) - TRAPD( error_registry, registry = &ProfileRegistryL() ); - if( error_registry ) - { - MUS_LOG( "mus: [MUSAVA] ProfileRegistry is not created" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::CreateSipProfile()" ) - return EFalse; - } - // try to resolve the profile - MUS_LOG( "mus: [MUSAVA] Fetch SIP Profile" ) - TRAPD( error_profile, iSipProfile = GetMusProfileL( *registry ) ); - if( error_profile ) - { - MUS_LOG( "mus: [MUSAVA] Profile is not found" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::CreateSipProfile()" ) - return EFalse; - } - else - { - MUS_LOG( "mus: [MUSAVA] Profile is created" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::CreateSipProfile()" ) - return ETrue; - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -CSIPProfile* CMusAvaSip::Profile() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::Profile()" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::Profile()" ) - return iSipProfile; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -CSIPProfileRegistry& CMusAvaSip::ProfileRegistryL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::ProfileRegistry()" ) - if ( !iSipProfileRegistry ) - { - MUS_LOG( "mus: [MUSAVA] create sip profile registry" ) - // create sip profile registry - iSipProfileRegistry = CSIPProfileRegistry::NewL( - *iSip, - *iSipProfileRegistryObserver ); - } - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::ProfileRegistry()" ) - return *iSipProfileRegistry; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -HBufC* CMusAvaSip::OwnDomainLC() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::OwnDomainLC()" ) - - HBufC* domain = KNullDesC().AllocLC(); - if( iSipProfile ) - { - const MDesC8Array* domainNameArray( NULL ); - iSipProfile->GetParameter( KSIPRegisteredAors, domainNameArray ); - - if( domainNameArray ) - { - if( domainNameArray->MdcaCount() > 0 ) - { - TBuf domain16; - const TDesC8& domain8 = domainNameArray->MdcaPoint( 0 ); - - _LIT8( KAt, "@" ); - - TInt index = domain8.Find( KAt() ); - - User::LeaveIfError( - CnvUtfConverter::ConvertToUnicodeFromUtf8( - domain16, - domain8.Mid( index + KAt().Length() ) ) ); - CleanupStack::PopAndDestroy( domain ); - domain = domain16.AllocLC(); - } - } - } - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::OwnDomainLC()" ) - return domain; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -CSIP& CMusAvaSip::Sip() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::Sip()" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::Sip()" ) - return *iSip; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -TInt CMusAvaSip::SipProfileId( TUint32& aSipProfileId ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::SipProfile()" ) - //SIP Profile ID - TInt profile_id_err = iSipProfile->GetParameter( KSIPProfileId, aSipProfileId ); - MUS_LOG1( "Profile id = %d", profile_id_err ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::SipProfile()" ) - return profile_id_err; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -CMusAvaClientResolverUtil* CMusAvaSip::ClientResolverUtil() const - { - return iClientResolverUtil; - } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusAvaSip::DeleteSIPConnection() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::DeleteSIPConnection()" ) - delete iSipConnection; iSipConnection = NULL; - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::DeleteSIPConnection()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusAvaSip::CreateSIPConnectionL() - { - MUS_LOG1( "mus: [MUSAVA] -> CMusAvaSip::CreateSIPConnectionL(), iapid:%d", - iIapId ) - - if ( !iSipConnection ) - { - iSipConnection = CSIPConnection::NewL( *iSip, - iIapId, - *iSipConnectionObserver ); - } - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::CreateSIPConnectionL()" ) - } - - -// --------------------------------------------------------------------------------- -// Gets profile to be used with Mus. -// --------------------------------------------------------------------------------- -// -CSIPProfile* CMusAvaSip::GetMusProfileL( CSIPProfileRegistryBase& aRegistry ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::GetMusProfileL" ) - CSIPProfile* profile = NULL; - TUint32 profileId = KErrNone; - - // Try to fetch profileId for profile meant to be used with Mus - TRAPD( err, profileId = - MultimediaSharingSettings::SipProfileSettingL() ); - - if( err != KErrNone || profileId == KErrNone ) - { - MUS_LOG( "mus: [MUSAVA] Using default profile" ) - profile = aRegistry.DefaultProfileL(); - } - else if ( (TInt )profileId == KErrNotFound ) - { - MUS_LOG( "mus: [MUSAVA] Setting: Mus is not allowed to use any \ - SIP profiles" ) - MUS_LOG1( "mus: [MUSAVA] User::Leave( %d )", - KErrNotSupported ) - User::Leave( KErrNotSupported ); - } - else - { - MUS_LOG( "mus: [MUSAVA] Try to fetch profile meant to be used with Mus" ) - profile = aRegistry.ProfileL( profileId ); - err = profile->GetParameter( KSIPProfileId,profileId ); - if( err != KErrNone) - { - MUS_LOG1("mus: [MUSAVA] SIP Profile ID %d",profileId ) - } - } - - // If not possible, use default profile. If not able, leave. - if ( !profile ) - { - MUS_LOG( "mus: [MUSAVA] Not found" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::GetMusProfileL" ) - User::Leave( KErrNotFound ); - } - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::GetMusProfileL" ) - return profile; - }; - - - - - -