| // 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_LOCAL_STREAM_BACKEND_H_ | |
| #define SRC_DEVELOPER_DEBUG_DEBUG_AGENT_LOCAL_STREAM_BACKEND_H_ | |
| #include "src/developer/debug/debug_agent/debug_agent.h" | |
| #include "src/developer/debug/ipc/protocol.h" | |
| #include "src/developer/debug/shared/message_loop.h" | |
| #include "src/developer/debug/shared/stream_buffer.h" | |
| namespace debug_ipc { | |
| class MessageReader; | |
| } // namespace debug_ipc | |
| namespace debug_agent { | |
| // This class is meant to receive the raw messages outputted by the debug agent. | |
| // The agent's stream calls this backend to output the data and verifies that | |
| // all the content is sent. | |
| // | |
| // We use this class to intercept the messages sent back from the agent and | |
| // react accordingly. This class is somwhat geared towards tests, mainly in the sense that | |
| // notification handlers are needed as they're needed. | |
| class LocalStreamBackend : public debug_ipc::StreamBuffer::Writer { | |
| public: | |
| LocalStreamBackend(); | |
| virtual ~LocalStreamBackend(); | |
| // Message dispatcher interface. | |
| // This should be overriden by every test interested in a particular set of | |
| // messages. By default they do nothing. | |
| virtual void HandleAttach(debug_ipc::AttachReply) {} | |
| virtual void HandleNotifyException(debug_ipc::NotifyException) {} | |
| virtual void HandleNotifyIO(debug_ipc::NotifyIO) {} | |
| virtual void HandleNotifyModules(debug_ipc::NotifyModules) {} | |
| virtual void HandleNotifyProcessExiting(debug_ipc::NotifyProcessExiting) {} | |
| virtual void HandleNotifyProcessStarting(debug_ipc::NotifyProcessStarting) {} | |
| virtual void HandleNotifyThreadExiting(debug_ipc::NotifyThread) {} | |
| virtual void HandleNotifyThreadStarting(debug_ipc::NotifyThread) {} | |
| // The stream will call this function to send the data to whatever backend it | |
| // is connected to. It returns how much of the input message it could actually | |
| // write. For this tests purposes, we always read the whole message. | |
| size_t ConsumeStreamBufferData(const char* data, size_t len) override; | |
| debug_ipc::StreamBuffer& stream() { return stream_; } | |
| private: | |
| // This is the stream the debug agent will be given to write to. | |
| debug_ipc::StreamBuffer stream_; | |
| }; | |
| } // namespace debug_agent | |
| #endif // SRC_DEVELOPER_DEBUG_DEBUG_AGENT_LOCAL_STREAM_BACKEND_H_ |