aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/epee/include/storages/portable_storage_from_bin.h2
-rw-r--r--src/cryptonote_basic/connection_context.h2
-rw-r--r--src/cryptonote_protocol/cryptonote_protocol_handler.inl33
3 files changed, 17 insertions, 20 deletions
diff --git a/contrib/epee/include/storages/portable_storage_from_bin.h b/contrib/epee/include/storages/portable_storage_from_bin.h
index 20c2bc124..f92546823 100644
--- a/contrib/epee/include/storages/portable_storage_from_bin.h
+++ b/contrib/epee/include/storages/portable_storage_from_bin.h
@@ -168,8 +168,6 @@ namespace epee
CHECK_AND_ASSERT_THROW_MES(size < EPEE_PORTABLE_STORAGE_ARRAY_ELEMENT_LIMIT_INTERNAL - m_array_elements, "Too many array elements");
m_array_elements += size;
CHECK_AND_ASSERT_THROW_MES(size <= m_count / ps_min_bytes<type_name>::strict, "Size sanity check failed");
- const size_t threshold = 16384 - std::min<size_t>(m_array_elements, 16384);
- CHECK_AND_ASSERT_THROW_MES(size <= threshold || size <= m_count / ps_min_bytes<type_name>::rough, "Large array stricter size sanity check failed");
sa.reserve(size);
//TODO: add some optimization here later
diff --git a/src/cryptonote_basic/connection_context.h b/src/cryptonote_basic/connection_context.h
index a735ae06b..9e012f8f5 100644
--- a/src/cryptonote_basic/connection_context.h
+++ b/src/cryptonote_basic/connection_context.h
@@ -44,7 +44,7 @@ namespace cryptonote
cryptonote_connection_context(): m_state(state_before_handshake), m_remote_blockchain_height(0), m_last_response_height(0),
m_last_request_time(boost::date_time::not_a_date_time), m_callback_request_count(0),
m_last_known_hash(crypto::null_hash), m_pruning_seed(0), m_rpc_port(0), m_rpc_credits_per_hash(0), m_anchor(false), m_score(0),
- m_expect_response(0), m_num_requested(0) {}
+ m_expect_response(0), m_expect_height(0), m_num_requested(0) {}
enum state
{
diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl
index 810f044e8..22e87465f 100644
--- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl
+++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl
@@ -2064,8 +2064,14 @@ skip:
// get rid of blocks we already requested, or already have
if (skip_unneeded_hashes(context, true) && context.m_needed_objects.empty() && context.m_num_requested == 0)
{
- MERROR(context << "Nothing we can request from this peer, and we did not request anything previously");
- return false;
+ if (context.m_remote_blockchain_height > m_block_queue.get_next_needed_height(bc_height))
+ {
+ MERROR(context << "Nothing we can request from this peer, and we did not request anything previously");
+ return false;
+ }
+ MDEBUG(context << "Nothing to get from this peer, and it's not ahead of us, all done");
+ context.m_state = cryptonote_connection_context::state_normal;
+ return true;
}
uint64_t next_needed_height = m_block_queue.get_next_needed_height(bc_height);
uint64_t next_block_height;
@@ -2204,8 +2210,14 @@ skip:
}
if (skip_unneeded_hashes(context, false) && context.m_needed_objects.empty() && context.m_num_requested == 0)
{
- MERROR(context << "Nothing we can request from this peer, and we did not request anything previously");
- return false;
+ if (context.m_remote_blockchain_height > m_block_queue.get_next_needed_height(m_core.get_current_blockchain_height()))
+ {
+ MERROR(context << "Nothing we can request from this peer, and we did not request anything previously");
+ return false;
+ }
+ MDEBUG(context << "Nothing to get from this peer, and it's not ahead of us, all done");
+ context.m_state = cryptonote_connection_context::state_normal;
+ return true;
}
const uint64_t first_block_height = context.m_last_response_height - context.m_needed_objects.size() + 1;
@@ -2559,8 +2571,6 @@ skip:
}
std::unordered_set<crypto::hash> hashes;
- uint64_t height = arg.start_height;
- const uint64_t blockchain_height = m_core.get_current_blockchain_height();
for (const auto &h: arg.m_block_ids)
{
if (!hashes.insert(h).second)
@@ -2569,17 +2579,6 @@ skip:
drop_connection(context, true, false);
return 1;
}
- if (height < blockchain_height)
- {
- const crypto::hash block_in_chain = m_core.get_block_id_by_height(height);
- if ((height < context.m_expect_height - 1 && block_in_chain == h) || (height == context.m_expect_height - 1 && block_in_chain != h))
- {
- LOG_ERROR_CCONTEXT("sent existing block " << h << " at height " << height << ", expected height was " << context.m_expect_height << ", dropping connection");
- drop_connection(context, true, false);
- return 1;
- }
- }
- ++height;
}
uint64_t n_use_blocks = m_core.prevalidate_block_hashes(arg.start_height, arg.m_block_ids, arg.m_block_weights);