program_options.rs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. use std::net::SocketAddr;
  2. use darkfi::{net, Result};
  3. pub struct ProgramOptions {
  4. pub network_settings: net::Settings,
  5. pub log_path: Box<std::path::PathBuf>,
  6. pub irc_accept_addr: SocketAddr,
  7. pub rpc_listen_addr: SocketAddr,
  8. }
  9. impl ProgramOptions {
  10. pub fn load() -> Result<ProgramOptions> {
  11. let app = clap_app!(dfi =>
  12. (version: "0.1.0")
  13. (author: "Amir Taaki <amir@dyne.org>")
  14. (about: "Dark node")
  15. (@arg ACCEPT: -a --accept +takes_value "Accept address")
  16. (@arg SEED_NODES: -s --seeds +takes_value ... "Seed nodes")
  17. (@arg CONNECTS: -c --connect +takes_value ... "Manual connections")
  18. (@arg CONNECT_SLOTS: --slots +takes_value "Connection slots")
  19. (@arg EXTERNAL_ADDR: -e --external +takes_value "External address")
  20. (@arg LOG_PATH: --log +takes_value "Logfile path")
  21. (@arg IRC_ACCEPT: -r --irc +takes_value "IRC accept address")
  22. (@arg RPC_LISTEN: --rpc +takes_value "RPC listen address")
  23. )
  24. .get_matches();
  25. let accept_addr = if let Some(accept_addr) = app.value_of("ACCEPT") {
  26. Some(accept_addr.parse()?)
  27. } else {
  28. None
  29. };
  30. let mut seed_addrs: Vec<SocketAddr> = vec![];
  31. if let Some(seeds) = app.values_of("SEED_NODES") {
  32. for seed in seeds {
  33. seed_addrs.push(seed.parse()?);
  34. }
  35. }
  36. let mut manual_connects: Vec<SocketAddr> = vec![];
  37. if let Some(connections) = app.values_of("CONNECTS") {
  38. for connect in connections {
  39. manual_connects.push(connect.parse()?);
  40. }
  41. }
  42. let connection_slots = if let Some(connection_slots) = app.value_of("CONNECT_SLOTS") {
  43. connection_slots.parse()?
  44. } else {
  45. 0
  46. };
  47. let external_addr = if let Some(external_addr) = app.value_of("EXTERNAL_ADDR") {
  48. Some(external_addr.parse()?)
  49. } else {
  50. None
  51. };
  52. let log_path = Box::new(
  53. if let Some(log_path) = app.value_of("LOG_PATH") {
  54. std::path::Path::new(log_path)
  55. } else {
  56. std::path::Path::new("/tmp/darkfid.log")
  57. }
  58. .to_path_buf(),
  59. );
  60. let irc_accept_addr = if let Some(accept_addr) = app.value_of("IRC_ACCEPT") {
  61. accept_addr.parse()?
  62. } else {
  63. ([127, 0, 0, 1], 6667).into()
  64. };
  65. let rpc_listen_addr = if let Some(rpc_addr) = app.value_of("RPC_LISTEN") {
  66. rpc_addr.parse()?
  67. } else {
  68. ([127, 0, 0, 1], 8000).into()
  69. };
  70. Ok(ProgramOptions {
  71. network_settings: net::Settings {
  72. inbound: accept_addr,
  73. outbound_connections: connection_slots,
  74. external_addr,
  75. peers: manual_connects,
  76. seeds: seed_addrs,
  77. ..Default::default()
  78. },
  79. log_path,
  80. irc_accept_addr,
  81. rpc_listen_addr,
  82. })
  83. }
  84. }