@ -56,6 +56,7 @@ namespace {
class NodeImpl : public Node
{
public :
NodeImpl ( NodeContext * context ) { setContext ( context ) ; }
void initError ( const bilingual_str & message ) override { InitError ( message ) ; }
bool parseParameters ( int argc , const char * const argv [ ] , std : : string & error ) override
{
@ -81,13 +82,13 @@ public:
}
bool appInitMain ( ) override
{
m_context . chain = MakeChain ( m_context ) ;
return AppInitMain ( m_context_ref , m_context ) ;
m_context - > chain = MakeChain ( * m_context ) ;
return AppInitMain ( m_context_ref , * m_context ) ;
}
void appShutdown ( ) override
{
Interrupt ( m_context ) ;
Shutdown ( m_context ) ;
Interrupt ( * m_context ) ;
Shutdown ( * m_context ) ;
}
void startShutdown ( ) override
{
@ -108,19 +109,19 @@ public:
StopMapPort ( ) ;
}
}
void setupServerArgs ( ) override { return SetupServerArgs ( m_context ) ; }
void setupServerArgs ( ) override { return SetupServerArgs ( * m_context ) ; }
bool getProxy ( Network net , proxyType & proxy_info ) override { return GetProxy ( net , proxy_info ) ; }
size_t getNodeCount ( CConnman : : NumConnections flags ) override
{
return m_context . connman ? m_context . connman - > GetNodeCount ( flags ) : 0 ;
return m_context - > connman ? m_context - > connman - > GetNodeCount ( flags ) : 0 ;
}
bool getNodesStats ( NodesStats & stats ) override
{
stats . clear ( ) ;
if ( m_context . connman ) {
if ( m_context - > connman ) {
std : : vector < CNodeStats > stats_temp ;
m_context . connman - > GetNodeStats ( stats_temp ) ;
m_context - > connman - > GetNodeStats ( stats_temp ) ;
stats . reserve ( stats_temp . size ( ) ) ;
for ( auto & node_stats_temp : stats_temp ) {
@ -141,46 +142,46 @@ public:
}
bool getBanned ( banmap_t & banmap ) override
{
if ( m_context . banman ) {
m_context . banman - > GetBanned ( banmap ) ;
if ( m_context - > banman ) {
m_context - > banman - > GetBanned ( banmap ) ;
return true ;
}
return false ;
}
bool ban ( const CNetAddr & net_addr , int64_t ban_time_offset ) override
{
if ( m_context . banman ) {
m_context . banman - > Ban ( net_addr , ban_time_offset ) ;
if ( m_context - > banman ) {
m_context - > banman - > Ban ( net_addr , ban_time_offset ) ;
return true ;
}
return false ;
}
bool unban ( const CSubNet & ip ) override
{
if ( m_context . banman ) {
m_context . banman - > Unban ( ip ) ;
if ( m_context - > banman ) {
m_context - > banman - > Unban ( ip ) ;
return true ;
}
return false ;
}
bool disconnectByAddress ( const CNetAddr & net_addr ) override
{
if ( m_context . connman ) {
return m_context . connman - > DisconnectNode ( net_addr ) ;
if ( m_context - > connman ) {
return m_context - > connman - > DisconnectNode ( net_addr ) ;
}
return false ;
}
bool disconnectById ( NodeId id ) override
{
if ( m_context . connman ) {
return m_context . connman - > DisconnectNode ( id ) ;
if ( m_context - > connman ) {
return m_context - > connman - > DisconnectNode ( id ) ;
}
return false ;
}
int64_t getTotalBytesRecv ( ) override { return m_context . connman ? m_context . connman - > GetTotalBytesRecv ( ) : 0 ; }
int64_t getTotalBytesSent ( ) override { return m_context . connman ? m_context . connman - > GetTotalBytesSent ( ) : 0 ; }
size_t getMempoolSize ( ) override { return m_context . mempool ? m_context . mempool - > size ( ) : 0 ; }
size_t getMempoolDynamicUsage ( ) override { return m_context . mempool ? m_context . mempool - > DynamicMemoryUsage ( ) : 0 ; }
int64_t getTotalBytesRecv ( ) override { return m_context - > connman ? m_context - > connman - > GetTotalBytesRecv ( ) : 0 ; }
int64_t getTotalBytesSent ( ) override { return m_context - > connman ? m_context - > connman - > GetTotalBytesSent ( ) : 0 ; }
size_t getMempoolSize ( ) override { return m_context - > mempool ? m_context - > mempool - > size ( ) : 0 ; }
size_t getMempoolDynamicUsage ( ) override { return m_context - > mempool ? m_context - > mempool - > DynamicMemoryUsage ( ) : 0 ; }
bool getHeaderTip ( int & height , int64_t & block_time ) override
{
LOCK ( : : cs_main ) ;
@ -223,11 +224,11 @@ public:
bool getImporting ( ) override { return : : fImporting ; }
void setNetworkActive ( bool active ) override
{
if ( m_context . connman ) {
m_context . connman - > SetNetworkActive ( active ) ;
if ( m_context - > connman ) {
m_context - > connman - > SetNetworkActive ( active ) ;
}
}
bool getNetworkActive ( ) override { return m_context . connman & & m_context . connman - > GetNetworkActive ( ) ; }
bool getNetworkActive ( ) override { return m_context - > connman & & m_context - > connman - > GetNetworkActive ( ) ; }
CFeeRate estimateSmartFee ( int num_blocks , bool conservative , int * returned_target = nullptr ) override
{
FeeCalculation fee_calc ;
@ -269,7 +270,7 @@ public:
std : : vector < std : : unique_ptr < Wallet > > getWallets ( ) override
{
std : : vector < std : : unique_ptr < Wallet > > wallets ;
for ( auto & client : m_context . chain_clients ) {
for ( auto & client : m_context - > chain_clients ) {
auto client_wallets = client - > getWallets ( ) ;
std : : move ( client_wallets . begin ( ) , client_wallets . end ( ) , std : : back_inserter ( wallets ) ) ;
}
@ -277,12 +278,12 @@ public:
}
std : : unique_ptr < Wallet > loadWallet ( const std : : string & name , bilingual_str & error , std : : vector < bilingual_str > & warnings ) override
{
return MakeWallet ( LoadWallet ( * m_context . chain , name , error , warnings ) ) ;
return MakeWallet ( LoadWallet ( * m_context - > chain , name , error , warnings ) ) ;
}
std : : unique_ptr < Wallet > createWallet ( const SecureString & passphrase , uint64_t wallet_creation_flags , const std : : string & name , bilingual_str & error , std : : vector < bilingual_str > & warnings , WalletCreationStatus & status ) override
{
std : : shared_ptr < CWallet > wallet ;
status = CreateWallet ( * m_context . chain , passphrase , wallet_creation_flags , name , error , warnings , wallet ) ;
status = CreateWallet ( * m_context - > chain , passphrase , wallet_creation_flags , name , error , warnings , wallet ) ;
return MakeWallet ( wallet ) ;
}
std : : unique_ptr < Handler > handleInitMessage ( InitMessageFn fn ) override
@ -336,13 +337,22 @@ public:
/* verification progress is unused when a header was received */ 0 ) ;
} ) ) ;
}
NodeContext * context ( ) override { return & m_context ; }
NodeContext m_context ;
util : : Ref m_context_ref { m_context } ;
NodeContext * context ( ) override { return m_context ; }
void setContext ( NodeContext * context ) override
{
m_context = context ;
if ( context ) {
m_context_ref . Set ( * context ) ;
} else {
m_context_ref . Clear ( ) ;
}
}
NodeContext * m_context { nullptr } ;
util : : Ref m_context_ref ;
} ;
} // namespace
std : : unique_ptr < Node > MakeNode ( ) { return MakeUnique < NodeImpl > ( ) ; }
std : : unique_ptr < Node > MakeNode ( NodeContext * context ) { return MakeUnique < NodeImpl > ( context ) ; }
} // namespace interfaces