datacommsserver/esockserver/ssock/ss_log.cpp
changeset 0 dfb7c4ff071f
child 9 77effd21b2c9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/ssock/ss_log.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,440 @@
+// Copyright (c) 2003-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 <e32std.h>
+#include <ss_glob.h>
+#include <comms-infras/ss_log.h>
+#include <comms-infras/nifif.h>
+#include <comms-infras/ss_thread.h>
+#include <comms-infras/sockmes.h>
+#include <comms-infras/ss_nodemessages.h>
+#include <comms-infras/ss_mcprnodemessages.h>
+
+#if defined (__CFLOG_ACTIVE) || defined (SYMBIAN_TRACE_ENABLE)
+
+
+using namespace ESock;
+
+EXPORT_C void ESockLogExternal::Printf(const TDesC8& aMajorTag, const TDesC8& aSubTag, TRefByValue<const TDesC8> aFmt, ...)
+	{
+	VA_LIST list;
+	VA_START(list,aFmt);
+	Printf(aMajorTag, aSubTag, aFmt, list);
+	VA_END(list);
+	}
+
+EXPORT_C void ESockLogExternal::Printf(const TDesC8& aMajorTag, const TDesC8& aSubTag, TRefByValue<const TDesC8> aFmt, VA_LIST& aList)
+	{
+	TBuf8<200> buf;
+	CSockManData* globs = SockManGlobals::Get();
+	if(globs)
+		{
+		CWorkerThread* worker = globs->SelfWorker();
+		if(worker)
+			{
+			_LIT8(KWorkerIdFormat, "W%d: ");
+			buf.Format(KWorkerIdFormat, worker->WorkerId());
+			}
+		}
+	TLogIgnoreOverflow8 overflowHandler;
+	buf.AppendFormatList(aFmt, aList, &overflowHandler);
+	
+#ifdef SYMBIAN_TRACE_ENABLE
+    const TInt KSimpleLoggingPrimaryFilter = 196;
+	UTracePfAny(KSimpleLoggingPrimaryFilter, KText, ETrue, EFalse, 0, buf.Ptr(), buf.Length());
+#endif
+
+#ifdef __CFLOG_ACTIVE
+	CCFLogIf::WriteFormat(aMajorTag, aSubTag, buf);
+#else
+	// Preventing unused variable warnings.
+	(void)aMajorTag;
+	(void)aSubTag;
+#endif	
+	}
+
+
+void ESockLog::Printf(TRefByValue<const TDesC8> aFmt,...)
+/**
+Write a multiple argument list to the log using the generc server tag, trapping and ignoring any leave
+
+*/
+	{
+	VA_LIST list;
+	VA_START(list,aFmt);
+	ESockLogExternal::Printf(KESockComponentTag, KESockServerTag, aFmt, list);
+	VA_END(list);
+	}
+
+void ESockLog::Printf(TRefByValue<const TDesC> aFmt,...)
+/**
+Write a multiple argument list to the log, trapping and ignoring any leave
+
+*/
+	{
+	VA_LIST list;
+	VA_START(list,aFmt);
+	Printf(KESockComponentTag, KESockServerTag, aFmt, list);
+	VA_END(list);
+	}
+
+void ESockLog::Printf(const TDesC8& aSubTag, TRefByValue<const TDesC8> aFmt, ...)
+	{
+	VA_LIST list;
+	VA_START(list,aFmt);
+	ESockLogExternal::Printf(KESockComponentTag, aSubTag, aFmt, list);
+	VA_END(list);
+	}
+
+void ESockLog::Printf(const TDesC8& aSubTag, TRefByValue<const TDesC> aFmt, ...)
+	{
+	VA_LIST list;
+	VA_START(list,aFmt);
+	Printf(KESockComponentTag, aSubTag, aFmt, list);
+	VA_END(list);
+	}
+	
+void ESockLog::Printf(const TDesC8& aSubTag, TRefByValue<const TDesC> aFmt, VA_LIST& aList)
+	{
+	Printf(KESockComponentTag, aSubTag, aFmt, aList);
+	}
+
+
+void ESockLog::Printf(const TDesC8& aMajorTag, const TDesC8& aSubTag, TRefByValue<const TDesC> aFmt, VA_LIST& aList)
+/**
+Write a multiple argument list to the log, trapping and ignoring any leave
+
+*/
+	{
+	TBuf<200> buf;
+	CSockManData* globs = SockManGlobals::Get();
+	if(globs)
+		{
+		CWorkerThread* worker = globs->SelfWorker();
+		if(worker)
+			{
+			_LIT(KWorkerIdFormat, "W%d: ");
+			buf.Format(KWorkerIdFormat, worker->WorkerId());
+			}
+		}
+	TLogIgnoreOverflow16 overflowHandler;
+	buf.AppendFormatList(aFmt, aList, &overflowHandler);
+	
+#ifdef SYMBIAN_TRACE_ENABLE
+    const TInt KSimpleLoggingPrimaryFilter = 196;
+    TBuf8<200> buf8;
+    buf8.Copy(buf);
+	UTracePfAny(KSimpleLoggingPrimaryFilter, KText, ETrue, EFalse, 0, buf8.Ptr(), buf8.Length());
+#endif
+
+#ifdef __CFLOG_ACTIVE	
+	CCFLogIf::Write(aMajorTag, aSubTag, buf);
+#else
+	// Preventing unused variable warnings.
+	(void)aMajorTag;
+	(void)aSubTag;
+#endif	
+	}
+	
+void ESockLog::Printf(const TDesC8& aSubTag, TRefByValue<const TDesC8> aFmt, VA_LIST& aList)
+	{
+	ESockLogExternal::Printf(KESockComponentTag, aSubTag, aFmt, aList);
+	}
+
+void ESockLog::ConnectionInfoPrintf(const TDesC8& aConnectionInfo, TRefByValue<const TDesC> aFmt,...)
+/**
+Write a multiple argument list to the log, trapping and ignoring any leave
+*/
+	{
+	VA_LIST list;
+	VA_START(list,aFmt);
+	TBuf<200> buf;
+	buf.AppendFormatList(aFmt, list);
+	const TSoIfConnectionInfo *info = REINTERPRET_CAST(const TSoIfConnectionInfo*, aConnectionInfo.Ptr());
+	buf.AppendFormat(_L(" IAP %d, Network %d"), info->iIAPId, info->iNetworkId);
+	
+#ifdef SYMBIAN_TRACE_ENABLE
+    const TInt KSimpleLoggingPrimaryFilter = 196;
+    TBuf8<200> buf8;
+    buf8.Copy(buf);
+	UTracePfAny(KSimpleLoggingPrimaryFilter, KText, ETrue, EFalse, 0, buf8.Ptr(), buf8.Length());
+#endif
+
+#ifdef __CFLOG_ACTIVE
+	CCFLogIf::Write(KESockComponentTag, KESockConnectionTag, buf);
+#endif
+	
+	VA_END(list);
+	}
+
+
+const TText8* ESockLog::IPCMessName(TSockMess aMess)
+/**
+Write a multiple argument list to the log, trapping and ignoring any leave
+*/
+	{
+	switch(aMess)
+		{
+		case ESSNumProtocols: return _S8("ESSNumProtocols");
+		case ESSProtocolInfo: return _S8("ESSProtocolInfo");
+		case ESSProtocolInfoByName: return _S8("ESSProtocolInfoByName");
+		case ESSProtocolStart: return _S8("ESSProtocolStart");
+		case ESSProtocolStop: return _S8("ESSProtocolStop");
+		case ESSInstallExtension: return _S8("ESSInstallExtension");
+		case ESoCreate: return _S8("ESoCreate");
+		case ESoCreateNull: return _S8("ESoCreateNull");
+		case ESoSend: return _S8("ESoSend");
+		case ESoSendNoLength: return _S8("ESoSendNoLength");
+		case ESoRecv: return _S8("ESoRecv");
+		case ESoRecvNoLength: return _S8("ESoRecvNoLength");
+		case ESoRecvOneOrMore: return _S8("ESoRecvOneOrMore");
+		case ESoRead: return _S8("ESoRead");
+		case ESoWrite: return _S8("ESoWrite");
+		case ESoSendTo: return _S8("ESoSendTo");
+		case ESoSendToNoLength: return _S8("ESoSendToNoLength");
+		case ESoRecvFrom: return _S8("ESoRecvFrom");
+		case ESoRecvFromNoLength: return _S8("ESoRecvFromNoLength");
+		case ESoConnect: return _S8("ESoConnect");
+		case ESoBind: return _S8("ESoBind");
+		case ESoAccept: return _S8("ESoAccept");
+		case ESoListen: return _S8("ESoListen");
+		case ESoSetOpt: return _S8("ESoSetOpt");
+		case ESoGetOpt: return _S8("ESoGetOpt");
+		case ESoIoctl: return _S8("ESoIoctl");
+		case ESoGetDiscData: return _S8("ESoGetDiscData");
+		case ESoGetLocalName: return _S8("ESoGetLocalName");
+		case ESoGetRemoteName: return _S8("ESoGetRemoteName");
+		case ESoClose: return _S8("ESoClose");
+		case ESoShutdown: return _S8("ESoShutdown");
+		case ESoCancelIoctl: return _S8("ESoCancelIoctl");
+		case ESoCancelRecv: return _S8("ESoCancelRecv");
+		case ESoCancelSend: return _S8("ESoCancelSend");
+		case ESoCancelConnect: return _S8("ESoCancelConnect");
+		case ESoCancelAccept: return _S8("ESoCancelAccept");
+		case ESoCancelAll: return _S8("ESoCancelAll");
+		case ESoSocketInfo: return _S8("ESoSocketInfo");
+		case ESoReference: return _S8("ESoReference");
+		case ESoTransfer: return _S8("ESoTransfer");
+		case EHRCreate: return _S8("EHRCreate");
+		case EHRGetByName: return _S8("EHRGetByName");
+		case EHRNext: return _S8("EHRNext");
+		case EHRGetByAddress: return _S8("EHRGetByAddress");
+		case EHRGetHostName: return _S8("EHRGetHostName");
+		case EHRSetHostName: return _S8("EHRSetHostName");
+		case EHRCancel: return _S8("EHRCancel");
+		case EHRClose: return _S8("EHRClose");
+		case ESRCreate: return _S8("ESRCreate");
+		case ESRGetByName: return _S8("ESRGetByName");
+		case ESRGetByNumber: return _S8("ESRGetByNumber");
+		case ESRRegisterService: return _S8("ESRRegisterService");
+		case ESRRemoveService: return _S8("ESRRemoveService");
+		case ESRCancel: return _S8("ESRCancel");
+		case ESRClose: return _S8("ESRClose");
+		case ENDCreate: return _S8("ENDCreate");
+		case ENDQuery: return _S8("ENDQuery");
+		case ENDAdd: return _S8("ENDAdd");
+		case ENDRemove: return _S8("ENDRemove");
+		case ENDCancel: return _S8("ENDCancel");
+		case ENDClose: return _S8("ENDClose");
+		case ESoCreateWithConnection: return _S8("ESoCreateWithConnection");
+		case EHRCreateWithConnection: return _S8("EHRCreateWithConnection");
+		case ECNCreate: return _S8("ECNCreate");
+		case ECNCreateWithName: return _S8("ECNCreateWithName");
+		case ECNClose: return _S8("ECNClose");
+		case ECNReference: return _S8("ECNReference");
+		case ECNStart: return _S8("ECNStart");
+		case ECNSetStartPrefs: return _S8("ECNSetStartPrefs");
+		case ECNStop: return _S8("ECNStop");
+		case ECNProgress: return _S8("ECNProgress");
+		case ECNProgressNotification: return _S8("ECNProgressNotification");
+		case ECNCancelProgressNotification: return _S8("ECNCancelProgressNotification");
+		case ECNLastProgressError: return _S8("ECNLastProgressError");
+		case ECNServiceChangeNotification: return _S8("ECNServiceChangeNotification");
+		case ECNCancelServiceChangeNotification: return _S8("ECNCancelServiceChangeNotification");
+		case ECNGetIntSetting: return _S8("ECNGetIntSetting");
+		case ECNGetBoolSetting: return _S8("ECNGetBoolSetting");
+		case ECNGetDes8Setting: return _S8("ECNGetDes8Setting");
+		case ECNGetDes16Setting: return _S8("ECNGetDes16Setting");
+		case ECNGetLongDesSetting: return _S8("ECNGetLongDesSetting");
+		case ECNEnumerateConnections: return _S8("ECNEnumerateConnections");
+		case ECNGetConnectionInfo: return _S8("ECNGetConnectionInfo");
+		case ECNControl: return _S8("ECNControl");
+		case ECNAttach: return _S8("ECNAttach");
+		case ECNAllInterfaceNotification: return _S8("ECNAllInterfaceNotification");
+		case ECNCancelAllInterfaceNotification: return _S8("ECNCancelAllInterfaceNotification");
+		case ESCPSStop: return _S8("ESCPSStop");
+		case ESCPSProgress: return _S8("ESCPSProgress");
+		case ESCPSProgressNotification: return _S8("ESCPSProgressNotification");
+		case ESCPSCancelProgressNotification: return _S8("ESCPSCancelProgressNotification");
+		case ECNEnumerateSubConnections: return _S8("ECNEnumerateSubConnections");
+		case ESCPSGetSubConnectionInfo: return _S8("ESCPSGetSubConnectionInfo");
+		case ECNAllSubConnectionNotification: return _S8("ECNAllSubConnectionNotification");
+		case ECNCancelAllSubConnectionNotification: return _S8("ECNCancelAllSubConnectionNotification");
+		case ESCPSDataTransferred: return _S8("ESCPSDataTransferred");
+		case ESCPSDataTransferredCancel: return _S8("ESCPSDataTransferredCancel");
+		case ESCPSDataSentNotificationRequest: return _S8("ESCPSDataSentNotificationRequest");
+		case ESCPSDataSentNotificationCancel: return _S8("ESCPSDataSentNotificationCancel");
+		case ESCPSDataReceivedNotificationRequest: return _S8("ESCPSDataReceivedNotificationRequest");
+		case ESCPSDataReceivedNotificationCancel: return _S8("ESCPSDataReceivedNotificationCancel");
+		case ESCPSIsSubConnectionActiveRequest: return _S8("ESCPSIsSubConnectionActiveRequest");
+		case ESCPSIsSubConnectionActiveCancel: return _S8("ESCPSIsSubConnectionActiveCancel");
+		case ESCCreate: return _S8("ESCCreate");
+		case ESCProgressNotification: return _S8("ESCProgressNotification");
+		case ESCCancelProgressNotification: return _S8("ESCCancelProgressNotification");
+		case ESCProgress: return _S8("ESCProgress");
+		case ESCIsSubConnectionActiveRequest: return _S8("ESCIsSubConnectionActiveRequest");
+		case ESCIsSubConnectionActiveCancel: return _S8("ESCIsSubConnectionActiveCancel");
+		case ESCClose: return _S8("ESCClose");
+		case ESCAddSocket: return _S8("ESCAddSocket");
+		case ESCRemoveSocket: return _S8("ESCRemoveSocket");
+		case ESCSetParameters: return _S8("ESCSetParameters");
+		case ESCGetParameters: return _S8("ESCGetParameters");
+		case ESCGetParametersLength: return _S8("ESCGetParametersLength");
+		case ESCEventNotification: return _S8("ESCEventNotification");
+		case ESCEventNotificationCancel: return _S8("ESCEventNotificationCancel");
+		case ESCControl: return _S8("ESCControl");
+		case ESoCreateWithSubConnection: return _S8("ESoCreateWithSubConnection");
+		case ESSDbgMarkHeap: return _S8("ESSDbgMarkHeap");
+		case ESSDbgCheckHeap: return _S8("ESSDbgCheckHeap");
+		case ESSDbgMarkEnd: return _S8("ESSDbgMarkEnd");
+		case ESSDbgFailNext: return _S8("ESSDbgFailNext");
+		case ESSDbgCheckFailNext: return _S8("ESSDbgCheckFailNext");
+		case ESSDbgFailNextMbuf: return _S8("ESSDbgFailNextMbuf");
+		case ESSDbgSetMbufPoolLimit: return _S8("ESSDbgSetMbufPoolLimit");
+		case ESSDbgCheckMbuf: return _S8("ESSDbgCheckMbuf");
+		case ESSDbgMbufFreeSpace: return _S8("ESSDbgMbufFreeSpace");
+		case ESSDbgMbufTotalSpace: return _S8("ESSDbgMbufTotalSpace");
+
+		case ESSDbgControl: return _S8("ESSDbgControl");
+
+		case ESSExclusiveMode: return _S8("ESSExclusiveMode");
+		case ESSClearExclusiveMode: return _S8("ESSClearExclusiveMode");
+		case EHrQuery: return _S8("EHrQuery");
+		case EHrQueryNext: return _S8("EHrQueryNext");
+		case ECNIoctl: return _S8("ECNIoctl");
+		case ECNCancelIoctl: return _S8("ECNCancelIoctl");
+		case ESSRequestOptimalDealer: return _S8("ESSRequestOptimalDealer");
+		case ECommsApiExtBindIface: return _S8("ECommsApiExtBindIface");
+		case ECommsApiExtIfaceSendReceive: return _S8("ECommsApiExtIfaceSendReceive");
+		case ECommsApiExtIfaceSend: return _S8("ECommsApiExtIfaceSend");
+		case ECommsApiExtIfaceClose: return _S8("ECommsApiExtIfaceClose");
+		case ECNWaitForIncoming: return _S8("ECNWaitForIncoming");
+		case ECNCancelWaitForIncoming: return _S8("ECNCancelWaitForIncoming");
+		case ESCStart: return _S8("ESCStart");
+		case ESCStop: return _S8("ESCStop");
+		case ESCEventAllNotifications: return _S8("ESCEventAllNotifications");
+		case ESCEventNotificationSetup: return _S8("ESCEventNotificationSetup");
+		case ECNGetOrSetParameters: return _S8("ECNGetOrSetParameters");
+		case ECNGetParametersResponseLength: return _S8("ECNGetParametersResponseLength");
+		case ECNGetParametersResponse: return _S8("ECNGetParametersResponse");
+		case EHRSetOpt: return _S8("EHRSetOpt");
+
+		default:
+			__DEBUGGER();	/* Don't panic, do read on - you've hit this breakpoint because 
+							aMess has no helpful explananatory text for logging. Almost certainly 
+							this means an IPC function was added without updating this switch. Do
+							it now and make the world very slightly better! 
+							*/
+		}
+	return NULL; 	// unknown
+	}
+
+void ESockLog::IPCMessName(TSockMess aMessNum, TDes8& aMessBuf)
+	{
+	const TText8* mess = IPCMessName(aMessNum);
+	if (mess == NULL)
+		{
+		_LIT8(KUnknown, "IPC %d (UNKNOWN NAME - edit IPCMessName())");
+		aMessBuf.Format(KUnknown(), aMessNum);
+		}
+	else
+		{
+		aMessBuf.Copy(mess);
+		}
+	}
+
+
+const TText8* ESockLog::ConnServIPCMessName(TConnectionServerMessage aMess)
+/**
+Write a multiple argument list to the log, trapping and ignoring any leave
+*/
+	{
+	switch(aMess)
+		{
+		case ECMCreate: return _S8("ECMCreate");
+		case ECMClose: return _S8("ECMClose");
+		case ECMAttachToTierManager: return _S8("ECMAttachToTierManager");
+		case ECMAccessPointStatusQuery_DoThenGetResultOrSize: return _S8("ECMAccessPointStatusQuery_DoThenGetResultOrSize");
+		case ECMAccessPointStatusQuery_GetResult: return _S8("ECMAccessPointStatusQuery_GetResult");
+		case ECMAccessPointStatusQuery_Cancel: return _S8("ECMAccessPointStatusQuery_Cancel");
+		case ECMAccessPointNotification_SetupThenAwaitThenGetResultOrSize: return _S8("ECMAccessPointNotification_SetupThenAwaitThenGetResultOrSize");
+		case ECMAccessPointNotification_AwaitThenGetResultOrSize: return _S8("ECMAccessPointNotification_AwaitThenGetResultOrSize");
+		case ECMAccessPointNotification_GetResult: return _S8("ECMAccessPointNotification_GetResult");
+		case ECMAccessPointNotification_Cancel: return _S8("ECMAccessPointNotification_Cancel");
+		case ECMApiExtBindIface: return _S8("ECommsApiExtBindIface");
+		case ECMApiExtIfaceSendReceive: return _S8("ECommsApiExtIfaceSendReceive");
+		case ECMApiExtIfaceSend: return _S8("ECommsApiExtIfaceSend");
+		case ECMApiExtIfaceClose: return _S8("ECommsApiExtIfaceClose");
+		default:
+			__DEBUGGER();	/* Don't panic, do read on - you've hit this breakpoint because 
+							aMess has no helpful explananatory text for logging. Almost certainly 
+							this means an IPC function was added without updating this switch. Do
+							it now and make the world very slightly better! 
+							*/
+		}
+	return NULL; 	// unknown
+	}
+
+void ESockLog::ConnServIPCMessName(TConnectionServerMessage aMessNum, TDes8& aMessBuf)
+	{
+	const TText8* mess = ConnServIPCMessName(aMessNum);
+	if (mess == NULL)
+		{
+		_LIT8(KUnknown, "IPC %d (UNKNOWN NAME - edit ConnServIPCMessName())");
+		aMessBuf.Format(KUnknown(), aMessNum);
+		}
+	else
+		{
+		aMessBuf.Copy(mess);
+		}
+	}
+
+    
+#else // defined(__FLOG_ACTIVE) || defined (SYMBIAN_TRACE_ENABLE)
+
+EXPORT_C void ESockLogExternal::Printf(const TDesC8& /*aMajorTag*/, const TDesC8& /*aSubTag*/, TRefByValue<const TDesC8> /*aFmt*/, ...)
+	{
+	}
+
+EXPORT_C void ESockLogExternal::Printf(const TDesC8& /*aMajorTag*/, const TDesC8& /*aSubTag*/, TRefByValue<const TDesC8> /*aFmt*/, VA_LIST& /*aList*/)
+	{
+	}
+#endif
+
+
+EXPORT_C TInt ESockLogExternal::WorkerId()
+    {
+    CSockManData* globs = SockManGlobals::Get();
+	if (globs)
+		{
+		CWorkerThread* worker = globs->SelfWorker();
+		if (worker)
+		    {
+		    return (TInt)worker->WorkerId();
+			}
+		}
+    return KErrNotFound;
+    }
+