Previously we had both nVersion as a class parameter *and* a serialization argument, and in several inherited serializers the latter was set to the former, in order to pass the serialized object's version into underlying parsers. #3180 pulled in the upstream changes to clean this up, and in doing so these lines became no-ops - setting the class parameter to itself. Clang throws warnings on this, which turn into errors on the MacOS builder. We can just remove these, because upstream already had done so in earlier PRs, indicating that they were not being relied on by underlying parsers.
113 lines
3.2 KiB
C++
113 lines
3.2 KiB
C++
// Copyright (c) 2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2013 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_ALERT_H
|
|
#define BITCOIN_ALERT_H
|
|
|
|
#include "serialize.h"
|
|
#include "sync.h"
|
|
|
|
#include <map>
|
|
#include <set>
|
|
#include <stdint.h>
|
|
#include <string>
|
|
|
|
class CAlert;
|
|
class CNode;
|
|
class uint256;
|
|
|
|
extern std::map<uint256, CAlert> mapAlerts;
|
|
extern CCriticalSection cs_mapAlerts;
|
|
|
|
/** Alerts are for notifying old versions if they become too obsolete and
|
|
* need to upgrade. The message is displayed in the status bar.
|
|
* Alert messages are broadcast as a vector of signed data. Unserializing may
|
|
* not read the entire buffer if the alert is for a newer version, but older
|
|
* versions can still relay the original data.
|
|
*/
|
|
class CUnsignedAlert
|
|
{
|
|
public:
|
|
int nVersion;
|
|
int64_t nRelayUntil; // when newer nodes stop relaying to newer nodes
|
|
int64_t nExpiration;
|
|
int nID;
|
|
int nCancel;
|
|
std::set<int> setCancel;
|
|
int nMinVer; // lowest version inclusive
|
|
int nMaxVer; // highest version inclusive
|
|
std::set<std::string> setSubVer; // empty matches all
|
|
int nPriority;
|
|
|
|
// Actions
|
|
std::string strComment;
|
|
std::string strStatusBar;
|
|
std::string strRPCError;
|
|
|
|
ADD_SERIALIZE_METHODS;
|
|
|
|
template <typename Stream, typename Operation>
|
|
inline void SerializationOp(Stream& s, Operation ser_action) {
|
|
READWRITE(this->nVersion);
|
|
READWRITE(nRelayUntil);
|
|
READWRITE(nExpiration);
|
|
READWRITE(nID);
|
|
READWRITE(nCancel);
|
|
READWRITE(setCancel);
|
|
READWRITE(nMinVer);
|
|
READWRITE(nMaxVer);
|
|
READWRITE(setSubVer);
|
|
READWRITE(nPriority);
|
|
|
|
READWRITE(LIMITED_STRING(strComment, 65536));
|
|
READWRITE(LIMITED_STRING(strStatusBar, 256));
|
|
READWRITE(LIMITED_STRING(strRPCError, 256));
|
|
}
|
|
|
|
void SetNull();
|
|
|
|
std::string ToString() const;
|
|
};
|
|
|
|
/** An alert is a combination of a serialized CUnsignedAlert and a signature. */
|
|
class CAlert : public CUnsignedAlert
|
|
{
|
|
public:
|
|
std::vector<unsigned char> vchMsg;
|
|
std::vector<unsigned char> vchSig;
|
|
|
|
CAlert()
|
|
{
|
|
SetNull();
|
|
}
|
|
|
|
ADD_SERIALIZE_METHODS;
|
|
|
|
template <typename Stream, typename Operation>
|
|
inline void SerializationOp(Stream& s, Operation ser_action) {
|
|
READWRITE(vchMsg);
|
|
READWRITE(vchSig);
|
|
}
|
|
|
|
void SetNull();
|
|
bool IsNull() const;
|
|
uint256 GetHash() const;
|
|
bool IsInEffect() const;
|
|
bool Cancels(const CAlert& alert) const;
|
|
bool AppliesTo(int nVersion, const std::string& strSubVerIn) const;
|
|
bool AppliesToMe() const;
|
|
bool RelayTo(CNode* pnode) const;
|
|
bool CheckSignature(const std::vector<unsigned char>& alertKey) const;
|
|
bool ProcessAlert(const std::vector<unsigned char>& alertKey, 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.
|
|
*/
|
|
static CAlert getAlertByHash(const uint256 &hash);
|
|
};
|
|
|
|
#endif // BITCOIN_ALERT_H
|