vpnengine/sit/src/eventlogger.cpp
changeset 0 33413c0669b9
child 22 9f4e37332ce5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/sit/src/eventlogger.cpp	Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,159 @@
+/*
+* 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: Logs events related to the SIT tasks.
+*
+*/
+
+#include <ipsecpolapi.h>
+
+#include "sit.h"
+#include "eventlogger.h"
+#include "log.h"
+#include "eventmediatorapi.h"
+#include "vpnconnstarter.h"
+
+
+/**
+ * Used to log events related to the SIT tasks. 
+ */
+CEventLogger* CEventLogger::NewL(REventMediator& aEventMediator, TUint32 aVpnIapId, TUint32 aRealIapId)
+    {
+    LOG(Log::Printf(_L("CEventLogger::NewL - begin\n")));
+    CEventLogger* self = new (ELeave) CEventLogger(aEventMediator, aVpnIapId, aRealIapId);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(); // self
+    LOG(Log::Printf(_L("CEventLogger::NewL - end\n")));
+    return self;
+    }
+
+CEventLogger::CEventLogger(REventMediator& aEventMediator, TUint32 aVpnIapId, TUint32 aRealIapId)
+    : iEventMediator(aEventMediator), iVpnIapId(aVpnIapId), iRealIapId(aRealIapId)
+    {
+    }
+
+void CEventLogger::ConstructL()
+    {
+    // Set default access point names just
+    // in case the real name fetching fails
+    iVpnApName.Copy(KUnknownVpnAp);
+    iRealApName.Copy(KUnknownIap);
+
+    EventViewer::GetIapNames(iVpnIapId, iVpnApName, iRealIapId, iRealApName);
+    }
+    
+CEventLogger::~CEventLogger()
+    {
+    LOG(Log::Printf(_L("CEventLogger::~CEventLogger\n")));
+    }
+
+void CEventLogger::LogEvent(TUint aMsgId, TAny* aAnyPtr, TInt aStatusCode, TInt aReasonCode)
+    {
+    DoLogEvent( aMsgId, aAnyPtr, aStatusCode, aReasonCode );
+    }
+
+TInt CEventLogger::DoLogEvent(TUint aMsgId, TAny* aAnyPtr, TInt aStatusCode, TInt aReasonCode)
+    {
+    TBuf<KMaxIpAddressLength> ifAddr;
+    TBuf8<KMaxIpAddressLength> ifAddr8;
+
+    TPckgBuf<TInt> statusCodeDes(aStatusCode);
+
+    TUid sourceUid = (TUid)(KUidSit);
+    
+    TInt ret = KErrNone;
+                
+    switch (aMsgId)
+        {
+        case R_VPN_MSG_VPN_IAP_ACTIVATED:
+            if (aStatusCode == KErrNone)
+                {
+                static_cast<TInetAddr*>(aAnyPtr)->Output(ifAddr);
+                ifAddr8.Copy(ifAddr);
+                
+                ret = iEventMediator.ReportLogEvent(sourceUid, EInfo, aMsgId, 2,
+                                                    &iVpnApName, &ifAddr8);
+                }
+            break;
+            
+        case R_VPN_MSG_VPN_IAP_ACT_FAILED:
+            if (aStatusCode == KKmdIkeNoCertFoundErr)
+                {
+                ret = iEventMediator.ReportLogEvent(sourceUid, EError,
+                                                    R_VPN_MSG_VPN_IAP_ACT_FAILED_CERT_EXP_MISS,
+                                                    1, &iVpnApName);
+                }
+            else if (aStatusCode != KErrNone && aStatusCode != KErrCancel)
+                {
+                ret = iEventMediator.ReportLogEvent(sourceUid, EError, aMsgId, 2,
+                                                    &iVpnApName, &statusCodeDes);
+                }
+            break;
+            
+        case R_VPN_MSG_REAL_IAP_ACT_FAILED:
+            if (aStatusCode != KErrNone && aStatusCode != KErrCancel)
+                {
+                ret = iEventMediator.ReportLogEvent(sourceUid, EError, aMsgId, 3,
+                                                    &iRealApName, &iVpnApName, &statusCodeDes);
+                }
+            break;
+            
+        case R_VPN_MSG_VPN_IAP_DEACT:
+            if (aStatusCode == KErrNone ||
+                aStatusCode == EUnknownPolicyHandle)
+                {
+                if (aReasonCode == EDeactivateForced)
+                    {
+                    ret = iEventMediator.ReportLogEvent(sourceUid, EInfo,
+                                                        R_VPN_MSG_VPN_IAP_DEACT_REAL_IAP_TERMINATED, 2,
+                                                        &iVpnApName, &iRealApName);
+                    }
+                else
+                    {
+                    ret = iEventMediator.ReportLogEvent(sourceUid, EInfo, aMsgId, 1,
+                                                        &iVpnApName);
+                    }
+                }
+            break;
+            
+        case R_VPN_MSG_REAL_IAP_REACTIVATED:
+            if (aStatusCode == KErrNone)
+                {
+                ret = iEventMediator.ReportLogEvent(sourceUid, EInfo, aMsgId, 2,
+                                                    &iRealApName, &iVpnApName);
+                }
+            else
+                {
+                ret = iEventMediator.ReportLogEvent(sourceUid, EError, R_VPN_MSG_REAL_IAP_ACT_FAILED, 3,
+                                                    &iRealApName, &iVpnApName, &statusCodeDes);
+                }
+            break;
+
+        case R_VPN_MSG_VPN_IAP_ACT_START:
+            // NSSM removal
+            break;
+            
+        case R_VPN_MSG_VPN_IAP_ACT_CANCEL:
+            break;
+
+        case R_VPN_MSG_VPN_IAP_ACT_END:
+            break;
+            
+        default:
+            return ret;
+        }
+
+    LOG(Log::Printf(_L("Logged event %d, logging status = %d\n"), aMsgId, ret));
+    return ret;
+    }