diff -r 000000000000 -r 094583676ce7 wvuing/IMPSServiceSettingsUI/SharedDataSrc/CIMPSPubSubHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSServiceSettingsUI/SharedDataSrc/CIMPSPubSubHandler.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,445 @@ +/* +* Copyright (c) 2004 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: Shared data handler +* +*/ + +// INCLUDE FILES +#include "CIMPSPubSubHandler.h" +#include "MIMPSSharedDataObserver.h" +#include "CIMPSPropertyObserver.h" +#include "IMPSSharedDataDefs.h" +#include // RProperty + +_LIT_SECURITY_POLICY_PASS( KIMPSSharedReadPolicy ); +_LIT_SECURITY_POLICY_PASS( KIMPSSharedWritePolicy ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CIMPSPubSubHandler* CIMPSPubSubHandler::NewL( MIMPSSharedDataObserver* aObserver, const TUid aUid ) + { + CIMPSPubSubHandler* self = new( ELeave ) CIMPSPubSubHandler( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL( aUid ); + CleanupStack::Pop( self ); + return self; + } + + +// Symbian OS default constructor can leave. +void CIMPSPubSubHandler::ConstructL( const TUid aUid ) + { + // assign + iUid = aUid; + + AppendKeyPairsL(); + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::SubscribeChange( const TUid aUid, const TDesC* aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CIMPSPubSubHandler::SubscribeChange( const TUid aUid, const TIMPSSharedKeys aKey ) + { + TRAPD( err, DoSubscribeChangeL( aUid, aKey ) ); + return err; + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::SubscribeSet( const TUid aUid, const TDesC* aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CIMPSPubSubHandler::SubscribeSet( const TUid aUid, const TIMPSSharedKeys aKey ) + { + TRAPD( err, DoSubscribeSetL( aUid, aKey ) ); + return err; + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::UnSubscribe( const TUid aUid, const TDesC* aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CIMPSPubSubHandler::UnSubscribe( const TUid aUid, const TIMPSSharedKeys aKey ) + { + for ( TInt count( 0 ); count < iPropertyObservers.Count(); count++ ) + { + CIMPSPropertyObserver* observer = iPropertyObservers[ count ]; + if ( ( observer->Category() == aUid ) && + ( ( TInt )observer->Key() == aKey ) ) + { + iPropertyObservers.Remove( count ); + delete observer; + } + } + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::GetStringKey( const TDesC& aKey, TDes& aValue ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CIMPSPubSubHandler::GetStringKey( const TIMPSSharedKeys aKey, TDes& aValue ) + { + RProperty::Define( iUid, aKey, RProperty::EByteArray, + KIMPSSharedReadPolicy, KIMPSSharedWritePolicy ); + TBuf temp; + TInt err = RProperty::Get( iUid, aKey, temp ); + if ( err != KErrNone ) + { + return err; + } + // empty the value + aValue.Zero(); + aValue.Copy( temp ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::GetIntKey( const TDesC& aKey, TInt& aValue ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CIMPSPubSubHandler::GetIntKey( const TIMPSSharedKeys aKey, TInt& aValue ) + { + RProperty::Define( iUid, aKey, RProperty::EInt, + KIMPSSharedReadPolicy, KIMPSSharedWritePolicy ); + TInt err = RProperty::Get( iUid, aKey, aValue ); + return err; + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::SetStringKey( const TDesC& aKey, const TDesC& aValue ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CIMPSPubSubHandler::SetStringKey( const TIMPSSharedKeys aKey, const TDesC& aValue ) + { + RProperty::Define( iUid, aKey, RProperty::EByteArray, + KIMPSSharedReadPolicy, KIMPSSharedWritePolicy ); + TInt err = RProperty::Set( iUid, aKey, aValue ); + return err; + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::SetIntKey( const TDesC& aKey, TInt aValue ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CIMPSPubSubHandler::SetIntKey( const TIMPSSharedKeys aKey, TInt aValue ) + { + RProperty::Define( iUid, aKey, RProperty::EInt, + KIMPSSharedReadPolicy, KIMPSSharedWritePolicy ); + TInt err = RProperty::Set( iUid, aKey, aValue ); + return err; + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::Signal( const TDesC& aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CIMPSPubSubHandler::Signal( const TIMPSSharedKeys aKey ) + { + TRAPD( err, DoSignalL( aKey ) ); + return err; + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::DoSignalL( const TDesC& aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CIMPSPubSubHandler::DoSignalL( const TIMPSSharedKeys aKey ) + { + TInt current( 0 ); + RProperty::Define( iUid, aKey, RProperty::EInt, + KIMPSSharedReadPolicy, KIMPSSharedWritePolicy ); + User::LeaveIfError( RProperty::Get( iUid, aKey, current ) ); + User::LeaveIfError( RProperty::Set( iUid, aKey, ( current + 1 ) ) ); + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::CancelSignal( const TDesC& aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CIMPSPubSubHandler::CancelSignal( const TIMPSSharedKeys aKey ) + { + TRAPD( err, DoCancelSignalL( aKey ) ); + return err; + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::DoCancelSignalL( const TDesC& aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CIMPSPubSubHandler::DoCancelSignalL( const TIMPSSharedKeys aKey ) + { + TInt current( 0 ); + RProperty::Define( iUid, aKey, RProperty::EInt, + KIMPSSharedReadPolicy, KIMPSSharedWritePolicy ); + User::LeaveIfError( RProperty::Get( iUid, aKey, current ) ); + User::LeaveIfError( RProperty::Set( iUid, aKey, ( current - 1 ) ) ); + } + + + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::DoSubscribeChangeL( const TUid aUid, const TIMPSSharedKeys aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CIMPSPubSubHandler::DoSubscribeChangeL( const TUid aUid, const TIMPSSharedKeys aKey ) + { + CIMPSPropertyObserver* observer = CIMPSPropertyObserver::NewL( *this ); + CleanupStack::PushL( observer ); + observer->ObservePropertyChangeL( aUid, aKey ); + User::LeaveIfError( iPropertyObservers.Append( observer ) ); + CleanupStack::Pop( observer ); + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::DoSubscribeSetL( const TUid aUid, const TIMPSSharedKeys aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CIMPSPubSubHandler::DoSubscribeSetL( const TUid aUid, const TIMPSSharedKeys aKey ) + { + CIMPSPropertyObserver* observer = CIMPSPropertyObserver::NewL( *this ); + CleanupStack::PushL( observer ); + observer->ObservePropertyChangeL( aUid, aKey ); + User::LeaveIfError( iPropertyObservers.Append( observer ) ); + CleanupStack::Pop( observer ); + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::ConvertSharedDataKey( const TDesC& aSrc, TIMPSSharedKeys& aKey ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CIMPSPubSubHandler::ConvertSharedDataKey( const TDesC& aSrc, TIMPSSharedKeys& aDest ) + { + TInt err = MapKeysToClient( aDest, aSrc ); + return err; + } + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CIMPSPubSubHandler::CIMPSPubSubHandler( MIMPSSharedDataObserver* aObserver ) + : iObserver( aObserver ) + { + } + +// Destructor +CIMPSPubSubHandler::~CIMPSPubSubHandler() + { + iPropertyObservers.ResetAndDestroy(); + iPropertyObservers.Close(); + iKeys.Close(); + } + +// ----------------------------------------------------------------------------- +// CIMPSPubSubHandler::HandlePropertyNotificationEventL( const TDesC& aKey, TInt aValue ) +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CIMPSPubSubHandler::HandlePropertyNotificationEventL( TUid aCategory, TUint aKey ) + { + if ( iObserver ) + { + iObserver->HandleTemporaryKeyNotifyL( aCategory, ( TIMPSSharedKeys )aKey ); + } + } + + +// --------------------------------------------------------- +// CIMPSPubSubHandler::MapKeysToClient() +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CIMPSPubSubHandler::MapKeysToClient( TIMPSSharedKeys& aKey, const TDesC& aSharedDataKey ) + { + TInt count( 0 ); + for ( count = 0; count < iKeys.Count(); count++ ) + { + if ( 0 == iKeys[count].iKeyForSharedData.Compare( aSharedDataKey ) ) + { + aKey = iKeys[count].iKeyForClient; + return KErrNone; + } + } + return KErrNotFound; + } + +// --------------------------------------------------------- +// CIMPSPubSubHandler::DoAppendKeyPairL() +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMPSPubSubHandler::DoAppendKeyPairL( TIMPSSharedKeys aKey, const TDesC& aSharedDataKey ) + { + TIMPSSharedKeyPairs temp; + temp.iKeyForSharedData.Set( aSharedDataKey ); + temp.iKeyForClient = aKey; + User::LeaveIfError( iKeys.Append( temp ) ); + } + +// --------------------------------------------------------- +// CIMPSPubSubHandler::AppendKeyPairsL() +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMPSPubSubHandler::AppendKeyPairsL() + { + // Connection UI keys + // Connection UI Group channel keys + DoAppendKeyPairL( EIMPSSharedKeysIMClientLoginLogoutStateChannel, + KIMPSSharedKeysIMClientLoginLogoutStateChannel ); + DoAppendKeyPairL( EIMPSSharedKeysIMLoginLogoutEventChannel, + KIMPSSharedKeysIMLoginLogoutEventChannel ); + DoAppendKeyPairL( EIMPSSharedKeysIMSSClientReqistrationChannel, + KIMPSSharedKeysIMSSClientReqistrationChannel ); + DoAppendKeyPairL( EIMPSSharedKeysIMGlobalOperationSignalChannel, + KIMPSSharedKeysIMGlobalOperationSignalChannel ); + DoAppendKeyPairL( EIMPSSharedKeysIMRemoteUiNotificationsChannel, + KIMPSSharedKeysIMRemoteUiNotificationsChannel ); + DoAppendKeyPairL( EIMPSSharedKeysPECClientLoginLogoutStateChannel, + KIMPSSharedKeysPECClientLoginLogoutStateChannel ); + DoAppendKeyPairL( EIMPSSharedKeysPECLoginLogoutEventChannel, + KIMPSSharedKeysPECLoginLogoutEventChannel ); + DoAppendKeyPairL( EIMPSSharedKeysPECSSClientReqistrationChannel, + KIMPSSharedKeysPECSSClientReqistrationChannel ); + DoAppendKeyPairL( EIMPSSharedKeysPECGlobalOperationSignalChannel, + KIMPSSharedKeysPECGlobalOperationSignalChannel ); + DoAppendKeyPairL( EIMPSSharedKeysPECRemoteUiNotificationsChannel, + KIMPSSharedKeysPECRemoteUiNotificationsChannel ); + + DoAppendKeyPairL( EIMPSSharedKeysCommonClientLoginLogoutStateChannel, + KIMPSSharedKeysCommonClientLoginLogoutStateChannel ); + DoAppendKeyPairL( EIMPSSharedKeysCommonLoginLogoutEventChannel, + KIMPSSharedKeysCommonLoginLogoutEventChannel ); + DoAppendKeyPairL( EIMPSSharedKeysCommonSSClientReqistrationChannel, + KIMPSSharedKeysCommonSSClientReqistrationChannel ); + DoAppendKeyPairL( EIMPSSharedKeysCommonGlobalOperationSignalChannel, + KIMPSSharedKeysCommonGlobalOperationSignalChannel ); + DoAppendKeyPairL( EIMPSSharedKeysCommonRemoteUiNotificationsChannel, + KIMPSSharedKeysCommonRemoteUiNotificationsChannel ); + // Connection UI Group data keys + DoAppendKeyPairL( EIMPSSharedKeysIMClientLoginLogoutStateData, + KIMPSSharedKeysIMClientLoginLogoutStateData ); + DoAppendKeyPairL( EIMPSSharedKeysIMLoginLogoutEventData, + KIMPSSharedKeysIMLoginLogoutEventData ); + DoAppendKeyPairL( EIMPSSharedKeysIMSSClientReqistrationData, + KIMPSSharedKeysIMSSClientReqistrationData ); + DoAppendKeyPairL( EIMPSSharedKeysIMGlobalOperationSignalData, + KIMPSSharedKeysIMGlobalOperationSignalData ); + DoAppendKeyPairL( EIMPSSharedKeysIMRemoteUiNotificationsData, + KIMPSSharedKeysIMRemoteUiNotificationsData ); + DoAppendKeyPairL( EIMPSSharedKeysPECClientLoginLogoutStateData, + KIMPSSharedKeysPECClientLoginLogoutStateData ); + DoAppendKeyPairL( EIMPSSharedKeysPECLoginLogoutEventData, + KIMPSSharedKeysPECLoginLogoutEventData ); + DoAppendKeyPairL( EIMPSSharedKeysPECSSClientReqistrationData, + KIMPSSharedKeysPECSSClientReqistrationData ); + DoAppendKeyPairL( EIMPSSharedKeysPECGlobalOperationSignalData, + KIMPSSharedKeysPECGlobalOperationSignalData ); + DoAppendKeyPairL( EIMPSSharedKeysPECRemoteUiNotificationsData, + KIMPSSharedKeysPECRemoteUiNotificationsData ); + + DoAppendKeyPairL( EIMPSSharedKeysCommonClientLoginLogoutStateData, + KIMPSSharedKeysCommonClientLoginLogoutStateData ); + DoAppendKeyPairL( EIMPSSharedKeysCommonLoginLogoutEventData, + KIMPSSharedKeysCommonLoginLogoutEventData ); + DoAppendKeyPairL( EIMPSSharedKeysCommonSSClientReqistrationData, + KIMPSSharedKeysCommonSSClientReqistrationData ); + DoAppendKeyPairL( EIMPSSharedKeysCommonGlobalOperationSignalData, + KIMPSSharedKeysCommonGlobalOperationSignalData ); + DoAppendKeyPairL( EIMPSSharedKeysCommonRemoteUiNotificationsData, + KIMPSSharedKeysCommonRemoteUiNotificationsData ); + + // Connection UI Global channel keys + DoAppendKeyPairL( EIMPSSharedKeysIMGlobalChannel, + KIMPSSharedKeysIMGlobalChannel ); + DoAppendKeyPairL( EIMPSSharedKeysPECGlobalChannel, + KIMPSSharedKeysPECGlobalChannel ); + + // Connection UI Global data keys + DoAppendKeyPairL( EIMPSSharedKeysIMGlobalData, + KIMPSSharedKeysIMGlobalData ); + DoAppendKeyPairL( EIMPSSharedKeysPECGlobalData, + KIMPSSharedKeysPECGlobalData ); + + // Connection UI Permanent global data key + DoAppendKeyPairL( EIMPSSharedKeysPermanentGlobalChannel, + KIMPSSharedKeysPermanentGlobalChannel ); + DoAppendKeyPairL( EIMPSSharedKeysPermanentGlobalData, + KIMPSSharedKeysPermanentGlobalData ); + + DoAppendKeyPairL( EIMPSSharedKeysIMPresenceAuthSettingKey, + KIPMSSharedKeysIMPresenceAuthSettingKey ); + + // Profile engines key + DoAppendKeyPairL( EIMPSSharedKeysProEngAllowUpdatePresence, + KIMPSSharedKeysProEngAllowUpdatePresence ); + + // Presence UI keys + DoAppendKeyPairL( EIMPSSharedKeysPECAppKeyNamePublishing, + KIMPSSharedKeysPECAppKeyNamePublishing ); + + // Service settings login type change notifier key + DoAppendKeyPairL( EIMPSSharedKeysServSettLoginTypeChangedPEC, + KIMPSSharedKeysServiceSettingsLoginTypesChangedPEC ); + // Service settings login type change notifier key + DoAppendKeyPairL( EIMPSSharedKeysServSettLoginTypeChangedIM, + KIMPSSharedKeysServiceSettingsLoginTypesChangedIM ); + + // Service settings schedule change notifier key + DoAppendKeyPairL( EIMPSSharedKeysServSettScheduleChangedPEC, + KIMPSSharedKeysServiceSettingsScheduleChangedPEC ); + // Service settings schedule change notifier key + DoAppendKeyPairL( EIMPSSharedKeysServSettScheduleChangedIM, + KIMPSSharedKeysServiceSettingsScheduleChangedIM ); + + } + +// End of File