Bitcoin ABC  0.26.3
P2P Digital Currency
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
ArgsManager Class Reference

#include <args.h>

Collaboration diagram for ArgsManager:
[legend]

Classes

struct  Arg
 

Public Types

enum  Flags {
  ALLOW_BOOL = 0x01 , ALLOW_INT = 0x02 , ALLOW_STRING = 0x04 , ALLOW_ANY = ALLOW_BOOL | ALLOW_INT | ALLOW_STRING ,
  DEBUG_ONLY = 0x100 , NETWORK_ONLY = 0x200 , SENSITIVE = 0x400
}
 

Public Member Functions

util::SettingsValue GetSetting (const std::string &arg) const
 Get setting value. More...
 
std::vector< util::SettingsValueGetSettingsList (const std::string &arg) const
 Get list of setting values. More...
 
 ArgsManager ()
 
 ~ArgsManager ()
 
void SelectConfigNetwork (const std::string &network)
 Select the network in use. More...
 
bool ParseParameters (int argc, const char *const argv[], std::string &error)
 
fs::path GetConfigFilePath () const
 Return config file path (read-only) More...
 
bool ReadConfigFiles (std::string &error, bool ignore_invalid_keys=false)
 
const std::set< std::string > GetUnsuitableSectionOnlyArgs () const
 Log warnings for options in m_section_only_args when they are specified in the default section but not overridden on the command line or in a network-specific section in the config file. More...
 
const std::list< SectionInfoGetUnrecognizedSections () const
 Log warnings for unrecognized section names in the config file. More...
 
const fs::pathGetBlocksDirPath () const
 Get blocks directory path. More...
 
const fs::pathGetDataDirBase () const
 Get data directory path. More...
 
const fs::pathGetDataDirNet () const
 Get data directory path with appended network identifier. More...
 
void ClearPathCache ()
 Clear cached directory paths. More...
 
std::vector< std::string > GetArgs (const std::string &strArg) const
 Return a vector of strings of the given argument. More...
 
bool IsArgSet (const std::string &strArg) const
 Return true if the given argument has been manually set. More...
 
bool IsArgNegated (const std::string &strArg) const
 Return true if the argument was originally passed as a negated option, i.e. More...
 
std::string GetArg (const std::string &strArg, const std::string &strDefault) const
 Return string argument or default value. More...
 
std::optional< std::string > GetArg (const std::string &strArg) const
 
fs::path GetPathArg (std::string arg, const fs::path &default_value={}) const
 Return path argument or default value. More...
 
int64_t GetIntArg (const std::string &strArg, int64_t nDefault) const
 Return integer argument or default value. More...
 
std::optional< int64_t > GetIntArg (const std::string &strArg) const
 
bool GetBoolArg (const std::string &strArg, bool fDefault) const
 Return boolean argument or default value. More...
 
std::optional< bool > GetBoolArg (const std::string &strArg) const
 
bool SoftSetArg (const std::string &strArg, const std::string &strValue)
 Set an argument if it doesn't already have a value. More...
 
bool SoftSetBoolArg (const std::string &strArg, bool fValue)
 Set a boolean argument if it doesn't already have a value. More...
 
void ForceSetArg (const std::string &strArg, const std::string &strValue)
 
void ForceSetMultiArg (const std::string &strArg, const std::vector< std::string > &values)
 This function is only used for testing purpose so so we should not worry about element uniqueness and integrity of the data structure. More...
 
std::string GetChainName () const
 Looks for -regtest, -testnet and returns the appropriate BIP70 chain name. More...
 
void AddArg (const std::string &name, const std::string &help, unsigned int flags, const OptionsCategory &cat)
 Add argument. More...
 
void ClearForcedArg (const std::string &strArg)
 Remove a forced arg setting, used only in testing. More...
 
void AddHiddenArgs (const std::vector< std::string > &args)
 Add many hidden arguments. More...
 
void ClearArgs ()
 Clear available arguments. More...
 
std::string GetHelpMessage () const
 Get the help string. More...
 
std::optional< unsigned int > GetArgFlags (const std::string &name) const
 Return Flags for known arg. More...
 
bool InitSettings (std::string &error)
 Read and update settings file with saved settings. More...
 
bool GetSettingsPath (fs::path *filepath=nullptr, bool temp=false, bool backup=false) const
 Get settings file path, or return false if read-write settings were disabled with -nosettings. More...
 
bool ReadSettingsFile (std::vector< std::string > *errors=nullptr)
 Read settings file. More...
 
bool WriteSettingsFile (std::vector< std::string > *errors=nullptr, bool backup=false) const
 Write settings file or backup settings file. More...
 
util::SettingsValue GetPersistentSetting (const std::string &name) const
 Get current setting from config file or read/write settings file, ignoring nonpersistent command line or forced settings values. More...
 
template<typename Fn >
void LockSettings (Fn &&fn)
 Access settings with lock held. More...
 
void LogArgs () const
 Log the config file options and the command line arguments, useful for troubleshooting. More...
 
void EnsureDataDir () const
 If datadir does not exist, create it along with wallets/ subdirectory(s). More...
 

Protected Member Functions

util::Settings m_settings GUARDED_BY (cs_args)
 
std::string m_network GUARDED_BY (cs_args)
 
std::set< std::string > m_network_only_args GUARDED_BY (cs_args)
 
std::map< OptionsCategory, std::map< std::string, Arg > > m_available_args GUARDED_BY (cs_args)
 
std::list< SectionInfo > m_config_sections GUARDED_BY (cs_args)
 
fs::path m_cached_blocks_path GUARDED_BY (cs_args)
 
fs::path m_cached_datadir_path GUARDED_BY (cs_args)
 
fs::path m_cached_network_datadir_path GUARDED_BY (cs_args)
 
bool ReadConfigStream (std::istream &stream, const std::string &filepath, std::string &error, bool ignore_invalid_keys=false)
 
bool UseDefaultSection (const std::string &arg) const EXCLUSIVE_LOCKS_REQUIRED(cs_args)
 Returns true if settings values from the default section should be used, depending on the current network and whether the setting is network-specific. More...
 

Protected Attributes

RecursiveMutex cs_args
 

Private Member Functions

const fs::pathGetDataDir (bool net_specific) const
 Get data directory path. More...
 
void logArgsPrefix (const std::string &prefix, const std::string &section, const std::map< std::string, std::vector< util::SettingsValue >> &args) const
 

Detailed Description

Definition at line 96 of file args.h.

Member Enumeration Documentation

◆ Flags

Enumerator
ALLOW_BOOL 
ALLOW_INT 
ALLOW_STRING 
ALLOW_ANY 
DEBUG_ONLY 
NETWORK_ONLY 
SENSITIVE 

Definition at line 98 of file args.h.

Constructor & Destructor Documentation

◆ ArgsManager()

ArgsManager::ArgsManager ( )

Definition at line 130 of file args.cpp.

◆ ~ArgsManager()

ArgsManager::~ArgsManager ( )

Definition at line 131 of file args.cpp.

Member Function Documentation

◆ AddArg()

void ArgsManager::AddArg ( const std::string &  name,
const std::string &  help,
unsigned int  flags,
const OptionsCategory cat 
)

Add argument.

Definition at line 620 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddHiddenArgs()

void ArgsManager::AddHiddenArgs ( const std::vector< std::string > &  args)

Add many hidden arguments.

Definition at line 642 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ClearArgs()

void ArgsManager::ClearArgs ( )
inline

Clear available arguments.

Definition at line 346 of file args.h.

◆ ClearForcedArg()

void ArgsManager::ClearForcedArg ( const std::string &  strArg)

Remove a forced arg setting, used only in testing.

Definition at line 648 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ClearPathCache()

void ArgsManager::ClearPathCache ( )

Clear cached directory paths.

Definition at line 363 of file args.cpp.

Here is the caller graph for this function:

◆ EnsureDataDir()

void ArgsManager::EnsureDataDir ( ) const

If datadir does not exist, create it along with wallets/ subdirectory(s).

"/wallets" subdirectories are created in all new datadirs, because wallet code will create new wallets in the "wallets" subdirectory only if exists already, otherwise it will create them in the top-level datadir where they could interfere with other files. Wallet init code currently avoids creating "wallets" directories itself for backwards compatibility, but this be changed in the future and wallet code here could go away.

Definition at line 343 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ForceSetArg()

void ArgsManager::ForceSetArg ( const std::string &  strArg,
const std::string &  strValue 
)

Definition at line 597 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ForceSetMultiArg()

void ArgsManager::ForceSetMultiArg ( const std::string &  strArg,
const std::vector< std::string > &  values 
)

This function is only used for testing purpose so so we should not worry about element uniqueness and integrity of the data structure.

Definition at line 608 of file args.cpp.

Here is the call graph for this function:

◆ GetArg() [1/2]

std::optional< std::string > ArgsManager::GetArg ( const std::string &  strArg) const

Definition at line 500 of file args.cpp.

Here is the call graph for this function:

◆ GetArg() [2/2]

std::string ArgsManager::GetArg ( const std::string &  strArg,
const std::string &  strDefault 
) const

Return string argument or default value.

Parameters
strArgArgument to get (e.g. "-foo")
strDefault(e.g. "1")
Returns
command-line argument or default value

Definition at line 494 of file args.cpp.

Here is the caller graph for this function:

◆ GetArgFlags()

std::optional< unsigned int > ArgsManager::GetArgFlags ( const std::string &  name) const

Return Flags for known arg.

Return std::nullopt for unknown arg.

Definition at line 264 of file args.cpp.

Here is the caller graph for this function:

◆ GetArgs()

std::vector< std::string > ArgsManager::GetArgs ( const std::string &  strArg) const

Return a vector of strings of the given argument.

Parameters
strArgArgument to get (e.g. "-foo")
Returns
command-line arguments

Definition at line 371 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetBlocksDirPath()

const fs::path & ArgsManager::GetBlocksDirPath ( ) const

Get blocks directory path.

Returns
Blocks path which is network specific

Definition at line 289 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetBoolArg() [1/2]

std::optional< bool > ArgsManager::GetBoolArg ( const std::string &  strArg) const

Definition at line 560 of file args.cpp.

Here is the call graph for this function:

◆ GetBoolArg() [2/2]

bool ArgsManager::GetBoolArg ( const std::string &  strArg,
bool  fDefault 
) const

Return boolean argument or default value.

Parameters
strArgArgument to get (e.g. "-foo")
fDefault(true or false)
Returns
command-line argument or default value

Definition at line 556 of file args.cpp.

◆ GetChainName()

std::string ArgsManager::GetChainName ( ) const

Looks for -regtest, -testnet and returns the appropriate BIP70 chain name.

Returns
CBaseChainParams::MAIN by default; raises runtime error if an invalid combination is given.

Definition at line 793 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetConfigFilePath()

fs::path ArgsManager::GetConfigFilePath ( ) const

Return config file path (read-only)

Definition at line 789 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDataDir()

const fs::path & ArgsManager::GetDataDir ( bool  net_specific) const
private

Get data directory path.

Parameters
net_specificAppend network identifier to the returned path
Returns
Absolute path on success, otherwise an empty path when a non-directory path would be returned

Definition at line 315 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDataDirBase()

const fs::path& ArgsManager::GetDataDirBase ( ) const
inline

Get data directory path.

Returns
Absolute path on success, otherwise an empty path when a non-directory path would be returned
Postcondition
Returned directory path is created unless it is empty

Definition at line 206 of file args.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDataDirNet()

const fs::path& ArgsManager::GetDataDirNet ( ) const
inline

Get data directory path with appended network identifier.

Returns
Absolute path on success, otherwise an empty path when a non-directory path would be returned
Postcondition
Returned directory path is created unless it is empty

Definition at line 215 of file args.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetHelpMessage()

std::string ArgsManager::GetHelpMessage ( ) const

Get the help string.

Definition at line 653 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIntArg() [1/2]

std::optional< int64_t > ArgsManager::GetIntArg ( const std::string &  strArg) const

Definition at line 531 of file args.cpp.

Here is the call graph for this function:

◆ GetIntArg() [2/2]

int64_t ArgsManager::GetIntArg ( const std::string &  strArg,
int64_t  nDefault 
) const

Return integer argument or default value.

Parameters
strArgArgument to get (e.g. "-foo")
nDefault(e.g. 1)
Returns
command-line argument (0 if invalid number) or default value

Definition at line 526 of file args.cpp.

Here is the caller graph for this function:

◆ GetPathArg()

fs::path ArgsManager::GetPathArg ( std::string  arg,
const fs::path default_value = {} 
) const

Return path argument or default value.

Parameters
argArgument to get a path from (e.g., "-datadir", "-blocksdir" or "-walletdir")
default_valueOptional default value to return instead of the empty path.
Returns
normalized path if argument is set, with redundant "." and ".." path components and trailing separators removed (see patharg unit test for examples or implementation for details). If argument is empty or not set, default_value is returned unchanged.

Definition at line 275 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPersistentSetting()

util::SettingsValue ArgsManager::GetPersistentSetting ( const std::string &  name) const

Get current setting from config file or read/write settings file, ignoring nonpersistent command line or forced settings values.

Definition at line 483 of file args.cpp.

Here is the call graph for this function:

◆ GetSetting()

util::SettingsValue ArgsManager::GetSetting ( const std::string &  arg) const

Get setting value.

Result will be null if setting was unset, true if "-setting" argument was passed false if "-nosetting" argument was passed, and a string if a "-setting=value" argument was passed.

Definition at line 828 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetSettingsList()

std::vector< util::SettingsValue > ArgsManager::GetSettingsList ( const std::string &  arg) const

Get list of setting values.

Definition at line 837 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetSettingsPath()

bool ArgsManager::GetSettingsPath ( fs::path filepath = nullptr,
bool  temp = false,
bool  backup = false 
) const

Get settings file path, or return false if read-write settings were disabled with -nosettings.

Definition at line 405 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetUnrecognizedSections()

const std::list< SectionInfo > ArgsManager::GetUnrecognizedSections ( ) const

Log warnings for unrecognized section names in the config file.

Definition at line 157 of file args.cpp.

Here is the caller graph for this function:

◆ GetUnsuitableSectionOnlyArgs()

const std::set< std::string > ArgsManager::GetUnsuitableSectionOnlyArgs ( ) const

Log warnings for options in m_section_only_args when they are specified in the default section but not overridden on the command line or in a network-specific section in the config file.

Definition at line 133 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GUARDED_BY() [1/8]

util::Settings m_settings ArgsManager::GUARDED_BY ( cs_args  )
protected

◆ GUARDED_BY() [2/8]

std::string m_network ArgsManager::GUARDED_BY ( cs_args  )
protected

◆ GUARDED_BY() [3/8]

std::set<std::string> m_network_only_args ArgsManager::GUARDED_BY ( cs_args  )
protected

◆ GUARDED_BY() [4/8]

std::map<OptionsCategory, std::map<std::string, Arg> > m_available_args ArgsManager::GUARDED_BY ( cs_args  )
protected

◆ GUARDED_BY() [5/8]

std::list<SectionInfo> m_config_sections ArgsManager::GUARDED_BY ( cs_args  )
protected

◆ GUARDED_BY() [6/8]

fs::path m_cached_blocks_path ArgsManager::GUARDED_BY ( cs_args  )
mutableprotected

◆ GUARDED_BY() [7/8]

fs::path m_cached_datadir_path ArgsManager::GUARDED_BY ( cs_args  )
mutableprotected

◆ GUARDED_BY() [8/8]

fs::path m_cached_network_datadir_path ArgsManager::GUARDED_BY ( cs_args  )
mutableprotected

◆ InitSettings()

bool ArgsManager::InitSettings ( std::string &  error)

Read and update settings file with saved settings.

This needs to be called after SelectParams() because the settings file location is network-specific.

Definition at line 385 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsArgNegated()

bool ArgsManager::IsArgNegated ( const std::string &  strArg) const

Return true if the argument was originally passed as a negated option, i.e.

-nofoo.

Parameters
strArgArgument to get (e.g. "-foo")
Returns
true if the argument was passed negated

Definition at line 490 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsArgSet()

bool ArgsManager::IsArgSet ( const std::string &  strArg) const

Return true if the given argument has been manually set.

Parameters
strArgArgument to get (e.g. "-foo")
Returns
true if the argument has been set

Definition at line 381 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LockSettings()

template<typename Fn >
void ArgsManager::LockSettings ( Fn &&  fn)
inline

Access settings with lock held.

Definition at line 398 of file args.h.

Here is the caller graph for this function:

◆ LogArgs()

void ArgsManager::LogArgs ( ) const

Log the config file options and the command line arguments, useful for troubleshooting.

Definition at line 860 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ logArgsPrefix()

void ArgsManager::logArgsPrefix ( const std::string &  prefix,
const std::string &  section,
const std::map< std::string, std::vector< util::SettingsValue >> &  args 
) const
private

Definition at line 843 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ParseParameters()

bool ArgsManager::ParseParameters ( int  argc,
const char *const  argv[],
std::string &  error 
)

Definition at line 201 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ReadConfigFiles()

bool ArgsManager::ReadConfigFiles ( std::string &  error,
bool  ignore_invalid_keys = false 
)

Definition at line 130 of file configfile.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ReadConfigStream()

bool ArgsManager::ReadConfigStream ( std::istream &  stream,
const std::string &  filepath,
std::string &  error,
bool  ignore_invalid_keys = false 
)
protected

Definition at line 95 of file configfile.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ReadSettingsFile()

bool ArgsManager::ReadSettingsFile ( std::vector< std::string > *  errors = nullptr)

Read settings file.

Push errors to vector, or log them if null.

Definition at line 432 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SelectConfigNetwork()

void ArgsManager::SelectConfigNetwork ( const std::string &  network)

Select the network in use.

Definition at line 172 of file args.cpp.

Here is the caller graph for this function:

◆ SoftSetArg()

bool ArgsManager::SoftSetArg ( const std::string &  strArg,
const std::string &  strValue 
)

Set an argument if it doesn't already have a value.

Parameters
strArgArgument to set (e.g. "-foo")
strValueValue (e.g. "1")
Returns
true if argument gets set, false if it already had a value

Definition at line 579 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SoftSetBoolArg()

bool ArgsManager::SoftSetBoolArg ( const std::string &  strArg,
bool  fValue 
)

Set a boolean argument if it doesn't already have a value.

Parameters
strArgArgument to set (e.g. "-foo")
fValueValue (e.g. false)
Returns
true if argument gets set, false if it already had a value

Definition at line 589 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UseDefaultSection()

bool ArgsManager::UseDefaultSection ( const std::string &  arg) const
protected

Returns true if settings values from the default section should be used, depending on the current network and whether the setting is network-specific.

Definition at line 823 of file args.cpp.

Here is the caller graph for this function:

◆ WriteSettingsFile()

bool ArgsManager::WriteSettingsFile ( std::vector< std::string > *  errors = nullptr,
bool  backup = false 
) const

Write settings file or backup settings file.

Push errors to vector, or log them if null.

Definition at line 457 of file args.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ cs_args

RecursiveMutex ArgsManager::cs_args
mutableprotected

Definition at line 122 of file args.h.


The documentation for this class was generated from the following files: