diff -r f742655b05bf -r d38647835c2e sipvoipprovider/inc/svpmosession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sipvoipprovider/inc/svpmosession.h Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,385 @@ +/* +* Copyright (c) 2006-2008 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: Class representing the SVP MO session +* +*/ + + + +#ifndef SVPMOSESSION_H +#define SVPMOSESSION_H + +#include +#include +#include + +#include +#include +#include + +#include + +#include "svpsessionbase.h" +#include "svpconsts.h" +#include "svputdefs.h" + + +class CRCSEProfileEntry; +class CSVPForwardProvider; +class CDesC8Array; + +/** + * Representation of SVP Mo session + * + * Inlcudes all the methods needed to establish SVP MO session. + * + * @lib svpcontroller.lib + * @since S60 3.2 + */ +class CSVPMoSession : public CSVPSessionBase, + public MSIPObserver, + public MSIPProfileRegistryObserver + { + +public: + + /** + * Two-phased constructor. + */ + static CSVPMoSession* NewL( + CMceManager& aMceManager, + const TDesC8& aRecipient, + CRCSEProfileEntry& aVoipProfile, + const CCCPCallParameters& aParameters, + TMceTransactionDataContainer& aContainer, + MSVPSessionObserver& aObserver, + CSVPUtility& aSVPUtility, + CSVPRtpObserver& aRtpObserver, + TUint32& aSecurityStatus, + CDesC8Array* aUserHeaders = 0 ); + + /** + * Destructor. + */ + virtual ~CSVPMoSession(); + + +public: // methdos from MCCPCall + + /** + * From MCCPMoSession. Starts dialing to recipient + * @since Series 60 3.2 + * @return + */ + TInt Dial(); + + /** + * From MCCPMoSession. Cancels (dial) request + * @since Series 60 3.2 + * @return + */ + TInt Cancel(); + + /** + * From MCCPCall Ends an ongoing call. + * @since Series 60 3.2 + * @return + */ + TInt HangUp(); + + /** + * From MCCPMoSession. Destructs session + * @since Series 60 3.2 + * @return + */ + TInt Release(); + + /** + * From MCCPCall Get Forward provider + * @since Series 60 3.2 + * @return Pointer to MCCPForwardProvider if succesfull, NULL if not available + */ + MCCPForwardProvider* ForwardProviderL( const MCCPForwardObserver& aObserver ); + + /** + * Puts the specified session on hold. + * @since Series60 3.2 + * @return + */ + TInt Hold(); + + /** + * Resumes held session. + * @since Series60 3.2 + * @return + */ + TInt Resume(); + + /** + * Handles remote action after session is established. + * @since Series60 3.2 + * @param None + * @return + */ + TInt IncomingRequest( CMceInSession* aUpdatedSession ); + + /** + * Returns boolean value, is the session mobile originated. + * @since Series60 3.2 + * @param None + * @return TBool ETrue if mobile originated, otherwise EFalse + */ + TBool IsMobileOriginated() const; + + + +public: // methods from MSIPObserver + + /** + * From MSIPObserver A SIP request has been received from the network. + * @since Series 60 3.0 + * @param aIapId The IapId from which the SIP request was received. + * @param aTransaction Contains local address, remote address of a sip + * message, as well as optional SIP message method, headers and + * body. The ownership is transferred. + * @return None + */ + void IncomingRequest( TUint32 aIapId, + CSIPServerTransaction* aTransaction ); + + /** + * From MSIPObserver The received SIP request time-outed and it has been + * destroyed. + * @since Series 60 3.0 + * @param aSIPServerTransaction The time-outed transaction. Ownership is + * not transferred. + * @return None + */ + void TimedOut( CSIPServerTransaction& aSIPServerTransaction ); + +public: // methods from MSIPProfileRegistryObserver + + /** + * From MSIPProfileRegistryObserver An asynchronous error has occurred + * related to SIP profile Event is send to those observers, who have the + * corresponding profile instantiated. + * @since Series 60 3.0 + * @param aSIPProfileId SIP Profile ID. + * @param aError Error code. + * @return None + */ + void ProfileRegistryErrorOccurred( TUint32 aSIPProfileId, + TInt aError ); + + /** + * From MSIPProfileRegistryObserver An event related to SIP Profile has + * occurred. + * @since Series 60 3.0 + * @param aProfileId SIP Profile ID. + * @param aEvent An occurred event. + * @return None + */ + void ProfileRegistryEventOccurred( TUint32 aProfileId, + TEvent aEvent ); + +public: // new public methods + + /** + * Method for creating normal Mo session if secure sessio + * creation has failed + * @since Series 60 3.2 + * @param aMceManager Mce Manager. + */ + void CreateNonSecureSessionL( CMceManager& aMceManager ); + + /** + * Returns pointer to array containing addresses to forward the call to. + * Index zero contains the first address. If there are no addresses available + * returns an empty array. + * @since Series 60 3.2 + * @param none + * @return Reference to array containing addresses + * @leave KErrNotReady call is not in forwarding state + * @leave KErrNotAllowed if call is not mobile originated + * @leave system error code + * @pre Call state is MCCPCallObserver::ECCPStateForwarding and call type is MO + * @pre Call MCCPForwardObserver::ECCPMultipleChoices event is received + */ + const CDesC8Array& GetForwardAddressChoicesL(); + + /** + * Forward call to address at given index. + * @since Series 60 3.2 + * @param aIndex Index of address where the call is to be forwarded. Address is + * found in the array received from GetForwardAddressChoicesL. Index starts from zero. + * @return none + * @leave KErrArgument Index is not in array + * @leave KErrNotReady Call is not in forwarding state + * @leave KErrNotAllowed If call is not mobile originated + * @pre Call state is MCCPCallObserver::ECCPStateForwarding and call type is MO + * @pre Call MCCPForwardObserver::ECCPMultipleChoices event is received + */ + void ForwardToAddressL( const TInt aIndex ); + + /** + * Add an observer for forward related events. + * Currently CCE will set only one observer. + * @since S60 v3.2 + * @param aObserver Observer + * @return none + * @leave system error if observer adding fails + */ + void AddForwardObserverL( const MCCPForwardObserver& aObserver ); + + /** + * Remove an observer. + * @since S60 v3.2 + * @param none + * @param aObserver Observer + * @return KErrNone if removed succesfully. + * @return KErrNotFound if observer was not found. + */ + TInt RemoveForwardObserver( const MCCPForwardObserver& aObserver ); + + /** + * Notify forwardobserver about forward event. + * @since S60 3.2 + * @param aEventCode eventcode + * @return none + */ + void NotifyForwardEvent( TInt aEventCode ); + + /** + * Add forward address for this session + * @since S60 3.2 + * @param aFwdAddress + * @return Count of addresses, otherwise system wide error code + * @leave system error if address adding fails + */ + TInt AddForwardAddressL( const TDesC8& aFwdAddress ); + + /** + * Reset address list + * @since S60 3.2 + * @return None + */ + void ResetForwardAddressChoices(); + +private: // new private methods + + /** + * Method for completing sip uri + * @since Series 60 3.2 + * @param aRecipient Recipient received from application + * @param aRecipient SIP profile which is making the call + * @param aSecurityStatus security preference + * @param aUserEqualsPhoneRequired defines user=phone parameter + * @return HBufC8* constructed uri + */ + HBufC8* CompleteUriL( const TDesC8& aRecipient, + const CSIPProfile& aSipProfile, + const TUint32& aSecurityStatus, + TBool aUserEqualsPhoneRequired ); + + /** + * Dial method that leave + * @since Series 60 3.2 + */ + void DialL(); + + +protected: + + /** + * C++ default constructor. + */ + CSVPMoSession( TUint32 aSessionExpires, + TMceTransactionDataContainer& aContainer, + MSVPSessionObserver& aObserver, + CSVPUtility& aSVPUtility, + CSVPRtpObserver& aRtpObserver ); + + /** + * Worker function for session state change, called from + * SessionStateChanged(). + * @since S60 v3.2 + * @param aOrigStatus Original status code + * @param aError Mapped TCCPError + * @param aModStatus Modified status code + * @return void + */ + virtual void SessionStateChangedL( TInt aOrigCode, TCCPError aError, + TInt aModStatus ); + + +private: + + /** + * second-phase constructor + */ + void ConstructL( CMceManager& aMceManager, + CRCSEProfileEntry& aVoipProfile, + const CCCPCallParameters& aParameters, + const TDesC8& aRecipient, + TUint32& aSecurityStatus, + CDesC8Array* aUserHeaders ); + +private: // data + + /** + * Session Expires value + */ + TUint32 iSessionExpires; + + /** + * User header array + */ + CDesC8Array* iUserHeaders; + + /** + * Forward observer + * Not own. + */ + MCCPForwardObserver* iForwardObserver; + + /** + * Forward provider + * Own. + */ + CSVPForwardProvider* iForwardProvider; + + /** + * Recipient address, needed for secure preferred -secure call setting + */ + TBuf8< KSVPMaxUriLength > iSecondCallRecipient; + + /** + * List for forward addresses + */ + CDesC8Array* iForwardAddressList; + + /** + * Pointer to Mce manager + * Not own + */ + CMceManager* iMceManager; + +private: + + // For testing + SVP_UT_DEFS + + }; + +#endif // SVPMOSESSION_H