//
// Copyright (C) 2012 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#include "update_engine/filesystem_verifier_action.h"

#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>

#include <algorithm>
#include <cstdlib>
#include <string>

#include <base/bind.h>
#include <chromeos/streams/file_stream.h>

#include "update_engine/boot_control_interface.h"
#include "update_engine/payload_constants.h"
#include "update_engine/system_state.h"
#include "update_engine/utils.h"

using std::string;

namespace chromeos_update_engine {

namespace {
const off_t kReadFileBufferSize = 128 * 1024;
}  // namespace

string PartitionTypeToString(const PartitionType partition_type) {
  // TODO(deymo): The PartitionType class should be replaced with just the
  // string name that comes from the payload. This function should be deleted
  // then.
  switch (partition_type) {
    case PartitionType::kRootfs:
    case PartitionType::kSourceRootfs:
      return kLegacyPartitionNameRoot;
    case PartitionType::kKernel:
    case PartitionType::kSourceKernel:
      return kLegacyPartitionNameKernel;
  }
  return "<unknown>";
}

FilesystemVerifierAction::FilesystemVerifierAction(
    SystemState* system_state,
    PartitionType partition_type)
    : partition_type_(partition_type),
      remaining_size_(kint64max),
      system_state_(system_state) {}

void FilesystemVerifierAction::PerformAction() {
  // Will tell the ActionProcessor we've failed if we return.
  ScopedActionCompleter abort_action_completer(processor_, this);

  if (!HasInputObject()) {
    LOG(ERROR) << "FilesystemVerifierAction missing input object.";
    return;
  }
  install_plan_ = GetInputObject();

  if (install_plan_.is_full_update &&
      (partition_type_ == PartitionType::kSourceRootfs ||
       partition_type_ == PartitionType::kSourceKernel)) {
    // No hash verification needed. Done!
    LOG(INFO) << "filesystem verifying skipped on full update.";
    if (HasOutputPipe())
      SetOutputObject(install_plan_);
    abort_action_completer.set_code(ErrorCode::kSuccess);
    return;
  }

  string target_path;
  string partition_name = PartitionTypeToString(partition_type_);
  switch (partition_type_) {
    case PartitionType::kRootfs:
      target_path = install_plan_.install_path;
      if (target_path.empty()) {
        system_state_->boot_control()->GetPartitionDevice(
            partition_name, install_plan_.target_slot, &target_path);
      }
      break;
    case PartitionType::kKernel:
      target_path = install_plan_.kernel_install_path;
      if (target_path.empty()) {
        system_state_->boot_control()->GetPartitionDevice(
            partition_name, install_plan_.target_slot, &target_path);
      }
      break;
    case PartitionType::kSourceRootfs:
      target_path = install_plan_.source_path;
      if (target_path.empty()) {
        system_state_->boot_control()->GetPartitionDevice(
            partition_name, install_plan_.source_slot, &target_path);
      }
      break;
    case PartitionType::kSourceKernel:
      target_path = install_plan_.kernel_source_path;
      if (target_path.empty()) {
        system_state_->boot_control()->GetPartitionDevice(
            partition_name, install_plan_.source_slot, &target_path);
      }
      break;
  }

  chromeos::ErrorPtr error;
  src_stream_ = chromeos::FileStream::Open(
      base::FilePath(target_path),
      chromeos::Stream::AccessMode::READ,
      chromeos::FileStream::Disposition::OPEN_EXISTING,
      &error);

  if (!src_stream_) {
    LOG(ERROR) << "Unable to open " << target_path << " for reading";
    return;
  }

  DetermineFilesystemSize(target_path);
  buffer_.resize(kReadFileBufferSize);

  // Start the first read.
  ScheduleRead();

  abort_action_completer.set_should_complete(false);
}

void FilesystemVerifierAction::TerminateProcessing() {
  cancelled_ = true;
  Cleanup(ErrorCode::kSuccess);  // error code is ignored if canceled_ is true.
}

bool FilesystemVerifierAction::IsCleanupPending() const {
  return src_stream_ != nullptr;
}

void FilesystemVerifierAction::Cleanup(ErrorCode code) {
  src_stream_.reset();
  // This memory is not used anymore.
  buffer_.clear();

  if (cancelled_)
    return;
  if (code == ErrorCode::kSuccess && HasOutputPipe())
    SetOutputObject(install_plan_);
  processor_->ActionComplete(this, code);
}

void FilesystemVerifierAction::ScheduleRead() {
  size_t bytes_to_read = std::min(static_cast<int64_t>(buffer_.size()),
                                  remaining_size_);
  if (!bytes_to_read) {
    OnReadDoneCallback(0);
    return;
  }

  bool read_async_ok = src_stream_->ReadAsync(
    buffer_.data(),
    bytes_to_read,
    base::Bind(&FilesystemVerifierAction::OnReadDoneCallback,
               base::Unretained(this)),
    base::Bind(&FilesystemVerifierAction::OnReadErrorCallback,
               base::Unretained(this)),
    nullptr);

  if (!read_async_ok) {
    LOG(ERROR) << "Unable to schedule an asynchronous read from the stream.";
    Cleanup(ErrorCode::kError);
  }
}

void FilesystemVerifierAction::OnReadDoneCallback(size_t bytes_read) {
  if (bytes_read == 0) {
    read_done_ = true;
  } else {
    remaining_size_ -= bytes_read;
    CHECK(!read_done_);
    if (!hasher_.Update(buffer_.data(), bytes_read)) {
      LOG(ERROR) << "Unable to update the hash.";
      Cleanup(ErrorCode::kError);
      return;
    }
  }

  // We either terminate the action or have more data to read.
  if (!CheckTerminationConditions())
    ScheduleRead();
}

void FilesystemVerifierAction::OnReadErrorCallback(
      const chromeos::Error* error) {
  // TODO(deymo): Transform the read-error into an specific ErrorCode.
  LOG(ERROR) << "Asynchronous read failed.";
  Cleanup(ErrorCode::kError);
}

bool FilesystemVerifierAction::CheckTerminationConditions() {
  if (cancelled_) {
    Cleanup(ErrorCode::kError);
    return true;
  }

  if (!read_done_)
    return false;

  // We're done!
  ErrorCode code = ErrorCode::kSuccess;
  if (hasher_.Finalize()) {
    LOG(INFO) << "Hash: " << hasher_.hash();
    switch (partition_type_) {
      case PartitionType::kRootfs:
        if (install_plan_.rootfs_hash != hasher_.raw_hash()) {
          code = ErrorCode::kNewRootfsVerificationError;
          LOG(ERROR) << "New rootfs verification failed.";
        }
        break;
      case PartitionType::kKernel:
        if (install_plan_.kernel_hash != hasher_.raw_hash()) {
          code = ErrorCode::kNewKernelVerificationError;
          LOG(ERROR) << "New kernel verification failed.";
        }
        break;
      case PartitionType::kSourceRootfs:
        install_plan_.source_rootfs_hash = hasher_.raw_hash();
        break;
      case PartitionType::kSourceKernel:
        install_plan_.source_kernel_hash = hasher_.raw_hash();
        break;
    }
  } else {
    LOG(ERROR) << "Unable to finalize the hash.";
    code = ErrorCode::kError;
  }
  Cleanup(code);
  return true;
}

void FilesystemVerifierAction::DetermineFilesystemSize(const string& path) {
  switch (partition_type_) {
    case PartitionType::kRootfs:
      remaining_size_ = install_plan_.rootfs_size;
      LOG(INFO) << "Filesystem size: " << remaining_size_ << " bytes.";
      break;
    case PartitionType::kKernel:
      remaining_size_ = install_plan_.kernel_size;
      LOG(INFO) << "Filesystem size: " << remaining_size_ << " bytes.";
      break;
    case PartitionType::kSourceRootfs:
      {
        int block_count = 0, block_size = 0;
        if (utils::GetFilesystemSize(path, &block_count, &block_size)) {
          remaining_size_ = static_cast<int64_t>(block_count) * block_size;
          LOG(INFO) << "Filesystem size: " << remaining_size_ << " bytes ("
                    << block_count << "x" << block_size << ").";
        }
      }
      break;
    default:
      break;
  }
}

}  // namespace chromeos_update_engine
