diff --git a/src/monero_headers.h b/src/monero_headers.h index baf4a9c..0cc2a7c 100644 --- a/src/monero_headers.h +++ b/src/monero_headers.h @@ -9,8 +9,8 @@ #define BLOCKCHAIN_DB DB_LMDB -#define UNSIGNED_TX_PREFIX "Monero unsigned tx set\002" -#define SIGNED_TX_PREFIX "Monero signed tx set\002" +#define UNSIGNED_TX_PREFIX "Monero unsigned tx set\003" +#define SIGNED_TX_PREFIX "Monero signed tx set\003" #define KEY_IMAGE_EXPORT_FILE_MAGIC "Monero key image export\002" #define OUTPUT_EXPORT_FILE_MAGIC "Monero output export\003" diff --git a/src/page.h b/src/page.h index 00dda9e..92c3fc3 100644 --- a/src/page.h +++ b/src/page.h @@ -1513,6 +1513,8 @@ public: const size_t magiclen = strlen(UNSIGNED_TX_PREFIX); + string data_prefix = xmreg::make_printable(decoded_raw_tx_data.substr(0, magiclen)); + bool unsigned_tx_given {false}; if (strncmp(decoded_raw_tx_data.c_str(), UNSIGNED_TX_PREFIX, magiclen) == 0) @@ -1525,6 +1527,7 @@ public: {"testnet" , testnet}, {"unsigned_tx_given" , unsigned_tx_given}, {"have_raw_tx" , true}, + {"data_prefix" , data_prefix}, {"txs" , mstch::array{}} }; @@ -1787,12 +1790,18 @@ public: const size_t magiclen = strlen(SIGNED_TX_PREFIX); + string data_prefix = xmreg::make_printable(decoded_raw_tx_data.substr(0, magiclen)); + if (strncmp(decoded_raw_tx_data.c_str(), SIGNED_TX_PREFIX, magiclen) != 0) { - cout << "The data is neither unsigned nor signed tx!" << endl; - return string( "The data is neither unsigned nor signed tx!"); + string msg = fmt::format("The data is neither unsigned nor signed tx! Its prefix is: {:s}", + data_prefix); + + cout << msg << endl; + return string(msg); } + context["data_prefix"] = data_prefix; bool r {false}; @@ -2055,12 +2064,15 @@ public: const size_t magiclen = strlen(SIGNED_TX_PREFIX); + string data_prefix = xmreg::make_printable(decoded_raw_tx_data.substr(0, magiclen)); + // initalize page template context map mstch::map context { {"testnet" , testnet}, {"have_raw_tx" , true}, {"has_error" , false}, {"error_msg" , string {}}, + {"data_prefix" , data_prefix}, {"txs" , mstch::array{}} }; @@ -2074,7 +2086,8 @@ public: if (strncmp(decoded_raw_tx_data.c_str(), SIGNED_TX_PREFIX, magiclen) != 0) { - string error_msg = fmt::format("The data does not appear to be signed raw tx!"); + string error_msg = fmt::format("The data does not appear to be signed raw tx! Data prefix: {:s}", + data_prefix); context["has_error"] = true; context["error_msg"] = error_msg; diff --git a/src/templates/checkrawtx.html b/src/templates/checkrawtx.html index 4e987f4..c532fba 100644 --- a/src/templates/checkrawtx.html +++ b/src/templates/checkrawtx.html @@ -22,6 +22,9 @@
+ +

Data file prefix: {{data_prefix}}

+ {{#unsigned_tx_given}}

Details of unsigned raw tx data given

diff --git a/src/tools.cpp b/src/tools.cpp index e4357da..078541f 100644 --- a/src/tools.cpp +++ b/src/tools.cpp @@ -1245,5 +1245,43 @@ make_tx_from_json(const string& json_str, transaction& tx) return true; } + +string +make_printable(const string& in_s) +{ + string output; + + for (char c: in_s) + { + + if (isprint(c)) + { + output += c; + } + else + { + switch(c){ + case '\000': output += "\\000";break; + case '\001': output += "\\001";break; + case '\002': output += "\\002";break; + case '\003': output += "\\003";break; + case '\004': output += "\\004";break; + case '\005': output += "\\005";break; + case '\006': output += "\\006";break; + case '\007': output += "\\007";break; + // there are more case but for now its ok + default: + stringstream ss; + ss << std::hex << (int)c; + output += "0x" + ss.str(); + break; + } + } + + } + + return output; +} + } diff --git a/src/tools.h b/src/tools.h index e81a0d6..e165e64 100644 --- a/src/tools.h +++ b/src/tools.h @@ -297,6 +297,8 @@ void chunks(Iterator begin, bool make_tx_from_json(const string& json_str, transaction& tx); +string +make_printable(const string& in_s); } #endif //XMREG01_TOOLS_H