summaryrefslogtreecommitdiffstats
path: root/src/Daemon/MiddleWare.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Daemon/MiddleWare.cpp')
-rw-r--r--src/Daemon/MiddleWare.cpp45
1 files changed, 35 insertions, 10 deletions
diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp
index 25fe253..70527eb 100644
--- a/src/Daemon/MiddleWare.cpp
+++ b/src/Daemon/MiddleWare.cpp
@@ -204,7 +204,11 @@ static void DebugDumpToCrashReport(const char *pDebugDumpDir, map_crash_report_t
static std::string GetLocalUUID(const char *pAnalyzer, const char *pDebugDumpDir)
{
CAnalyzer* analyzer = g_pPluginManager->GetAnalyzer(pAnalyzer);
- return analyzer->GetLocalUUID(pDebugDumpDir);
+ if (analyzer)
+ {
+ return analyzer->GetLocalUUID(pDebugDumpDir);
+ }
+ throw CABRTException(EXCEP_PLUGIN, "Error running '%s'", pAnalyzer);
}
/**
@@ -217,7 +221,11 @@ static std::string GetGlobalUUID(const char *pAnalyzer,
const char *pDebugDumpDir)
{
CAnalyzer* analyzer = g_pPluginManager->GetAnalyzer(pAnalyzer);
- return analyzer->GetGlobalUUID(pDebugDumpDir);
+ if (analyzer)
+ {
+ return analyzer->GetGlobalUUID(pDebugDumpDir);
+ }
+ throw CABRTException(EXCEP_PLUGIN, "Error running '%s'", pAnalyzer);
}
/**
@@ -232,7 +240,11 @@ static void CreateReport(const char *pAnalyzer,
int force)
{
CAnalyzer* analyzer = g_pPluginManager->GetAnalyzer(pAnalyzer);
- analyzer->CreateReport(pDebugDumpDir, force);
+ if (analyzer)
+ {
+ analyzer->CreateReport(pDebugDumpDir, force);
+ }
+ /* else: GetAnalyzer() already complained, no need to handle it here */
}
mw_result_t CreateCrashReport(const char *pUUID,
@@ -320,9 +332,14 @@ void RunAction(const char *pActionDir,
const char *pPluginName,
const char *pPluginArgs)
{
+ CAction* action = g_pPluginManager->GetAction(pPluginName);
+ if (!action)
+ {
+ /* GetAction() already complained */
+ return;
+ }
try
{
- CAction* action = g_pPluginManager->GetAction(pPluginName);
action->Run(pActionDir, pPluginArgs);
}
catch (CABRTException& e)
@@ -500,7 +517,9 @@ report_status_t Report(const map_crash_report_t& pCrashReport,
#endif
ret[plugin_name].push_back("1"); // REPORT_STATUS_IDX_FLAG
ret[plugin_name].push_back(res); // REPORT_STATUS_IDX_MSG
- message += res + "\n";
+ if (message != "")
+ message += "; ";
+ message += res;
}
}
catch (CABRTException& e)
@@ -531,6 +550,8 @@ report_status_t Report(const map_crash_report_t& pCrashReport,
static bool IsDebugDumpSaved(const char *pUID,
const char *pDebugDumpDir)
{
+ /* TODO: use database query instead of dumping all rows and searching in them */
+
CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str());
database->Connect();
vector_database_rows_t rows = database->GetUIDData(pUID);
@@ -770,13 +791,17 @@ static void RunAnalyzerActions(const char *pAnalyzer, const char *pDebugDumpDir)
for (; it_a != analyzer->second.end(); it_a++)
{
const char *plugin_name = it_a->first.c_str();
+ CAction* action = g_pPluginManager->GetAction(plugin_name, /*silent:*/ true);
+ if (!action)
+ {
+ /* GetAction() already complained if no such plugin.
+ * If plugin exists but isn't an Action, it's not an error.
+ */
+ continue;
+ }
try
{
- if (g_pPluginManager->GetPluginType(plugin_name) == ACTION)
- {
- CAction* action = g_pPluginManager->GetAction(plugin_name);
- action->Run(pDebugDumpDir, it_a->second.c_str());
- }
+ action->Run(pDebugDumpDir, it_a->second.c_str());
}
catch (CABRTException& e)
{