diff options
| author | Brian Potchik <brian@vector35.com> | 2025-03-10 15:27:53 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2025-03-10 15:27:53 -0400 |
| commit | f5ff6f5dd53dd4f812bffebbed8484655bcbc48c (patch) | |
| tree | 834c931999aad6b1f7857a4fb62f390cab95316f /workflow.cpp | |
| parent | 6a8a2d5f719506ffea5e4779b28924b211516671 (diff) | |
Add support for recoverable analysis abort.
Diffstat (limited to 'workflow.cpp')
| -rw-r--r-- | workflow.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/workflow.cpp b/workflow.cpp index 3e43707e..63066baa 100644 --- a/workflow.cpp +++ b/workflow.cpp @@ -122,6 +122,54 @@ WorkflowMachine::WorkflowMachine(Ref<Function> function): m_function(function) } +bool WorkflowMachine::Enable() +{ + rapidjson::Document request(rapidjson::kObjectType); + rapidjson::Document::AllocatorType& allocator = request.GetAllocator(); + request.AddMember("command", "enable", allocator); + rapidjson::StringBuffer buffer; + rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); + request.Accept(writer); + + string jsonResult; + if (m_function) + jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString()); + else + jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString()); + + rapidjson::Document response(rapidjson::kObjectType); + response.Parse(jsonResult.c_str()); + if (response.HasMember("commandStatus") && response["commandStatus"].HasMember("accepted")) + return response["commandStatus"]["accepted"].GetBool(); + + return false; +} + + +bool WorkflowMachine::Disable() +{ + rapidjson::Document request(rapidjson::kObjectType); + rapidjson::Document::AllocatorType& allocator = request.GetAllocator(); + request.AddMember("command", "disable", allocator); + rapidjson::StringBuffer buffer; + rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); + request.Accept(writer); + + string jsonResult; + if (m_function) + jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString()); + else + jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString()); + + rapidjson::Document response(rapidjson::kObjectType); + response.Parse(jsonResult.c_str()); + if (response.HasMember("commandStatus") && response["commandStatus"].HasMember("accepted")) + return response["commandStatus"]["accepted"].GetBool(); + + return false; +} + + std::optional<bool> WorkflowMachine::QueryOverride(const string& activity) { rapidjson::Document request(rapidjson::kObjectType); |
