LCOV - code coverage report
Current view: top level - src - alert.h (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 26 28 92.9 %
Date: 2015-10-12 22:39:14 Functions: 6 13 46.2 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2010 Satoshi Nakamoto
       2             : // Copyright (c) 2009-2013 The Bitcoin Core developers
       3             : // Distributed under the MIT software license, see the accompanying
       4             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       5             : 
       6             : #ifndef BITCOIN_ALERT_H
       7             : #define BITCOIN_ALERT_H
       8             : 
       9             : #include "serialize.h"
      10             : #include "sync.h"
      11             : 
      12             : #include <map>
      13             : #include <set>
      14             : #include <stdint.h>
      15             : #include <string>
      16             : 
      17             : class CAlert;
      18             : class CNode;
      19             : class uint256;
      20             : 
      21             : extern std::map<uint256, CAlert> mapAlerts;
      22             : extern CCriticalSection cs_mapAlerts;
      23             : 
      24             : /** Alerts are for notifying old versions if they become too obsolete and
      25             :  * need to upgrade.  The message is displayed in the status bar.
      26             :  * Alert messages are broadcast as a vector of signed data.  Unserializing may
      27             :  * not read the entire buffer if the alert is for a newer version, but older
      28             :  * versions can still relay the original data.
      29             :  */
      30        1029 : class CUnsignedAlert
      31             : {
      32             : public:
      33             :     int nVersion;
      34             :     int64_t nRelayUntil;      // when newer nodes stop relaying to newer nodes
      35             :     int64_t nExpiration;
      36             :     int nID;
      37             :     int nCancel;
      38             :     std::set<int> setCancel;
      39             :     int nMinVer;            // lowest version inclusive
      40             :     int nMaxVer;            // highest version inclusive
      41             :     std::set<std::string> setSubVer;  // empty matches all
      42             :     int nPriority;
      43             : 
      44             :     // Actions
      45             :     std::string strComment;
      46             :     std::string strStatusBar;
      47             :     std::string strReserved;
      48             : 
      49          16 :     ADD_SERIALIZE_METHODS;
      50             : 
      51             :     template <typename Stream, typename Operation>
      52          16 :     inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
      53          16 :         READWRITE(this->nVersion);
      54          16 :         nVersion = this->nVersion;
      55          16 :         READWRITE(nRelayUntil);
      56          16 :         READWRITE(nExpiration);
      57          16 :         READWRITE(nID);
      58          16 :         READWRITE(nCancel);
      59          16 :         READWRITE(setCancel);
      60          16 :         READWRITE(nMinVer);
      61          16 :         READWRITE(nMaxVer);
      62          16 :         READWRITE(setSubVer);
      63          16 :         READWRITE(nPriority);
      64             : 
      65          48 :         READWRITE(LIMITED_STRING(strComment, 65536));
      66          48 :         READWRITE(LIMITED_STRING(strStatusBar, 256));
      67          48 :         READWRITE(LIMITED_STRING(strReserved, 256));
      68          16 :     }
      69             : 
      70             :     void SetNull();
      71             : 
      72             :     std::string ToString() const;
      73             : };
      74             : 
      75             : /** An alert is a combination of a serialized CUnsignedAlert and a signature. */
      76         412 : class CAlert : public CUnsignedAlert
      77             : {
      78             : public:
      79             :     std::vector<unsigned char> vchMsg;
      80             :     std::vector<unsigned char> vchSig;
      81             : 
      82          24 :     CAlert()
      83          72 :     {
      84          24 :         SetNull();
      85          24 :     }
      86             : 
      87          24 :     ADD_SERIALIZE_METHODS;
      88             : 
      89             :     template <typename Stream, typename Operation>
      90           0 :     inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
      91          24 :         READWRITE(vchMsg);
      92          24 :         READWRITE(vchSig);
      93           0 :     }
      94             : 
      95             :     void SetNull();
      96             :     bool IsNull() const;
      97             :     uint256 GetHash() const;
      98             :     bool IsInEffect() const;
      99             :     bool Cancels(const CAlert& alert) const;
     100             :     bool AppliesTo(int nVersion, const std::string& strSubVerIn) const;
     101             :     bool AppliesToMe() const;
     102             :     bool RelayTo(CNode* pnode) const;
     103             :     bool CheckSignature(const std::vector<unsigned char>& alertKey) const;
     104             :     bool ProcessAlert(const std::vector<unsigned char>& alertKey, bool fThread = true); // fThread means run -alertnotify in a free-running thread
     105             :     static void Notify(const std::string& strMessage, bool fThread);
     106             : 
     107             :     /*
     108             :      * Get copy of (active) alert object by hash. Returns a null alert if it is not found.
     109             :      */
     110             :     static CAlert getAlertByHash(const uint256 &hash);
     111             : };
     112             : 
     113             : #endif // BITCOIN_ALERT_H

Generated by: LCOV version 1.11