Electroneum
Toggle main menu visibility
Loading...
Searching...
No Matches
connection_context.h
Go to the documentation of this file.
1
// Copyrights(c) 2017-2021, The Electroneum Project
2
// Copyrights(c) 2014-2019, The Monero Project
3
//
4
// All rights reserved.
5
//
6
// Redistribution and use in source and binary forms, with or without modification, are
7
// permitted provided that the following conditions are met:
8
//
9
// 1. Redistributions of source code must retain the above copyright notice, this list of
10
// conditions and the following disclaimer.
11
//
12
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
13
// of conditions and the following disclaimer in the documentation and/or other
14
// materials provided with the distribution.
15
//
16
// 3. Neither the name of the copyright holder nor the names of its contributors may be
17
// used to endorse or promote products derived from this software without specific
18
// prior written permission.
19
//
20
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
21
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
23
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
27
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
28
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
//
30
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
31
32
#pragma once
33
#include <unordered_set>
34
#include <atomic>
35
#include "
net/net_utils_base.h
"
36
#include "
copyable_atomic.h
"
37
38
namespace
cryptonote
39
{
40
41
struct
cryptonote_connection_context
:
public
epee::net_utils::connection_context_base
42
{
43
cryptonote_connection_context
():
m_state
(
state_before_handshake
),
m_remote_blockchain_height
(0),
m_last_response_height
(0),
44
m_last_request_time
(
boost
::date_time::not_a_date_time),
m_callback_request_count
(0),
45
m_last_known_hash
(
crypto
::null_hash),
m_pruning_seed
(0),
m_rpc_port
(0),
m_anchor
(
false
) {}
46
47
enum
state
48
{
49
state_before_handshake
= 0,
//default state
50
state_synchronizing
,
51
state_standby
,
52
state_idle
,
53
state_normal
54
};
55
56
state
m_state
;
57
std::vector<crypto::hash>
m_needed_objects
;
58
std::unordered_set<crypto::hash>
m_requested_objects
;
59
uint64_t
m_remote_blockchain_height
;
60
uint64_t
m_last_response_height
;
61
boost::posix_time::ptime
m_last_request_time
;
62
epee::copyable_atomic
m_callback_request_count
;
//in debug purpose: problem with double callback rise
63
crypto::hash
m_last_known_hash
;
64
uint32_t
m_pruning_seed
;
65
uint16_t
m_rpc_port
;
66
bool
m_anchor
;
67
std::list<std::pair<std::string, uint8_t>>
emergency_lists_recv
;
68
std::list<std::string>
emergency_lists_sent
;
69
//size_t m_score; TODO: add score calculations
70
};
71
72
inline
std::string
get_protocol_state_string
(
cryptonote_connection_context::state
s)
73
{
74
switch
(s)
75
{
76
case
cryptonote_connection_context::state_before_handshake
:
77
return
"before_handshake"
;
78
case
cryptonote_connection_context::state_synchronizing
:
79
return
"synchronizing"
;
80
case
cryptonote_connection_context::state_standby
:
81
return
"standby"
;
82
case
cryptonote_connection_context::state_idle
:
83
return
"idle"
;
84
case
cryptonote_connection_context::state_normal
:
85
return
"normal"
;
86
default
:
87
return
"unknown"
;
88
}
89
}
90
91
inline
char
get_protocol_state_char
(
cryptonote_connection_context::state
s)
92
{
93
switch
(s)
94
{
95
case
cryptonote_connection_context::state_before_handshake
:
96
return
'h'
;
97
case
cryptonote_connection_context::state_synchronizing
:
98
return
's'
;
99
case
cryptonote_connection_context::state_standby
:
100
return
'w'
;
101
case
cryptonote_connection_context::state_idle
:
102
return
'i'
;
103
case
cryptonote_connection_context::state_normal
:
104
return
'n'
;
105
default
:
106
return
'u'
;
107
}
108
}
109
110
}
epee::copyable_atomic
Definition
copyable_atomic.h:34
copyable_atomic.h
boost
Definition
portable_binary_archive.hpp:29
crypto
crypto namespace.
Definition
crypto.cpp:58
crypto::hash
POD_CLASS hash
Definition
hash.h:50
cryptonote
Holds cryptonote related classes and helpers.
Definition
ban.cpp:40
cryptonote::get_protocol_state_string
std::string get_protocol_state_string(cryptonote_connection_context::state s)
Definition
connection_context.h:72
cryptonote::get_protocol_state_char
char get_protocol_state_char(cryptonote_connection_context::state s)
Definition
connection_context.h:91
net_utils_base.h
false
#define false
uint16_t
unsigned short uint16_t
Definition
stdint.h:125
uint32_t
unsigned int uint32_t
Definition
stdint.h:126
uint64_t
unsigned __int64 uint64_t
Definition
stdint.h:136
cryptonote::cryptonote_connection_context::m_requested_objects
std::unordered_set< crypto::hash > m_requested_objects
Definition
connection_context.h:58
cryptonote::cryptonote_connection_context::state
state
Definition
connection_context.h:48
cryptonote::cryptonote_connection_context::state_before_handshake
@ state_before_handshake
Definition
connection_context.h:49
cryptonote::cryptonote_connection_context::state_normal
@ state_normal
Definition
connection_context.h:53
cryptonote::cryptonote_connection_context::state_standby
@ state_standby
Definition
connection_context.h:51
cryptonote::cryptonote_connection_context::state_synchronizing
@ state_synchronizing
Definition
connection_context.h:50
cryptonote::cryptonote_connection_context::state_idle
@ state_idle
Definition
connection_context.h:52
cryptonote::cryptonote_connection_context::cryptonote_connection_context
cryptonote_connection_context()
Definition
connection_context.h:43
cryptonote::cryptonote_connection_context::m_needed_objects
std::vector< crypto::hash > m_needed_objects
Definition
connection_context.h:57
cryptonote::cryptonote_connection_context::m_last_response_height
uint64_t m_last_response_height
Definition
connection_context.h:60
cryptonote::cryptonote_connection_context::m_last_known_hash
crypto::hash m_last_known_hash
Definition
connection_context.h:63
cryptonote::cryptonote_connection_context::m_rpc_port
uint16_t m_rpc_port
Definition
connection_context.h:65
cryptonote::cryptonote_connection_context::m_remote_blockchain_height
uint64_t m_remote_blockchain_height
Definition
connection_context.h:59
cryptonote::cryptonote_connection_context::m_pruning_seed
uint32_t m_pruning_seed
Definition
connection_context.h:64
cryptonote::cryptonote_connection_context::emergency_lists_sent
std::list< std::string > emergency_lists_sent
Definition
connection_context.h:68
cryptonote::cryptonote_connection_context::emergency_lists_recv
std::list< std::pair< std::string, uint8_t > > emergency_lists_recv
Definition
connection_context.h:67
cryptonote::cryptonote_connection_context::m_last_request_time
boost::posix_time::ptime m_last_request_time
Definition
connection_context.h:61
cryptonote::cryptonote_connection_context::m_state
state m_state
Definition
connection_context.h:56
cryptonote::cryptonote_connection_context::m_anchor
bool m_anchor
Definition
connection_context.h:66
cryptonote::cryptonote_connection_context::m_callback_request_count
epee::copyable_atomic m_callback_request_count
Definition
connection_context.h:62
epee::net_utils::connection_context_base
Definition
net_utils_base.h:248
src
cryptonote_basic
connection_context.h
Generated on
for Electroneum by
1.17.0