LCOV - code coverage report
Current view: top level - src - net_types.cpp (source / functions) Hit Total Coverage
Test: coverage.lcov Lines: 36 36 100.0 %
Date: 2022-04-21 14:51:19 Functions: 4 4 100.0 %
Legend: Modified by patch:
Lines: hit not hit | Branches: + taken - not taken # not executed

Not modified by patch:
Lines: hit not hit | Branches: + taken - not taken # not executed
Branches: 8 8 100.0 %

           Branch data     Line data    Source code
#       1                 :            : // Copyright (c) 2021 The Bitcoin Core developers
#       2                 :            : // Distributed under the MIT software license, see the accompanying
#       3                 :            : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#       4                 :            : 
#       5                 :            : #include <net_types.h>
#       6                 :            : 
#       7                 :            : #include <logging.h>
#       8                 :            : #include <netaddress.h>
#       9                 :            : #include <netbase.h>
#      10                 :            : #include <univalue.h>
#      11                 :            : 
#      12                 :            : static const char* BANMAN_JSON_VERSION_KEY{"version"};
#      13                 :            : 
#      14                 :            : CBanEntry::CBanEntry(const UniValue& json)
#      15                 :            :     : nVersion(json[BANMAN_JSON_VERSION_KEY].get_int()),
#      16                 :            :       nCreateTime(json["ban_created"].get_int64()),
#      17                 :            :       nBanUntil(json["banned_until"].get_int64())
#      18                 :          8 : {
#      19                 :          8 : }
#      20                 :            : 
#      21                 :            : UniValue CBanEntry::ToJson() const
#      22                 :         31 : {
#      23                 :         31 :     UniValue json(UniValue::VOBJ);
#      24                 :         31 :     json.pushKV(BANMAN_JSON_VERSION_KEY, nVersion);
#      25                 :         31 :     json.pushKV("ban_created", nCreateTime);
#      26                 :         31 :     json.pushKV("banned_until", nBanUntil);
#      27                 :         31 :     return json;
#      28                 :         31 : }
#      29                 :            : 
#      30                 :            : static const char* BANMAN_JSON_ADDR_KEY = "address";
#      31                 :            : 
#      32                 :            : /**
#      33                 :            :  * Convert a `banmap_t` object to a JSON array.
#      34                 :            :  * @param[in] bans Bans list to convert.
#      35                 :            :  * @return a JSON array, similar to the one returned by the `listbanned` RPC. Suitable for
#      36                 :            :  * passing to `BanMapFromJson()`.
#      37                 :            :  */
#      38                 :            : UniValue BanMapToJson(const banmap_t& bans)
#      39                 :        670 : {
#      40                 :        670 :     UniValue bans_json(UniValue::VARR);
#      41         [ +  + ]:        670 :     for (const auto& it : bans) {
#      42                 :         31 :         const auto& address = it.first;
#      43                 :         31 :         const auto& ban_entry = it.second;
#      44                 :         31 :         UniValue j = ban_entry.ToJson();
#      45                 :         31 :         j.pushKV(BANMAN_JSON_ADDR_KEY, address.ToString());
#      46                 :         31 :         bans_json.push_back(j);
#      47                 :         31 :     }
#      48                 :        670 :     return bans_json;
#      49                 :        670 : }
#      50                 :            : 
#      51                 :            : /**
#      52                 :            :  * Convert a JSON array to a `banmap_t` object.
#      53                 :            :  * @param[in] bans_json JSON to convert, must be as returned by `BanMapToJson()`.
#      54                 :            :  * @param[out] bans Bans list to create from the JSON.
#      55                 :            :  * @throws std::runtime_error if the JSON does not have the expected fields or they contain
#      56                 :            :  * unparsable values.
#      57                 :            :  */
#      58                 :            : void BanMapFromJson(const UniValue& bans_json, banmap_t& bans)
#      59                 :        341 : {
#      60         [ +  + ]:        341 :     for (const auto& ban_entry_json : bans_json.getValues()) {
#      61                 :         12 :         const int version{ban_entry_json[BANMAN_JSON_VERSION_KEY].get_int()};
#      62         [ +  + ]:         12 :         if (version != CBanEntry::CURRENT_VERSION) {
#      63                 :          2 :             LogPrintf("Dropping entry with unknown version (%s) from ban list\n", version);
#      64                 :          2 :             continue;
#      65                 :          2 :         }
#      66                 :         10 :         CSubNet subnet;
#      67                 :         10 :         const auto& subnet_str = ban_entry_json[BANMAN_JSON_ADDR_KEY].get_str();
#      68         [ +  + ]:         10 :         if (!LookupSubNet(subnet_str, subnet)) {
#      69                 :          2 :             LogPrintf("Dropping entry with unparseable address or subnet (%s) from ban list\n", subnet_str);
#      70                 :          2 :             continue;
#      71                 :          2 :         }
#      72                 :          8 :         bans.insert_or_assign(subnet, CBanEntry{ban_entry_json});
#      73                 :          8 :     }
#      74                 :        341 : }

Generated by: LCOV version 0-eol-96201-ge66f56f4af6a