2018-01-07 05:05:16 +00:00
|
|
|
// Copyright (c) 2014-2018, The Monero Project
|
2014-07-23 13:03:52 +00:00
|
|
|
//
|
|
|
|
// All rights reserved.
|
|
|
|
//
|
|
|
|
// Redistribution and use in source and binary forms, with or without modification, are
|
|
|
|
// permitted provided that the following conditions are met:
|
|
|
|
//
|
|
|
|
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
|
|
// conditions and the following disclaimer.
|
|
|
|
//
|
|
|
|
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
|
|
// of conditions and the following disclaimer in the documentation and/or other
|
|
|
|
// materials provided with the distribution.
|
|
|
|
//
|
|
|
|
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
|
|
|
// used to endorse or promote products derived from this software without specific
|
|
|
|
// prior written permission.
|
|
|
|
//
|
|
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
|
|
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
|
|
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
|
|
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
|
|
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
|
|
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
//
|
|
|
|
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
2014-03-03 22:07:58 +00:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <boost/uuid/uuid.hpp>
|
2018-12-16 17:57:44 +00:00
|
|
|
#include <utility>
|
|
|
|
#include <vector>
|
2014-03-03 22:07:58 +00:00
|
|
|
#include "net/net_utils_base.h"
|
2014-03-20 11:46:11 +00:00
|
|
|
#include "p2p_protocol_defs.h"
|
2014-03-03 22:07:58 +00:00
|
|
|
|
|
|
|
namespace nodetool
|
|
|
|
{
|
|
|
|
|
|
|
|
typedef boost::uuids::uuid uuid;
|
|
|
|
typedef boost::uuids::uuid net_connection_id;
|
|
|
|
|
|
|
|
template<class t_connection_context>
|
|
|
|
struct i_p2p_endpoint
|
|
|
|
{
|
2018-12-16 17:57:44 +00:00
|
|
|
virtual bool relay_notify_to_list(int command, const epee::span<const uint8_t> data_buff, std::vector<std::pair<epee::net_utils::zone, boost::uuids::uuid>> connections)=0;
|
2018-12-06 18:04:33 +00:00
|
|
|
virtual bool invoke_command_to_peer(int command, const epee::span<const uint8_t> req_buff, std::string& resp_buff, const epee::net_utils::connection_context_base& context)=0;
|
|
|
|
virtual bool invoke_notify_to_peer(int command, const epee::span<const uint8_t> req_buff, const epee::net_utils::connection_context_base& context)=0;
|
2014-03-03 22:07:58 +00:00
|
|
|
virtual bool drop_connection(const epee::net_utils::connection_context_base& context)=0;
|
|
|
|
virtual void request_callback(const epee::net_utils::connection_context_base& context)=0;
|
2018-12-16 17:57:44 +00:00
|
|
|
virtual uint64_t get_public_connections_count()=0;
|
|
|
|
virtual size_t get_zone_count() const=0;
|
2016-10-26 19:00:08 +00:00
|
|
|
virtual void for_each_connection(std::function<bool(t_connection_context&, peerid_type, uint32_t)> f)=0;
|
2017-07-02 21:41:15 +00:00
|
|
|
virtual bool for_connection(const boost::uuids::uuid&, std::function<bool(t_connection_context&, peerid_type, uint32_t)> f)=0;
|
2017-05-27 10:35:54 +00:00
|
|
|
virtual bool block_host(const epee::net_utils::network_address &address, time_t seconds = 0)=0;
|
|
|
|
virtual bool unblock_host(const epee::net_utils::network_address &address)=0;
|
|
|
|
virtual std::map<std::string, time_t> get_blocked_hosts()=0;
|
|
|
|
virtual bool add_host_fail(const epee::net_utils::network_address &address)=0;
|
Pruning
The blockchain prunes seven eighths of prunable tx data.
This saves about two thirds of the blockchain size, while
keeping the node useful as a sync source for an eighth
of the blockchain.
No other data is currently pruned.
There are three ways to prune a blockchain:
- run monerod with --prune-blockchain
- run "prune_blockchain" in the monerod console
- run the monero-blockchain-prune utility
The first two will prune in place. Due to how LMDB works, this
will not reduce the blockchain size on disk. Instead, it will
mark parts of the file as free, so that future data will use
that free space, causing the file to not grow until free space
grows scarce.
The third way will create a second database, a pruned copy of
the original one. Since this is a new file, this one will be
smaller than the original one.
Once the database is pruned, it will stay pruned as it syncs.
That is, there is no need to use --prune-blockchain again, etc.
2018-04-29 22:30:51 +00:00
|
|
|
virtual void add_used_stripe_peer(const t_connection_context &context)=0;
|
|
|
|
virtual void remove_used_stripe_peer(const t_connection_context &context)=0;
|
|
|
|
virtual void clear_used_stripe_peers()=0;
|
2014-03-03 22:07:58 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
template<class t_connection_context>
|
|
|
|
struct p2p_endpoint_stub: public i_p2p_endpoint<t_connection_context>
|
|
|
|
{
|
2018-12-16 17:57:44 +00:00
|
|
|
virtual bool relay_notify_to_list(int command, const epee::span<const uint8_t> data_buff, std::vector<std::pair<epee::net_utils::zone, boost::uuids::uuid>> connections)
|
2014-03-03 22:07:58 +00:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2018-12-06 18:04:33 +00:00
|
|
|
virtual bool invoke_command_to_peer(int command, const epee::span<const uint8_t> req_buff, std::string& resp_buff, const epee::net_utils::connection_context_base& context)
|
2014-03-03 22:07:58 +00:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2018-12-06 18:04:33 +00:00
|
|
|
virtual bool invoke_notify_to_peer(int command, const epee::span<const uint8_t> req_buff, const epee::net_utils::connection_context_base& context)
|
2014-03-03 22:07:58 +00:00
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
virtual bool drop_connection(const epee::net_utils::connection_context_base& context)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
virtual void request_callback(const epee::net_utils::connection_context_base& context)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
2016-10-26 19:00:08 +00:00
|
|
|
virtual void for_each_connection(std::function<bool(t_connection_context&,peerid_type,uint32_t)> f)
|
2014-03-03 22:07:58 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
}
|
2017-07-02 21:41:15 +00:00
|
|
|
virtual bool for_connection(const boost::uuids::uuid&, std::function<bool(t_connection_context&,peerid_type,uint32_t)> f)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2014-03-03 22:07:58 +00:00
|
|
|
|
2018-12-16 17:57:44 +00:00
|
|
|
virtual size_t get_zone_count() const
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual uint64_t get_public_connections_count()
|
2014-03-03 22:07:58 +00:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2017-05-27 10:35:54 +00:00
|
|
|
virtual bool block_host(const epee::net_utils::network_address &address, time_t seconds)
|
2015-11-23 17:34:55 +00:00
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
2017-05-27 10:35:54 +00:00
|
|
|
virtual bool unblock_host(const epee::net_utils::network_address &address)
|
2015-11-26 00:04:22 +00:00
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
2017-05-27 10:35:54 +00:00
|
|
|
virtual std::map<std::string, time_t> get_blocked_hosts()
|
2015-11-26 00:04:22 +00:00
|
|
|
{
|
2017-05-27 10:35:54 +00:00
|
|
|
return std::map<std::string, time_t>();
|
2015-11-26 00:04:22 +00:00
|
|
|
}
|
2017-05-27 10:35:54 +00:00
|
|
|
virtual bool add_host_fail(const epee::net_utils::network_address &address)
|
2015-11-23 17:34:55 +00:00
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
Pruning
The blockchain prunes seven eighths of prunable tx data.
This saves about two thirds of the blockchain size, while
keeping the node useful as a sync source for an eighth
of the blockchain.
No other data is currently pruned.
There are three ways to prune a blockchain:
- run monerod with --prune-blockchain
- run "prune_blockchain" in the monerod console
- run the monero-blockchain-prune utility
The first two will prune in place. Due to how LMDB works, this
will not reduce the blockchain size on disk. Instead, it will
mark parts of the file as free, so that future data will use
that free space, causing the file to not grow until free space
grows scarce.
The third way will create a second database, a pruned copy of
the original one. Since this is a new file, this one will be
smaller than the original one.
Once the database is pruned, it will stay pruned as it syncs.
That is, there is no need to use --prune-blockchain again, etc.
2018-04-29 22:30:51 +00:00
|
|
|
virtual void add_used_stripe_peer(const t_connection_context &context)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
virtual void remove_used_stripe_peer(const t_connection_context &context)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
virtual void clear_used_stripe_peers()
|
|
|
|
{
|
|
|
|
}
|
2014-03-03 22:07:58 +00:00
|
|
|
};
|
|
|
|
}
|