Monero
Toggle main menu visibility
Loading...
Searching...
No Matches
src
daemon
core.h
Go to the documentation of this file.
1
// Copyright (c) 2014-2022, The Monero Project
2
//
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without modification, are
6
// permitted provided that the following conditions are met:
7
//
8
// 1. Redistributions of source code must retain the above copyright notice, this list of
9
// conditions and the following disclaimer.
10
//
11
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12
// of conditions and the following disclaimer in the documentation and/or other
13
// materials provided with the distribution.
14
//
15
// 3. Neither the name of the copyright holder nor the names of its contributors may be
16
// used to endorse or promote products derived from this software without specific
17
// prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29
#pragma once
30
31
#include "
blocks/blocks.h
"
32
#include "
cryptonote_core/cryptonote_core.h
"
33
#include "
cryptonote_protocol/cryptonote_protocol_handler.h
"
34
#include "
misc_log_ex.h
"
35
#include "
daemon/command_line_args.h
"
36
37
#undef MONERO_DEFAULT_LOG_CATEGORY
38
#define MONERO_DEFAULT_LOG_CATEGORY "daemon"
39
40
namespace
daemonize
41
{
42
43
class
t_core
final
44
{
45
public
:
46
static
void
init_options
(boost::program_options::options_description & option_spec)
47
{
48
cryptonote::core::init_options
(option_spec);
49
}
50
private
:
51
typedef
cryptonote::t_cryptonote_protocol_handler<cryptonote::core>
t_protocol_raw
;
52
cryptonote::core
m_core
;
53
// TEMPORARY HACK - Yes, this creates a copy, but otherwise the original
54
// variable map could go out of scope before the run method is called
55
boost::program_options::variables_map
const
m_vm_HACK
;
56
public
:
57
t_core
(
58
boost::program_options::variables_map
const
&
vm
59
)
60
:
m_core
{nullptr}
61
,
m_vm_HACK
{
vm
}
62
{
63
//initialize core here
64
MGINFO(
"Initializing core..."
);
65
#if defined(PER_BLOCK_CHECKPOINT)
66
const
cryptonote::GetCheckpointsCallback
& get_checkpoints = blocks::GetCheckpointsData;
67
#else
68
const
cryptonote::GetCheckpointsCallback
& get_checkpoints =
nullptr
;
69
#endif
70
71
if
(
command_line::is_arg_defaulted
(
vm
,
daemon_args::arg_proxy
) &&
command_line::get_arg
(
vm
,
daemon_args::arg_proxy_allow_dns_leaks
)) {
72
MLOG_RED(
el::Level::Warning
,
"--"
<<
daemon_args::arg_proxy_allow_dns_leaks
.name <<
" is enabled, but --"
73
<<
daemon_args::arg_proxy
.name <<
" is not specified."
);
74
}
75
76
const
bool
allow_dns =
command_line::is_arg_defaulted
(
vm
,
daemon_args::arg_proxy
) ||
command_line::get_arg
(
vm
,
daemon_args::arg_proxy_allow_dns_leaks
);
77
if
(!
m_core
.init(
m_vm_HACK
,
nullptr
, get_checkpoints, allow_dns))
78
{
79
throw
std::runtime_error(
"Failed to initialize core"
);
80
}
81
MGINFO(
"Core initialized OK"
);
82
}
83
84
// TODO - get rid of circular dependencies in internals
85
void
set_protocol
(
t_protocol_raw
& protocol)
86
{
87
m_core
.set_cryptonote_protocol(&protocol);
88
}
89
90
bool
run
()
91
{
92
return
true
;
93
}
94
95
cryptonote::core
&
get
()
96
{
97
return
m_core
;
98
}
99
100
~t_core
()
101
{
102
MGINFO(
"Deinitializing core..."
);
103
try
{
104
m_core
.deinit();
105
m_core
.set_cryptonote_protocol(
nullptr
);
106
}
catch
(...) {
107
MERROR(
"Failed to deinitialize core..."
);
108
}
109
}
110
};
111
112
}
blocks.h
cryptonote::core
handles core cryptonote functionality
Definition
cryptonote_core.h:87
cryptonote::core::init_options
static void init_options(boost::program_options::options_description &desc)
adds command line options to the given options set
Definition
cryptonote_core.cpp:314
cryptonote::t_cryptonote_protocol_handler
Definition
cryptonote_protocol_handler.h:80
daemonize::t_core::get
cryptonote::core & get()
Definition
core.h:95
daemonize::t_core::run
bool run()
Definition
core.h:90
daemonize::t_core::m_core
cryptonote::core m_core
Definition
core.h:52
daemonize::t_core::set_protocol
void set_protocol(t_protocol_raw &protocol)
Definition
core.h:85
daemonize::t_core::init_options
static void init_options(boost::program_options::options_description &option_spec)
Definition
core.h:46
daemonize::t_core::~t_core
~t_core()
Definition
core.h:100
daemonize::t_core::t_protocol_raw
cryptonote::t_cryptonote_protocol_handler< cryptonote::core > t_protocol_raw
Definition
core.h:51
daemonize::t_core::t_core
t_core(boost::program_options::variables_map const &vm)
Definition
core.h:57
daemonize::t_core::m_vm_HACK
boost::program_options::variables_map const m_vm_HACK
Definition
core.h:55
command_line_args.h
cryptonote_core.h
cryptonote_protocol_handler.h
This is the original cryptonote protocol network-events handler, modified by us.
misc_log_ex.h
command_line::is_arg_defaulted
bool is_arg_defaulted(const boost::program_options::variables_map &vm, const arg_descriptor< T, required, dependent, NUM_DEPS > &arg)
Definition
command_line.h:263
command_line::get_arg
T get_arg(const boost::program_options::variables_map &vm, const arg_descriptor< T, false, true > &arg)
Definition
command_line.h:269
cryptonote::GetCheckpointsCallback
std::function< const epee::span< const unsigned char >(cryptonote::network_type network)> GetCheckpointsCallback
Callback routine that returns checkpoints data for specific network type.
Definition
blockchain.h:93
daemon_args::arg_proxy_allow_dns_leaks
const command_line::arg_descriptor< bool > arg_proxy_allow_dns_leaks
Definition
command_line_args.h:104
daemon_args::arg_proxy
const command_line::arg_descriptor< std::string > arg_proxy
Definition
command_line_args.h:99
daemonize
Definition
command_parser_executor.cpp:39
el::Level::Warning
@ Warning
Useful when application has potentially harmful situtaions.
Definition
easylogging++.h:603
vm
randomx_vm * vm
Definition
tests.cpp:20
Generated on
for Monero by
1.17.0