diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..c348f47 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,23 @@ +language: rust + +os: + - linux + - osx + - windows + +rust: + - nightly + - beta + - stable + +matrix: + allow_failures: + - rust: nightly + +script: + - cargo build + - cargo test + +notifications: + email: + on_success: never diff --git a/Cargo.toml b/Cargo.toml index 44a4ba5..af06cfb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "wifi-rs" version = "0.2.2" +edition = "2018" authors = ["Tochukwu Nkemdilim "] description = "Interface with and manage Wireless Network (WiFi)" license = "MIT" diff --git a/README.md b/README.md index 3e241f6..23e44e6 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,7 @@ Note that only **open**, **WEP** and **WPA-PSK** networks are supported at the m ## Example ```Rust -extern crate wifi_rs; -use wifi_rs::prelude::*; -use wifi_rs::{WiFi, Config}; +use wifi_rs::{prelude::*, Wifi}; fn main() -> Result<(), WifiConnectionError> { let config = Some(Config { diff --git a/examples/hotspot/Cargo.toml b/examples/hotspot/Cargo.toml new file mode 100644 index 0000000..aa05eb9 --- /dev/null +++ b/examples/hotspot/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "wifi-connect" +version = "0.1.0" +edition = "2018" +authors = ["Tochukwu Nkemdilim "] + +[dependencies] +wifi-rs = { path = "../../../wifi-rs" } \ No newline at end of file diff --git a/examples/hotspot/src/main.rs b/examples/hotspot/src/main.rs new file mode 100644 index 0000000..ba8812b --- /dev/null +++ b/examples/hotspot/src/main.rs @@ -0,0 +1,15 @@ +use std::io; +use wifi_rs::{prelude::*, WiFi}; + +fn main() -> Result<(), io::Error> { + let config = Some(Config { + interface: Some("wlo1"), + }); + + let mut wifi = WiFi::new(config); + let config = HotspotConfig::new(Some(HotspotBand::Bg), Some(Channel::One)); + + wifi.create_hotspot("test-hotspot", "password", Some(&config)); + + Ok(()) +} diff --git a/examples/wifi-cli/Cargo.toml b/examples/wifi-cli/Cargo.toml index 55cdfdc..7190dba 100644 --- a/examples/wifi-cli/Cargo.toml +++ b/examples/wifi-cli/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "wifi-cli" version = "0.1.0" +edition = "2018" authors = ["Tochukwu Nkemdilim "] [dependencies] diff --git a/examples/wifi-cli/src/main.rs b/examples/wifi-cli/src/main.rs index 42cca58..6831e0c 100644 --- a/examples/wifi-cli/src/main.rs +++ b/examples/wifi-cli/src/main.rs @@ -1,8 +1,6 @@ -extern crate clap; -extern crate wifi_rs; - use clap::{App, Arg}; use std::io; +use wifi_rs::prelude::*; use wifi_rs::WiFi; fn main() -> Result<(), io::Error> { @@ -48,8 +46,13 @@ fn main() -> Result<(), io::Error> { // Get Wireless Interface let interface = matches.value_of("interface").unwrap(); - let wifi = WiFi::new(ssid)?; - println!("Connection Status: {}", wifi.connect(password)); + let config = Some(Config { + interface: Some(interface), + }); + + // let wifi = WiFi::new(ssid)?; + let mut wifi = WiFi::new(config); + println!("Connection Status: {:?}", wifi.connect(ssid, password)); Ok(()) } diff --git a/src/connectivity/handlers/xml_profile_handler.rs b/src/connectivity/handlers/xml_profile_handler.rs index 28cee95..fd8fe97 100644 --- a/src/connectivity/handlers/xml_profile_handler.rs +++ b/src/connectivity/handlers/xml_profile_handler.rs @@ -1,8 +1,6 @@ -extern crate tempfile; - -use self::tempfile::NamedTempFile; -use connectivity::stubs::windows_wifi_profile; +use crate::connectivity::stubs::windows_wifi_profile; use std::{io, io::Write}; +use tempfile::NamedTempFile; /// A netowork XML handler for windows, responsible creating /// disposable xml profiles files. diff --git a/src/connectivity/providers/osx.rs b/src/connectivity/providers/osx.rs index 383ab85..7a4f4df 100644 --- a/src/connectivity/providers/osx.rs +++ b/src/connectivity/providers/osx.rs @@ -1,5 +1,7 @@ -use connectivity::{Connectivity, WifiConnectionError}; -use platforms::{Connection, WiFi, WifiError, WifiInterface}; +use crate::{ + connectivity::{Connectivity, WifiConnectionError}, + platforms::{Connection, WiFi, WifiError, WifiInterface}, +}; use std::process::Command; /// Wireless network connectivity functionality. diff --git a/src/connectivity/providers/windows.rs b/src/connectivity/providers/windows.rs index 7e77108..aca9cba 100644 --- a/src/connectivity/providers/windows.rs +++ b/src/connectivity/providers/windows.rs @@ -1,6 +1,7 @@ -use connectivity::handlers::NetworkXmlProfileHandler; -use connectivity::{Connectivity, WifiConnectionError}; -use platforms::{Connection, WiFi, WifiError, WifiInterface}; +use crate::{ + connectivity::{handlers::NetworkXmlProfileHandler, Connectivity, WifiConnectionError}, + platforms::{Connection, WiFi, WifiError, WifiInterface}, +}; use std::process::Command; impl WiFi { @@ -42,11 +43,7 @@ impl Connectivity for WiFi { Self::add_profile(ssid, password)?; let output = Command::new("netsh") - .args(&[ - "wlan", - "connect", - &format!("name={}", ssid), - ]) + .args(&["wlan", "connect", &format!("name={}", ssid)]) .output() .map_err(|err| WifiConnectionError::FailedToConnect(format!("{}", err)))?; diff --git a/src/hotspot/mod.rs b/src/hotspot/mod.rs index 815d345..f6a67e5 100644 --- a/src/hotspot/mod.rs +++ b/src/hotspot/mod.rs @@ -1,4 +1,4 @@ -mod providers; +pub mod providers; use self::providers::prelude::HotspotConfig; use crate::platforms::{WifiError, WifiInterface}; @@ -44,7 +44,6 @@ pub trait WifiHotspot: fmt::Debug + WifiInterface { } /// Stop serving a wireless network. - /// /// **NOTE: All users connected will automatically be disconnected.** fn stop_hotspot(&mut self) -> Result { unimplemented!(); diff --git a/src/hotspot/providers/linux.rs b/src/hotspot/providers/linux.rs index 3b4d97d..9836756 100644 --- a/src/hotspot/providers/linux.rs +++ b/src/hotspot/providers/linux.rs @@ -16,6 +16,14 @@ pub struct HotspotConfig { channel: Option, } +/// function to create a new config object +#[allow(dead_code)] +impl HotspotConfig { + pub fn new(band: Option, channel: Option) -> HotspotConfig { + HotspotConfig { band, channel } + } +} + #[allow(dead_code)] #[derive(Debug)] /// Band type of wireless hotspot. @@ -58,9 +66,9 @@ impl WifiHotspot for WiFi { let mut command = vec![ "device".to_string(), "wifi".to_string(), + "hotspot".to_string(), "ifname".to_string(), self.interface.to_string(), - "hotspot".to_string(), "con-name".to_string(), HOTSPOT_GROUP.to_string(), "ssid".to_string(), diff --git a/src/hotspot/providers/osx.rs b/src/hotspot/providers/osx.rs index 1a4a92a..d8beb74 100644 --- a/src/hotspot/providers/osx.rs +++ b/src/hotspot/providers/osx.rs @@ -1,9 +1,8 @@ -use hotspot::WifiHotspot; -use platforms::WiFi; +use crate::{hotspot::WifiHotspot, platforms::WiFi}; /// Configuration for a wireless hotspot. #[allow(dead_code)] -pub struct HotspotConfig {} +pub struct HotspotConfig; /// Wireless hotspot functionality for a wifi interface. impl WifiHotspot for WiFi {} diff --git a/src/hotspot/providers/windows.rs b/src/hotspot/providers/windows.rs index 4686eb1..3bc83e9 100644 --- a/src/hotspot/providers/windows.rs +++ b/src/hotspot/providers/windows.rs @@ -1,9 +1,11 @@ -use hotspot::{WifiHotspot, WifiHotspotError}; -use platforms::{WiFi, WifiError, WifiInterface}; +use crate::{ + hotspot::{WifiHotspot, WifiHotspotError}, + platforms::{WiFi, WifiError, WifiInterface}, +}; use std::process::Command; /// Configuration for a wireless hotspot. -pub struct HotspotConfig {} +pub struct HotspotConfig; impl WiFi { /// Attempts to turn on a wireless networ if down. diff --git a/src/lib.rs b/src/lib.rs index ec119f0..38561d3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,9 +4,10 @@ mod platforms; /// Pre-requisite module for `Connectivity`, `Hotspot` functionality. pub mod prelude { - pub use crate::connectivity::*; - pub use crate::hotspot::*; - pub use crate::platforms::Config; + pub use crate::connectivity::*; + pub use crate::hotspot::providers::prelude::*; + pub use crate::hotspot::*; + pub use crate::platforms::Config; } pub use crate::platforms::WiFi; diff --git a/src/platforms/osx.rs b/src/platforms/osx.rs index c3207b5..9faa339 100644 --- a/src/platforms/osx.rs +++ b/src/platforms/osx.rs @@ -1,4 +1,4 @@ -use platforms::{Config, WifiError, WifiInterface}; +use crate::platforms::{Config, WifiError, WifiInterface}; use std::process::Command; #[derive(Debug)] diff --git a/src/platforms/windows.rs b/src/platforms/windows.rs index 1252ab4..ba08b66 100644 --- a/src/platforms/windows.rs +++ b/src/platforms/windows.rs @@ -1,6 +1,4 @@ -use platforms::Config; -use platforms::WifiError; -use platforms::WifiInterface; +use crate::platforms::{Config, WifiError, WifiInterface}; use std::process::Command; const WINDOWS_INTERFACE: &'static str = "Wireless Network Connection"; diff --git a/tests/mod.rs b/tests/mod.rs index 1947e55..aa4c9c0 100644 --- a/tests/mod.rs +++ b/tests/mod.rs @@ -1,25 +1,17 @@ -extern crate wifi_rs; -use self::wifi_rs::{prelude::*, WiFi}; +fn fib(n: usize) -> u32 { + let mut first = 1; + let mut second = 1; -#[test] -fn connect_to_wifi_failed() { - let config = Some(Config { - interface: Some("wlo1"), - }); + for _ in 2..n { + let temp = first; + first = second; + second += temp + } - let mut wifi = WiFi::new(config); - - assert_eq!(wifi.connect("ssid", "password").unwrap(), false); + return second; } #[test] -fn create_hotspot() { - let config = Some(Config { - interface: Some("wlo1"), - }); - - let mut wifi = WiFi::new(config); - let hotspot_created = wifi.create_hotspot("hello", "hi", None).unwrap(); - - assert_eq!(hotspot_created, true); +fn basic() { + assert_eq!(fib(10), 55); }