--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/kmdserver/src/kmdeventlogger.cpp Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,305 @@
+/*
+* Copyright (c) 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: KMD event logger
+*
+*/
+
+
+#include <e32base.h>
+#include <vpnlogmessages.rsg>
+#include "eventviewer.h"
+#include "ikedebug.h"
+#include "vpnclientuids.h"
+
+// CLASS HEADER
+#include "kmdeventlogger.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CKmdEventLogger* CKmdEventLogger::NewL( MIkeDebug& aDebug )
+ {
+ CKmdEventLogger* self = new ( ELeave ) CKmdEventLogger( aDebug );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CKmdEventLogger::~CKmdEventLogger()
+ {
+ iEventMediator.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CKmdEventLogger::CKmdEventLogger( MIkeDebug& aDebug )
+ : iDebug( aDebug )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Second phase construction.
+// ---------------------------------------------------------------------------
+//
+void CKmdEventLogger::ConstructL()
+ {
+ User::LeaveIfError( iEventMediator.Connect() );
+ }
+
+// ---------------------------------------------------------------------------
+// From class MKmdEventLoggerIf
+// Writes event to event log.
+// ---------------------------------------------------------------------------
+//
+void CKmdEventLogger::LogEvent( TLogCategory aCategory,
+ TInt aMsgId,
+ TInt aStatus,
+ TUint32 aVpnIapId,
+ const TInetAddr* aGwIp,
+ const TInetAddr* aLocalAddr )
+ {
+ TUid uid = TUid::Uid( KUidKmdServer );
+
+ TBuf<40> ipAddr16;
+ TBuf8<40> ipAddr;
+ TBuf8<40> localIpAddr;
+ TIapName vpnAccessPointName;
+ TInt addrIndex = KErrNotFound;
+ TInt iapIndex = KErrNotFound;
+ TInt statusIndex = KErrNotFound;
+ TInt realIpIndex = KErrNotFound;
+ TInt desCount = 0;
+ TUint8* pointers[4];
+ TInt lengths[4];
+
+ switch ( aMsgId )
+ {
+ case R_VPN_MSG_VPN_GW_NO_RESP:
+ case R_VPN_MSG_VPN_GW_AUTH_FAIL:
+ case R_VPN_MSG_VPN_GW_AUTH_OK:
+ addrIndex = 0;
+ iapIndex = 1;
+ break;
+
+ case R_VPN_MSG_VPN_GW_ERR_RESP_RECEIVED:
+ case R_VPN_MSG_SENT_ERROR_RESPONSE:
+ addrIndex = 0;
+ iapIndex = 1;
+ statusIndex = 2;
+ break;
+
+ case R_VPN_MSG_DATA_DROPPED_DUE_POLICY:
+ addrIndex = 0;
+ statusIndex = 1;
+ break;
+
+ case R_VPN_MSG_ADDR_INFO_FOR_VPN_AP:
+ iapIndex = 0;
+ addrIndex = 1;
+ realIpIndex = 2;
+ statusIndex = 3;
+ break;
+
+ case R_VPN_MSG_REAL_IAP_ACT_FAILED:
+ realIpIndex = 0;
+ iapIndex = 1;
+ statusIndex = 2;
+ break;
+
+ default:
+ break;
+ }
+
+ if ( addrIndex != KErrNotFound )
+ {
+ desCount ++;
+ pointers[addrIndex] = (TUint8*)ipAddr.Ptr();
+ if ( aGwIp )
+ {
+ aGwIp->Output(ipAddr16);
+ ipAddr.Copy(ipAddr16);
+ lengths[addrIndex] = ipAddr.Length();
+ }
+ else
+ {
+ lengths[addrIndex] = 0;
+ }
+ }
+
+ if ( statusIndex != KErrNotFound )
+ {
+ desCount ++;
+ pointers[statusIndex] = (TUint8*)&aStatus;
+ lengths[statusIndex] = sizeof(aStatus);
+ }
+
+ if ( iapIndex != KErrNotFound )
+ {
+ //
+ // VPN IAP id shall be converted to VPN access point name using
+ // eventviewer API.
+ //
+ desCount ++;
+ pointers[iapIndex] = (TUint8*)vpnAccessPointName.Ptr();
+ if ( aVpnIapId != 0 )
+ {
+ EventViewer::GetIapName(aVpnIapId, vpnAccessPointName);
+ lengths[iapIndex] = vpnAccessPointName.Length();
+ }
+ else
+ {
+ lengths[iapIndex] = 0;
+ }
+ }
+
+ if ( realIpIndex != KErrNotFound )
+ {
+ desCount ++;
+ pointers[realIpIndex] = (TUint8*)localIpAddr.Ptr();
+ ipAddr16.SetLength(0);
+ if ( aLocalAddr != NULL )
+ {
+ aLocalAddr->Output(ipAddr16);
+ }
+ localIpAddr.Copy(ipAddr16);
+ lengths[realIpIndex] = localIpAddr.Length();
+ }
+
+ TInt ret( KErrNone );
+
+ switch ( desCount )
+ {
+ case 0:
+ {
+ ret = iEventMediator.ReportLogEvent( uid,
+ aCategory,
+ aMsgId,
+ 0 );
+ }
+ break;
+
+ case 1:
+ {
+ TPtr8 parm1(pointers[0], lengths[0], lengths[0]);
+ ret = iEventMediator.ReportLogEvent( uid,
+ aCategory,
+ aMsgId,
+ 1,
+ &parm1 );
+ }
+ break;
+
+ case 2:
+ {
+ TPtr8 parm1(pointers[0], lengths[0], lengths[0]);
+ TPtr8 parm2(pointers[1], lengths[1], lengths[1]);
+ ret = iEventMediator.ReportLogEvent( uid,
+ aCategory,
+ aMsgId,
+ 2,
+ &parm1,
+ &parm2 );
+ }
+ break;
+
+ case 3:
+ {
+ TPtr8 parm1(pointers[0], lengths[0], lengths[0]);
+ TPtr8 parm2(pointers[1], lengths[1], lengths[1]);
+ TPtr8 parm3(pointers[2], lengths[2], lengths[2]);
+ ret = iEventMediator.ReportLogEvent( uid,
+ aCategory,
+ aMsgId,
+ 3,
+ &parm1,
+ &parm2,
+ &parm3 );
+ }
+ break;
+
+ case 4:
+ {
+ TPtr8 parm1(pointers[0], lengths[0], lengths[0]);
+ TPtr8 parm2(pointers[1], lengths[1], lengths[1]);
+ TPtr8 parm3(pointers[2], lengths[2], lengths[2]);
+ TPtr8 parm4(pointers[3], lengths[3], lengths[3]);
+ ret = iEventMediator.ReportLogEvent( uid,
+ aCategory,
+ aMsgId,
+ 4,
+ &parm1,
+ &parm2,
+ &parm3,
+ &parm4 );
+ }
+ break;
+
+ default:
+ ret = ret;
+ break;
+
+ }
+
+ DEBUG_LOG3( _L("Logging event %x with %d parameters, report status = %d"),
+ aMsgId, desCount, ret );
+
+ }
+
+// ---------------------------------------------------------------------------
+// From class MKmdEventLoggerIf
+// Writes event to event log.
+// ---------------------------------------------------------------------------
+//
+void CKmdEventLogger::LogEvent( TKmdLogCategory aCategory,
+ TInt aMsgId,
+ TInt aStatus,
+ TUint32 aVpnIapId,
+ const TInetAddr* aGwIp,
+ const TInetAddr* aLocalAddr )
+ {
+ TLogCategory logCategory;
+ switch ( aCategory )
+ {
+ case KLogInfo:
+ logCategory = EInfo;
+ break;
+ case KLogWarning:
+ logCategory = EWarning;
+ break;
+ case KLogError:
+ logCategory = EError;
+ break;
+ default:
+ logCategory = EDebug;
+ break;
+ }
+
+ LogEvent( logCategory,
+ aMsgId,
+ aStatus,
+ aVpnIapId,
+ aGwIp,
+ aLocalAddr );
+ }
+