aboutsummaryrefslogtreecommitdiff
path: root/src/rpc/core_rpc_server.cpp
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2016-11-24 12:57:00 +0200
committerRiccardo Spagni <ric@spagni.net>2016-11-24 12:57:00 +0200
commit3fa1b6623a5603e3157cc1c9e38dfdd5a9f0a5d7 (patch)
tree25dff24e23520294492c8d2eeb1fe6019fef6fc6 /src/rpc/core_rpc_server.cpp
parentMerge pull request #1358 (diff)
parentrpc: do not include output indices for pool txes (diff)
downloadmonero-3fa1b6623a5603e3157cc1c9e38dfdd5a9f0a5d7.tar.xz
Merge pull request #1361
1d9e223 rpc: do not include output indices for pool txes (moneromooo-monero) e227d6e rpc: bump version after RPC changes (moneromooo-monero) 2c0173c Add a get_outs (fully text based) version of get_outs.bin (moneromooo-monero) e05907b rpc: add output indices to gettransactions (moneromooo-monero)
Diffstat (limited to 'src/rpc/core_rpc_server.cpp')
-rw-r--r--src/rpc/core_rpc_server.cpp49
1 files changed, 48 insertions, 1 deletions
diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp
index a02a2375b..5bf500733 100644
--- a/src/rpc/core_rpc_server.cpp
+++ b/src/rpc/core_rpc_server.cpp
@@ -246,7 +246,7 @@ namespace cryptonote
return true;
}
//------------------------------------------------------------------------------------------------------------------------------
- bool core_rpc_server::on_get_outs(const COMMAND_RPC_GET_OUTPUTS::request& req, COMMAND_RPC_GET_OUTPUTS::response& res)
+ bool core_rpc_server::on_get_outs_bin(const COMMAND_RPC_GET_OUTPUTS_BIN::request& req, COMMAND_RPC_GET_OUTPUTS_BIN::response& res)
{
CHECK_CORE_BUSY();
res.status = "Failed";
@@ -269,6 +269,42 @@ namespace cryptonote
return true;
}
//------------------------------------------------------------------------------------------------------------------------------
+ bool core_rpc_server::on_get_outs(const COMMAND_RPC_GET_OUTPUTS::request& req, COMMAND_RPC_GET_OUTPUTS::response& res)
+ {
+ CHECK_CORE_BUSY();
+ res.status = "Failed";
+
+ if (m_restricted)
+ {
+ if (req.outputs.size() > MAX_RESTRICTED_GLOBAL_FAKE_OUTS_COUNT)
+ {
+ res.status = "Too many outs requested";
+ return true;
+ }
+ }
+
+ cryptonote::COMMAND_RPC_GET_OUTPUTS_BIN::request req_bin;
+ req_bin.outputs = req.outputs;
+ cryptonote::COMMAND_RPC_GET_OUTPUTS_BIN::response res_bin;
+ if(!m_core.get_outs(req_bin, res_bin))
+ {
+ return true;
+ }
+
+ // convert to text
+ for (const auto &i: res_bin.outs)
+ {
+ res.outs.push_back(cryptonote::COMMAND_RPC_GET_OUTPUTS::outkey());
+ cryptonote::COMMAND_RPC_GET_OUTPUTS::outkey &outkey = res.outs.back();
+ outkey.key = epee::string_tools::pod_to_hex(i.key);
+ outkey.mask = epee::string_tools::pod_to_hex(i.mask);
+ outkey.unlocked = i.unlocked;
+ }
+
+ res.status = CORE_RPC_STATUS_OK;
+ return true;
+ }
+ //------------------------------------------------------------------------------------------------------------------------------
bool core_rpc_server::on_get_random_rct_outs(const COMMAND_RPC_GET_RANDOM_RCT_OUTPUTS::request& req, COMMAND_RPC_GET_RANDOM_RCT_OUTPUTS::response& res)
{
CHECK_CORE_BUSY();
@@ -388,6 +424,17 @@ namespace cryptonote
res.txs_as_hex.push_back(e.as_hex);
if (req.decode_as_json)
res.txs_as_json.push_back(e.as_json);
+
+ // output indices too if not in pool
+ if (pool_tx_hashes.find(tx_hash) == pool_tx_hashes.end())
+ {
+ bool r = m_core.get_tx_outputs_gindexs(tx_hash, e.output_indices);
+ if (!r)
+ {
+ res.status = "Failed";
+ return false;
+ }
+ }
}
BOOST_FOREACH(const auto& miss_tx, missed_txs)