/* * Copyright 2011, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: * Oliver Tappe */ #include #include #include namespace BPackageKit { namespace BPrivate { ValidateChecksumJob::ValidateChecksumJob(const BContext& context, const BString& title, ChecksumAccessor* expectedChecksumAccessor, ChecksumAccessor* realChecksumAccessor, bool failIfChecksumsDontMatch) : inherited(context, title), fExpectedChecksumAccessor(expectedChecksumAccessor), fRealChecksumAccessor(realChecksumAccessor), fFailIfChecksumsDontMatch(failIfChecksumsDontMatch), fChecksumsMatch(false) { } ValidateChecksumJob::~ValidateChecksumJob() { delete fRealChecksumAccessor; delete fExpectedChecksumAccessor; } status_t ValidateChecksumJob::Execute() { if (fExpectedChecksumAccessor == NULL || fRealChecksumAccessor == NULL) return B_BAD_VALUE; BString expectedChecksum; BString realChecksum; status_t result = fExpectedChecksumAccessor->GetChecksum(expectedChecksum); if (result != B_OK) return result; result = fRealChecksumAccessor->GetChecksum(realChecksum); if (result != B_OK) return result; fChecksumsMatch = expectedChecksum.ICompare(realChecksum) == 0; if (fFailIfChecksumsDontMatch && !fChecksumsMatch) { BString error = BString("Checksum error:\n") << "expected '" << expectedChecksum << "'\n" << "got '" << realChecksum << "'"; SetErrorString(error); return B_BAD_DATA; } return B_OK; } bool ValidateChecksumJob::ChecksumsMatch() const { return fChecksumsMatch; } } // namespace BPrivate } // namespace BPackageKit