blob: d4799ca83a8693df44c84a9c3b7e28b73a1dfb79 [file] [log] [blame]
// 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 SRC_DEVELOPER_DEBUG_DEBUG_AGENT_REMOTE_API_H_
#define SRC_DEVELOPER_DEBUG_DEBUG_AGENT_REMOTE_API_H_
#include "src/developer/debug/ipc/protocol.h"
namespace debug_agent {
// This is an abstract class that implements calls corresponding to the
// client->agent IPC requests.
class RemoteAPI {
public:
RemoteAPI() {}
virtual ~RemoteAPI() {}
virtual void OnHello(const debug_ipc::HelloRequest& request, debug_ipc::HelloReply* reply) = 0;
virtual void OnStatus(const debug_ipc::StatusRequest& request, debug_ipc::StatusReply* reply) = 0;
virtual void OnLaunch(const debug_ipc::LaunchRequest& request, debug_ipc::LaunchReply* reply) = 0;
virtual void OnKill(const debug_ipc::KillRequest& request, debug_ipc::KillReply* reply) = 0;
virtual void OnConfigAgent(const debug_ipc::ConfigAgentRequest& request,
debug_ipc::ConfigAgentReply* reply) = 0;
// Attach is special because it needs to follow the reply immediately with
// a series of notifications about the current threads. This means it
// can't use the automatic reply sending. It must manually deserialize and
// send the reply.
virtual void OnAttach(std::vector<char> serialized) = 0;
// This is an overload with the result of reading |serialized|.
// We have this so it's easier to call a MockRemoteAPI.
virtual void OnAttach(uint32_t transaction_id, const debug_ipc::AttachRequest&) = 0;
virtual void OnDetach(const debug_ipc::DetachRequest& request, debug_ipc::DetachReply* reply) = 0;
virtual void OnModules(const debug_ipc::ModulesRequest& request,
debug_ipc::ModulesReply* reply) = 0;
virtual void OnPause(const debug_ipc::PauseRequest& request, debug_ipc::PauseReply* reply) = 0;
virtual void OnQuitAgent(const debug_ipc::QuitAgentRequest& request,
debug_ipc::QuitAgentReply* reply) = 0;
virtual void OnResume(const debug_ipc::ResumeRequest& request, debug_ipc::ResumeReply* reply) = 0;
virtual void OnProcessTree(const debug_ipc::ProcessTreeRequest& request,
debug_ipc::ProcessTreeReply* reply) = 0;
virtual void OnThreads(const debug_ipc::ThreadsRequest& request,
debug_ipc::ThreadsReply* reply) = 0;
virtual void OnReadMemory(const debug_ipc::ReadMemoryRequest& request,
debug_ipc::ReadMemoryReply* reply) = 0;
virtual void OnReadRegisters(const debug_ipc::ReadRegistersRequest& request,
debug_ipc::ReadRegistersReply* reply) = 0;
virtual void OnWriteRegisters(const debug_ipc::WriteRegistersRequest& request,
debug_ipc::WriteRegistersReply* reply) = 0;
virtual void OnAddOrChangeBreakpoint(const debug_ipc::AddOrChangeBreakpointRequest& request,
debug_ipc::AddOrChangeBreakpointReply* reply) = 0;
virtual void OnRemoveBreakpoint(const debug_ipc::RemoveBreakpointRequest& request,
debug_ipc::RemoveBreakpointReply* reply) = 0;
virtual void OnSysInfo(const debug_ipc::SysInfoRequest& request,
debug_ipc::SysInfoReply* reply) = 0;
virtual void OnProcessStatus(const debug_ipc::ProcessStatusRequest& request,
debug_ipc::ProcessStatusReply* reply) = 0;
virtual void OnThreadStatus(const debug_ipc::ThreadStatusRequest& request,
debug_ipc::ThreadStatusReply* reply) = 0;
virtual void OnAddressSpace(const debug_ipc::AddressSpaceRequest& request,
debug_ipc::AddressSpaceReply* reply) = 0;
virtual void OnJobFilter(const debug_ipc::JobFilterRequest& request,
debug_ipc::JobFilterReply* reply) = 0;
virtual void OnWriteMemory(const debug_ipc::WriteMemoryRequest& request,
debug_ipc::WriteMemoryReply* reply) = 0;
virtual void OnLoadInfoHandleTable(const debug_ipc::LoadInfoHandleTableRequest& request,
debug_ipc::LoadInfoHandleTableReply* reply) = 0;
virtual void OnUpdateGlobalSettings(const debug_ipc::UpdateGlobalSettingsRequest& request,
debug_ipc::UpdateGlobalSettingsReply* reply) = 0;
};
} // namespace debug_agent
#endif // SRC_DEVELOPER_DEBUG_DEBUG_AGENT_REMOTE_API_H_