PRCYCoin  2.0.0.7rc1
P2P Digital Currency
masternodeconfig.cpp
Go to the documentation of this file.
1 // Copyright (c) 2014-2015 The Dash developers
2 // Copyright (c) 2015-2018 The PIVX developers
3 // Copyright (c) 2018-2020 The DAPS Project developers
4 // Distributed under the MIT/X11 software license, see the accompanying
5 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
6 
7 #include "netbase.h"
8 #include "masternodeconfig.h"
9 #include "util.h"
10 #include "guiinterface.h"
11 #include <base58.h>
12 
14 
15 void CMasternodeConfig::add(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex)
16 {
17  CMasternodeEntry cme(alias, ip, privKey, txHash, outputIndex);
18  entries.push_back(cme);
19 }
20 
21 bool CMasternodeConfig::read(std::string& strErr)
22 {
23  int linenumber = 1;
24  fs::path pathMasternodeConfigFile = GetMasternodeConfigFile();
25  fs::ifstream streamConfig(pathMasternodeConfigFile);
26 
27  if (!streamConfig.good()) {
28  FILE* configFile = fsbridge::fopen(pathMasternodeConfigFile, "a");
29  if (configFile != NULL) {
30  std::string strHeader = "# Masternode config file\n"
31  "# Format: alias IP:port masternodeprivkey collateral_output_txid collateral_output_index\n"
32  "# Example: mn1 127.0.0.2:59682 93HaYBVUCYjEMeeH1Y4sBGLALQZE1Yc1K64xiqgX37tGBDQL8Xg 2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c 0\n";
33  fwrite(strHeader.c_str(), std::strlen(strHeader.c_str()), 1, configFile);
34  fclose(configFile);
35  }
36  return true; // Nothing to read, so just return
37  }
38 
39  for (std::string line; std::getline(streamConfig, line); linenumber++) {
40  if (line.empty()) continue;
41 
42  std::istringstream iss(line);
43  std::string comment, alias, ip, privKey, txHash, outputIndex;
44 
45  if (iss >> comment) {
46  if (comment.at(0) == '#') continue;
47  iss.str(line);
48  iss.clear();
49  }
50 
51  if (!(iss >> alias >> ip >> privKey >> txHash >> outputIndex)) {
52  iss.str(line);
53  iss.clear();
54  if (!(iss >> alias >> ip >> privKey >> txHash >> outputIndex)) {
55  strErr = _("Could not parse masternode.conf") + "\n" +
56  strprintf(_("Line: %d"), linenumber) + "\n\"" + line + "\"";
57  streamConfig.close();
58  return false;
59  }
60  }
61 
62  int port = 0;
63  int nDefaultPort = Params().GetDefaultPort();
64  std::string hostname = "";
65  SplitHostPort(ip, port, hostname);
66  if(port == 0 || hostname == "") {
67  strErr = _("Failed to parse host:port string") + "\n"+
68  strprintf(_("Line: %d"), linenumber) + "\n\"" + line + "\"";
69  streamConfig.close();
70  return false;
71  }
72 
73  if (port != nDefaultPort) {
74  strErr = strprintf(_("Invalid port %d detected in masternode.conf"), port) + "\n" +
75  strprintf(_("Line: %d"), linenumber) + "\n\"" + ip + "\"" + "\n" +
76  strprintf(_("(must be %d for %s-net)"), nDefaultPort, Params().NetworkIDString());
77  streamConfig.close();
78  return false;
79  }
80 
81 
82  add(alias, ip, privKey, txHash, outputIndex);
83  }
84 
85  streamConfig.close();
86  return true;
87 }
88 
90 {
91  try {
92  n = std::stoi(outputIndex);
93  } catch (const std::exception e) {
94  LogPrintf("%s: %s on getOutputIndex\n", __func__, e.what());
95  return false;
96  }
97 
98  return true;
99 }
SplitHostPort
void SplitHostPort(std::string in, int &portOut, std::string &hostOut)
Definition: netbase.cpp:74
fsbridge::fopen
FILE * fopen(const fs::path &p, const char *mode)
Definition: fs.cpp:13
guiinterface.h
_
std::string _(const char *psz)
Translation function: Call Translate signal on UI interface, which returns a boost::optional result.
Definition: guiinterface.h:119
CMasternodeConfig::read
bool read(std::string &strErr)
Definition: masternodeconfig.cpp:21
LogPrintf
#define LogPrintf(...)
Definition: logging.h:147
CMasternodeConfig::add
void add(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex)
Definition: masternodeconfig.cpp:15
CChainParams::GetDefaultPort
int GetDefaultPort() const
Definition: chainparams.h:56
masternodeConfig
CMasternodeConfig masternodeConfig
Definition: masternodeconfig.cpp:13
CMasternodeConfig::CMasternodeEntry::castOutputIndex
bool castOutputIndex(int &n) const
Definition: masternodeconfig.cpp:89
strprintf
#define strprintf
Definition: tinyformat.h:1056
CMasternodeConfig::CMasternodeEntry
Definition: masternodeconfig.h:22
Params
const CChainParams & Params()
Return the currently selected parameters.
Definition: chainparams.cpp:463
GetMasternodeConfigFile
fs::path GetMasternodeConfigFile()
Definition: util.cpp:389
base58.h
CMasternodeConfig::CMasternodeEntry::outputIndex
std::string outputIndex
Definition: masternodeconfig.h:29
netbase.h
CMasternodeConfig::entries
std::vector< CMasternodeEntry > entries
Definition: masternodeconfig.h:118
util.h
masternodeconfig.h
CMasternodeConfig
Definition: masternodeconfig.h:19