BinkConfig::BinkConfig(const std::string& callout_network_name, const Config& config, const Networks& networks) : config_(config), callout_network_name_(callout_network_name), networks_(networks) { // network names will alwyas be compared lower case. StringLowerCase(&callout_network_name_); system_name_ = config.config()->systemname; if (system_name_.empty()) { system_name_ = "Unnamed WWIV BBS"; } sysop_name_ = config.config()->sysopname; if (sysop_name_.empty()) { sysop_name_ = "Unknown WWIV SysOp"; } gfiles_directory_ = config.config()->gfilesdir; if (networks.contains(callout_network_name)) { const net_networks_rec& net = networks[callout_network_name]; if (net.type == network_type_t::wwivnet) { callout_wwivnet_node_ = net.sysnum; if (callout_wwivnet_node_ == 0) { throw config_error(StringPrintf("NODE not specified for network: '%s'", callout_network_name.c_str())); } binkp_.reset(new Binkp(net.dir)); } else if (net.type == network_type_t::ftn) { callout_fido_node_ = net.fido.fido_address; if (callout_fido_node_.empty()) { throw config_error(StringPrintf("NODE not specified for network: '%s'", callout_network_name.c_str())); } } else { throw config_error("BinkP is not supported for this network type."); } // TODO(rushfan): This needs to be a shim binkp that reads from the nodelist // or overrides. binkp_.reset(new Binkp(net.dir)); } }