--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rtp/rtpstack/src/rtputil.cpp Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,371 @@
+/*
+* Copyright (c) 2002-2003 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:
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32math.h>
+#include <e32hal.h>
+#include "rtputil.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// Parameters:
+// x 16-LSB of a positive integer
+// y 16-LSB of a positive integer
+//
+// Function: The function is taking care of wrap. If the distance
+// these two number is longer than 1 << 15, then we assume
+// the larger one is the min16 of these two numbers.
+//
+// Returns:
+// the min of the two input values
+// ---------------------------------------------------------------------------
+TUint16 TRtpUtil::Min16( TUint16 aX, TUint16 aY )
+ {
+ if ( ( aX <= aY && aX > aY - ( 1 << 15 ) ) || ( aX >= aY + ( 1 << 15 ) ) )
+ {
+ return aX;
+ }
+ else
+ {
+ return aY;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Parameters:
+// x 16-bit unsigned int
+// y 16-bit unsigned int
+//
+// Function: if the distance between aX and aY is longer than 1 << 15,
+// we assume these two number are wrapped.
+// Returns:
+// 1 if there is wrap around between this two values
+// ---------------------------------------------------------------------------
+TUint16 TRtpUtil::Wrap16( TUint16 aX, TUint16 aY )
+ {
+ if ( aX < aY - ( 1 << 15 ) || aY < aX - ( 1 << 15 ) )
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Parameters:
+// x 32-LSB of a positive integer
+// y 32-LSB of a positive integer
+// ---------------------------------------------------------------------------
+TUint32 TRtpUtil::Sub32( TUint32 aX, TUint32 aY )
+ {
+ if ( aX < aY )
+ return ( 0xFFFFFFFF - ( aY - aX ) + 1 );
+ else
+ return ( aX - aY );
+ }
+
+// ---------------------------------------------------------------------------
+// TUint8* TRtpUtil::Strcpy()
+//
+// ---------------------------------------------------------------------------
+//
+TUint8* TRtpUtil::Strcpy( TUint8* aTarget, const TUint8* aSource )
+ {
+ TPtr8 ptrTarget( aTarget, ( User::StringLength( aSource ) ) + 1 );
+
+ ptrTarget.SetMax();
+ ptrTarget.Copy( _L8( aSource ) );
+ ptrTarget.ZeroTerminate();
+
+ return aTarget;
+ }
+
+// ---------------------------------------------------------------------------
+// TUint TRtpUtil::GtGetTime()
+// Return time elapse from 01/01/1970 in tenth of millsecond
+// ---------------------------------------------------------------------------
+//
+TUint TRtpUtil::GtGetTime()
+ {
+ TTimeIntervalMicroSeconds32 uspertick; // scale factor: number of microseconds per system tick
+ UserHal::TickPeriod( uspertick );
+ return static_cast<TUint>( uspertick.Int() // number of '1us periods' per system tick
+ * User::TickCount() // number of system ticks
+ / 100 ); // in tenths of ms, note still wraps after 5 days.
+ }
+
+// ---------------------------------------------------------------------------
+// TUint32 TRtpUtil::Random()
+//
+// ---------------------------------------------------------------------------
+//
+TUint32 TRtpUtil::Random( TInt64& aSeed )
+ {
+ TInt32 rand = Math::Rand( aSeed );
+ return Abs( rand );
+ }
+
+// ---------------------------------------------------------------------------
+// TReal TRtpUtil::FloatRandom()
+//
+// ---------------------------------------------------------------------------
+//
+TReal TRtpUtil::FloatRandom( TInt64& aSeed )
+ {
+ TReal rand = Math::FRand( aSeed );
+ return Abs( rand );
+ }
+
+
+#ifdef _DEBUG
+// ---------------------------------------------------------------------------
+// TInt TRtpUtil::Print()
+//
+// ---------------------------------------------------------------------------
+//
+void TRtpUtil::Print( const TDesC8& aP )
+ {
+ const TUint KPrintLength = 5;
+ const TUint KPrintExtLength = 20;
+ TChar notAllowed('%');
+ if ( aP.Locate( notAllowed ) == KErrNotFound )
+ {
+ HBufC8* msg = NULL;
+ TRAPD( msgError, msg = HBufC8::NewL( aP.Length() + KPrintExtLength ) );
+ if ( msgError != KErrNone )
+ return ;
+
+ TPtr8 b( msg->Des() );
+
+ b.Append( _L8( "RTP : " ) );
+ // b = p;
+ //apend current time
+ b.AppendFormat( _L8( "%u - " ), ( TUint * ) ( TRtpUtil::GtGetTime() ) );
+
+ b.Append( aP );
+ b.Append( _L8( "\n" ) );
+
+ TInt ptrSize = static_cast <TInt>( b.Size() );
+ TBuf<256> buf;
+ if ( ptrSize < buf.MaxSize() )
+ {
+ buf.Copy( b );
+ RDebug::Print( buf );
+ }
+ else
+ {
+ _LIT(KRTPWarning, "RTP: Text is too long to be print all");
+ RDebug::Print( KRTPWarning );
+ buf.Copy( b.Left( buf.MaxSize() - KPrintLength ));
+ }
+ delete msg;
+ }
+ else
+ {
+ _LIT(KRTPWarning, "RTP: Text contains not allowed characters, log ignored");
+ RDebug::Print( KRTPWarning );
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// TInt TRtpUtil::Print()
+//
+// ---------------------------------------------------------------------------
+//
+void TRtpUtil::Print( const TDesC8& aP, TInt aValue )
+ {
+ const TUint KPrintLength = 5;
+ const TUint KPrintExtLength = 106;
+ TChar notAllowed('%');
+ if ( aP.Locate( notAllowed ) == KErrNotFound )
+ {
+ HBufC8* msg = NULL;
+ TRAPD( msgError, msg = HBufC8::NewL( aP.Length() + KPrintExtLength ) );
+ if ( msgError != KErrNone )
+ return;
+
+ TPtr8 b( msg->Des() );
+ b.Append( _L8( "RTP : " ) );
+
+ // b = p;
+ //apend current time
+ b.AppendFormat( _L8( "%u - " ), ( TUint * ) ( TRtpUtil::GtGetTime() ) );
+ b.Append( aP );
+ b.AppendFormat( _L8( "= <%d> " ), aValue );
+ b.Append( _L8( "\n" ) );
+
+ TInt ptrSize = static_cast <TInt>( b.Size() );
+ TBuf<256> buf;
+ if ( ptrSize < buf.MaxSize() )
+ {
+ buf.Copy( b );
+ RDebug::Print( buf );
+ }
+ else
+ {
+ _LIT(KRTPWarning, "RTP: Text is too long to be print all");
+ RDebug::Print( KRTPWarning );
+ buf.Copy( b.Left( buf.MaxSize() - KPrintLength ));
+ }
+ delete msg;
+ }
+ else
+ {
+ _LIT(KRTPWarning, "RTP: Text contains not allowed characters, log ignored");
+ RDebug::Print( KRTPWarning );
+ }
+ }
+
+
+#endif
+
+
+#ifdef _RTP_LOG_FILE
+
+// ---------------------------------------------------------------------------
+// TInt TRtpUtil::Print()
+//
+// ---------------------------------------------------------------------------
+//
+void TRtpUtil::Print( const TDesC& aName, const TDesC8& aP )
+ {
+ HBufC8* msg = NULL;
+ TRAPD( msgError, msg = HBufC8::NewL( aP.Length() + 20 ) );
+ if ( msgError != KErrNone )
+ return;
+
+ TPtr8 b( msg->Des() );
+
+ b.Append( _L8( "RTP : " ) );
+ // b = p;
+ //apend current time
+ b.AppendFormat( _L8( "%u - " ), ( TUint * ) ( TRtpUtil::GtGetTime() ) );
+
+ b.Append( aP );
+ b.Append( _L8( "\n" ) );
+
+ TFileUtil::LogMessage( aName, b );
+
+ delete msg;
+ }
+
+// ---------------------------------------------------------------------------
+// TInt TRtpUtil::Print()
+//
+// ---------------------------------------------------------------------------
+//
+void TRtpUtil::Print( const TDesC& aName, const TDesC8& aP, TUint32 aValue )
+ {
+ HBufC8* msg = NULL;
+ TRAPD( msgError, msg = HBufC8::NewL( aP.Length() + 106 ) );
+ if ( msgError != KErrNone )
+ return;
+
+ TPtr8 b( msg->Des() );
+ b.Append( _L8( "RTP : " ) );
+
+ // b = p;
+ //apend current time
+ b.AppendFormat( _L8( "%u - " ), ( TUint * ) ( TRtpUtil::GtGetTime() ) );
+ b.Append( aP );
+ b.AppendFormat( _L8( "<%d> " ), aValue );
+ b.Append( _L8( "\n" ) );
+
+ TFileUtil::LogMessage( aName, b );
+
+
+ delete msg;
+ }
+
+// ---------------------------------------------------------------------------
+// TInt TFileUtil::LogMessage()
+//
+// ---------------------------------------------------------------------------
+//
+TInt TFileUtil::LogMessage( const TFileName& name, const TDesC8& mess )
+ {
+ RFs fs;
+ RFile file;
+ TFileName nameWithPath;
+
+ nameWithPath = KDefaultPath;
+ nameWithPath.Append( name );
+ nameWithPath.ZeroTerminate();
+ TInt err = fs.Connect();
+
+ if ( err != KErrNone )
+ return err;
+
+ err = file.Open( fs, nameWithPath, EFileStream | EFileWrite | EFileShareExclusive );
+ if ( err == KErrNotFound )
+ err = file.Create( fs, nameWithPath, EFileStream | EFileWrite | EFileShareExclusive );
+ if ( err != KErrNone )
+ return err;
+
+ TInt off( 0 );
+ err = file.Seek( ESeekEnd, off );
+ if ( err != KErrNone )
+ return err;
+
+ file.Write( mess );
+ file.Flush();
+ file.Close();
+ fs.Close();
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// TInt TFileUtil::InitLogFile()
+//
+// ---------------------------------------------------------------------------
+//
+TInt TFileUtil::InitLogFile( const TFileName& name )
+ {
+ RFs fs;
+ RFile file;
+ TFileName nameWithPath;
+
+ nameWithPath = KDefaultPath;
+ nameWithPath.Append( name );
+ nameWithPath.ZeroTerminate();
+ TInt err = fs.Connect();
+
+ if ( err != KErrNone )
+ return err;
+
+ err = file.Replace( fs, nameWithPath, EFileStream | EFileWrite | EFileShareExclusive );
+ if ( err != KErrNone )
+ return err;
+
+ file.Close();
+ fs.Close();
+
+ return KErrNone;
+ }
+#endif
+
+
+
+// End of File