diff -r 000000000000 -r 33413c0669b9 vpnengine/vpnmanager/src/eventlogger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/vpnmanager/src/eventlogger.cpp Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,233 @@ +/* +* 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: Event logging. +* +*/ + +#include + +#include "vpnmanagerserverdefs.h" +#include "eventlogger.h" +#include "log_r6.h" +#include "vpnapiservant.h" +#include "policystore.h" +#include "pkiutil.h" +#include "eventviewer.h" + +_LIT(KUnknownPolicy, "unknown"); +_LIT8(KUnknownVpnAp, "unknown"); +_LIT8(KUnknownIap, "unknown"); + + +CEventLogger* CEventLogger::NewL(CPolicyStore& aPolicyStore) + { + CEventLogger* self = new (ELeave) CEventLogger(aPolicyStore); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +CEventLogger::CEventLogger(CPolicyStore& aPolicyStore) + : iPolicyStore(aPolicyStore) + { + } + +void CEventLogger::ConstructL() + { + User::LeaveIfError(iEventMediator.Connect()); + } + +CEventLogger::~CEventLogger() + { + iEventMediator.Close(); + } + +void CEventLogger::LogEvent(TUint aMsgId, const TDesC* aDes1, const TDesC8* aDes2, TInt aInt1, TInt aInt2) + { + //Logging is an error diagnostic tool. + //If the logging fails. There is much we can do. So we just ignore the error. + TRAP_IGNORE(LogEventL(aMsgId, aDes1, aDes2, aInt1, aInt2)); + } + + +void CEventLogger::LogEventL(TUint aMsgId, const TDesC* aDes1, const TDesC8* aDes2, TInt aInt1, TInt aInt2) + { + TVpnPolicyInfo* policyInfo = new (ELeave) TVpnPolicyInfo; + CleanupDeletePushL(policyInfo); + + + // Special handling for event messages that have policy name in them + __ASSERT_DEBUG((aMsgId == R_VPN_MSG_INSTALLED_POLICY_SERVER || + aMsgId == R_VPN_MSG_INSTALLED_POLICY_FILE || + aMsgId == R_VPN_MSG_POLICY_INSTALL_FAIL || + aMsgId == R_VPN_MSG_CREATED_VPN_ACCESS_POINT_WITH_AP || + aMsgId == R_VPN_MSG_CREATED_VPN_ACCESS_POINT_WITH_SNAP), User::Invariant()); + + // Descriptor parameter 1 is a policy ID + if (aDes1 && aDes1->Length() > 0) + { + if (iPolicyStore.GetPolicyInfo(*aDes1, *policyInfo) != KErrNone) + { + // ...use the policy ID as the name + policyInfo->iName = *aDes1; + } + } + else + { + // Completely unknown policy reference + policyInfo->iName = KUnknownPolicy; + } + + // Make a 8 bit copy of the policy name + HBufC8* nameCopy = CnvUtfConverter::ConvertFromUnicodeToUtf8L(policyInfo->iName); + + LogEvent(aMsgId, nameCopy, aDes2, aInt1, aInt2); + + delete nameCopy; + nameCopy = NULL; + + CleanupStack::PopAndDestroy(); //policyInfo + } + +void CEventLogger::LogEvent(TUint aMsgId, const TDesC8* aDes1, const TDesC8* aDes2, TInt aInt1, TInt aInt2) + { + TPckgBuf int1Des(aInt1); + + TUid sourceUid = (TUid)(KVpnManagerUid3); + + TIapName vpnApName(KUnknownVpnAp); + TIapName realConnectionName(KUnknownIap); + + switch (aMsgId) + { + case R_VPN_MSG_CREATED_VPN_ACCESS_POINT_WITH_AP: + EventViewer::GetIapNames(aInt1, vpnApName, aInt2, realConnectionName); + + //The return value is ignored + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_CREATED_VPN_ACCESS_POINT_WITH_AP, + 3, &vpnApName, aDes1, &realConnectionName); + break; + case R_VPN_MSG_CREATED_VPN_ACCESS_POINT_WITH_SNAP: + EventViewer::GetIapName(aInt1, vpnApName); + EventViewer::GetSnapName(aInt2, realConnectionName); + + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_CREATED_VPN_ACCESS_POINT_WITH_SNAP, + 3, &vpnApName, aDes1, &realConnectionName); + + break; + case R_VPN_MSG_INSTALLED_ENROLLMENT_SERVICE: + if (aInt1) // if update... + { + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_UPDATED_ENROLLMENT_SERVICE, + 2, aDes1, aDes2); + } + else // install + { + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_INSTALLED_ENROLLMENT_SERVICE, + 2, aDes1, aDes2); + } + break; + + case R_VPN_MSG_DELETED_ENROLLMENT_SERVICE: + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_DELETED_ENROLLMENT_SERVICE, + 1, aDes1); + break; + + case R_VPN_MSG_INSTALLED_POLICY_SERVER: + LOG(Log::Printf(_L("Logging event R_VPN_MSG_INSTALLED_POLICY_SERVER, aInt2 = %d\n"), aInt2)); + if (aInt2) // if update... + { + if (aInt1 == KErrNone) + { + LOG(Log::Printf(_L("Logging event R_VPN_MSG_UPDATED_POLICY\n"))); + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_UPDATED_POLICY, + 2, aDes1, aDes2); + } + else + { + LOG(Log::Printf(_L("Logging event R_VPN_MSG_POLICY_UPDATE_FAIL\n"))); + iEventMediator.ReportLogEvent(sourceUid, EError, + R_VPN_MSG_POLICY_UPDATE_FAIL, + 2, aDes1, &int1Des); + } + } + else // install + { + if (aInt1 == KErrNone) + { + LOG(Log::Printf(_L("Logging event R_VPN_MSG_INSTALLED_POLICY_SERVER\n"))); + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_INSTALLED_POLICY_SERVER, + 2, aDes1, aDes2); + } + else + { + LOG(Log::Printf(_L("Logging event R_VPN_MSG_POLICY_INSTALL_FAIL\n"))); + iEventMediator.ReportLogEvent(sourceUid, EError, + R_VPN_MSG_POLICY_INSTALL_FAIL, + 2, aDes1, &int1Des); + } + } + break; + + case R_VPN_MSG_INSTALLED_POLICY_FILE: + if (!aInt2) // if installation from file (to avoid event logging when installed from server) + { + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_INSTALLED_POLICY_FILE, + 1, aDes1); + } + break; + + case R_VPN_MSG_POLICY_INSTALL_FAIL: + if (!aInt2) // if installation from file (failure in installation from server was covered above) + { + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_POLICY_INSTALL_FAIL, + 2, aDes1, &int1Des); + } + break; + + case R_VPN_MSG_DELETED_POLICY: + iEventMediator.ReportLogEvent(sourceUid, EInfo, + R_VPN_MSG_DELETED_POLICY, + 1, aDes1); + break; + + default: + return; + } + + LOG(Log::Printf(_L("Logged event %d\n"), aMsgId)); + } + +HBufC8* CEventLogger::CertSubjectNameL(const TDesC8& aCertData) + { + HBufC* certSubjectName = PkiUtil::CertSubjectNameL(aCertData); + CleanupStack::PushL(certSubjectName); + + HBufC8* certSubjectName8 = HBufC8::NewL(certSubjectName->Length()); + certSubjectName8->Des().Copy(*certSubjectName); + + CleanupStack::PopAndDestroy(); // certSubjectName + + return certSubjectName8; + }