// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef GARNET_BIN_CRASHPAD_REPORT_ATTACHMENTS_H_
#define GARNET_BIN_CRASHPAD_REPORT_ATTACHMENTS_H_

#include <map>
#include <memory>
#include <string>

#include <fuchsia/crash/cpp/fidl.h>
#include <fuchsia/mem/cpp/fidl.h>
#include <sys/types.h>
#include <third_party/crashpad/client/crash_report_database.h>

#include "scoped_unlink.h"

namespace fuchsia {
namespace crash {

// Returns the set of file attachments we want in a crash report for native
// exceptions.
//
// |tmp_dir| is used to locally store the attachments until upload to the remote
// crash server.
std::map<std::string, ScopedUnlink> MakeNativeExceptionAttachments(
    const std::string& tmp_dir);

// Adds the set of file attachments we want in a crash report for managed
// runtime exceptions for the given |language| to the |report|.
//
// Today, we only attach the |stack_trace| VMO as a text file attachment.
zx_status_t AddManagedRuntimeExceptionAttachments(
    crashpad::CrashReportDatabase::NewReport* report,
    ManagedRuntimeLanguage language, fuchsia::mem::Buffer stack_trace);

// Adds the set of file attachments we want in a crash report for kernel
// panics to the |report|.
//
// Today, we only attach the |crashlog| VMO as a text file attachment.
zx_status_t AddKernelPanicAttachments(
    crashpad::CrashReportDatabase::NewReport* report,
    fuchsia::mem::Buffer crashlog);

}  // namespace crash
}  // namespace fuchsia

#endif  // GARNET_BIN_CRASHPAD_REPORT_ATTACHMENTS_H_
