diff options
Diffstat (limited to 'src/p2p/connection_basic.hpp')
-rw-r--r-- | src/p2p/connection_basic.hpp | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/src/p2p/connection_basic.hpp b/src/p2p/connection_basic.hpp deleted file mode 100644 index 16de469a7..000000000 --- a/src/p2p/connection_basic.hpp +++ /dev/null @@ -1,141 +0,0 @@ -/// @file -/// @author rfree (current maintainer in monero.cc project) -/// @brief base for connection, contains e.g. the ratelimit hooks - -// ! This file might contain variable names same as in template class connection<> -// ! from files contrib/epee/include/net/abstract_tcp_server2.* -// ! I am not a lawyer; afaik APIs, var names etc are not copyrightable ;) -// ! (how ever if in some wonderful juristdictions that is not the case, then why not make another sub-class withat that members and licence it as epee part) -// ! Working on above premise, IF this is valid in your juristdictions, then consider this code as released as: - -// Copyright (c) 2014-2017, The Monero Project -// -// 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. - -/* rfree: place for hanlers for the non-template base, can be used by connection<> template class in abstract_tcp_server2 file */ - -#ifndef INCLUDED_p2p_connection_basic_hpp -#define INCLUDED_p2p_connection_basic_hpp - - -#include <boost/asio.hpp> -#include <string> -#include <vector> -#include <boost/noncopyable.hpp> -#include <boost/shared_ptr.hpp> -#include <atomic> - -#include <boost/asio.hpp> -#include <boost/array.hpp> -#include <boost/noncopyable.hpp> -#include <boost/shared_ptr.hpp> -#include <boost/enable_shared_from_this.hpp> -#include <boost/interprocess/detail/atomic.hpp> -#include <boost/thread/thread.hpp> - -#include <memory> - -#include "net/net_utils_base.h" -#include "syncobj.h" - -namespace epee -{ -namespace net_utils -{ - - /************************************************************************/ - /* */ - /************************************************************************/ - /// Represents a single connection from a client. - -class connection_basic_pimpl; // PIMPL for this class - - enum t_connection_type { // type of the connection (of this server), e.g. so that we will know how to limit it - e_connection_type_NET = 0, // default (not used?) - e_connection_type_RPC = 1, // the rpc commands (probably not rate limited, not chunked, etc) - e_connection_type_P2P = 2 // to other p2p node (probably limited) - }; - - std::string to_string(t_connection_type type); - -class connection_basic { // not-templated base class for rapid developmet of some code parts - public: - std::unique_ptr< connection_basic_pimpl > mI; // my Implementation - - // moved here from orginal connecton<> - common member variables that do not depend on template in connection<> - volatile uint32_t m_want_close_connection; - std::atomic<bool> m_was_shutdown; - critical_section m_send_que_lock; - std::list<std::string> m_send_que; - volatile bool m_is_multithreaded; - double m_start_time; - /// Strand to ensure the connection's handlers are not called concurrently. - boost::asio::io_service::strand strand_; - /// Socket for the connection. - boost::asio::ip::tcp::socket socket_; - - std::atomic<long> &m_ref_sock_count; // reference to external counter of existing sockets that we will ++/-- - public: - // first counter is the ++/-- count of current sockets, the other socket_number is only-increasing ++ number generator - connection_basic(boost::asio::io_service& io_service, std::atomic<long> &ref_sock_count, std::atomic<long> &sock_number); - - virtual ~connection_basic() noexcept(false); - - // various handlers to be called from connection class: - void do_send_handler_write(const void * ptr , size_t cb); - void do_send_handler_write_from_queue(const boost::system::error_code& e, size_t cb , int q_len); // from handle_write, sending next part - - void logger_handle_net_write(size_t size); // network data written - void logger_handle_net_read(size_t size); // network data read - - void set_start_time(); - - // config for rate limit - - static void set_rate_up_limit(uint64_t limit); - static void set_rate_down_limit(uint64_t limit); - static uint64_t get_rate_up_limit(); - static uint64_t get_rate_down_limit(); - - // config misc - static void set_tos_flag(int tos); // ToS / QoS flag - static int get_tos_flag(); - - // handlers and sleep - void sleep_before_packet(size_t packet_size, int phase, int q_len); // execute a sleep ; phase is not really used now(?) - static void save_limit_to_file(int limit); ///< for dr-monero - static double get_sleep_time(size_t cb); - - static void set_save_graph(bool save_graph); -}; - -} // nameserver -} // nameserver - -#endif - - |