From c15e992974da3c99ee13980a32fa426defeedeaa Mon Sep 17 00:00:00 2001 From: lemonsh Date: Fri, 12 May 2023 18:50:26 +0200 Subject: [PATCH] documentation changes --- connectbox-shell/Cargo.toml | 4 ++++ .../examples/{devices.rs => port_forwards.rs} | 18 ++++++++++++++++-- connectbox/src/lib.rs | 6 +++--- connectbox/src/models.rs | 8 ++++---- 4 files changed, 27 insertions(+), 9 deletions(-) rename connectbox/examples/{devices.rs => port_forwards.rs} (60%) diff --git a/connectbox-shell/Cargo.toml b/connectbox-shell/Cargo.toml index 72c5346..25f231d 100644 --- a/connectbox-shell/Cargo.toml +++ b/connectbox-shell/Cargo.toml @@ -4,3 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] +rustyline = "11" +color-eyre = "0.6" +tokio = { version = "1.0", default-features = false, features = ["macros"] } +tracing-subscriber = "0.3" diff --git a/connectbox/examples/devices.rs b/connectbox/examples/port_forwards.rs similarity index 60% rename from connectbox/examples/devices.rs rename to connectbox/examples/port_forwards.rs index 90418f9..f170057 100644 --- a/connectbox/examples/devices.rs +++ b/connectbox/examples/port_forwards.rs @@ -1,3 +1,6 @@ +// This example shows you how to add, edit and remove port forwading entries. +// Usage: cargo run --example port_forwards -- + use std::{env, net::Ipv4Addr}; use color_eyre::Result; @@ -10,16 +13,24 @@ use connectbox::{ async fn main() -> Result<()> { tracing_subscriber::fmt::init(); color_eyre::install()?; + let mut args = env::args().skip(1); let ip = args.next().expect("no ip specified"); let code = args.next().expect("no code specified"); + let local_ip: Ipv4Addr = args + .next() + .expect("no local ip specified") + .parse() + .expect("local ip is not a valid ipv4 address"); + // first, we create a new API client and log in to the router. let connect_box = ConnectBox::new(ip, code, true)?; connect_box.login().await?; + // then, we remove all port forwarding entries for the local ip connect_box .edit_port_forwards(|v| { - if v.local_ip == Ipv4Addr::new(192, 168, 0, 180) { + if v.local_ip == local_ip { PortForwardAction::Delete } else { PortForwardAction::Keep @@ -27,9 +38,10 @@ async fn main() -> Result<()> { }) .await?; + // then, we add a new port forward for the port 25565 (Minecraft server) let pf = PortForwardEntry { id: 0, - local_ip: "192.168.0.180".parse().unwrap(), + local_ip, start_port: 25565, end_port: 25565, start_port_in: 25565, @@ -39,9 +51,11 @@ async fn main() -> Result<()> { }; connect_box.add_port_forward(&pf).await?; + // lastly, we get the new port forwarding table and print it out let portforwards = connect_box.port_forwards().await?; println!("{portforwards:#?}"); + // and then we log out so that other users can log in to the web interface connect_box.logout().await?; Ok(()) diff --git a/connectbox/src/lib.rs b/connectbox/src/lib.rs index 5b980b2..6bd2444 100644 --- a/connectbox/src/lib.rs +++ b/connectbox/src/lib.rs @@ -1,4 +1,4 @@ -//! API client library for the Compal CH7465CE, which is a cable modem provided by various European ISPs under the name Connect Box. +//! API client library for the Compal CH7465LG, which is a cable modem provided by various European ISPs under the name Connect Box. #![allow(clippy::missing_errors_doc)] use std::{borrow::Cow, fmt::Display, sync::Arc}; @@ -201,7 +201,7 @@ impl ConnectBox { } /// Toggle or remove port forwards. - /// + /// /// This function accepts a predicate that will be called for every existing port forward. It should decide what to do with each port forward and return a [`PortForwardAction`]. pub async fn edit_port_forwards(&self, mut f: F) -> Result<()> where @@ -262,7 +262,7 @@ impl ConnectBox { ("end_port".into(), port.end_port.to_string().into()), ("start_portIn".into(), port.start_port_in.to_string().into()), ("end_portIn".into(), port.end_port_in.to_string().into()), - ("protocol".into(), port.protocol.id().to_string().into()), + ("protocol".into(), port.protocol.id_str().into()), ("enable".into(), u8::from(port.enable).to_string().into()), ("delete".into(), "0".into()), ("idd".into(), "".into()), diff --git a/connectbox/src/models.rs b/connectbox/src/models.rs index 0ae2444..0f787b9 100644 --- a/connectbox/src/models.rs +++ b/connectbox/src/models.rs @@ -70,11 +70,11 @@ pub enum PortForwardProtocol { } impl PortForwardProtocol { - pub(crate) fn id(&self) -> u8 { + pub(crate) fn id_str(&self) -> &str { match self { - PortForwardProtocol::Tcp => 1, - PortForwardProtocol::Udp => 2, - PortForwardProtocol::Both => 3, + PortForwardProtocol::Tcp => "1", + PortForwardProtocol::Udp => "2", + PortForwardProtocol::Both => "3", } } }