77// ===----------------------------------------------------------------------===//
88
99#include " DAP.h"
10+ #include " Handler/ResponseHandler.h"
1011#include " JSONUtils.h"
1112#include " LLDBUtils.h"
1213#include " OutputRedirector.h"
3435#include < cstdarg>
3536#include < cstdio>
3637#include < fstream>
38+ #include < memory>
3739#include < mutex>
3840#include < utility>
3941
@@ -769,10 +771,8 @@ bool DAP::HandleObject(const llvm::json::Object &object) {
769771
770772 if (packet_type == " response" ) {
771773 auto id = GetSigned (object, " request_seq" , 0 );
772- ResponseCallback response_handler = [](llvm::Expected<llvm::json::Value>) {
773- llvm::errs () << " Unhandled response\n " ;
774- };
775774
775+ std::unique_ptr<ResponseHandler> response_handler;
776776 {
777777 std::lock_guard<std::mutex> locker (call_mutex);
778778 auto inflight = inflight_reverse_requests.find (id);
@@ -782,19 +782,22 @@ bool DAP::HandleObject(const llvm::json::Object &object) {
782782 }
783783 }
784784
785+ if (!response_handler)
786+ response_handler = std::make_unique<UnknownResponseHandler>(" " , id);
787+
785788 // Result should be given, use null if not.
786789 if (GetBoolean (object, " success" , false )) {
787790 llvm::json::Value Result = nullptr ;
788791 if (auto *B = object.get (" body" )) {
789792 Result = std::move (*B);
790793 }
791- response_handler (Result);
794+ (* response_handler) (Result);
792795 } else {
793796 llvm::StringRef message = GetString (object, " message" );
794797 if (message.empty ()) {
795798 message = " Unknown error, response failed" ;
796799 }
797- response_handler (llvm::createStringError (
800+ (* response_handler) (llvm::createStringError (
798801 std::error_code (-1 , std::generic_category ()), message));
799802 }
800803
@@ -875,24 +878,6 @@ llvm::Error DAP::Loop() {
875878 return llvm::Error::success ();
876879}
877880
878- void DAP::SendReverseRequest (llvm::StringRef command,
879- llvm::json::Value arguments,
880- ResponseCallback callback) {
881- int64_t id;
882- {
883- std::lock_guard<std::mutex> locker (call_mutex);
884- id = ++reverse_request_seq;
885- inflight_reverse_requests.emplace (id, std::move (callback));
886- }
887-
888- SendJSON (llvm::json::Object{
889- {" type" , " request" },
890- {" seq" , id},
891- {" command" , command},
892- {" arguments" , std::move (arguments)},
893- });
894- }
895-
896881lldb::SBError DAP::WaitForProcessToStop (uint32_t seconds) {
897882 lldb::SBError error;
898883 lldb::SBProcess process = target.GetProcess ();
@@ -1007,17 +992,10 @@ bool StartDebuggingRequestHandler::DoExecute(
1007992 return false ;
1008993 }
1009994
1010- dap.SendReverseRequest (
995+ dap.SendReverseRequest <LogFailureResponseHandler> (
1011996 " startDebugging" ,
1012997 llvm::json::Object{{" request" , request},
1013- {" configuration" , std::move (*configuration)}},
1014- [](llvm::Expected<llvm::json::Value> value) {
1015- if (!value) {
1016- llvm::Error err = value.takeError ();
1017- llvm::errs () << " reverse start debugging request failed: "
1018- << llvm::toString (std::move (err)) << " \n " ;
1019- }
1020- });
998+ {" configuration" , std::move (*configuration)}});
1021999
10221000 result.SetStatus (lldb::eReturnStatusSuccessFinishNoResult);
10231001
0 commit comments