Skip to content
This repository has been archived by the owner on Dec 8, 2023. It is now read-only.

Commit

Permalink
Fix some warnings & cargo fmt
Browse files Browse the repository at this point in the history
  • Loading branch information
Simon Bernier St-Pierre committed Jan 19, 2020
1 parent bc436ea commit 9f7c898
Show file tree
Hide file tree
Showing 16 changed files with 237 additions and 158 deletions.
11 changes: 5 additions & 6 deletions examples/add_any_port.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::net::{SocketAddrV4, Ipv4Addr};
use std::net::{Ipv4Addr, SocketAddrV4};

extern crate igd;

Expand All @@ -13,15 +13,14 @@ fn main() {
let local_addr = local_addr.parse::<Ipv4Addr>().unwrap();
let local_addr = SocketAddrV4::new(local_addr, 8080u16);

match gateway.add_any_port(igd::PortMappingProtocol::TCP,
local_addr, 60, "add_port example") {
match gateway.add_any_port(igd::PortMappingProtocol::TCP, local_addr, 60, "add_port example") {
Err(ref err) => {
println!("There was an error! {}", err);
},
}
Ok(port) => {
println!("It worked! Got port {}", port);
},
}
}
},
}
}
}
11 changes: 5 additions & 6 deletions examples/add_port.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::net::{SocketAddrV4, Ipv4Addr};
use std::net::{Ipv4Addr, SocketAddrV4};

extern crate igd;

Expand All @@ -13,15 +13,14 @@ fn main() {
let local_addr = local_addr.parse::<Ipv4Addr>().unwrap();
let local_addr = SocketAddrV4::new(local_addr, 8080u16);

match gateway.add_port(igd::PortMappingProtocol::TCP, 80,
local_addr, 60, "add_port example") {
match gateway.add_port(igd::PortMappingProtocol::TCP, 80, local_addr, 60, "add_port example") {
Err(ref err) => {
println!("There was an error! {}", err);
},
}
Ok(()) => {
println!("It worked");
},
}
}
},
}
}
}
9 changes: 4 additions & 5 deletions examples/add_remove.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::net::SocketAddrV4;
use std::env;
use std::net::SocketAddrV4;

extern crate igd;

Expand All @@ -21,17 +21,16 @@ fn main() {

let local_addr = SocketAddrV4::new(local_ip, local_port);

match gateway.add_port(igd::PortMappingProtocol::TCP, remote_port,
local_addr, 60, "crust") {
match gateway.add_port(igd::PortMappingProtocol::TCP, remote_port, local_addr, 60, "crust") {
Err(ref err) => println!("{:?}", err),
Ok(()) => {
println!("AddPortMapping successful.");
match gateway.remove_port(igd::PortMappingProtocol::TCP, remote_port) {
Err(ref err) => println!("Error removing: {:?}", err),
Ok(_) => println!("DeletePortMapping successful."),
}
},
}
}
},
}
}
}
18 changes: 12 additions & 6 deletions examples/aio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
use std::env;
use std::net::SocketAddrV4;

use igd::aio::{search_gateway};
use igd::aio::search_gateway;
use igd::PortMappingProtocol;
use simplelog::{SimpleLogger, LevelFilter, Config as LogConfig};
use simplelog::{Config as LogConfig, LevelFilter, SimpleLogger};

#[tokio::main]
async fn main() {
Expand All @@ -33,19 +33,25 @@ async fn main() {

let gateway = match search_gateway(Default::default()).await {
Ok(g) => g,
Err(err) => return println!("Faild to find IGD: {}", err)
Err(err) => return println!("Faild to find IGD: {}", err),
};
let pub_ip = match gateway.get_external_ip().await {
Ok(ip) => ip,
Err(err) => return println!("Failed to get external IP: {}", err)
Err(err) => return println!("Failed to get external IP: {}", err),
};
println!("Our public IP is {}", pub_ip);
if let Err(e) = gateway.add_port(PortMappingProtocol::TCP, 1234, ip, 120, "rust-igd-async-example").await {
if let Err(e) = gateway
.add_port(PortMappingProtocol::TCP, 1234, ip, 120, "rust-igd-async-example")
.await
{
println!("Failed to add port mapping: {}", e);
}
println!("New port mapping was successfully added.");

if let Err(e) = gateway.add_port(PortMappingProtocol::TCP, 2345, ip, 120, "rust-igd-async-example").await {
if let Err(e) = gateway
.add_port(PortMappingProtocol::TCP, 2345, ip, 120, "rust-igd-async-example")
.await
{
println!("Failed to add port mapping: {}", e);
}
println!("New port mapping was successfully added.");
Expand Down
14 changes: 6 additions & 8 deletions examples/external_ip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@ extern crate igd;
fn main() {
match igd::search_gateway(Default::default()) {
Err(ref err) => println!("Error: {}", err),
Ok(gateway) => {
match gateway.get_external_ip() {
Err(ref err) => {
println!("There was an error! {}", err);
},
Ok(ext_addr) => {
println!("Local gateway: {}, External ip address: {}", gateway, ext_addr);
},
Ok(gateway) => match gateway.get_external_ip() {
Err(ref err) => {
println!("There was an error! {}", err);
}
Ok(ext_addr) => {
println!("Local gateway: {}, External ip address: {}", gateway, ext_addr);
}
},
}
Expand Down
14 changes: 6 additions & 8 deletions examples/remove_port.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@ extern crate igd;
fn main() {
match igd::search_gateway(Default::default()) {
Err(ref err) => println!("Error: {}", err),
Ok(gateway) => {
match gateway.remove_port(igd::PortMappingProtocol::TCP, 80) {
Err(ref err) => {
println!("There was an error! {}", err);
},
Ok(()) => {
println!("It worked");
},
Ok(gateway) => match gateway.remove_port(igd::PortMappingProtocol::TCP, 80) {
Err(ref err) => {
println!("There was an error! {}", err);
}
Ok(()) => {
println!("It worked");
}
},
}
Expand Down
103 changes: 59 additions & 44 deletions src/aio/gateway.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use std::net::{Ipv4Addr, SocketAddrV4};
use super::soap;
use crate::errors::{self, AddAnyPortError, AddPortError, GetExternalIpError, RemovePortError, RequestError};

use crate::common::{self, parsing::RequestReponse, messages, parsing};
use crate::common::{self, messages, parsing, parsing::RequestReponse};
use crate::PortMappingProtocol;

/// This structure represents a gateway found by the search functions.
Expand All @@ -26,12 +26,7 @@ impl Gateway {
}
}

async fn perform_request(
&self,
header: &str,
body: &str,
ok: &str,
) -> Result<RequestReponse, RequestError> {
async fn perform_request(&self, header: &str, body: &str, ok: &str) -> Result<RequestReponse, RequestError> {
let url = format!("{}", self);
let text = soap::send_async(&url, soap::Action::new(header), body).await?;
parsing::parse_response(text, ok)
Expand All @@ -44,7 +39,8 @@ impl Gateway {
messages::GET_EXTERNAL_IP_HEADER,
&messages::format_get_external_ip_message(),
"GetExternalIPAddressResponse",
).await;
)
.await;
parsing::parse_get_external_ip_response(result)
}

Expand All @@ -66,7 +62,9 @@ impl Gateway {
) -> Result<SocketAddrV4, AddAnyPortError> {
let description = description.to_owned();
let ip = self.get_external_ip().await?;
let port = self.add_any_port(protocol, local_addr, lease_duration, &description).await?;
let port = self
.add_any_port(protocol, local_addr, lease_duration, &description)
.await?;
Ok(SocketAddrV4::new(ip, port))
}

Expand Down Expand Up @@ -112,13 +110,16 @@ impl Gateway {
&description,
),
"AddAnyPortMappingResponse",
).await;
)
.await;
match parsing::parse_add_any_port_mapping_response(resp) {
Ok(port) => Ok(port),
Err(None) => {
// The router does not have the AddAnyPortMapping method.
// Fall back to using AddPortMapping with a random port.
gateway.retry_add_random_port_mapping(protocol, local_addr, lease_duration, &description).await
gateway
.retry_add_random_port_mapping(protocol, local_addr, lease_duration, &description)
.await
}
Err(Some(err)) => Err(err),
}
Expand All @@ -132,7 +133,10 @@ impl Gateway {
description: &str,
) -> Result<u16, AddAnyPortError> {
for _ in 0u8..20u8 {
match self.add_random_port_mapping(protocol, local_addr, lease_duration, &description).await {
match self
.add_random_port_mapping(protocol, local_addr, lease_duration, &description)
.await
{
Ok(port) => return Ok(port),
Err(AddAnyPortError::NoPortsAvailable) => continue,
e => return e,
Expand All @@ -152,14 +156,20 @@ impl Gateway {
let gateway = self.clone();

let external_port = common::random_port();
let res = self.add_port_mapping(protocol, external_port, local_addr, lease_duration, &description).await;

let res = self
.add_port_mapping(protocol, external_port, local_addr, lease_duration, &description)
.await;

match res {
Ok(_) => Ok(external_port),
Err(err) => match parsing::convert_add_random_port_mapping_error(err) {
Some(err) => Err(err),
None => gateway.add_same_port_mapping(protocol, local_addr, lease_duration, &description).await
}
None => {
gateway
.add_same_port_mapping(protocol, local_addr, lease_duration, &description)
.await
}
},
}
}

Expand All @@ -171,10 +181,11 @@ impl Gateway {
description: &str,
) -> Result<u16, AddAnyPortError> {
let res = self
.add_port_mapping(protocol, local_addr.port(), local_addr, lease_duration, description).await;
.add_port_mapping(protocol, local_addr.port(), local_addr, lease_duration, description)
.await;
match res {
Ok(_) => Ok(local_addr.port()),
Err(err) => Err(parsing::convert_add_same_port_mapping_error(err))
Err(err) => Err(parsing::convert_add_same_port_mapping_error(err)),
}
}

Expand All @@ -186,18 +197,18 @@ impl Gateway {
lease_duration: u32,
description: &str,
) -> Result<(), RequestError> {
self
.perform_request(
messages::ADD_PORT_MAPPING_HEADER,
&messages::format_add_port_mapping_message(
protocol,
external_port,
local_addr,
lease_duration,
description,
),
"AddPortMappingResponse",
).await?;
self.perform_request(
messages::ADD_PORT_MAPPING_HEADER,
&messages::format_add_port_mapping_message(
protocol,
external_port,
local_addr,
lease_duration,
description,
),
"AddPortMappingResponse",
)
.await?;
Ok(())
}

Expand All @@ -220,39 +231,43 @@ impl Gateway {
return Err(AddPortError::InternalPortZeroInvalid);
}

let res = self.add_port_mapping(protocol, external_port, local_addr, lease_duration, description).await;
let res = self
.add_port_mapping(protocol, external_port, local_addr, lease_duration, description)
.await;
if let Err(err) = res {
return Err(parsing::convert_add_port_error(err));
};
Ok(())
}

/// Remove a port mapping.
pub async fn remove_port(
&self,
protocol: PortMappingProtocol,
external_port: u16,
) -> Result<(), RemovePortError> {
pub async fn remove_port(&self, protocol: PortMappingProtocol, external_port: u16) -> Result<(), RemovePortError> {
let res = self
.perform_request(
messages::DELETE_PORT_MAPPING_HEADER,
&messages::format_delete_port_message(protocol, external_port),
"DeletePortMappingResponse",
).await;
)
.await;
parsing::parse_delete_port_mapping_response(res)
}

/// Get one port mapping entry
///
///
/// Gets one port mapping entry by its index.
/// Not all existing port mappings might be visible to this client.
/// If the index is out of bound, GetGenericPortMappingEntryError::SpecifiedArrayIndexInvalid will be returned
pub async fn get_generic_port_mapping_entry(&self, index: u32) -> Result<parsing::PortMappingEntry, errors::GetGenericPortMappingEntryError> {
let result = self.perform_request(
messages::GET_GENERIC_PORT_MAPPING_ENTRY,
&messages::formate_get_generic_port_mapping_entry_message(index),
"GetGenericPortMappingEntryResponse"
).await;
pub async fn get_generic_port_mapping_entry(
&self,
index: u32,
) -> Result<parsing::PortMappingEntry, errors::GetGenericPortMappingEntryError> {
let result = self
.perform_request(
messages::GET_GENERIC_PORT_MAPPING_ENTRY,
&messages::formate_get_generic_port_mapping_entry_message(index),
"GetGenericPortMappingEntryResponse",
)
.await;
parsing::parse_get_generic_port_mapping_entry(result)
}
}
Expand Down
Loading

0 comments on commit 9f7c898

Please sign in to comment.