natplugins/natpnatfwsdpprovider/inc/nspdefs.h
author hgs
Fri, 03 Sep 2010 14:13:12 +0300
changeset 48 c4cbfcae3f52
parent 0 1bce908db942
permissions -rw-r--r--
201035

/*
* Copyright (c) 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:  Project wide definitions.
*
*/

#ifndef NSPDEFS_H
#define NSPDEFS_H

#include "nsppluginreturndef.h"
#include <sdpconnectionfield.h>
#include <sdpmediafield.h>

#ifndef COMPONENT
#define COMPONENT
_LIT( KComponent, "NATFW SDP Provider" );
#endif // COMPONENT

#define __PANIC( aInt ) User::Panic( KComponent, aInt )

#define NSP_ERROR( status ) ( KErrNone > status )
#define NSP_ICMP( aError ) ( KErrCommsLineFail == aError )
#define NSP_TRIGGER( status ) ( KNatReady == status )
#define NSP_DELETE( status ) ( KNatReady == status )

_LIT( KNSPPrintFormat, "%S: %S" );
_LIT( KNSPPrintFormat2, "%S: %S %S" );
_LIT( KNSPPrintFormat3, "%S: %S %d" );
_LIT( KNSPPrintFormat4, "%S: %S %u" );

inline static TInetAddr ConvertTDesC8ToTInetAddrL( const TDesC8& aDesc, TUint aPort )
    {
    RBuf address;
    address.CreateL( aDesc.Length() );
    address.CleanupClosePushL();
    address.Copy( aDesc );
    
    TInetAddr addr;
    User::LeaveIfError( addr.Input( address ) );
    CleanupStack::PopAndDestroy( &address );
    
    addr.SetPort( aPort );
    return addr;
    }

inline static void ConvertTInetAddrToTDes8AndTUintL( const TInetAddr& aAddress,
    TDes8& aDes, TUint& aPort )
    {
    RBuf address;
    address.CreateL( 40 );
    address.CleanupClosePushL();
    
    aAddress.Output( address );
    aDes.Copy( address );
    CleanupStack::PopAndDestroy( &address );
    
    aPort = aAddress.Port();
    }

inline static const TDesC8& Address( CSdpMediaField& aMediafield )
    {
    return ( aMediafield.ConnectionFields().Count() ?
            aMediafield.ConnectionFields()[0]->Address() : KNullDesC8 );
    }

#define CONN_ADDR( mediafield, sessionAddr ) \
        ( Address( mediafield ).Length() ? Address( mediafield ) : sessionAddr )


#if (defined _DEBUG)

#include <e32debug.h>
#include <e32base.h>
#include <s32mem.h>
#include <sdpdocument.h>

class RBufWriteStream;

const TText* const KWarning = _S( "Text contains not allowed characters, log ignored" );
const TText8* const KCRLF = _S8( "\r\n" );
const TUint KCRLFLength = 2;
const TUint KMaxLengthOfSDPMessage = 1000;

static inline void PrintL( const TDesC& aStr )
	{
	HBufC* line = HBufC::NewLC( 256 );
	TPtr ptr( line->Des() );
	
	if ( KErrNotFound == aStr.Locate( TChar( '%' ) ) )
		{
		ptr.Format( KNSPPrintFormat(), &KComponent(), &aStr );
		}
	else
		{
		TPtrC warning( KWarning );
		ptr.Format( KNSPPrintFormat(), &KComponent(), &warning );
		}
	
	RDebug::Print( line->Des() );
	CleanupStack::PopAndDestroy( line );
	}
static inline void Print( const TDesC& aStr )
	{
	TRAP_IGNORE( PrintL( aStr ) );
	}

static inline void PrintL( const TDesC& aStr1, const TDesC& aStr2 )
	{
	HBufC* line = HBufC::NewLC( 256 );
	TPtr ptr( line->Des() );
	
	if ( KErrNotFound == aStr1.Locate( TChar( '%' ) ) )
		{
		ptr.Format( KNSPPrintFormat2(), &KComponent(), &aStr1, &aStr2 );
		}
	else
		{
		TPtrC warning( KWarning );
		ptr.Format( _L( "%S: %S" ), &KComponent(), &warning );
		}
	
	RDebug::Print( line->Des() );
	CleanupStack::PopAndDestroy( line );
	}
static inline void Print( const TDesC& aStr1, const TDesC& aStr2 )
	{
	TRAP_IGNORE( PrintL( aStr1, aStr2 ) );
	}

static inline void PrintL( const TDesC& aStr, TInt aTInt )
	{
	HBufC* line = HBufC::NewLC( 256 );
	TPtr ptr( line->Des() );
	
	if ( KErrNotFound == aStr.Locate( TChar( '%' ) ) )
		{
		ptr.Format( KNSPPrintFormat3(), &KComponent(), &aStr, aTInt );
		}
	else
		{
		TPtrC warning( KWarning );
		ptr.Format( _L( "%S: %S" ), &KComponent(), &warning );
		}
	
	RDebug::Print( line->Des() );
	CleanupStack::PopAndDestroy( line );
	}
static inline void Print( const TDesC& aStr, TInt aTInt )
	{
	TRAP_IGNORE( PrintL( aStr, aTInt ) );
	}

static inline void PrintL( const TDesC& aStr, TUint aTUint )
	{
	HBufC* line = HBufC::NewLC( 256 );
	TPtr ptr( line->Des() );
	
	if ( KErrNotFound == aStr.Locate( TChar( '%' ) ) )
		{
		ptr.Format( KNSPPrintFormat4(), &KComponent(), &aStr, aTUint );
		}
	else
		{
		TPtrC warning( KWarning );
		ptr.Format( _L( "%S: %S" ), &KComponent(), &warning );
		}
	
	RDebug::Print( line->Des() );
	CleanupStack::PopAndDestroy( line );
	}
static inline void Print( const TDesC& aStr, TUint aTUint )
	{
	TRAP_IGNORE( PrintL( aStr, aTUint ) );
	}

static inline void Log8L( const TDesC8& aDesC8 )
	{
	HBufC* buffer = HBufC::NewL( aDesC8.Length() );
	TPtr ptr( buffer->Des() );
	ptr.Copy( aDesC8 );
	Print( buffer->Des() );
	delete buffer;
	}

static inline void Log8L( const TDesC& aStr, const TDesC8& aDesC8 )
	{
	HBufC* buffer = HBufC::NewL( aDesC8.Length() );
	TPtr ptr( buffer->Des() );
	ptr.Copy( aDesC8 );
	Print( aStr, buffer->Des() );
	delete buffer;
	}

static inline HBufC8* EncodeSdpDocumentL( const CSdpDocument& aDoc )
	{
	CBufFlat* encBuf = CBufFlat::NewL( KMaxLengthOfSDPMessage );
	CleanupStack::PushL( encBuf );
	RBufWriteStream writeStream;
	CleanupClosePushL( writeStream );
	writeStream.Open( *encBuf );
	aDoc.EncodeL( writeStream );
	CleanupStack::PopAndDestroy( &writeStream );
	HBufC8* buff = encBuf->Ptr(0).AllocL();
	CleanupStack::PopAndDestroy( encBuf );
	return buff;
	}

#define NSPLOG_STR( aLit ) \
	{ _LIT( KStr, aLit ); Print( KStr() ); }
#define NSPLOG_STR2( aLit, b16 ) \
	{ _LIT( KStr, aLit ); Print( KStr(), b16 ); }
#define NSPLOG_STR3( aLit, b16, c16 ) \
	{ _LIT( KStr, aLit ); Print( KStr(), b16, c16 ); }
#define NSPLOG_INT( aLit, bInt ) \
	{ _LIT( KStr, aLit ); Print( KStr(), bInt ); }
#define NSPLOG_UINT( aLit, bUInt ) \
	{ _LIT( KStr, aLit ); Print( KStr(), bUInt ); }

#define NSPLOG8_STR( a8 ) \
	{ Log8L( a8 ); }
#define NSPLOG8_STR2( aLit, b8 ) \
	{ _LIT( KStr, aLit ); Log8L( KStr(), b8 ); }

#define NSPLOG8_DOC_L( aDoc ) \
	{\
	HBufC8* buffer = EncodeSdpDocumentL( aDoc );\
	CleanupStack::PushL( buffer );\
	TPtrC8 ptr( buffer->Des() );\
	while( ptr.Length() )\
		{\
		const TInt length = ptr.Length();\
		const TInt index = ptr.Find( TPtrC8( KCRLF ) );\
		const TInt left = ( KErrNotFound != index ? index : length );\
		const TInt right = ( length - KCRLFLength - left );\
		HBufC8* line = ptr.Left( left ).AllocLC();\
		Log8L( line->Des() );\
		CleanupStack::PopAndDestroy( line );\
        ptr.Set( ptr.Right( 0 < right ? right : 0 ) );\
	  }\
	CleanupStack::PopAndDestroy( buffer );\
	}

#define NSPDEBUG_PANIC( aInt ) \
	NSPLOG_INT( "NATFW SDP Provider!! code:", aInt ) __PANIC( aInt )

#if (defined NSP_PRINT_INPUT)

#define NSP_INPUT_OFFER_L( aOffer ) \
    {\
	NSPLOG_STR( "============ INPUT OFFER =============" )\
    NSPLOG8_DOC_L( aOffer )\
    NSPLOG_STR( "======================================" )\
    }
#define NSP_INPUT_OFFER( aOffer ) \
    TRAP_IGNORE( NSP_INPUT_OFFER_L( aOffer ) );
#define NSP_INPUT_ANSWER_L( aAnswer ) \
    {\
    NSPLOG_STR( "============ INPUT ANSWER ============" )\
    NSPLOG8_DOC_L( aAnswer )\
    NSPLOG_STR( "======================================" )\
    }
#define NSP_INPUT_ANSWER( aAnswer ) \
    TRAP_IGNORE( NSP_INPUT_ANSWER_L( aAnswer ) );

#else // NSP_PRINT_INPUT

#define NSP_INPUT_OFFER_L( aOffer )
#define NSP_INPUT_OFFER( aOffer )
#define NSP_INPUT_ANSWER_L( aAnswer )
#define NSP_INPUT_ANSWER( aAnswer )

#endif // NSP_PRINT_INPUT

#if (defined NSP_PRINT_OUTPUT)

#define NSP_OUTPUT_INITIALIZED \
	{\
	NSPLOG_STR( "============ INITIALIZED =============" )\
	NSPLOG_STR( "======================================" )\
	}
#define NSP_OUTPUT_OFFER_L( aStatus, aOffer ) \
    if ( KNatReady == aStatus )\
		{\
		NSPLOG_STR( "============ OUTPUT OFFER ============" )\
	    NSPLOG8_DOC_L( aOffer )\
	    NSPLOG_STR( "======================================" )\
		}
#define NSP_OUTPUT_OFFER( aStatus, aOffer ) \
    TRAP_IGNORE( NSP_OUTPUT_OFFER_L( aStatus, aOffer ) );
#define NSP_OUTPUT_ANSWER_L( aStatus, aAnswer ) \
    if ( KNatReady == aStatus )\
		{\
	    NSPLOG_STR( "============ OUTPUT ANSWER ===========" )\
	    NSPLOG8_DOC_L( aAnswer )\
	    NSPLOG_STR( "======================================" )\
		}
#define NSP_OUTPUT_ANSWER( aStatus, aAnswer )  \
    TRAP_IGNORE( NSP_OUTPUT_ANSWER_L( aStatus, aAnswer ) );
#define NSP_OUTPUT_UPDATESDP_L( aStatus, aOffer ) \
	if ( KNatReady == aStatus )\
		{\
		NSPLOG_STR( "============ UPDATED SDP =============" )\
	    NSPLOG8_DOC_L( aOffer )\
		NSPLOG_STR( "======================================" )\
		}
#define NSP_OUTPUT_UPDATESDP( aStatus, aOffer ) \
	TRAP_IGNORE( NSP_OUTPUT_UPDATESDP_L( aStatus, aOffer ) );
#define NSP_OUTPUT_ERROR( aError ) \
	{\
	NSPLOG_STR( "============ OUTPUT ERROR ============" )\
	NSPLOG_INT( ":", aError )\
	NSPLOG_STR( "======================================" )\
	}


#else // NSP_PRINT_OUTPUT

#define NSP_OUTPUT_INITIALIZED
#define NSP_OUTPUT_OFFER_L( aStatus, aOffer )
#define NSP_OUTPUT_OFFER( aStatus, aOffer )
#define NSP_OUTPUT_ANSWER_L( aStatus, aAnswer )
#define NSP_OUTPUT_ANSWER( aStatus, aAnswer )
#define NSP_OUTPUT_UPDATESDP_L( aStatus, aOffer )
#define NSP_OUTPUT_UPDATESDP( aStatus, aOffer )
#define NSP_OUTPUT_ERROR( aError )

#endif // NSP_PRINT_OUTPUT

#else // _DEBUG

#define NSPLOG_STR( aLit )
#define NSPLOG_STR2( aLit, b16 )
#define NSPLOG_STR3( aLit, b16, c16 )
#define NSPLOG_INT( aLit, bInt )
#define NSPLOG_UINT( aLit, bUInt )
#define NSPLOG8_STR( a8 )
#define NSPLOG8_STR2( aLit, b8 )
#define NSPLOG8_DOC_L( aDoc )
#define NSPDEBUG_PANIC( aInt )

#define NSP_INPUT_OFFER_L( aOffer )
#define NSP_INPUT_OFFER( aOffer )
#define NSP_INPUT_ANSWER_L( aAnswer )
#define NSP_INPUT_ANSWER( aAnswer )
#define NSP_OUTPUT_INITIALIZED
#define NSP_OUTPUT_OFFER_L( aStatus, aOffer )
#define NSP_OUTPUT_OFFER( aStatus, aOffer )
#define NSP_OUTPUT_ANSWER_L( aStatus, aAnswer )
#define NSP_OUTPUT_ANSWER( aStatus, aAnswer )
#define NSP_OUTPUT_UPDATESDP_L( aStatus, aOffer )
#define NSP_OUTPUT_UPDATESDP( aStatus, aOffer )
#define NSP_OUTPUT_ERROR( aError )

#endif // _DEBUG

#endif // NSPDEFS_H

// end of file