diff -r 000000000000 -r ff3b6d0fd310 cbs/CbsServer/ServerInc/CCbsReceiverHelper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbs/CbsServer/ServerInc/CCbsReceiverHelper.h Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,275 @@ +/* +* 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 file contains the header file of the CCbsReceiverHelper class. +* +*/ + + +#ifndef CCBSRECEIVERHELPER_H +#define CCBSRECEIVERHELPER_H + +// INCLUDES +#include +#include "CbsCommon.h" + +// FORWARD DECLARATIONS +class CCbsRecMessage; +class CCbsServer; +class CCbsDbImp; +class CVwsSessionWrapper; +class CCbsMessage; + + +// CLASS DECLARATION + +/** +* CCbsReceiverHelper gets the messages from the receiver and +* sends them to the database. All received messages are +* sent to CCbsReceiverHelper instance by CCbsRecEtel. +* This class makes subscription and existence checks +* to these messages and also implements topic detection +* feature. +*/ +class CCbsReceiverHelper : public CBase + { + public: // New functions + + /** + * Creates an instance of the class. + * + * @param aDatabase Database object. + * @return New CCbsReceiverHelper instance. + */ + static CCbsReceiverHelper* NewL( CCbsDbImp& aDatabase ); + + /** + * The destructor. + */ + ~CCbsReceiverHelper(); + + /** + * Clears the topic detected counter. + */ + void ClearTopicsDetectedCounter(); + + /** + * Returns the amount of detected topics. + * + * @return The amount of detected topics. + */ + TUint TopicsDetected() const; + + /** + * This function is called when a message is received. + * + * Assumptions; + * 1. The message doesn't have it's permanent or read + * flags raised - method leaves with KErrNotSupported + * if this is the case. + * 2. If an index message (root or subindex) is passed as + * a parameter, the language indication prefix, if any, + * has been removed before HandleReceivedMessageL() is called. + * + * Assumption (2) holds because language indications are removed + * by Receiver module in an instance of CCbsRecDecoder. + * + * Exceptions: + * KErrNoMemory OOM occurred. + * KErrNotSupported aMessage's flags were invalid. + * KErrAlreadyExists aMessage is already stored in + * the database. + * + * @param aMessage Interface to get the information + * about the message. + */ + void HandleReceivedMessageL( CCbsMessage& aMessage ); + + /** + * Checks if aMessage's topic is in the topic list. + * If the topic detection is enabled and the aMessage's topic + * is not in the list, the topic is added. The method + * will then return ETrue. Otherwise EFalse is returned. + * + * @param aMessage Message page. + * @return ETrue, if topic added + */ + TBool CheckForNewTopicL( const CCbsMessage& aMessage ); + + /** + * Checks if aMessage's topic is subscribed and + * if the message already exists in the database. + * + * Returns ETrue only if the message does not exist in the + * database and the message's topic is subscribed. + * + * @param aMessage Message page. + * @return ETrue, if message can be received + */ + TBool CheckForSubscriptionAndExistenceL( const CCbsMessage& aMessage ); + + /** + * Checks if aMessage's language has been subscribed by the user. + * + * ETrue is returned either if the language specified has been + * subscribed, message language is "Other" or the user has + * preferred to receive messages of all languages. + * + * @param aMessage Message page + * @return ETrue, if message can be received + */ + TBool LanguageOfMessageSubscribedL( const CCbsMessage& aMessage ); + + /** + * Stores the CB topic (aNumber, aName) retrieved from + * SIM into the DB. If a topic of the same number already exists + * in DB, does nothing. + * + * @param aNumber Number of the topic. + * @param aName Name of the topic. + */ + void AddSimTopicL( const TUint aNumber, const TDesC& aName ); + + /** + * Returns a reference to the CCbsDbImp instance. + * + * @return Main database object. + */ + CCbsDbImp& Database() const; + + /** + * Returns a reference to SIM Topic array + * + * @return SIM Topic array. + */ + CArrayFixFlat& SimTopics() const; + + /** + * Deletes a topic from the local SIM Topic array. + * + * @param aNumber Number of the topic. + */ + void DeleteFromSimTopicCache( const TUint16 aNumber ); + + /** + * Requests a notification to be launched when a message + * arrives to a hotmarked topic. + * + * @param aPlayTone Should the message alert tone be + * played. + */ + void LaunchMessageSoftNotificationL( const TBool aPlayTone ); + + private: + + /** + * The constructor. + * + * @param aDatabase Database object. + * @param aServer Server object. + */ + CCbsReceiverHelper( CCbsDbImp& aDatabase ); + + /** + Finalizes the construction. + */ + void ConstructL(); + + /** + * Handles detected topic. + * + * @param iTopicNumber The number of the topic detected. + * @return ETrue if the detected topic is added + * to the topic list. EFalse otherwise. + */ + TBool HandleTopicDetectedL( const TCbsDbTopicNumber& iTopicNumber ); + + /** + * Handles index message. Parses topic identities and + * stores them into the database. + * + * Leave reasons: + * KErrNoMemory OOM occured. + * KErrNotSupported Index message was of unsupported + * version. + * KErrCorrupt Parsing of the index message failed. + * + * @param aContents Index message body. + * @param aIsChildSubIndex ETrue, if child subindex. + * EFalse, if root index. + * @return Result code. + */ + void HandleIndexMessageL( const TDesC& aContents, + const TBool aIsChildSubIndex ); + + /** + * Parses all topic identities from aText which is assumed to be + * an index message's content. + * + * Leave code values: + * KErrNoMemory Storing of topic identities failed + * because of insufficient memory. + * KErrNotSupported Index message identifies itself as + * an index of unknown type to the server. + * KErrCorrupt A problem was encountered while parsing + * the index message content. + * KErrAlreadyExists Index message contained two or more + * identities which shared the same topic + * number. + * + * @param aText Index message body + */ + void ParseTopicIdentitiesL( const TDesC& aText ); + + /** + * Requests a notification to be launched about a message that + * requires immediate displaying. + * + * @param aMessage Message to be displayed + */ + void LaunchMessageImmediateDisplay( const TCbsDbMessage& aMessage ); + + /** + * Turn lights on + */ + void TurnLightsOn(); + + /** + * Play Cbs tone. + */ + void PlayCbsTone(); + + private: // Member variables + + // Reference to the database + CCbsDbImp& iDatabase; + + // Number of topics detected after startup. + TUint iTopicsDetected; + + CArrayFixFlat* iSimTopics; + + // View server session wrapper. + // Used to launch CBS UI application on arrival of + // CB messages designated "requiring immediate display". + CVwsSessionWrapper* iVwsSession; + + // Local variation bits, fetched from CenRep + TInt iLVBits; + }; + +#endif // CCBSRECEIVERHELPER_H + +// End of File + +