--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/browsertelservice/inc/BrowserTelService.h Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,671 @@
+/*
+* 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 the License "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:
+* Declaration of class CBrowserTelService.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#ifndef __BROWSERTELSERVICE_H
+#define __BROWSERTELSERVICE_H
+
+#include "BrowserTelServiceEtelWatcher.h"
+
+#include <e32def.h> //resolve NULL redefinition warning (conflict with time.h).
+#include <e32base.h>
+#include <etel.h>
+#include <etelmm.h>
+#include <f32file.h>
+#include <AknProgressDialog.h>
+#include <AknWaitDialog.h>
+#include <ConnectionObservers.h>
+#include <ApEngineConsts.h>
+#include <errorui.h>
+#include <bldvariant.hrh>
+#include <ConeResLoader.h>
+
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+// AIW related headers
+#include <AiwServiceHandler.h>
+
+
+#include <AiwDialData.h>
+#include <AiwDialDataExt.h>
+
+
+#endif // __BROWSER_TEL_SERVICES_CALLUI__
+
+#define JAPANESE ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) )
+
+// FORWARD DECLARATIONS
+class MBrowserTelServiceObserver;
+class CSendAppUi;
+class CContactIdArray;
+class CPbkContactEngine;
+class CPbkContactItem;
+
+// DATA TYPES
+enum TBrowserTelServiceState
+ {
+ EIdle,
+ EDialing,
+ EDialingDTMF,
+ EConnected
+ };
+
+enum TBrowserTelServiceError
+ {
+ ESendDTMFFailed
+ };
+
+enum TBrowserTelServiceDlgType
+ {
+ EConfirmMakeCall,
+ EConfirmSendDTMF,
+ EConfirmAddToPb,
+ ESendingDTMF
+ };
+
+enum TMatchType
+ {
+ EPhoneNumber,
+ EEmail
+ };
+
+// CONSTANTS
+
+const TUid KUidBrowserApplication = { 0x10008D39 };
+
+// The Central Repository key used to determine how BrowserTelService
+// should handle a 'mailto' attribute of an html link element:
+// 0 = email; 1 = MMS composer
+const TUint32 KBrowserMailtoSendingApp = 0x00000004;
+
+// Return values
+const TInt KErrInvocationError = (-200);
+const TInt KErrNoCallActive = (-108); // KErrGsmNoCallActive
+const TInt KErrUserNoAnswer = (-107); // KErrGsmCCUserNoAnswer
+const TInt KErrNoService = (-106); // KErrGsmNoService
+const TInt KErrUserBusy = (-105); // KErrGsmCCUserBusy
+const TInt KErrPBPhoneBookFull = (-104);
+const TInt KErrPBWriteError = (-103);
+const TInt KErrPBNumberTooLong = (-102);
+const TInt KErrPBNameTooLong = (-100);
+const TInt KErrUnspecified = (-1);
+
+// CLASS DECLARATION
+
+/**
+* Implements telephony services for browser.
+* This class implements required telephony services for multipurpose browser.
+*/
+class CBrowserTelService : public CActive,
+ public MBrowserTelServiceEtelWatcherObserver,
+ public MConnectionStageObserver,
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+ public MAiwNotifyCallback,
+#endif // __BROWSER_TEL_SERVICES_CALLUI__
+ public MProgressDialogCallback
+ {
+ public: // Constructors and destructor
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CBrowserTelService();
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aObserver The observer for CBrowserTelService.
+ * Defaults to NULL.
+ * @return The constructed CBrowserTelService object.
+ */
+ IMPORT_C static CBrowserTelService* NewL( MBrowserTelServiceObserver*
+ aObserver = NULL );
+ IMPORT_C static CBrowserTelService* NewLC( MBrowserTelServiceObserver*
+ aObserver = NULL );
+
+ /**
+ * Parses given phone number. If specified number contains DTMF
+ * sequence it will be
+ * extracted from the phone number.
+ * @param aNumber. Phone number with possible DTMF sequence.
+ * @return The extracted DTMF sequence
+ */
+ IMPORT_C HBufC* ParsePhoneNumberL( TDes* aNumber );
+
+ public: // New functions
+ /**
+ * Call the given phone number synchronously.
+ * @param aNumber The phone number to be called.
+ * @return Typically KErrNone or another of the system-wide error codes.
+ *
+ * NOTE: If the specified phone number contains DTMF sequence, it will
+ * be extracted from the number. After the call has been established
+ * the dtmf sequence will be send immediately. This function will
+ * return after the dtmf sending has
+ * been handled.
+ */
+ IMPORT_C TInt MakeCall( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm );
+
+ /**
+ * Call the given phone number asynchronously.
+ * @param aStatus Request status.
+ * @param aNumber The phone number to be called.
+ * @return Typically KErrNone or another of the system-wide error codes.
+ *
+ * NOTE: If the specified phone number contains DTMF sequence then it
+ * will be extracted from the number. After the call has been
+ * established the dtmf sequence will be sent immediately.
+ */
+ IMPORT_C void MakeCall( TRequestStatus& aStatus, TDesC& aNumber,
+ TBool aSendDTMFAlwaysConfirm );
+
+ /**
+ * Cancel the request set with
+ * MakeCallL(TRequestStatus& aStatus,TDesC& aNumber)
+ */
+ IMPORT_C void CancelMakeCall();
+
+ /**
+ * Send given DTMF sequence (needs an active call) synchronously.
+ * @param aNumber DTMF number.
+ * @return Typically KErrNone or another of the system-wide error codes.
+ */
+ IMPORT_C TInt SendDTMF( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm );
+
+ /**
+ * Send given DTMF sequence (needs an active call) asynchronously.
+ * @param aStatus Request status.
+ * @param aNumber DTMF number.
+ * @return Typically KErrNone or another of the system-wide error codes.
+ */
+ IMPORT_C void SendDTMF( TRequestStatus& aStatus,TDesC& aNumber,
+ TBool aSendDTMFAlwaysConfirm );
+
+ /**
+ * Cancel the request set with SendDTMFL().
+ */
+ IMPORT_C void CancelSendDTMFL();
+
+ /**
+ * Create a new phonebook entry. Draw up a dialog. Fill its names,
+ * and phonenumber fields with the given values.
+ * @param aNumber Phone number
+ * @param aName Name
+ * @param aEmail Email address
+ * @return always KErrNone
+ */
+ IMPORT_C TInt AddPBEntryL( TDesC& aNumber,
+ TDesC& aName,
+ TDesC& aEmail );
+
+ /**
+ * Current state of the engine
+ * @return TBrowserTelServiceState
+ */
+ IMPORT_C TBrowserTelServiceState State() const;
+
+ /**
+ * Add observer. Observers are notified whenever
+ * the engine state changes.
+ * @param aObserver The Observer.
+ */
+ IMPORT_C void AddObserver( MBrowserTelServiceObserver* aObserver );
+
+ /**
+ * Remove observer.
+ * @param aObserver The Observer.
+ */
+ IMPORT_C void RemoveObserver( MBrowserTelServiceObserver* aObserver );
+
+ /**
+ * Create the message and open up the email editor as ready to send.
+ * @param aToRecipients To recipients.
+ * @param aCcRecipients Cc recipients.
+ * @param aParams Other parameters ??.
+ * @param aBody Body text.
+ * @return Typically KErrNone or another of the system-wide error codes.
+ */
+ IMPORT_C TInt SendEmailMessageL( const TDesC& aToRecipients,
+ const TDesC& aCcRecipients,
+ const TDesC& /*aParams*/,
+ const TDesC& aBody );
+ /**
+ * Create the message and open up the email editor as ready to send.
+ * @param aToRecipients To recipients.
+ * @param aCcRecipients Cc recipients.
+ * @param aParams Other parameters ??.
+ * @param aBody Body text.
+ * @param aLaunchEmbedded information to launch embedded mode or not
+ * @return Typically KErrNone or another of the system-wide error codes.
+ */
+ IMPORT_C TInt SendEmailMessageL( const TDesC& aToRecipients,
+ const TDesC& aCcRecipients,
+ const TDesC& aParams,
+ const TDesC& aBody,
+ TBool aLaunchEmbedded );
+
+ /**
+ * Check for active CSD/HSCSD connection and disconnect if active.
+ */
+ IMPORT_C void DisconnectActiveCSDConnectionL();
+
+ /**
+ * Displays specified type of dialog.
+ * @param aDynamicText. Typically a phone number,
+ * dtmf string or email address.
+ * @param aDlgType. Dialog type.
+ * @return 0 if cancelled otherwise non zero.
+ */
+ IMPORT_C TInt ShowDialogL( const TDesC& aDynamicText,
+ const TBrowserTelServiceDlgType& aDlgType );
+
+
+ /**
+ * Call the given phone number synchronously.
+ * @param aNumber The phone number to be called.
+ * @return Typically KErrNone or another of the system-wide error codes.
+ *
+ * NOTE: If the specified phone number contains DTMF sequence, it will
+ * be extracted from the number. After the call has been established
+ * the dtmf sequence will be send immediately. This function will
+ * return after the dtmf sending has
+ * been handled.
+ */
+ IMPORT_C TInt MakeVOIPCall( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm );
+
+
+ protected: // Functions from base classes
+ /**
+ * From CActive
+ */
+ void DoCancel();
+ void RunL();
+
+ /**
+ * From MProgressDialogCallback
+ *
+ * Get's called when a dialog is dismissed.
+ */
+ virtual void DialogDismissedL( TInt aButtonId );
+
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+
+ /**
+ * From MAiwNotifyCallback
+ */
+ TInt HandleNotifyL( TInt aCmdId,
+ TInt aEventId,
+ CAiwGenericParamList& aEventParamList,
+ const CAiwGenericParamList& aInParamList );
+
+#endif // __BROWSER_TEL_SERVICES_CALLUI__
+
+ private: // New functions
+ /**
+ * C++ default constructor.
+ */
+ CBrowserTelService();
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ * @param aObserver The observer for CBrowserTelService.
+ */
+ void ConstructL( MBrowserTelServiceObserver* aObserver );
+
+ /**
+ * Set the internal state of CBrowserTelService.
+ * @param aState The state.
+ */
+ void SetState( TBrowserTelServiceState aState );
+
+ /**
+ * Set the internal state to idle and notify observers.
+ * Just a convenience function.
+ */
+ void SetStateIdleAndNotifyObservers();
+
+ /**
+ * Notify observers of the current state of CBrowserTelService.
+ */
+ void NotifyObservers();
+
+ /**
+ * Notify observers of error that occurred
+ * @param aError The error.
+ */
+ void NotifyObservers( TBrowserTelServiceError aError );
+
+ /**
+ * Initialization before DoMakeCallL
+ * @param aNumber The phone number to be called.
+ * @return Typically KErrNone or another of the system-wide error codes.
+ */
+ void MakeCallL( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm, TBool voipCall = EFalse );
+
+ /**
+ * Called if anything went wrong in MakeCall
+ */
+ void CleanupBuffers();
+
+ /**
+ * Make phone call.
+ */
+ void DoMakeCallL( TDesC& aNumber, TBool voipCall = 0 );
+
+ /**
+ * Leave version of exported SendDTMF function.
+ */
+ void SendDTMFL( TDesC& aNumber, TBool aSendDTMFAlwaysConfirm );
+
+ /**
+ * Leave version of exported SendDTMF function.
+ */
+ void SendDTMFL( TRequestStatus& aStatus,TDesC& aNumber,
+ TBool aSendDTMFAlwaysConfirm );
+
+ /**
+ * Send DTMF sequence.
+ * @param aNumber The DTMF number.
+ */
+ void DoSendDTMFL( TDesC& aNumber );
+
+ /**
+ * Validates the given phone number. Rips all the "-","(",")",
+ * and white spaces off. If the given string has any
+ * alphabetical(excluding w and p) characters,
+ * then NULL will be returned.
+ * @param aNumber The phone number.
+ * @return If the given string has any alphabetical characters,
+ * then NULL will be returned.
+ * Otherwise the validated phone number.
+ */
+ HBufC* ValidateNumberL( TDesC& aNumber );
+
+ /**
+ * Looks for DTMF sequence from a specified phone number.
+ * @param aNumber The phone number that might contain a DTMF sequence
+ * @return NULL if DTMF sequence couldn't be found.
+ * Otherwise the DTMF number.
+ * NOTE: The DTMF sequence will be ripped off from
+ * the given phone number if found.
+ */
+ HBufC* FindAndRipDTMFSequenceL( TDes* aNumber );
+
+ /**
+ * Looks for tel URI parameters from a specified phone number.
+ * @param aNumber The phone number that might contain URI parameters
+ * @return HBufC containing URI parameters, if parameters couldn't
+ * be found the HBufC with zero len is returned
+ * NOTE: The parameters will be ripped off from the given phone
+ * number if found.
+ */
+ HBufC* FindAndRipURIParametersL( TDes& aNumber );
+
+
+ /**
+ * Looks for voip parameters from a specified phone number.
+ * @param aNumber The phone number that might contain voip parameters
+ * NOTE: The parameters will be ripped off from the given phone
+ * number if found.
+ */
+ void FindAndRipVoipParametersL( TDes& aNumber );
+
+ /**
+ * Validates the given dtmf number. Characters [p w 0...9 * / ,]
+ * are allowed, with the exception that only one "w" or "/"
+ * (wait) in succession is allowed.
+ * @param aNumber The dtmf number do be validated.
+ * NOTE: Removes all invalid characters.
+ */
+ void ValidateDTMFNumberL( TDes* aNumber );
+
+ /**
+ * Parses given string into sequences. Sequences are determined
+ * by [ w / p , ] characters.
+ * Each sequence begins with [ w / p , ] character.
+ */
+ CArrayPtrFlat<HBufC>* ParseDTMFSequencesL( const TDesC* aDTMFString );
+
+ /**
+ * Parses given string to sequences.
+ */
+ CArrayPtrFlat<HBufC>* ParseDTMFSequencesForDlgL(
+ const TDesC* aDTMFString );
+
+ /**
+ * Rips off [ w / p , ] character.
+ * NOTE: Assumes that the wait/pause char is the first character of
+ * the given string. If the first character is not a wait/pause
+ * char then this function does nothing.
+ */
+ TChar RipWaitChar( TDes* aNumber );
+
+ /**
+ * Analyses given number whether the DTMF confirmation query
+ * should be displayed.
+ * @param aNumber
+ * @return ETrue if dialog should be displayed.
+ * NOTE: The given string will be modified if a wait
+ * char [/ w p ,]is found. The
+ * wait char is deleted from the aNumber.
+ */
+ TBool DisplaySendDTMFDialog( TDes* aNumber );
+
+ /**
+ * Seeks given number in phone book.
+ * @param aPhoneNumber The phone number to look for.
+ * @return owner's name of the number,
+ * if not found then NULL will be returned.
+ */
+ HBufC* SearchPbForMatchL( const TDesC& aPhoneNumber );
+ CContactIdArray* SearchPbForMatchLC( CPbkContactEngine& aPbkEngine,
+ const TDesC& aToMatch,
+ const TMatchType& aMatchType );
+
+ /**
+ * Closes all open etel sessions.
+ */
+ void CloseAllSessions();
+
+ /**
+ * Internal error handling.
+ * @param aError The error.
+ */
+ void HandleError( TInt aError );
+
+ static TInt IdleCallback( TAny* aTelService );
+ void DoIdleCallback();
+
+ /**
+ *
+ * @return EFalse if nothing to handle, otherwise ETrue (processing).
+ */
+ TBool HandleInternalSendDTMFL();
+
+ /**
+ * Brings Browser to the foreground.
+ */
+ void BringBrowserToForeground();
+
+ /**
+ * Check if there are activate voice call on.
+ */
+ void CheckIsThereActivateVoiceCallOnL();
+
+ /**
+ * Check from DTMF number is there any illeagal char's.
+ * aNumber DTMF sequence for check.
+ * Return ETrue if everything OK and EFalse if illeagal char
+ * in DTMF sequence.
+ */
+ void CheckDTMFNumberL( TDesC& aNumber );
+
+ /**
+ * Search for existing contact item, or create a new empty one.
+ * @param aPbkEngine phonebook engine
+ * @param aNumber Phone number
+ * @param aEmail Email address
+ * @param aNewContact ETrue if new contact item created
+ * @return existing/new contact item
+ */
+ CPbkContactItem* SearchPBItemLC( CPbkContactEngine& aPbkEngine,
+ TDesC& aNumber,
+ TDesC& aEmail,
+ TBool& aNewContact );
+
+ /**
+ * Set contact item's field. If field doesn't exist in the contact
+ * item, a new one is added.
+ * @param aField field to set
+ * @param phonebook engine
+ * @param aContactItem contact item of which field is set
+ * @param aFieldValue contact item field value
+ * @param index of field to focus initially in contact editor dialog
+ */
+ void SetPBEntryFieldL( TInt aField,
+ CPbkContactEngine* aPbkEngine,
+ CPbkContactItem* aContactItem,
+ const TPtrC& aFieldValue,
+ TInt& aFormIndex );
+
+ /**
+ * Parse recipients received in aRecipients.
+ * Recipients are separaret by commas.
+ * @param aRecipients Recipient list. Items separated by commas.
+ * @return array of recipients
+ */
+ CPtrC16Array* ParseRecipientsLC( const TDesC& aRecipients );
+ /**
+ * Looks for postd from a specified phone number.
+ * @param aNumber The phone number that might contain a postd parameter
+ * @return NULL if postd parameter couldn't be found.
+ * Otherwise the DTMF number.
+ */
+ HBufC* FindPostdParmL( TDes& aNumber );
+
+ private: // Functions from base classes
+ /**
+ * From MBrowserTelServiceEtelWatcherObserver
+ */
+ void BrowserTelServiceEtelWatcherEvent( RCall::TStatus& aStatus );
+
+ /**
+ * From MConnectionStageObserver
+ */
+ void ConnectionStageAchievedL();
+
+ /**
+ * @return the bearer type of connection
+ */
+ TApBearerType ConnectionTypeL( TUint aApId );
+
+ private:
+
+ void ErrorHandler( TInt aErrorId );
+
+ /**
+ * Create the message and open up the mms editor as ready to send.
+ * @param aToRecipients To recipients.
+ * @param aCcRecipients Cc recipients.
+ * @param aParams Other parameters ??.
+ * @param aBody Body text.
+ * @param aLaunchEmbedded information to launch embedded mode or not
+ * @return Typically KErrNone or another of the system-wide error codes.
+ */
+ TInt SendMmsMessageL( const TDesC& aToRecipients,
+ const TDesC& aCcRecipients,
+ const TDesC& aParams,
+ const TDesC& aBody,
+ TBool aLaunchEmbedded );
+
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+
+ /**
+ * Show confirmation query before sending dtmf when CallUi is used.
+ * @param aDTMF DTMF sequence
+ * @return TBool User esponse.
+ */
+ TBool SendDMFConfQueryL( const TDesC& aDTMF );
+
+#endif // __BROWSER_TEL_SERVICES_CALLUI__
+
+ private: // Data
+ CArrayPtrFlat<HBufC>* iSendableDTMFNumbers;
+ CArrayPtrFlat<HBufC>* iDlgDTMFNumbers;
+ RPointerArray<MBrowserTelServiceObserver> iObserverList;
+ HBufC* iDTMFNumber;
+ TBrowserTelServiceState iState;
+ RTelServer iRTelServer;
+ RPhone iRPhone;
+ //RAdvGsmPhone iRAdvGsmPhone;
+ RMobilePhone iRAdvGsmPhone;
+ RLine iRLine;
+ RCall iRCall;
+ RCall::TStatus iCallStatus;
+ CBrowserTelServiceEtelWatcher* iWatcher;
+ TBool iSynch;
+ TInt iRetVal;
+ CActiveSchedulerWait iWait;
+ TRequestStatus* iUserRequestStatus;
+ TBool iAgentDisconnected;
+ CAknWaitDialog* iWaitDlg;
+ TBool iInternalDTMFWaitStarted;
+ TBool iConfirmedOnce;
+ TBool iDTMFAlwaysConfirm;
+ CIdle* iIdle;
+ CErrorUI* iErrorUi;
+
+ TFileName iResourceFileName; ///< Temp storage for the file name.
+ RConeResourceLoader iResourceLoader; ///< Resource loader.
+ TBool iResourceOpened; ///< Indicate if the resource is opened.
+
+#ifdef __BROWSER_TEL_SERVICES_CALLUI__
+
+ // AIW related members
+ CAiwServiceHandler* iServiceHandler;
+
+ // DialData.
+ CAiwDialData* iDialData;
+
+#endif // __BROWSER_TEL_SERVICES_CALLUI__
+
+ };
+
+/**
+* This class defines a protocol for observing CBrowserTelService stages.
+* You should inherit from this if you want to observe
+* CBrowserTelService stages.
+*/
+class MBrowserTelServiceObserver
+ {
+ public: // New functions
+ /**
+ * Notification of the state change.
+ * @param aEvent The new state.
+ */
+ virtual void BrowserTelServiceEvent(
+ TBrowserTelServiceState aEvent ) = 0;
+
+ /**
+ * Notification of the error that occurred.
+ * @param aError The error.
+ */
+ virtual void BrowserTelServiceError(
+ TBrowserTelServiceError aError ) = 0;
+ };
+
+#endif // __BROWSERTELSERVICE_H
\ No newline at end of file