mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp
changeset 15 ccd8e69b5392
parent 2 b31261fd4e04
child 20 e8be2c2e049d
child 22 496ad160a278
--- a/mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp	Tue Feb 02 00:09:07 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,571 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:   Sent capability query (OPTIONS)
-*
-*/
-
-
-#include "musavacapabilityquerybase.h"
-#include "muscleanupresetanddestroy.h"
-#include <escapeutils.h>
-#include <sipconnection.h>
-#include <sipprofile.h>
-#include <sipclienttransaction.h>
-#include <sipmessageelements.h>
-#include <siprequestelements.h>
-#include <sipextensionheader.h>
-#include <sipacceptcontactheader.h>
-#include <sipcontactheader.h>
-#include <sipacceptheader.h>
-#include <sipstrings.h>
-#include <sipstrconsts.h>
-#include <sipresponseelements.h>
-#include <sipaddress.h>
-#include <sipfromheader.h>
-#include <sdpdocument.h>
-#include <sdporiginfield.h>
-#include <sdpconnectionfield.h>
-#include <sdpattributefield.h>
-#include <sdpmediafield.h>
-#include <e32math.h>
-#include <e32property.h>
-
-#include "mussettings.h"
-#include "muslogger.h"
-#include "mmusavacapabilityqueryobserver.h"
-#include "musavacapability.h"
-#include "musavacapabilityexchange.h"
-#include "musavaterminal.h"
-#include "musavacapabilitycontext.h"
-#include "musavasipheaderutil.h"
-#include "mussesseioninformationapi.h"
-
-// --------------------------------------------------------------------------
-// C++ constructor
-// --------------------------------------------------------------------------
-//
-CMusAvaCapabilityQueryBase::CMusAvaCapabilityQueryBase( 
-                                        CMusAvaCapability& aCapability,
-                                        CSIPConnection& aSIPConnection,
-                                        CSIPProfile& aProfile  )
-    : iCapability( aCapability ),
-      iSIPConnection( aSIPConnection ),
-      iProfile( aProfile ),
-      iState( ECapabilityQueryCreated ),
-      iResult( KCapabilityQueryNotReady )
-    {
-    }
-
-// --------------------------------------------------------------------------
-// C++ destructor
-// --------------------------------------------------------------------------
-//
-CMusAvaCapabilityQueryBase::~CMusAvaCapabilityQueryBase()
-    {
-    MUS_LOG( 
-    "mus: [MUSAVA] -> CMusAvaCapabilityQueryBase::~CMusAvaCapabilityQueryBase" )
-    
-    delete iRegisteredContact;
-    delete iOriginator;
-    if ( iTerminal )
-        {
-        iTerminal->DetachQuery( *this );
-        }
-    ResetAndDestroyTrx();
-    MUS_LOG( "mus: [MUSAVA] -> StringPools are getting closed." )
-    MUS_LOG( 
-    "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::~CMusAvaCapabilityQueryBase" )
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::ConstructL
-// --------------------------------------------------------------------------
-//
-void CMusAvaCapabilityQueryBase::ConstructL( const TDesC& aSipAddress )
-    {
-    MUS_LOG( "mus: [MUSAVA] -> CMusAvaCapabilityQueryBase::ConstructL" )
-
-    // If string pool is opened already , then dont care.    
-
-    User::LeaveIfError( aSipAddress.Length() > 0 ? KErrNone : KErrArgument );
-    
-    // If it is not registered , just leave.
-    TBool isRegistered = ETrue;
-    iProfile.GetParameter( KSIPProfileRegistered, isRegistered );
-    User::LeaveIfError( isRegistered ? KErrNone : KErrArgument );
-    
-    TInt err( KErrNotFound );
-    const TDesC8* registeredContact( NULL );
-    err = iProfile.GetParameter( KSIPRegisteredContact, registeredContact );
-    if( err )
-        {
-        MUS_LOG1( "mus: [MUSAVA]    iProfile.GetParameter Contact -> %d", err )
-        User::LeaveIfError( err );
-        }    
-
-    // contactHeader array will only contain one instance of CSIPContactHeader,
-    // since only one registered contact is decoded
-    RPointerArray<CSIPContactHeader> contactHeader = 
-        CSIPContactHeader::DecodeL( *registeredContact );
-    MusCleanupResetAndDestroyPushL( contactHeader );
-
-    // leave if there is at least one contact not present
-    if ( contactHeader.Count() < 1 )
-        {
-        MUS_LOG1( "mus: [MUSAVA]    contactHeader has %d instances, instead of 1", 
-                contactHeader.Count() );
-        User::Leave( KErrNotFound );
-        }
-    
-    // if more contact than pick the first one. Sip assures in idle case
-    // it should always return only one registered contact.
-    CSIPAddress* sipAddress = contactHeader[0]->SIPAddress();
-    if ( !sipAddress )
-        {
-        MUS_LOG( "mus: [MUSAVA]    name-address not present")
-        User::Leave( KErrNotFound );
-        }
-    iRegisteredContact = CUri8::NewL( sipAddress->Uri8().Uri() );
-    MUS_LOG_TDESC8( " mus: [MUSAVA] iRegisteredContact : ", (iRegisteredContact->Uri().UriDes()));        
-    CleanupStack::PopAndDestroy( &contactHeader );    
-    
-    sipAddress = NULL;
-    const MDesC8Array* aors = NULL;
-    User::LeaveIfError(iProfile.GetParameter( KSIPRegisteredAors, aors ));
-    MUS_LOG( "mus: [MUSAVA]    iProfile.GetParameter -> OK  " )
-    if( !aors || aors->MdcaCount() <= 0 ) User::Leave(KErrArgument);            
-    MUS_LOG_TDESC8( " mus: [MUSAVA] AOR -> 0 : ", aors->MdcaPoint(0));     
-    sipAddress =  CSIPAddress::DecodeL( aors->MdcaPoint(0) );
-    MUS_LOG( "mus: [MUSAVA]    CSIPAddress::DecodeL -> OK   " )
-    CleanupStack::PushL( sipAddress );        
-    iOriginator = CUri8::NewL(sipAddress->Uri8().Uri());
-    MUS_LOG_TDESC8( " mus: [MUSAVA] iOriginator : ", (iOriginator->Uri().UriDes()));    
-    CleanupStack::PopAndDestroy(sipAddress);        
-    
-    HBufC8* sipAddress8 = EscapeUtils::ConvertFromUnicodeToUtf8L( aSipAddress );
-    CleanupStack::PushL( sipAddress8 );
-    iTerminal = &Capability().Exchange().TerminalL( sipAddress8->Des() );
-    CleanupStack::PopAndDestroy( sipAddress8 ) ;
-    iTerminal->AttachQuery( *this );
-    
-    MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::ConstructL" )
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::Capability
-// --------------------------------------------------------------------------
-//
-const CMusAvaCapability& CMusAvaCapabilityQueryBase::Capability() const
-    {
-    return iCapability;
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::SetState
-// --------------------------------------------------------------------------
-//
-void CMusAvaCapabilityQueryBase::SetState( 
-                                CMusAvaCapabilityQueryBase::TState aState )
-    {
-    iState = aState;
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::SetResult
-// --------------------------------------------------------------------------
-//
-void CMusAvaCapabilityQueryBase::SetResult( TInt aResult )
-    {
-    iResult = aResult;
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::Terminal
-// --------------------------------------------------------------------------
-//
-CMusAvaTerminal& CMusAvaCapabilityQueryBase::Terminal()
-    {
-    return *iTerminal;
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::ExecuteL
-// --------------------------------------------------------------------------
-//
-void CMusAvaCapabilityQueryBase::ExecuteL()
-    {
-    MUS_LOG( "mus: [MUSAVA] -> CMusAvaCapabilityQueryBase::ExecuteL" )
-    
-    __ASSERT_ALWAYS( 
-        State() != ECapabilityQueryPrepared, User::Leave( KErrGeneral ) );
-    
-    if ( State() == ECapabilityQueryCreated )
-        {
-        RPointerArray<CSIPHeaderBase> headers;
-        CSIPHeaderBase::PushLC( &headers );
-        
-        Prepare( headers );
-        
-        if ( State() == ECapabilityQueryPrepared )
-            {
-            CMusAvaSipheaderUtil::AddAcceptContactHeaderL( headers,
-                                                  Capability().Feature() );
-            MUS_LOG( "mus: [MUSAVA]  AddAcceptContactHeaderL -> Success ")            
-            CMusAvaSipheaderUtil::AddAcceptEncodingHeaderL(headers);
-            MUS_LOG( "mus: [MUSAVA]  AddAcceptEncodingHeaderL -> Success ")                        
-            CMusAvaSipheaderUtil::AddAcceptLanguageHeaderL(headers);  
-            MUS_LOG( "mus: [MUSAVA]  AddAcceptLanguageHeaderL -> Success ")                        
-            CMusAvaSipheaderUtil::AddAcceptSdpHeaderL(headers); 
-            MUS_LOG( "mus: [MUSAVA]  AddAcceptSDPHeaderL -> Success ")                            
-            CMusAvaSipheaderUtil::AddPreferredIdentityHeaderL(headers,
-                                               iOriginator->Uri().UriDes());
-            MUS_LOG( "mus: [MUSAVA]  AddPreferredIdentityHeaderL -> Success ")                         
-            AddContactHeaderL( headers );
-            MUS_LOG( "mus: [MUSAVA]  AddContactHeaderL -> Success ")
-            
-            TBool usePrivacy = MultimediaSharingSettings::PrivacySetting();
-            if ( usePrivacy )
-                {
-                NMusSessionInformationApi::TMusClirSetting clir =
-                    NMusSessionInformationApi::ESendOwnNumber;
-                RProperty::Get( NMusSessionInformationApi::KCategoryUid,
-                                NMusSessionInformationApi::KMusClirSetting,
-                                reinterpret_cast<TInt&>( clir ) );
-                usePrivacy = ( clir == NMusSessionInformationApi::EDoNotSendOwnNumber );
-                }
-                    
-            if (usePrivacy)
-                {
-                CMusAvaSipheaderUtil::AddPrivacyHeaderL( headers );
-                MUS_LOG( "mus: [MUSAVA]  AddPrivacyHeaderL -> Success ")
-                }
-            //terminal ID
-            if ( Capability().Exchange().TerminalId().Length() > 0 )
-                {
-                MUS_LOG( "mus: [MUSAVA] Adding User-Agent header" )
-            	CSIPHeaderBase* userAgent = 
-               	    MusAvaCapabilityContext::UserAgentHeaderLC( 
-               	        Capability().Exchange().TerminalId() );
-                headers.AppendL( userAgent );
-                CleanupStack::Pop( userAgent );
-                }
-                
-            //remote uri ( will be used as ToHeader )
-            CUri8* remoteUri = 
-                    MusAvaCapabilityContext::ToUriL( Terminal().Uri() );
-            CleanupStack::PushL( remoteUri );
-            CSIPRequestElements* request = 
-                                CSIPRequestElements::NewL( remoteUri );
-            CleanupStack::Pop( remoteUri );
-            CleanupStack::PushL( request );
-            
-            if (usePrivacy)
-                {
-                _LIT8( KAnonymous,
-                       "\"Anonymous\" <sip:anonymous@anonymous.invalid>" );
-                CSIPFromHeader* from = CSIPFromHeader::DecodeL( KAnonymous );
-                CleanupStack::PushL( from );
-                request->SetFromHeaderL( from );
-                CleanupStack::Pop( from );
-                }
-            
-            request->SetMethodL( 
-                        SIPStrings::StringF( SipStrConsts::EOptions ) );
-            
-            CSIPMessageElements& message = request->MessageElements();
-            message.SetUserHeadersL( headers );
-                        
-            HBufC8* content = ContentLC();
-            CMusAvaSipheaderUtil::AddSdpL(request,content);
-            CleanupStack::Pop(content) ;
-
-            ResetAndDestroyTrx();            
-            
-            MUS_LOG( "mus: [MUSAVA] Sending OPTIONS request ...." )            
-            iTrx = iSIPConnection.SendRequestL( request, iProfile );
-            CleanupStack::Pop( request );
-                      
-            iState = ECapabilityQueryExecuting;            
-            MUS_LOG( "mus: [MUSAVA] OPTIONS request sent" )
-            }
-            
-        CleanupStack::PopAndDestroy( &headers );
-        }
-    
-    MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::ExecuteL" )
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::CompletedL
-// --------------------------------------------------------------------------
-//
-void CMusAvaCapabilityQueryBase::CompletedL( 
-                                    const CSIPClientTransaction& aResponse )
-    {
-    MUS_LOG( "mus: [MUSAVA] -> CMusAvaCapabilityQueryBase::CompletedL" )
-    
-    if ( iTrx && *iTrx == aResponse )
-        {
-        TUint statusCode = aResponse.ResponseElements()->StatusCode();
-        if ( 100 <= statusCode && statusCode < 200 )
-            {
-            return;
-            }
-        DoCompletedL( aResponse );
-        if ( State() == ECapabilityQueryCompleted )
-            {
-            MUS_LOG( "mus: [MUSAVA] query completed" )
-            Capability().Exchange().QueryObserver().CapabilitiesResolved( 
-                                                                    *this );
-            }
-        }
-        
-    MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::CompletedL" )
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::Canceled
-// --------------------------------------------------------------------------
-//
-void CMusAvaCapabilityQueryBase::Canceled( 
-                                const CSIPClientTransaction& aTransaction )
-    {
-    MUS_LOG( "mus: [MUSAVA] -> CMusAvaCapabilityQueryBase::Canceled" )
-    if ( iTrx && *iTrx == aTransaction )
-        {
-        MUS_LOG( "mus: [MUSAVA] query canceled" )
-        
-        SetState( ECapabilityQueryCompleted );
-        SetResult( KCapabilityCapabilitesNotFound );
-        Capability().Exchange().QueryObserver().CapabilitiesResolved( 
-                                                                    *this );
-        }
-    
-    MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::Canceled" )
-    }
-
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::AddContactHeaderL
-// --------------------------------------------------------------------------
-//
-void CMusAvaCapabilityQueryBase::AddContactHeaderL( 
-                            RPointerArray<CSIPHeaderBase>& aRequestHeaders )
-    {
-    
-    MUS_LOG( 
-        "mus: [MUSAVA] -> CMusAvaCapabilityQueryBase::AddContactHeaderL" )
-	CSIPContactHeader* contact = 
-	    MusAvaCapabilityContext::ContactHeaderLC( *iRegisteredContact,
-	                                              Capability().Feature() );    
-    aRequestHeaders.AppendL( contact );
-    CleanupStack::Pop( contact );    
-    MUS_LOG( 
-        "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::AddContactHeaderL" )
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::State
-// --------------------------------------------------------------------------
-//
-CMusAvaCapabilityQueryBase::TState CMusAvaCapabilityQueryBase::State() const
-    {
-    return iState;
-    }
-    
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::Result
-// --------------------------------------------------------------------------
-//
-TInt CMusAvaCapabilityQueryBase::Result() const
-    {
-    return iResult;
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::ResetAndDestroyTrx
-// --------------------------------------------------------------------------
-//
-void CMusAvaCapabilityQueryBase::ResetAndDestroyTrx()
-    {
-    delete iTrx;
-    iTrx = NULL;
-    }
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::LocalAddress
-// --------------------------------------------------------------------------
-//
-const CUri8& CMusAvaCapabilityQueryBase::LocalAddress() const
-    {
-    return *iOriginator;    
-    }
-    
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::ResponseContentLC
-// --------------------------------------------------------------------------
-//
-HBufC8* CMusAvaCapabilityQueryBase::ContentLC()
-
-    {
-    MUS_LOG("mus: [MUSAVA]: -> CMusAvaCapabilityQueryBase::ContentLC" )
-   
-    CSdpDocument* content = CSdpDocument::NewLC();
-
-    RStringPool strPool = SdpCodecStringPool::StringPoolL();
-	RStringF netType = 
-	MusAvaCapabilityContext::SDPStringL( SdpCodecStringConstants::ENetType );
-    
-    _LIT8(KOriginFieldUser1, "-");
-    _LIT8(KSessionName, "-");
-    content->SetSessionNameL( KSessionName );
-
-    TPtrC8 localHost;
-    RStringF hostType;
-    
-    TTime now;
-    now.UniversalTime();
-    TInt64 rand = now.Int64();
-    TInt64 sessionID = Math::Rand( rand );
-
-    hostType = strPool.StringF( SdpCodecStringConstants::EAddressTypeIP4, 
-	                              SdpCodecStringPool::StringTableL() );
-	MUS_LOG( "EAddressTypeIP4 from string pool" ) 
-	
-	TInetAddr aAddr(0);
-    iSIPConnection.GetLocalAddrL(aAddr);
-    TBuf<50> ipAddress;	
-	aAddr.Output(ipAddress);
-	MUS_LOG_TDESC( "mus: [MUSAVA]: LocalIP Address",ipAddress )	
-	HBufC8 * ipaddr8=HBufC8::NewLC(ipAddress.Length());	
-	ipaddr8->Des().Copy(ipAddress);	
-    
-    MUS_LOG( "mus: [MUSAVA]: SetOriginField" )	                              
-    CSdpOriginField* originField =  CSdpOriginField::NewL( KOriginFieldUser1,
-                                 sessionID,
-                                 sessionID,
-                                 netType,
-                                 hostType,
-                                 *ipaddr8);                                 
-    content->SetOriginField( originField );    
-    // Connection field
-    MUS_LOG( "mus: [MUSAVA]: SetConnectionField" ) 
-    CSdpConnectionField* connectionField = 
-        CSdpConnectionField::NewL( netType, hostType,*ipaddr8);     
-    content->SetConnectionField( connectionField );     
-    CleanupStack::PopAndDestroy(ipaddr8);
-
-    OtherSDPHeadersL(*content);    
-            
-    MUS_LOG( "mus: [MUSAVA]: Constructing the Sdp Content" ) 
-    CBufFlat* encBuf = CBufFlat::NewL( KMUSAVAMaxLengthOfSDPMessage );
-    CleanupStack::PushL( encBuf );
-    RBufWriteStream writeStream( *encBuf, 0 );
-	writeStream.PushL();
-    content->EncodeL( writeStream );
-    CleanupStack::PopAndDestroy();//writeStream    
-    HBufC8* textContent = encBuf->Ptr( 0 ).AllocL();
-    CleanupStack::PopAndDestroy( encBuf );
-
-    CleanupStack::PopAndDestroy(content);  
-
-    CleanupStack::PushL(textContent);
-        
-    MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::ContentLC" )    
-    return textContent;
-    }    
-
-// --------------------------------------------------------------------------
-// CMusAvaCapabilityQueryBase::OtherSDPHeadersL
-// --------------------------------------------------------------------------
-//
-void CMusAvaCapabilityQueryBase::OtherSDPHeadersL( CSdpDocument& aResponseContent )
-
-    {
-    MUS_LOG( "mus: [MUSAVA] -> CMusAvaCapabilityQueryBase::OtherSDPHeadersL" )
-
-    MUS_LOG( "mus: [MUSAVA] Adding application attribute to SDP" )
-    //application
-    CSdpAttributeField* application = CSdpAttributeField::NewLC(
-       MusAvaCapabilityContext::SDPStringL( 
-            SdpCodecStringConstants::EMediaApplication ), 
-       KCapabilitySwisApplication );
-                                      
-    aResponseContent.AttributeFields().AppendL( application );
-    CleanupStack::Pop( application );
-
-    MUS_LOG( "mus: [MUSAVA] Adding type attribute to SDP" )
-    //type
-    RStringF typeStr = MusAvaCapabilityContext::SDPStringL( 
-                                        KCapabilitySDPAttributeNameType );
-    CleanupClosePushL( typeStr );
-    CSdpAttributeField* type = 
-        CSdpAttributeField::NewL( typeStr, KCapabilitySDPAttributeType );
-    CleanupStack::PopAndDestroy();//typeStr 
-    CleanupStack::PushL( type );
-                                         
-    aResponseContent.AttributeFields().AppendL( type );
-    CleanupStack::Pop( type );
-    
-    MUS_LOG( "mus: [MUSAVA] Adding media line to SDP" )
-    //media line
-    CSdpMediaField* mediaLine=CSdpMediaField::NewLC( 
-                    MusAvaCapabilityContext::SDPStringL
-    				(SdpCodecStringConstants::EMediaVideo ),
-                     							       NULL,
-                     MusAvaCapabilityContext::SDPStringL
-                (SdpCodecStringConstants::EProtocolRtpAvp ), 
-                        KCapabilitySwisFormatListH263Only );
-    
-    //adding H.264 codec to SDP
-    if( !MultimediaSharingSettings::IsAvcDisabled())
-        {
-        MUS_LOG( "mus: [MUSAVA]  - Adding avc to supported codec list" )        
-        // reconstruct media line with H264 and H263
-        CleanupStack::PopAndDestroy(mediaLine);
-        mediaLine = CSdpMediaField::NewLC( 
-                MusAvaCapabilityContext::SDPStringL
-                    (SdpCodecStringConstants::EMediaVideo ),
-                                                       NULL,
-                         MusAvaCapabilityContext::SDPStringL
-                 (SdpCodecStringConstants::EProtocolRtpAvp ), 
-                                 KCapabilitySwisFormatList );
-        
-        CSdpFmtAttributeField* rtpMapH264 = 
-            CMusAvaCapability::RtpMapLineLC( KCapabilitySDPAttributeCodecH264,
-                        KCapabilitySDPAttributePayloadTypeH264,
-                        KCapabilitySDPAttributeClockrate ); 
-        
-        mediaLine->FormatAttributeFields().AppendL( rtpMapH264 );
-        CleanupStack::Pop( rtpMapH264 );
-        }
-
-    //H.263 codec
-    MUS_LOG( "mus: [ENGINE]  - Adding h263 to supported codec list" )
-    CSdpFmtAttributeField* rtpMapH263 = 
-        CMusAvaCapability::RtpMapLineLC( KCapabilitySDPAttributeCodecH263,
-                    KCapabilitySDPAttributePayloadType,
-                    KCapabilitySDPAttributeClockrate ); 
-
-    mediaLine->FormatAttributeFields().AppendL( rtpMapH263 );
-    CleanupStack::Pop( rtpMapH263 );
-    
-    aResponseContent.MediaFields().AppendL( mediaLine );
-    CleanupStack::Pop( mediaLine );
-
-    
-    MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::OtherSDPHeadersL" )
-    }
-
-