diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/src/ncdreportinstall.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/src/ncdreportinstall.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,318 @@ +/* +* Copyright (c) 2007-2008 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: CNcdReportInstall implementation +* +*/ + + +#include "ncdreportinstall.h" + +#include "ncdreportmanager.h" +#include "catalogsdebug.h" +#include "ncdpanics.h" +#include "ncdnodeidentifier.h" +#include "catalogsutils.h" +#include "catalogsconstants.h" +#include "ncdrequestinstallation.h" +#include "ncdprotocol.h" +#include "catalogshttpoperation.h" +#include "catalogshttpconfig.h" +#include "ncdrequestgenerator.h" +#include "ncdproviderutils.h" +#include "ncdgeneralmanager.h" + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +CNcdReportInstall* CNcdReportInstall::NewLC( + CNcdReportManager& aReportManager, + const TDesC& aContentIdentifier, + const CNcdNodeIdentifier& aMetadataId, + const TNcdReportStatusInfo& aStatus, + const TDesC& aReportUri, + const TDesC& aReportNamespace ) + { + CNcdReportInstall* self = new( ELeave ) CNcdReportInstall( + aStatus, aReportManager ); + CleanupStack::PushL( self ); + self->ConstructL( + aContentIdentifier, + aMetadataId, + aReportUri, + aReportNamespace ); + return self; + } + + +// --------------------------------------------------------------------------- +// Create new CNcdReportInstall from the given stream +// --------------------------------------------------------------------------- +CNcdReportInstall* CNcdReportInstall::NewLC( + CNcdReportManager& aReportManager, + RReadStream& aStream ) + { + TNcdReportStatusInfo tmpStatus; + CNcdReportInstall* self = new( ELeave ) CNcdReportInstall( + tmpStatus, aReportManager ); + CleanupStack::PushL( self ); + self->InternalizeL( aStream ); + return self; + } + + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +CNcdReportInstall::~CNcdReportInstall() + { + DLTRACEIN(("")); + } + + +// --------------------------------------------------------------------------- +// Overridden SetStatus +// --------------------------------------------------------------------------- +TInt CNcdReportInstall::SetStatus( const TNcdReportStatusInfo& aStatus ) + { + DLTRACEIN(("")); + TInt err( CNcdReport::SetStatus( aStatus ) ); + + DLTRACEOUT(("err: %d", err)); + return err; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +TBool CNcdReportInstall::CanBundle() const + { + return ETrue; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +void CNcdReportInstall::AddReportDataL( + CNcdRequestInstallation& aRequest ) const + { + DLTRACEIN(("")); + aRequest.AddInstallDetailsL( + MetadataId().NodeId(), + // convert status to actual status code + ReportStatusToInstallReportStatus( Status() ) ); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +TBool CNcdReportInstall::IsSendable() const + { + DLTRACEIN(("")); + TInt value = ReportStatusToInstallReportStatus( Status() ); + + // Can send if status code is good and it's not being sent already. + // Notice, that for now same constants are used here as in download report. + return value != KNcdDownloadReportNotSupported && + !ReportTransaction() && + Attributes().AttributeInt32( + ENcdReportAttributeSendable ); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +TBool CNcdReportInstall::CanBeRemoved() const + { + DLTRACEIN(("")); + return Status().iStatus >= ENcdReportCancel && + Status().iStatus == Attributes().AttributeInt32( + ENcdReportAttributeLatestSentReport ); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +HBufC8* CNcdReportInstall::CreateReportL() const + { + DLTRACEIN(("")); + CNcdRequestInstallation* report = + NcdRequestGenerator::CreateInstallationReportRequestLC(); + + report->SetNamespaceL( Attributes().AttributeString16( + ENcdReportAttributeReportNamespace ) ); + + AddReportDataL( *report ); + + HBufC8* data = + ReportManager().GeneralManager().ProtocolManager().ProcessPreminetRequestL( + ReportManager().Context(), + *report, + Attributes().AttributeString16( + ENcdReportAttributeReportUri ), + ETrue ); + + + CleanupStack::PopAndDestroy( report ); + return data; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +void CNcdReportInstall::UpdateTransactionConfigL( + MCatalogsHttpOperation& aTransaction ) + { + DLTRACEIN(("")); + aTransaction.Config().SetConnectionMethod( ConnectionMethod() ); + aTransaction.Config().SetPriority( ECatalogsPriorityLow ); + aTransaction.SetContentTypeL( KMimeTypeXml ); + } + + +// --------------------------------------------------------------------------- +// Returns ETrue if the status cannot change anymore +// --------------------------------------------------------------------------- +TBool CNcdReportInstall::StatusIsFinal() const + { + DLTRACEIN(("")); + return IsOneOf( + Status().iStatus, + ENcdReportCancel, + ENcdReportFail, + ENcdReportSuccess ); + } + + +// --------------------------------------------------------------------------- +// PRIVATE METHODS +// --------------------------------------------------------------------------- + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +CNcdReportInstall::CNcdReportInstall( + const TNcdReportStatusInfo& aStatus, + CNcdReportManager& aReportManager ) + : CNcdReport( ENcdReportInstall, aReportManager, aStatus ) + { + } + + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +void CNcdReportInstall::ConstructL( + const TDesC& aContentIdentifier, + const CNcdNodeIdentifier& aMetadataId, + const TDesC& aReportUri, + const TDesC& aReportNamespace ) + { + DLTRACEIN(("")); + BaseConstructL( aMetadataId ); + + if ( !aReportUri.Length() || + !aReportNamespace.Length() ) + { + DLERROR(("Either URI, report URI or report namespace is empty")); + User::Leave( KErrArgument ); + } + + Attributes().SetAttributeL( + ENcdReportAttributeGenericId, + aContentIdentifier ); + + Attributes().SetAttributeL( + ENcdReportAttributeReportUri, + aReportUri ); + + Attributes().SetAttributeL( + ENcdReportAttributeReportNamespace, + aReportNamespace ); + + DLTRACEOUT(("")); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +TInt CNcdReportInstall::ReportStatusToInstallReportStatus( + const TNcdReportStatusInfo& aStatus ) const + { + DLTRACEIN(( "aStatus: %d", aStatus.iStatus )); + + TInt status = 0; + + if ( ReportManager().ReportingStyle() + == MNcdServerReportManager::EReportingStyleS60 ) + { + // Return the S60 error code. + status = aStatus.iErrorCode; + } + else + { + // For now, use the same values as with the download. + // If these are defined more accurately, then change them. + switch ( aStatus.iStatus ) + { + case ENcdReportCancel: + { + status = KNcdDownloadReportCancel; + break; + } + + case ENcdReportFail: + { + status = KNcdDownloadReportFail; + break; + } + + case ENcdReportSuccess: + { + status = KNcdDownloadReportSuccess; + break; + } + + // Unsupported cases + case ENcdReportNone: + case ENcdReportCreate: + case ENcdReportStart: + case ENcdReportPause: + case ENcdReportResume: + { + DLTRACE(("Status not supported for install reporting")); + status = KNcdDownloadReportNotSupported; + break; + } + + default: + { + NCD_ASSERT_ALWAYS( 0, ENcdPanicIndexOutOfRange ); + break; + } + } + } + + DLTRACEOUT(("Install report status: %d", status)); + return status; + }