--- /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 <e32property.h> // 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<RProperty::KMaxPropertySize> 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