diff -r f742655b05bf -r d38647835c2e voipplugins/sipconnectionprovider/ipvoicemailengine/inc/ipvmbxengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voipplugins/sipconnectionprovider/ipvoicemailengine/inc/ipvmbxengine.h Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,338 @@ +/* +* Copyright (c) 2002-2010 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: Creates SMS message if Event in MailBox has occurred +* +*/ + + + +#ifndef IPVMBXENGINE_H +#define IPVMBXENGINE_H + +#include +#include +#include + +#include "ipvmbxinterface.h" +#include "ipvmbxbase.h" +#include "ipvmbxparsetype.h" + + +class CSIPProfile; +class CSPSettings; +class CIpVmbxBase; +class TIpVmbxEventMonitor; + + +/** + * Creates SMS message if Event in MailBox has occurred. + * + * @lib IpVmbxAppEngine.lib + */ +NONSHARABLE_CLASS( CIpVmbxEngine ) : + public CBase, + public MMsvSessionObserver + { + +public: // Constructors and destructor + + /** Internal state messages */ + enum TIpVmbxMessages + { + EEngineUndefined, + EEngineSubscribed, + EEngineTerminated, + EEngineSubscribeRejected, + EEngineIncorrectAccount, + EEngineSmsError, + EEngineSmsOom, + EEngineNetworkLost, + EEngineNetworkError, + EEngineFatalNetworkError + }; + + /** + * Two-phased constructor. + * + * @param aInterface Instance to interface for status message sending + */ + IMPORT_C static CIpVmbxEngine* NewL( CIpVmbxInterface& aInterface ); + + /** + * Destructor. + */ + virtual ~CIpVmbxEngine(); + + +public: // New functions + + /** + * Starts subscription to MailBox when SIP profile has registered. Only + * one of these parameters can be used at same time. + * + * @param aServiceProviderId Service provider id of mail settings + * @param aSipProfileId Connected SIP profile id + */ + void SubscribeProfileL( + TUint32 aServiceProviderId, + CSIPProfile& aSipProfile ); + + /** + * Registration status of profile. + * + * @param aServiceProviderId Provider id which status is queried + * @param aProfileSubscribe Status of subscription + * @return KErrNotFound if profile does not exist + */ + TInt ProfileSubscribed( + TUint32 aServiceProviderId, + TBool& aProfileSubscribed ); + + /** + * Resolve address of base class using recipient address + * + * @param aId Recipient + * @return Address of base class + */ + CIpVmbxBase* SubscriptionByRecipient( const TDesC8& aRecipient8 ); + + /** + * EventMonitor has received event and the event + * will be gained and checked if it requires any action + * + * @param aRecipient Recipient of event + */ +#ifdef EUNIT_TEST_IMPLEMENTATION + virtual void EventReceivedL( const TDesC8& aRecipient8 ); +#else + void EventReceivedL( const TDesC8& aRecipient8 ); +#endif + + /** + * Disconnects IPVME from voice mail -server + * + * @param aServiceProviderId Provider id to be unregistered + */ + void UnsubscribeProfileL( TUint32 aServiceProviderId ); + + /** + * Cleanup base class and free resources + * + * @pre Unsubscribe has been sent to voice mail -server + */ + void CleanVmbxBase(); + + /** + * Send status messages to observers + * + * @param aServiceProviderId Service provider id + * @param aMessage MIpVmbxObserver status messages + */ +#ifdef EUNIT_TEST_IMPLEMENTATION + + virtual void HandleMessage( + TUint32 aServiceProviderId, + CIpVmbxEngine::TIpVmbxMessages aMessage ); + +#else + + void HandleMessage( + TUint32 aServiceProviderId, + CIpVmbxEngine::TIpVmbxMessages aMessage ); + +#endif + + /** + * Fetch instance to base class using service id + * + * @param aServiceProviderId Service id to indentify base class + * @return Instance to base + */ + CIpVmbxBase* SubscriptionByProvider( TUint32 aServiceProviderId ); + + +protected: + +// from base class MMsvSessionObserver + + /** + * From base class MMsvSessionObserver + * For notification of events from a Message Server session + * + * @since Series 60 3.0 + * @param aEvent Indicates the event type, + * @param*aArg1 Event type-specific argument value + * @param*aArg2 Event type-specific argument value + * @param*aArg3 Event type-specific argument value + */ + virtual void HandleSessionEventL( TMsvSessionEvent aEvent, TAny *aArg1, + TAny *aArg2, TAny *aArg3 ); + + +private: + + void ConstructL(); + + /** + * C++ default constructor. + * + * @param aInterface Instance to interface for status message sending + */ + CIpVmbxEngine( CIpVmbxInterface& aInterface ); + + /** + * For parsing the content of NOTIFY and some optional messages. + * If function completes without errors, supplied content is cut so that + * only possible optional header data is left. + * + * @param aCreateSms ETrue if user has to be informed (SMS). + * @param aContent Notify content to be parsed + * @param aTotalMessages Total messages + * @param aNewMessages New messages + * @param aFrom Voice mail account + */ + void ParseNotifyContentL( + TBool& aCreateSms, + TDes8& aContent8, + TDes8& aTotalMessages8, + TDes8& aNewMessages8, + TDes8& aFrom8 ) const; + + /** + * Creates SMS message and sends it + * + * @param aFrom MBX uri + * @param aMessageBody Generated message + */ + void CreateSMSMessageL( const TDesC8& aFrom8, const TDesC8& aMessageBody8 ); + + /** + * For parsing optional headers from content of NOTIFY. + * + * @param aContent Notify content + * @param aMessageBody Message body for optional parameters + */ + void ParseOptionalHeadersL( + const TDesC8& aContent8, + TDes8& aMessageBody8 ) const; + + /** + * Read localized content to message body + * + * @param aTotalMessages Total messages + * @param aNewMessages New messages + * @param aMessagesBody Message body + */ + void ReadResourcesL( + const TDesC8& aTotalMessages8, + const TDesC8& aNewMessages8, + TDes8& aMessagesBody8 ); + + /** + * Creates and verifies message body + * + * @param aContent Notify content + * @param aTotal Total messages + * @param aNew New messages + * @param aFrom MBX uri + * @param aMessageBody Message body + */ + void CreateMessageBodyL( + const TDesC8& aContent8, + const TDesC8& aTotal8, + const TDesC8& aNew8, + TDes8& aFrom8, + TDes8& aMessageBody8 ); + + /** + * General optional parameter parser + * + * @param aTagPtr8 Source text + * @param aResourceReader Instance to resource reader( to prevent + * double instantiation ) + * @return Translation, NULL if not found. + */ + HBufC* TranslateTagL( + const TDesC8& aTagPtr8, + CStringResourceReader& aResourceReader ) const; + + /** + * Fetch message part from whole message. It gets first part from + * provided string and checks validity of message part. + * + * @param aContent8 Source text + * @return Message part, empty if content was not valid. + */ + TPtrC8 FetchMessagePartL( const TDesC8& aContent8 ) const; + + /** + * Check name header from message part. + * + * @param aNameHeader8 Source text + */ + void TestNamePartL( const TDesC8& aNameHeader8 ) const; + + /** + * Check value header from message part. + * + * @param aValueHeader8 Source text + */ + void TestValuePartL( const TDesC8& aValueHeader8 ) const; + + +private: // data + + /** + * MCE server connection + * Own. + */ + CMceManager* iMceManager; + + /** + * Event content + */ + TMceTransactionDataContainer iEventData; + + /** + * MCE Event observer + * Own. + */ + TIpVmbxEventMonitor* iIpVmbxEventMonitor; + + /** + * Interface + */ + CIpVmbxInterface& iInterface; + + /** + * Vmbx parameters + * Own. + */ + CSPSettings* iServiceSettings; + + /** + * Array of current Base classes + */ + RPointerArray< CIpVmbxBase > iVmbxBaseArray; + + /** + * Indicates if VME is already running + */ + TBool iBasicServicesRunning; + + + EUNIT_IMPLEMENTATION + }; + +#endif // IPVMBXENGINE_H