diff -r 000000000000 -r f0cf47e981f9 mmsharing/mmshavailability/src/musavasipheaderutil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshavailability/src/musavasipheaderutil.cpp Thu Dec 17 08:44:37 2009 +0200 @@ -0,0 +1,256 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sipextensionheader.h" +#include +#include +#include +#include +#include +#include +#include + +#include "muslogger.h" + +// -------------------------------------------------------------------------- +// CMusAvaSipheaderUtil::AddAcceptContactHeaderL +// -------------------------------------------------------------------------- +// +void CMusAvaSipheaderUtil::AddAcceptContactHeaderL( + RPointerArray& 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& aRequestHeaders ) + { + MUS_LOG("mus: [MUSAVA] -> CMusAvaSipheaderUtil::AddAcceptEncodingHeaderL" ) + _LIT8(KHeader,"gzip"); + RPointerArray + 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& aRequestHeaders ) + { + MUS_LOG("mus: [MUSAVA] -> CMusAvaSipheaderUtil::AddAcceptLanguageHeaderL" ) + _LIT8(KHeader,"en"); + RPointerArray + 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& 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& aRequestHeaders ) + { + MUS_LOG("mus: [MUSAVA] -> CMusAvaSipheaderUtil::AddAcceptSDPHeaderL" ) + _LIT8(KHeader,"application/sdp"); + RPointerArray 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& 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( 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()" ) + }