Refactor -alertnotify code

Refactor common -alertnotify code into static CAlert::Notify method.
This commit is contained in:
Gavin Andresen 2014-10-07 13:11:48 -04:00
parent 7c6cbff0e5
commit e01a7939d3
No known key found for this signature in database
GPG key ID: 7588242FBE38D3A8
3 changed files with 26 additions and 25 deletions

View file

@ -233,14 +233,25 @@ bool CAlert::ProcessAlert(bool fThread)
if(AppliesToMe()) if(AppliesToMe())
{ {
uiInterface.NotifyAlertChanged(GetHash(), CT_NEW); uiInterface.NotifyAlertChanged(GetHash(), CT_NEW);
std::string strCmd = GetArg("-alertnotify", ""); Notify(strStatusBar, fThread);
if (!strCmd.empty()) }
}
LogPrint("alert", "accepted alert %d, AppliesToMe()=%d\n", nID, AppliesToMe());
return true;
}
void
CAlert::Notify(const std::string& strMessage, bool fThread)
{ {
std::string strCmd = GetArg("-alertnotify", "");
if (strCmd.empty()) return;
// Alert text should be plain ascii coming from a trusted source, but to // Alert text should be plain ascii coming from a trusted source, but to
// be safe we first strip anything not in safeChars, then add single quotes around // be safe we first strip anything not in safeChars, then add single quotes around
// the whole string before passing it to the shell: // the whole string before passing it to the shell:
std::string singleQuote("'"); std::string singleQuote("'");
std::string safeStatus = SanitizeString(strStatusBar); std::string safeStatus = SanitizeString(strMessage);
safeStatus = singleQuote+safeStatus+singleQuote; safeStatus = singleQuote+safeStatus+singleQuote;
boost::replace_all(strCmd, "%s", safeStatus); boost::replace_all(strCmd, "%s", safeStatus);
@ -249,9 +260,3 @@ bool CAlert::ProcessAlert(bool fThread)
else else
runCommand(strCmd); runCommand(strCmd);
} }
}
}
LogPrint("alert", "accepted alert %d, AppliesToMe()=%d\n", nID, AppliesToMe());
return true;
}

View file

@ -101,7 +101,8 @@ public:
bool AppliesToMe() const; bool AppliesToMe() const;
bool RelayTo(CNode* pnode) const; bool RelayTo(CNode* pnode) const;
bool CheckSignature() const; bool CheckSignature() const;
bool ProcessAlert(bool fThread = true); bool ProcessAlert(bool fThread = true); // fThread means run -alertnotify in a free-running thread
static void Notify(const std::string& strMessage, bool fThread);
/* /*
* Get copy of (active) alert object by hash. Returns a null alert if it is not found. * Get copy of (active) alert object by hash. Returns a null alert if it is not found.

View file

@ -1177,15 +1177,10 @@ void CheckForkWarningConditions()
if (pindexBestForkTip || (pindexBestInvalid && pindexBestInvalid->nChainWork > chainActive.Tip()->nChainWork + (chainActive.Tip()->GetBlockWork() * 6))) if (pindexBestForkTip || (pindexBestInvalid && pindexBestInvalid->nChainWork > chainActive.Tip()->nChainWork + (chainActive.Tip()->GetBlockWork() * 6)))
{ {
if (!fLargeWorkForkFound) if (!fLargeWorkForkFound)
{
std::string strCmd = GetArg("-alertnotify", "");
if (!strCmd.empty())
{ {
std::string warning = std::string("'Warning: Large-work fork detected, forking after block ") + std::string warning = std::string("'Warning: Large-work fork detected, forking after block ") +
pindexBestForkBase->phashBlock->ToString() + std::string("'"); pindexBestForkBase->phashBlock->ToString() + std::string("'");
boost::replace_all(strCmd, "%s", warning); CAlert::Notify(warning, true);
boost::thread t(runCommand, strCmd); // thread runs free
}
} }
if (pindexBestForkTip) if (pindexBestForkTip)
{ {