--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sipvoipprovider/inc/svputility.h Wed Sep 01 12:29:57 2010 +0100
@@ -0,0 +1,502 @@
+/*
+* Copyright (c) 2006-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: Static utility functions for SVP.
+*
+*/
+
+
+
+#ifndef SVPUTILITY_H
+#define SVPUTILITY_H
+
+#include <e32base.h>
+#include <mceaudiostream.h>
+#include <mcedtmfobserver.h> // dtmf
+#include <mccpcallobserver.h>
+#include <mceinsession.h>
+#include <ccpdefs.h> // error definitions
+#include <mccpdtmfobserver.h> // dtmf
+
+#include "cipappphoneutils.h" // CIpAppPhoneUtils, KSVPMaxTerminalTypeLength
+#include "svpconsts.h"
+#include "svputdefs.h"
+
+// FORWARD DECLARATIONS
+class CRCSEProfileEntry;
+class CRCSEAudioCodecEntry;
+class CMceRtpSource;
+class CSIPProfile;
+class CVoipEventLog;
+class CVoipErrorEntry;
+
+/**
+ * Static utility function for SVP usage.
+ *
+ * @lib
+ * @since S60 3.2
+ */
+class CSVPUtility : public CBase
+ {
+
+public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CSVPUtility* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSVPUtility();
+
+
+public: // new methods
+
+ /**
+ * Sets keep alive payload and timer when CN is provisioned
+ * @since Series 60 3.2
+ * @param aAudioStream Representation of Mce audio stream
+ * @param aKeepAliveValue Keep-alive timer value
+ * @return None
+ */
+ void SetCNKeepAliveL( CMceAudioStream& aAudioStream,
+ TInt aKeepAliveValue );
+ /**
+ * Sets keep alive payload and timer when CN is not provisioned
+ * @since Series 60 3.2
+ * @param aAudioStream Representation of Mce audio stream
+ * @param aKeepAliveValue Keep-alive timer value
+ * @return None
+ */
+ void SetKeepAliveL( CMceAudioStream& aAudioStream,
+ TInt aKeepAliveValue );
+
+ /**
+ * Sets keep alive payload and timer when CN is not provisioned
+ * @since Series 60 3.2
+ * @param aStream Checks if CN codec is present in stream
+ * @return None
+ */
+ TBool IsComfortNoise( CMceAudioStream& aStream );
+
+ /**
+ * Set codecs for given stream in Mo call case
+ * Set codecs settings from database
+ * Compares database codecs to those supported by Mce
+ * Leave with value KErrNotFound if codecs not found.
+ * @since Series 60 3.2
+ * @param aVoIPProfileId VoIP profile ID number
+ * @param audioInStream Representation of Mce audio stream
+ * @param aKeepAliveValue Keep-alive timer value
+ * @return None
+ */
+ void SetAudioCodecsMOL( TUint32 aVoIPProfileId,
+ CMceAudioStream& audioInStream,
+ TInt aKeepAliveValue );
+
+ /**
+ * Set codecs for given stream in Mt call case
+ * Compares database codecs to those supported by Mce.
+ * @since Series 60 3.2
+ * @param aVoIPProfile VoIP profile entry
+ * @param audioInStream Representation of Mce audio stream
+ * @param aKeepAliveValue Keepalive timer value
+ * @return None
+ */
+ void SetAudioCodecsMTL( CRCSEProfileEntry& aVoIPProfile,
+ CMceMediaStream& aAudioStream,
+ TInt aKeepAliveValue,
+ TBool aSessionUpdateOngoing = EFalse );
+
+ /**
+ * Sets G711 codecs (PCMA & PCMU) for emergency call when there is no VoIP
+ * profile, i.e. calling emergency by IAP ID only. RCSE default profile
+ * values are used when needed.
+ * @since Series 60 3.2
+ * @param audioInStream Audio stream
+ * @param aKeepAliveValue Keep-alive value
+ * @param aVoipProfileId VoIP profile ID, KErrNotFound, if no VoIP profile
+ */
+ void SetAudioCodecsForEmergencyL( CMceAudioStream& aAudioInStream,
+ TInt aKeepAliveValue,
+ TInt32 aVoipProfileId = KErrNotFound );
+
+ /**
+ * Matches Mce and Ccp errors
+ * @since S60 3.2
+ * @param aErrorCode Error code - may be modified
+ * @param aTone Contains tone associated to possible error condition.
+ * @return TCCPError CCP error
+ */
+ TCCPError GetCCPError( TInt& aErrorCode, TCCPTone& aTone ) const;
+
+
+ /**
+ * Write mce/sip errors to the voip event logger
+ * @since S60 3.2
+ * @param aErrorCode Error code
+ * @param aSipProfileId Id of the SIP profile
+ * @param aRemoteURI Address of the remote party
+ * @param aMethod Failed method e.g. INVITE
+ */
+ void LogVoipEventL( TInt aErrorCode,
+ TUint32 aSipProfileId,
+ const TDesC& aRemoteURI,
+ const TDesC& aMethod ) const;
+
+
+ /**
+ * Matches Mce and CCP DTMF events
+ * @since S60 3.2
+ * @param aEvent Event received from Mce DTMF observer
+ * @param aDtmfStringSengin Flag needed to determine which events are
+ * sent to client application
+ * @return TCCPDtmfEvent Matched CCP DTMF event
+ */
+ MCCPDTMFObserver::TCCPDtmfEvent GetDtmfEvent( MMceDtmfObserver::TMceDtmfEvent aEvent,
+ TBool aDtmfStringSending );
+
+
+ /**
+ * Set provisioning data for VoIP profile.
+ * @param aVoIPProfile VoIP profile entry.
+ * @param aUserAgentHeaders On completion, contains collected user-agent header.
+ */
+ void SetProvisioningDataL( CRCSEProfileEntry& aVoipProfile,
+ CDesC8Array& aUserAgentHeaders,
+ TUint32& aSecurityStatus,
+ TBuf<KSVPMaxTerminalTypeLength>& aTerminalType,
+ TBuf<KSVPWlanMacAddressLength>& aWlanMACAddress ) const;
+ /**
+ * Get the terminal type at startup.
+ * @since Series60 3.2
+ * @param aTerminalType
+ */
+ void GetTerminalTypeL( TBuf< KSVPMaxTerminalTypeLength >& aTerminalType );
+
+ /**
+ * Get the Wlan MAC address at startup.
+ * @since Series 60 3.2
+ * @param aWlanMACAddress.
+ */
+ static void GetWlanMACAddressL( TBuf< KSVPWlanMacAddressLength >& aWlanMACAddress );
+
+ /**
+ * Resolves the security mechanism, checks if TLS or SIPS is used in profile
+ * @since Series 60 3.2
+ * @param aProfile SIP profile which is used to call
+ * @param aSecureCallPreference Secure call preference of the call ( 0, 1 or 2 )
+ */
+ void ResolveSecurityMechanismL( const CSIPProfile& aProfile,
+ TUint32& aSecureCallPreference );
+
+ /**
+ * Check Calling Line Identification Restriction (CLIR) value.
+ * @since Series 60 3.2
+ * @return ETRue if CLIR is ON, otherwise EFalse.
+ */
+ TBool IsCLIROnL() const;
+
+ /**
+ * Set fromheader.
+ * If CLIR is on add anonymous info according sec status, otherwise nothing
+ * @since Series 60 3.2
+ * @return HBufC8* constructed fromheader.
+ */
+ HBufC8* SetMoFromHeaderLC( TUint aSecurityStatus );
+
+
+ /**
+ * Adds P-Preferred-Identity to user headers.
+ * @since Series 60 3.2
+ * @param aUserAgentHeaders user agent headers.
+ * @param aUri own sip uri.
+ * @return void
+ */
+ void AddPPreferredIdentityToUserHeadersL(
+ CDesC8Array& aUserAgentHeaders, const TDesC8& aUri );
+
+ /**
+ * Updates the jitterbuffer size to given RTP source. Function resets
+ * the iJitterBufferSize member, which is got when finding MO/MT codecs
+ * in AppendCapabilitiesDataL. If iJitterBufferSize = 0, then default
+ * 10 frame jitterbuffer is used.
+ * @since S60 v3.2
+ * @param aRtpSource RTP source which to update.
+ * @return void
+ */
+ void UpdateJitterBufferSizeL( CMceRtpSource& aRtpSource );
+
+
+ /**
+ * Gets DTMF mode, Inband mode returns EFalse and Outband mode ETrue
+ * @since Series 60 3.2
+ * @return TBool EFalse for Inband, ETrue for Outband
+ */
+ TBool GetDTMFMode();
+
+ /**
+ * Sets DTMF mode. This function is used when audiostreams have been
+ * studied about the inband/outband DTMF status.
+ * @since S60 v3.2
+ * @param aOutbandEnabled. ETrue if outband DTMF is enabled.
+ * @return void
+ */
+ void SetDtmfMode( TBool aOutbandEnabled );
+
+ /**
+ * Gets keep-alive timer value by IAP id
+ * @since S60 v3.2
+ * @param aIapId IAP id
+ * @param aKeepAliveValue Keep-alive timer value
+ * @return ETrue if value found, else EFalse
+ */
+ TBool GetKeepAliveByIapIdL( TUint32 aIapId, TInt& aKeepAliveValue ) const;
+
+ /**
+ * Gets keep-alive timer value by AOR
+ * @since S60 v3.2
+ * @param aAor AOR
+ * @param aKeepAliveValue Keep-alive timer value
+ * @return ETrue if value found, else EFalse
+ */
+ TBool GetKeepAliveByAORL( const TDesC8& aAor,
+ TInt& aKeepAliveValue ) const;
+
+
+private: // new methods
+
+ /**
+ * Checks if outband DMTF is offerd
+ * @Since S60 3.2
+ * @param aAudioStream Mce audiostream
+ * @return TBool, ETrue -> OB offered
+ */
+ TBool DtmfOBInOffer( CMceAudioStream& aAudioStream );
+
+ /**
+ * Sets DTMF specific settings for audiostream
+ * @Since S60 v3.2
+ * @param aVoIPProfile Used VoIP profile
+ * @param aAudioStream Audiostream, used here to set codec order num to tel-ev.
+ * @return void
+ * @leave system error if setting fails
+ */
+ void SetDtmfL( const CRCSEProfileEntry& aVoIPProfile,
+ CMceAudioStream& aAudioStream);
+
+ /**
+ * Method for matching ISO-639-1 language tags to Symbian language codes
+ * @since Series 60 3.2
+ * @param aLanguageCode Symbian language code
+ * @param aLangMatch Language tag corresponding given Symbian language code
+ */
+ static void MatchLanguageTags( TInt aLanguageCode,
+ TDes& aLangMatch );
+
+
+ /**
+ * Get audio codecs from database for certain VoIP profile.
+ * @since Series60 3.2
+ * @param aProfile RCSE profile where to search the codecs ID's.
+ * @param aCodecIds
+ */
+ void GetCodecIdsByVoIPProfileIdL(
+ const CRCSEProfileEntry& aProfile,
+ RArray< TUint32 >& aCodecIds ) const;
+ /**
+ * Set audio codec values and append new codec in array.
+ * @since Series60 3.2
+ * @param aAudioInStream Representation of Mce audio stream
+ * @param aVoIPProfile VoIP profile entry
+ * @param aCodecProfile Audio codec entry
+ * @return void
+ */
+ void MoCallCapabilitiesL( CMceAudioStream& aAudioInStream,
+ const CRCSEProfileEntry& aVoIPProfile,
+ const CRCSEAudioCodecEntry& aCodecProfile );
+
+ /**
+ * Set AMR related provisioned parameters.
+ * @since Series60 3.2
+ * @param aAudioInStream Representation of Mce audio stream
+ * @param aCodecProfile Audio codec entry
+ * @param aCodecNumber AMR codec number in codec array
+ * @return void
+ */
+ void SetAMRParameters( CMceAudioStream& aAudioInStream,
+ const CRCSEAudioCodecEntry& aCodecProfile,
+ TInt aCodecNumber );
+
+ /**
+ * Set audio codec values and append new codec in array.
+ * @since Series60 3.2
+ * @param aAudioInStream Representation of Mce audio stream
+ * @param aVoIPProfile VoIP profile entry
+ * @param aCodecProfile Audio codec entry
+ * @return void
+ */
+ void MtCallCapabilitiesL( CMceAudioStream& aAudioInStream,
+ const CRCSEProfileEntry& aVoIPProfile,
+ const CRCSEAudioCodecEntry& aCodecProfile );
+
+ /**
+ * Removes unnecessary codecs from Mce
+ * Codecs that are supported by Mce, but are found from database
+ * @since Series60 3.2
+ * @param aAudioInStream Representation of Mce audio stream
+ * @return None
+ */
+ void RemoveUnnecessaryCodecsL( CMceAudioStream& aAudioInStream );
+
+ /**
+ * Method for setting codec order priority in offer.
+ * @since S60 v3.2
+ * @param aAudioStream Representation of Mce audio stream.
+ * @return void
+ */
+ void SetDtmfCodecOrderL( CMceAudioStream& aAudioStream ) const;
+
+ /**
+ * Method for setting CN on for PCMA, PCMU and ILBC if
+ * codecs provisioned and offered in incoming call
+ * @since S60 v3.2
+ * @param aAudioStream Representation of Mce audio stream.
+ * @return void
+ */
+ void SetComfortNoiseL( CMceAudioStream& aAudioStream );
+
+ /**
+ * Method for checking and setting red media attribute
+ * @since S60 v3.2
+ * @param aAudioStream Representation of Mce audio stream.
+ * @return void
+ */
+ void SetRedundancyL( CMceAudioStream& aAudioStream );
+
+ /**
+ * Sets Media level Quality Of Service. This is IP level type of service or
+ * DSCP value.
+ * @since S60 v3.2
+ * @param aQosValue Media QoS value in settings.
+ * @param aSession MCE session into which set the media QoS.
+ * @return void
+ */
+ void SetMediaQoSL( TUint32 aQosValue, CMceSession* aSession ) const;
+
+ /**
+ * Enables or disables RTCP sending from RTP sinks in given media stream.
+ *
+ * @since S60 v3.2
+ * @param aRtcp RTCP setting value read from RCSE
+ * @param aStream Stream whose RTP sinks to update
+ * @return void
+ */
+ void CheckRtcpSettingL( TUint32 aRtcp, CMceMediaStream& aStream,
+ TBool aSessionUpdateOngoing = EFalse ) const;
+
+ /**
+ * Method for setting VAD (Voice Activity Detection) for provisioned and
+ * bound codecs.
+ * @since S60 v3.2
+ * @param aInAudioStream Representation of Mce audio stream
+ * @param aVADSetting value of VAD setting
+ * @param aCodecName codec name
+ */
+ void SetVADL( CMceAudioStream& aInAudioStream,
+ TBool aVADSetting,
+ const TDesC8& aCodecName );
+
+ /**
+ * Set AMR-WB (Adaptive Multi-Rate Wideband) related provisioned parameters.
+ * @since S60 v3.2
+ * @param aAudioInStream Representation of Mce audio stream.
+ * @param aCodecProfile Stored audio codec entry in RCSE.
+ * @param aCodecNumber Codec number in codec array.
+ */
+ void SetAmrWbParameters( CMceAudioStream& aAudioInStream,
+ const CRCSEAudioCodecEntry& aCodecProfile,
+ TInt aCodecNumber );
+
+private: // data
+
+
+ /**
+ * second-phase constructor
+ */
+ void ConstructL();
+
+ /**
+ * C++ default constructor.
+ */
+ CSVPUtility();
+
+ /**
+ * Flags to determine which codecs are matched
+ */
+ TBool iAMR;
+ TBool iILBC;
+ TBool iPCMU;
+ TBool iPCMA;
+ TBool iG729;
+ TBool iCN;
+ TBool iRed;
+ TBool iAMRWB;
+
+ /**
+ * Flag which determines which DMTF mode is used
+ * ETrue => Outbound, EFalse => Inbound
+ */
+ TBool iTelEv;
+
+ /**
+ * codec preference order
+ */
+ TInt iPreferredCodec;
+
+ /**
+ * Codec match flag, determines if codec matched in Mt call case
+ */
+ TBool iCodecMatched;
+
+ /**
+ * Flag to determine whether DTMF settin is read already
+ */
+ TBool iDTMFChecked;
+
+ /**
+ * Jitterbuffer length found from codec settings.
+ */
+ TInt32 iJitterBufferSize;
+
+ /**
+ * Keeps track in Mt call case when matching codecs
+ */
+ TInt iRoundIndex;
+
+ /**
+ * instance of the VoIP event logger class.
+ * own.
+ */
+ CVoipEventLog* iVoipEventLogger;
+
+private:
+
+ // For testing
+ SVP_UT_DEFS
+
+ };
+
+#endif // SVPUTILITY_H