/*
* 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: Utility class to add sip headers. This class will just have
* static utility functions.
*
*/
#include "musavasipheaderutil.h"
#include "muscleanupresetanddestroy.h"
#include "mussesseioninformationapi.h"
#include <e32property.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 <sipstrings.h>
#include <sipstrconsts.h>
#include <sipresponseelements.h>
#include <sipacceptencodingheader.h>
#include <sipacceptlanguageheader.h>
#include <sipcontenttypeheader.h>
#include <sipunsupportedheader.h>
#include <sdpdocument.h>
#include "sipextensionheader.h"
#include <sdporiginfield.h>
#include <sdpconnectionfield.h>
#include <sdpattributefield.h>
#include <sdpmediafield.h>
#include <sipacceptheader.h>
#include <sipaddress.h>
#include <sdpcodecstringpool.h>
#include "muslogger.h"
// --------------------------------------------------------------------------
// CMusAvaSipheaderUtil::AddAcceptContactHeaderL
// --------------------------------------------------------------------------
//
void CMusAvaSipheaderUtil::AddAcceptContactHeaderL(
RPointerArray<CSIPHeaderBase>& aRequestHeaders,
const RStringF& aFeatureTag )
{
MUS_LOG("mus: [MUSAVA] -> CMusAvaSipheaderUtil::AddAcceptContactHeaderL" )
CSIPAcceptContactHeader* header = CSIPAcceptContactHeader::NewLC();
header->SetParamL( aFeatureTag );
header->SetParamL( SIPStrings::StringF( SipStrConsts::EExplicit ) );
aRequestHeaders.AppendL( header ); // ownership transferred.
CleanupStack::Pop( header );
MUS_LOG("mus: [MUSAVA] <- CMusAvaSipheaderUtil::AddAcceptContactHeaderL" )
}
// --------------------------------------------------------------------------
// CMusAvaSipheaderUtil::AddAcceptEncodingHeaderL
// --------------------------------------------------------------------------
//
void CMusAvaSipheaderUtil::AddAcceptEncodingHeaderL(
RPointerArray<CSIPHeaderBase>& aRequestHeaders )
{
MUS_LOG("mus: [MUSAVA] -> CMusAvaSipheaderUtil::AddAcceptEncodingHeaderL" )
_LIT8(KHeader,"gzip");
RPointerArray<CSIPAcceptEncodingHeader>
headers(CSIPAcceptEncodingHeader::DecodeL(KHeader));
MusCleanupResetAndDestroyPushL(headers);
TInt count = headers.Count();
CSIPHeaderBase* header = NULL;;
TInt status = NULL;
for (TInt i=0; i < count; i++)
{
header = headers[i];
status = aRequestHeaders.Append(header);
if ( status != KErrNone )
{
header = NULL;
}
else
{
headers.Remove( i );
}
}
CleanupStack::PopAndDestroy( &headers );
MUS_LOG("mus: [MUSAVA] <- CMusAvaSipheaderUtil::AddAcceptEncodingHeaderL" )
}
// --------------------------------------------------------------------------
// CMusAvaSipheaderUtil::AddAcceptLanguageHeaderL
// --------------------------------------------------------------------------
//
void CMusAvaSipheaderUtil::AddAcceptLanguageHeaderL(
RPointerArray<CSIPHeaderBase>& aRequestHeaders )
{
MUS_LOG("mus: [MUSAVA] -> CMusAvaSipheaderUtil::AddAcceptLanguageHeaderL" )
_LIT8(KHeader,"en");
RPointerArray<CSIPAcceptLanguageHeader>
headers(CSIPAcceptLanguageHeader::DecodeL(KHeader));
MusCleanupResetAndDestroyPushL(headers);
TInt count = headers.Count();
CSIPHeaderBase* header = NULL;;
TInt status = NULL;
for (TInt i=0; i < count; i++)
{
header = headers[i];
status = aRequestHeaders.Append(header);
if ( status != KErrNone )
{
header = NULL;
}
else
{
headers.Remove( i );
}
}
CleanupStack::PopAndDestroy( &headers );
MUS_LOG("mus: [MUSAVA] <- CMusAvaSipheaderUtil::AddAcceptLanguageHeaderL" )
}
// --------------------------------------------------------------------------
// CMusAvaSipheaderUtil::AddSdpL
// --------------------------------------------------------------------------
//
void CMusAvaSipheaderUtil::AddSdpL( CSIPRequestElements* aRequest,
HBufC8* aContent )
{
MUS_LOG("mus: [MUSAVA] -> CMusAvaSipheaderUtil::AddSdpL" )
_LIT8(contentType,"application/sdp");
CSIPContentTypeHeader* type = CSIPContentTypeHeader::DecodeL(
contentType);
CleanupStack::PushL( type );
CSIPMessageElements& messageElements = aRequest->MessageElements();
messageElements.SetContentL(aContent,type);
CleanupStack::Pop( type );//Ownership transferred
MUS_LOG( "mus: [MUSAVA] <- CMusAvaSipheaderUtil::AddSdpL" )
}
// --------------------------------------------------------------------------
// CMusAvaSipheaderUtil::AddPreferredIdentityHeaderL
// --------------------------------------------------------------------------
//
void CMusAvaSipheaderUtil::AddPreferredIdentityHeaderL(
RPointerArray<CSIPHeaderBase>& aRequestHeaders,
const TDesC8& aVal )
{
MUS_LOG_TDESC8( " mus: [MUSAVA] -> CMusAvaSipheaderUtil::\
AddPreferredIdentityHeaderL", aVal);
_LIT8(KHeader,"P-Preferred-Identity");
CSIPExtensionHeader* header = CSIPExtensionHeader::NewLC(
KHeader,aVal) ;
aRequestHeaders.AppendL( header );
CleanupStack::Pop( header );//Ownership transferred.
MUS_LOG("mus: [MUSAVA] <- CMusAvaSipheaderUtil::AddPreferredIdentityHeaderL")
}
// ----------------------------------------------------------------------------
// MusAvaCapabilityContext::LocalHostL
// ----------------------------------------------------------------------------
//
void CMusAvaSipheaderUtil::LocalHostL(const CSIPConnection& aConn,
TPtrC8& aLocalHost)
{
MUS_LOG( "mus: [MUSAVA] -> CMusAvaSipheaderUtil::LocalHostL" )
RStringPool strPool = SdpCodecStringPool::StringPoolL();
TInetAddr aAddr(0);
aConn.GetLocalAddrL(aAddr);
TBuf<50> ipAddress;
aAddr.Output(ipAddress);
MUS_LOG_TDESC( "mus: [MUSAVA] ipAddress",ipAddress )
HBufC8 * ipaddr8=HBufC8::NewLC(ipAddress.Length());
ipaddr8->Des().Copy(ipAddress);
aLocalHost.Set( *ipaddr8 );
CleanupStack::PopAndDestroy(1);//ipaddr8
MUS_LOG( "mus: [MUSAVA] <- CMusAvaSipheaderUtil::LocalHostL" )
}
// --------------------------------------------------------------------------
// CMusAvaSipheaderUtil::AddAcceptSdpHeaderL
// --------------------------------------------------------------------------
//
void CMusAvaSipheaderUtil::AddAcceptSdpHeaderL(
RPointerArray<CSIPHeaderBase>& aRequestHeaders )
{
MUS_LOG("mus: [MUSAVA] -> CMusAvaSipheaderUtil::AddAcceptSDPHeaderL" )
_LIT8(KHeader,"application/sdp");
RPointerArray<CSIPAcceptHeader> headers(CSIPAcceptHeader::DecodeL(KHeader));
MusCleanupResetAndDestroyPushL(headers);
TInt count = headers.Count();
CSIPHeaderBase* header = NULL;;
TInt status = NULL;
for (TInt i=0; i < count; i++)
{
header = headers[i];
status = aRequestHeaders.Append(header);
if ( status != KErrNone )
{
header = NULL;
}
else
{
headers.Remove( i );
}
}
CleanupStack::PopAndDestroy( &headers );
MUS_LOG(
"mus: [MUSAVA] <- CMusAvaSipheaderUtil::AddAcceptSDPHeaderL" )
}
// --------------------------------------------------------------------------
// CMusAvaSipheaderUtil::AddPrivacyHeaderL
// --------------------------------------------------------------------------
//
void CMusAvaSipheaderUtil::AddPrivacyHeaderL(
RPointerArray<CSIPHeaderBase>& aRequestHeaders )
{
MUS_LOG( "mus: [MUSAVA] -> AddPrivacyHeaderL()" )
NMusSessionInformationApi::TMusClirSetting clir =
NMusSessionInformationApi::ESendOwnNumber;
// Ignore RProperty::Get return value.Incase of error it should behave default.
RProperty::Get( NMusSessionInformationApi::KCategoryUid,
NMusSessionInformationApi::KMusClirSetting,
reinterpret_cast<TInt&>( clir ) );
MUS_LOG1( "mus: [MUSAVA] - clir setting = %d", clir )
if ( clir == NMusSessionInformationApi::EDoNotSendOwnNumber )
{
_LIT8( KMusPrivacyHeader, "Privacy" );
_LIT8( KMusPrivacyHeaderValue, "id" );
CSIPExtensionHeader* header = CSIPExtensionHeader::NewLC(
KMusPrivacyHeader, KMusPrivacyHeaderValue );
aRequestHeaders.AppendL( header );
CleanupStack::Pop( header );
}
MUS_LOG( "mus: [MUSAVA] <- AddPrivacyHeaderL()" )
}