messagingfw/wappushfw/pushwatcher/test/pushlog.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/pushwatcher/test/pushlog.cpp	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,261 @@
+// Copyright (c) 2000-2009 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 <e32cons.h>
+#include <flogger.h>
+#include <e32svr.h>
+#include <push/pushmessage.h>
+#include <push/pushlog.h>
+#include "testlog.h"
+
+_LIT(KPushLogDir, "push");
+_LIT(KPushLogFile, "WapPushLogging.txt");
+const TInt KWatcherLogBuffer = 256;
+
+
+/**
+* CWapPushLog::NewL
+* 
+*/
+CWapPushLog* CWapPushLog::NewL(CConsoleBase& aConsole)
+	{
+	CWapPushLog* self = new(ELeave)CWapPushLog(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CWapPushLog::CWapPushLog(CConsoleBase& aConsole) : iConsole(aConsole)
+	{
+	}
+
+
+/**
+* Destructor
+*/
+CWapPushLog::~CWapPushLog()
+	{
+	}
+
+void CWapPushLog::ConstructL()
+	{
+	}
+
+/**
+* Printf
+* 
+* @param	aFmt	
+*			Printf formatting rules
+*/
+void CWapPushLog::WPLPrintf(const TDesC& aDescription)
+	{
+	// Write to log file
+
+	if (iLogFilename.Length())
+		RFileLogger::Write(KPushLogDir, iLogFilename, EFileLoggingModeAppend, aDescription);
+	else
+		RFileLogger::Write(KPushLogDir, KPushLogFile, EFileLoggingModeAppend, aDescription);
+
+	// Write to console
+	_LIT(KPushLogFmt,"Push:%S\n");
+	TPtrC	buf = aDescription.Left(Min(KWatcherLogBuffer, aDescription.Length()));
+	iConsole.Printf(KPushLogFmt,&buf);
+	}
+
+/**
+ * Takes the data in a Push Message and prints it to console and the logs it to file.
+ * Uses the accessor functions of the CPushMessage class and this classes Printf function 
+ * to perform this.  Currently 4 headers and the message body are displayed and 
+ * logged. The headers are:
+ *		PushID, Content-Type, X-Application-ID, Expiry Date, 
+ *
+ *	@param	CPushMessage& aMessage
+ *				in:  a reference to a Push Message.
+ */
+void CWapPushLog::WPLPrintfL(CPushMessage& aMessage)
+	{
+	const TInt KWatcherLogBuffer=256;
+	TBuf<KWatcherLogBuffer> buf;
+	
+	// Content type
+	_LIT(KLogContentFmt,"Content Type : \t%S");
+	TPtrC contentPointer;
+	aMessage.GetContentType(contentPointer);
+	buf.Format(KLogContentFmt,&contentPointer);
+	buf.Append('\n');
+	if( buf.Length() > 100 )
+		{
+		// Flogger has a max of 150 (inc time stamp, and max buf is 256, if data is larger than 100 split onto
+		// 2 lines
+		WPLPrintf(buf.Left(100)); // Print first 150 chars
+		WPLPrintf(buf.Mid(99));  // Print the rest
+		}
+	else
+		{
+		WPLPrintf(buf);
+		}
+
+	// Date Field
+	_LIT(KLogDateTimeFmt," %-B%:0%J%:1%T%:2%S%+B   %D %N %Y  %4 %5 %3");
+	_LIT(KLogDateFmt,"Date           :\t%S");
+	TBool foundField;
+	TTime timeValue;
+	foundField = aMessage.GetHeaderField(EHttpDate, timeValue);
+	if (foundField)
+		{
+		TRAPD(err, timeValue.FormatL(buf, KLogDateTimeFmt));
+		if (err == KErrNone)
+			{
+			TBuf<KWatcherLogBuffer> dateBuf;
+			dateBuf.Format(KLogDateFmt, &buf);
+			WPLPrintf(dateBuf);
+			}
+		}
+
+	//Expires Field
+	aMessage.GetHeaderField(EHttpExpires, timeValue);
+	if (foundField)
+		{
+		TRAPD(err, timeValue.FormatL(buf, KLogDateTimeFmt));
+		if (err == KErrNone)
+			{
+			TBuf<KWatcherLogBuffer> dateBuf;
+			dateBuf.Format(KLogDateFmt, &buf);
+			WPLPrintf(dateBuf);
+			}
+		}
+
+	// X-Wap-Application-ID
+	TBool isInt = EFalse;
+	TInt ID = 0;
+	TPtrC8 generalPtr;
+	_LIT(KLogAppIdIntFmt,"App ID         :\t%X");
+	TRAPD( error, foundField = aMessage.GetAppIdL(generalPtr, ID, isInt) );
+	if (error == KErrNone && foundField) // App ID is present
+		{
+		if (isInt)  // Field in integer format
+			{
+			buf.Format(KLogAppIdIntFmt,ID);
+			}
+		else  // should be descriptor format
+			{
+			buf.Copy(generalPtr);
+			}
+		WPLPrintf(buf);
+		}
+
+	// Server Address 
+	TPtrC8 serverAddr;
+	_LIT(KLogServerAddressIntFmt,"Server Address : ");
+	foundField = aMessage.GetServerAddress(serverAddr);
+	if (foundField) // Server Address is present
+		{
+		buf.Copy(serverAddr);
+		buf.Insert( 0, KLogServerAddressIntFmt); 
+		WPLPrintf(buf);
+		}
+
+	// Push ID 
+	TUint8 pushID=0;
+	_LIT(KLogPushIDIntFmt,"PushID         : %d");
+	aMessage.GetPushId(pushID);
+	buf.Format(KLogPushIDIntFmt,pushID);
+	WPLPrintf(buf);
+
+	//Message Header Binary
+	_LIT(KLogMsgHdr,"Header Binary:");
+	WPLPrintf(KLogMsgHdr);
+	aMessage.GetHeader(generalPtr);
+	
+	HBufC* tempHdr = HBufC::NewLC(generalPtr.Length());
+	tempHdr->Des().Copy(generalPtr);
+	WPLLogBinaryAsHex(*tempHdr);
+	CleanupStack::PopAndDestroy(); //tempHdr
+
+	//Message Body
+	aMessage.GetMessageBody(generalPtr);
+
+	// Dump Body As Text
+	_LIT(KLogMsgBody,"Body Text:");
+	WPLPrintf(KLogMsgBody);
+	HBufC* tempBody = HBufC::NewLC(generalPtr.Length());
+	tempBody->Des().Copy(generalPtr);
+	WPLPrintf(*tempBody);
+
+	// Dump Body As Hex
+	_LIT(KBodyBinary,"\nBody Binary:");
+	WPLPrintf(KBodyBinary);
+	WPLLogBinaryAsHex(*tempBody);
+
+	CleanupStack::PopAndDestroy(); //tempBody
+	}
+ 
+
+ /**
+ * Prints out Buffer data in the format:
+ *	%X %X %X %X %X %X %X\n etc 
+ * For example
+ *	AB CD 01 12 34 A2 
+ *
+ *	@param	aDescription
+ *				in:  the descriptor to be dumped into the log
+ */
+void CWapPushLog::WPLLogBinaryAsHex(const TDesC& aDescription)
+	{
+	const TInt KWatcherLogBuffer=256;
+	_LIT(KHexSpace,"%02X ");
+	TBuf<KWatcherLogBuffer> hexBuf;
+	TBuf<KWatcherLogBuffer> buf;
+
+	TInt i = 0, bodyLen = aDescription.Length();
+
+	for (; i < bodyLen; i++)
+		{
+		hexBuf.Format(KHexSpace,aDescription[i]);
+		buf.Append(hexBuf);
+		if ( i && ((i+1) % 8) == 0  )
+			{
+			WPLPrintf(buf);
+			buf.Zero();
+			}
+		}
+
+	if (buf.Length())
+		WPLPrintf(buf);
+	}
+void CWapPushLog::WPLLogError(const TDesC& aDescription,TInt aError)
+	{
+	_LIT(KErrorLogFmt,"Push: %S, Error\t%d");
+	const TInt KWatcherLogBuffer=256;
+	TBuf<KWatcherLogBuffer> buf;
+	buf.Format(KErrorLogFmt,aDescription,aError);
+  	buf.Append('\n');
+	WPLPrintf(buf);
+	}
+
+
+void CWapPushLog::SetLogFileName(const TFileName aFilename)
+	{
+	iLogFilename=aFilename;
+	}
+
+const TDesC& CWapPushLog::LogFileName() const
+	{
+	if (iLogFilename.Length())
+		return iLogFilename;
+	else
+		return KPushLogFile;
+	}