--- a/cbs/CbsServer/ClientSrc/RCbs.cpp Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,757 +0,0 @@
-/*
-* Copyright (c) 2003 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: This module contains the implementation of RCbs class
- member functions.
-*
-*/
-
-
-// INCLUDES
-#include "RCbs.h"
-#include "CbsCommon.h"
-#include "CbsServerConstants.h"
-#include <data_caging_path_literals.hrh>
-
-// CONSTANTS
-// Server name
-_LIT( KCbsServerExe, "CbsServer.exe");
-
-// How many microseconds to wait for server
-const TInt KWaitForServerRetries = 10;
-const TInt KWaitForServerTime = 500000;
-
-// ==================== LOCAL FUNCTIONS ====================
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// -----------------------------------------------------------------------------
-// RCbs::RCbs
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C RCbs::RCbs() //lint -e1926
- //lint -e1928
- : iConnected( EFalse )
- {
- } //lint +e1926
- //lint +e1928
-
-// Destructor
-EXPORT_C RCbs::~RCbs()
- {
- // Close subsession and session.
- Close();
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::Connect
-// Creates connection to the server.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::Connect()
- {
- TInt result( KErrNone );
-
- if ( !iConnected )
- {
- // Start the server if it isn't already started
- StartServer();
-
- // Create a session to the server.
- result = CreateSession( KCbsServerName,
- Version(),
- KCbsServerDefaultSlots );
-
- if ( result == KErrNone )
- {
- // Create a settings subsession
- result = iSettings.Open( *this );
- }
- if ( result == KErrNone )
- {
- // Create a topic list subsession
- result = iTopicList.Open( *this );
- }
- if ( result == KErrNone )
- {
- // Create a topic messages subsession
- result = iTopicMessages.Open( *this );
- }
- if ( result == KErrNone )
- {
- // Create a topic collection subsession
- result = iTopicCollection.Open( *this );
- if ( result == KErrNone )
- {
- iConnected = ETrue;
- }
- else
- {
- iConnected = EFalse;
- }
- }
- }
- // Return the result code
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::Close
-// Closes the session to the server.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::Close()
- {
- if ( iConnected )
- {
- // First close all subsessions.
- iTopicCollection.Close();
- iTopicMessages.Close();
- iTopicList.Close();
- iSettings.Close();
-
- // Then close the server session.
-
- // Try to tell the server we've closed the session.
- // Just ignore if that fails.
- const TIpcArgs args( TIpcArgs::ENothing );
- SendReceive( ECbsCloseSession, args );
-
- RHandleBase::Close();
- iConnected = EFalse;
- }
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::Version
-// Returns the version of CbsClient.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TVersion RCbs::Version() const
- {
- // Create version and return it.
- return TVersion( KCbsServerVersionMajor,
- KCbsServerVersionMinor,
- KCbsServerVersionBuild );
- }
-
-// Settings-related methods
-
-// -----------------------------------------------------------------------------
-// RCbs::GetReceptionStatus
-// Requests the reception status from the server.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::GetReceptionStatus(
- TBool& aStatus )
- {
- iSettings.GetReceptionStatus( aStatus );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::SetReceptionStatus
-// Changes the reception status to aStatus.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::SetReceptionStatus(
- TBool aStatus )
- {
- // Change the reception status
- return iSettings.SetReceptionStatus( aStatus );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetTopicDetectionStatus
-// Requests the current topic detection status.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::GetTopicDetectionStatus(
- TBool& aStatus )
- {
- iSettings.GetTopicDetectionStatus( aStatus );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::SetTopicDetectionStatus
-// Changes the topic detection status to aStatus.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::SetTopicDetectionStatus(
- TBool aStatus )
- {
- return iSettings.SetTopicDetectionStatus( aStatus );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetLanguages
-// Requests for the current language settings from the server.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::GetLanguages(
- TCbsSettingsLanguages& aLanguages )
- {
- iSettings.GetLanguages( aLanguages );
- }
-// -----------------------------------------------------------------------------
-// RCbs::SetLanguages
-// Sets a new set of languages to the server.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::SetLanguages(
- const TCbsSettingsLanguages& aLanguages )
- {
- return iSettings.SetLanguages( aLanguages );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::NotifySettingsChanged
-// Requests the server to notify the client whenever any settings will be
-// changed.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::NotifySettingsChanged(
- TRequestStatus& aStatus,
- TCbsSettingsEvent& aEvent )
- {
- iSettings.NotifySettingsChanged( aStatus, aEvent );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::NotifySettingsChangedCancel
-// Cancels the request to notify the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::NotifySettingsChangedCancel()
- {
- iSettings.NotifySettingsChangedCancel();
- }
-
-// Topic Collection -related methods
-
-// -----------------------------------------------------------------------------
-// RCbs::StartCollectionBrowsing
-// Resets the iterator.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::StartCollectionBrowsing()
- {
- iTopicCollection.Start();
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::HasNextCollectionTopic
-// Returns ETrue, if there is a topic not accessed with NextTopic()
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TBool RCbs::HasNextCollectionTopic()
- {
- return iTopicCollection.HasNextTopic();
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::NextCollectionTopic
-// Returns the next topic identity if one exists.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::NextCollectionTopic(
- TCbsTopicInfo& aInfo )
- {
- return iTopicCollection.NextTopic( aInfo );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetTopicCount
-// Returns the total amount of topics the topic list contains.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::GetTopicCount(
- TInt& aCount )
- {
- iTopicList.GetTopicCount( aCount );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetTopic
-// Returns information about a topic from the topic list.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::GetTopic(
- const TInt aIndex,
- TCbsTopic& aTopic )
- {
- return iTopicList.GetTopic( aIndex, aTopic );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::FindTopicByNumber
-// Finds the topic by the given number.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::FindTopicByNumber(
- TCbsTopicNumber aNumber,
- TCbsTopic& aTopic )
- {
- return iTopicList.FindTopicByNumber( aNumber, aTopic );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::DeleteTopic
-// Deletes an existing topic.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::DeleteTopic(
- TCbsTopicNumber aNumber )
- {
- return iTopicList.DeleteTopic( aNumber );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::DeleteAllTopics
-// Delete all topics.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::DeleteAllTopics()
- {
- return iTopicList.DeleteAllTopics();
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::AddTopic
-// Adds a new topic.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::AddTopic(
- TCbsTopic& aTopic )
- {
- return iTopicList.AddTopic( aTopic );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::ChangeTopicNameAndNumber
-// Changes the name and number of the existing topic.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::ChangeTopicNameAndNumber(
- TCbsTopicNumber aOldNumber,
- TCbsTopicNumber aNewNumber,
- const TCbsTopicName& aName )
- {
- return iTopicList.ChangeTopicNameAndNumber(
- aOldNumber, aNewNumber, aName );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::ChangeTopicSubscriptionStatus
-// Changes topic subscription status.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::ChangeTopicSubscriptionStatus(
- TCbsTopicNumber aNumber,
- TBool aNewStatus )
- {
- return iTopicList.ChangeTopicSubscriptionStatus( aNumber, aNewStatus );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::ChangeTopicHotmarkStatus
-// Changes topic hotmark status.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::ChangeTopicHotmarkStatus(
- TCbsTopicNumber aNumber,
- TBool aNewStatus )
- {
- return iTopicList.ChangeTopicHotmarkStatus( aNumber, aNewStatus );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::NotifyOnTopicListEvent
-// Requests the server to notify the client whenever an event occurs
-// that changes the information of the topics.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::NotifyOnTopicListEvent(
- TRequestStatus& aStatus,
- const TInt aRequested,
- TCbsTopicListEvent& aEvent,
- TCbsTopicNumber& aNumber )
- {
- iTopicList.NotifyOnEvent( aStatus, aRequested, aEvent, aNumber );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::NotifyOnTopicListEventCancel
-// Cancels the pending notify request.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::NotifyOnTopicListEventCancel()
- {
- iTopicList.NotifyOnEventCancel();
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetNewTopicsCount
-// Returns the number of topics added since last GetNewTopicsCount()
-// by the topic detection feature.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::GetNewTopicsCount(
- TInt& aCount )
- {
- return iTopicList.GetNewTopicsCount( aCount );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetLatestTopicNumber
-// Returns the number of the topic which was last added
-// to topic list.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::GetLatestTopicNumber(
- TCbsTopicNumber& aNumber )
- {
- return iTopicList.GetLatestTopicNumber( aNumber );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetUnreadMessageCount
-// Returns the total amount of unread messages.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::GetUnreadMessageCount(
- TInt& aCount )
- {
- iTopicList.GetUnreadMessageCount( aCount );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetHotmarkedMessageHandle
-// Returns the handle to the latest hotmarked message that has been
-// received after the system has started up.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::GetHotmarkedMessageHandle(
- TCbsMessageHandle& aMessage )
- {
- iTopicList.GetHotmarkedMessageHandle( aMessage );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetHotmarkedMessageHandle
-// Returns the number of unread messages in hotmarked topics.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::NumberOfUnreadHotmarkedMessages()
- {
- return iTopicList.NumberOfUnreadHotmarkedMessages();
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetNextAndPrevTopicNumber
-// Returns the numbers of topics that precede and succeed the given
-// topic in server-side topic list.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::GetNextAndPrevTopicNumber(
- const TCbsTopicNumber& aCurrentTopicNumber,
- TCbsTopicNumber& aPrevTopicNumber,
- TCbsTopicNumber& aNextTopicNumber,
- TInt& aPosition )
- {
- return iTopicList.GetNextAndPrevTopicNumber(
- aCurrentTopicNumber,
- aPrevTopicNumber,
- aNextTopicNumber,
- aPosition);
- }
-
-
-// Topic Messages-related methods
-
-// -----------------------------------------------------------------------------
-// RCbs::GetMessageCount
-// Returns the total amount of messages the topic contains.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::GetMessageCount(
- TCbsTopicNumber aNumber,
- TInt& aCount )
- {
- return iTopicMessages.GetMessageCount( aNumber, aCount );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetMessage
-// Returns message information.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::GetMessage(
- TCbsTopicNumber aNumber,
- TInt aIndex,
- TCbsMessage& aMessage )
- {
- return iTopicMessages.GetMessage( aNumber, aIndex, aMessage );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::FindMessageByHandle
-// Finds a message by given handle.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::FindMessageByHandle(
- const TCbsMessageHandle& aHandle,
- TCbsMessage& aMessage )
- {
- return iTopicMessages.FindMessageByHandle( aHandle, aMessage );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetMessageIndexByHandle
-// Returns the index of a message with given handle in topic.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::GetMessageIndexByHandle(
- const TCbsMessageHandle& aHandle,
- TInt& aIndex )
- {
- return iTopicMessages.GetMessageIndexByHandle( aHandle, aIndex );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::DeleteMessage
-// Deletes an existing message.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::DeleteMessage(
- const TCbsMessageHandle& aHandle )
- {
- return iTopicMessages.DeleteMessage( aHandle );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::SaveMessage
-// Saves a message (the saved message won't be deleted to make
-// room for new messages).
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::SaveMessage(
- const TCbsMessageHandle& aHandle )
- {
- return iTopicMessages.SaveMessage( aHandle );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::LockMessage
-// Locks the message.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::LockMessage(
- const TCbsMessageHandle& aHandle )
- {
- return iTopicMessages.LockMessage( aHandle );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::ReadMessage
-// Sets the message as read.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::ReadMessage(
- const TCbsMessageHandle& aHandle )
- {
- return iTopicMessages.ReadMessage( aHandle );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetMessageContents
-// Returns the message contents.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::GetMessageContents(
- const TCbsMessageHandle& aHandle,
- TDes& aBuffer )
- {
- return iTopicMessages.GetMessageContents( aHandle, aBuffer );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::GetNextAndPrevMessageHandle
-// Returns the handles of messages that precede and succeed the
-// given message in server-side list of topic messages.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt RCbs::GetNextAndPrevMessageHandle(
- const TCbsMessageHandle& aCurrentMsgHandle,
- TCbsMessageHandle& aPrevMsgHandle,
- TCbsMessageHandle& aNextMsgHandle,
- TInt& aPosition )
- {
- return iTopicMessages.GetNextAndPrevMessageHandle(
- aCurrentMsgHandle,
- aPrevMsgHandle,
- aNextMsgHandle,
- aPosition );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::Connected
-// Returns ETrue if CbsServer session has been established.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TBool RCbs::Connected() const
- {
- return iConnected;
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::Shutdown
-// Forces the server to shut down.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void RCbs::Shutdown() const
- {
- const TIpcArgs args( TIpcArgs::ENothing );
- SendReceive( ECbsShutdown, args );
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::StartServer
-// Starts the server.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt RCbs::StartServer()
- {
- TInt errorCode( KErrNone );
- RMutex serverStartMutex;
-
- if ( !IsServerStarted() )
- {
- TInt mutexExists( serverStartMutex.CreateGlobal( _L("CBSSERVERMTX") ) );
- if ( mutexExists )
- {
- TInt openErr( serverStartMutex.OpenGlobal( _L("CBSSERVERMTX") ) );
- if ( openErr )
- {
- return openErr;
- }
- }
- // Mutex exists, wait until server is finished with it's tasks
- if ( mutexExists == KErrAlreadyExists )
- {
- serverStartMutex.Wait();
- }
-
- // Create and start a new process.
- TBuf<1> arguments;
- RProcess p;
-
- #ifdef __WINS__
- errorCode = p.Create( KCbsServerExe, arguments );
- #else
- // Use the correct path depending on whether using data caging or not
- // Use path \sys\bin
- TBuf<64> fullPath;
- fullPath = KDC_PROGRAMS_DIR;
- fullPath.Append( KCbsServerExe );
- errorCode = p.Create( fullPath, arguments );
- #endif
-
- if ( errorCode == KErrNone )
- {
- p.Resume();
- p.Close();
-
- TInt i( 0 );
- for ( i = 0; i < KWaitForServerRetries; i++ )
- {
- if ( IsServerStarted() )
- {
- break;
- }
-
- User::After( KWaitForServerTime );
- }
- }
- // Finished with startup sequence, release the mutex
- if ( mutexExists == KErrAlreadyExists )
- {
- serverStartMutex.Signal();
- }
- serverStartMutex.Close();
- }
- return errorCode;
- }
-
-// -----------------------------------------------------------------------------
-// RCbs::IsServerStarted
-// Checks if the server is already started.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool RCbs::IsServerStarted()
- {
- TFindServer findServer( KCbsServerName );
- TFullName name;
- return ( findServer.Next( name ) == KErrNone );
- }
-
-// ================= OTHER EXPORTED FUNCTIONS ==============
-
-// End of File