[Lldb-commits] [lldb] [lldb-dap] Refactoring IOStream into Transport handler. (PR #130026)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Wed Mar 12 09:40:35 PDT 2025
================
@@ -221,52 +222,22 @@ void DAP::StopEventHandlers() {
}
}
-// Send the JSON in "json_str" to the "out" stream. Correctly send the
-// "Content-Length:" field followed by the length, followed by the raw
-// JSON bytes.
-void DAP::SendJSON(const std::string &json_str) {
- output.write_full("Content-Length: ");
- output.write_full(llvm::utostr(json_str.size()));
- output.write_full("\r\n\r\n");
- output.write_full(json_str);
-}
-
// Serialize the JSON value into a string and send the JSON packet to
// the "out" stream.
void DAP::SendJSON(const llvm::json::Value &json) {
- std::string json_str;
- llvm::raw_string_ostream strm(json_str);
- strm << json;
- static std::mutex mutex;
- std::lock_guard<std::mutex> locker(mutex);
- SendJSON(json_str);
-
- DAP_LOG(log, "({0}) <-- {1}", client_name, json_str);
-}
-
-// Read a JSON packet from the "in" stream.
-std::string DAP::ReadJSON() {
- std::string length_str;
- std::string json_str;
- int length;
-
- if (!input.read_expected(log, "Content-Length: "))
- return json_str;
-
- if (!input.read_line(log, length_str))
- return json_str;
-
- if (!llvm::to_integer(length_str, length))
- return json_str;
-
- if (!input.read_expected(log, "\r\n"))
- return json_str;
-
- if (!input.read_full(log, length, json_str))
- return json_str;
-
- DAP_LOG(log, "({0}) --> {1}", client_name, json_str);
- return json_str;
+ // FIXME: Instead of parsing the output message from JSON, pass the `Message`
+ // as parameter to `SendJSON`.
+ protocol::Message message;
+ llvm::json::Path::Root root;
+ if (!fromJSON(json, message, root)) {
+ DAP_LOG_ERROR(log, root.getError(), "({1}) encoding failed: {0}",
+ client_name);
+ return;
+ }
+ auto err = transport.Write(message);
+ if (err) {
+ DAP_LOG_ERROR(log, std::move(err), "({1}) write failed: {0}", client_name);
+ }
----------------
JDevlieghere wrote:
Nit: the type of `err` is not obvious from the RHS so I don't think `auto` is appropriate. Also no braces for single line `if`s:
```suggestion
if (llvm::Error err = transport.Write(message))
DAP_LOG_ERROR(log, std::move(err), "({1}) write failed: {0}", client_name);
```
https://github.com/llvm/llvm-project/pull/130026
More information about the lldb-commits
mailing list