--- /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 <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()" )
+ }