mirror of
https://github.com/zaphar/durnitisp.git
synced 2025-07-21 18:10:27 -04:00
commit
32b203f50d
117
Cargo.lock
generated
117
Cargo.lock
generated
@ -1,5 +1,11 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b602bfe940d21c130f3895acd65221e8a61270debe89d628b9cb4e3ccb8569b"
|
||||
|
||||
[[package]]
|
||||
name = "argv"
|
||||
version = "0.1.2"
|
||||
@ -12,6 +18,17 @@ version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbf56136a5198c7b01a49e3afcbef6cf84597273d298f54432926024107b0109"
|
||||
|
||||
[[package]]
|
||||
name = "atty"
|
||||
version = "0.2.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"termion",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.0.0"
|
||||
@ -55,9 +72,12 @@ dependencies = [
|
||||
name = "durnitisp"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"gflags",
|
||||
"log",
|
||||
"nursery",
|
||||
"prometheus",
|
||||
"stderrlog",
|
||||
"tiny_http",
|
||||
]
|
||||
|
||||
@ -134,6 +154,12 @@ dependencies = [
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "0.2.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.4.0"
|
||||
@ -180,6 +206,12 @@ dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "numtoa"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
|
||||
|
||||
[[package]]
|
||||
name = "nursery"
|
||||
version = "0.0.1"
|
||||
@ -209,7 +241,7 @@ checksum = "dd0ced56dee39a6e960c15c74dc48849d614586db2eaada6497477af7c7811cd"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"fnv",
|
||||
"lazy_static",
|
||||
"lazy_static 1.4.0",
|
||||
"protobuf",
|
||||
"spin",
|
||||
"thiserror",
|
||||
@ -230,6 +262,21 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.1.57"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
|
||||
|
||||
[[package]]
|
||||
name = "redox_termios"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
|
||||
dependencies = [
|
||||
"redox_syscall",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ref-cast"
|
||||
version = "1.0.2"
|
||||
@ -256,6 +303,19 @@ version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
|
||||
|
||||
[[package]]
|
||||
name = "stderrlog"
|
||||
version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32e5ee9b90a5452c570a0b0ac1c99ae9498db7e56e33d74366de7f2a7add7f25"
|
||||
dependencies = [
|
||||
"atty",
|
||||
"chrono",
|
||||
"log",
|
||||
"termcolor",
|
||||
"thread_local",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.33"
|
||||
@ -267,6 +327,27 @@ dependencies = [
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termion"
|
||||
version = "1.5.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c22cec9d8978d906be5ac94bceb5a010d885c626c4c8855721a4dbd20e3ac905"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"numtoa",
|
||||
"redox_syscall",
|
||||
"redox_termios",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.20"
|
||||
@ -287,6 +368,16 @@ dependencies = [
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thread_local"
|
||||
version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14"
|
||||
dependencies = [
|
||||
"lazy_static 0.2.11",
|
||||
"unreachable",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.1.43"
|
||||
@ -340,6 +431,15 @@ version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
|
||||
|
||||
[[package]]
|
||||
name = "unreachable"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
|
||||
dependencies = [
|
||||
"void",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "url"
|
||||
version = "2.1.1"
|
||||
@ -351,6 +451,12 @@ dependencies = [
|
||||
"percent-encoding",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "void"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
@ -367,6 +473,15 @@ version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
|
@ -7,7 +7,10 @@ edition = "2018"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1"
|
||||
gflags = "^0.3"
|
||||
log = "0.4"
|
||||
nursery = "^0.0.1"
|
||||
prometheus = "^0.9.0"
|
||||
stderrlog = "0.4"
|
||||
tiny_http = "^0.7.0"
|
37
src/main.rs
37
src/main.rs
@ -25,6 +25,8 @@ use prometheus;
|
||||
use prometheus::{CounterVec, Encoder, IntGaugeVec, Opts, Registry, TextEncoder};
|
||||
use tiny_http;
|
||||
|
||||
use log::{debug, error, info};
|
||||
|
||||
gflags::define! {
|
||||
/// Print this help text.
|
||||
-h, --help = false
|
||||
@ -45,6 +47,11 @@ gflags::define! {
|
||||
--stunRecvTimeoutSecs: u64 = 5
|
||||
}
|
||||
|
||||
gflags::define! {
|
||||
/// Enable debug logging
|
||||
--debug = false
|
||||
}
|
||||
|
||||
const STUN_PAYLOAD: [u8; 20] = [
|
||||
0, 1, // Binding request
|
||||
0, 0, // Message length
|
||||
@ -74,7 +81,7 @@ fn resolve_addrs(servers: &Vec<&str>) -> io::Result<Vec<SocketAddr>> {
|
||||
// TODO for resolution errors return a more valid error with the domain name.
|
||||
match name.to_socket_addrs() {
|
||||
Ok(addr) => results.extend(addr),
|
||||
Err(e) => eprintln!("Failed to resolve {} with error {}", name, e),
|
||||
Err(e) => info!("Failed to resolve {} with error {}", name, e),
|
||||
}
|
||||
}
|
||||
return Ok(results);
|
||||
@ -97,7 +104,7 @@ fn attempt_stun_connect(addr: SocketAddr) -> Result<SystemTime, ConnectError> {
|
||||
Ok(SystemTime::now())
|
||||
}
|
||||
|
||||
fn main() {
|
||||
fn main() -> anyhow::Result<()> {
|
||||
let default_stun_servers: Vec<&'static str> = vec![
|
||||
"stun.l.google.com:19302",
|
||||
"stun.ekiga.net:3478",
|
||||
@ -116,6 +123,13 @@ fn main() {
|
||||
println!("FLAGS:");
|
||||
gflags::print_help_and_exit(0);
|
||||
}
|
||||
|
||||
let level = if DEBUG.flag { 3 } else { 2 };
|
||||
stderrlog::new()
|
||||
.verbosity(level)
|
||||
.timestamp(stderrlog::Timestamp::Millisecond)
|
||||
.init()?;
|
||||
|
||||
if stun_servers.is_empty() {
|
||||
stun_servers = default_stun_servers;
|
||||
}
|
||||
@ -147,12 +161,13 @@ fn main() {
|
||||
let s = s.clone();
|
||||
let domain_name = *stun_servers_copy.get(i).unwrap();
|
||||
let connect_thread = thread::Pending::new(move || {
|
||||
debug!("started thread for {}", domain_name);
|
||||
loop {
|
||||
let now = SystemTime::now();
|
||||
eprintln!("Attempting to connect to {}", domain_name);
|
||||
info!("Attempting to connect to {}", domain_name);
|
||||
match attempt_stun_connect(s) {
|
||||
Ok(finish_time) => {
|
||||
eprintln!("Success! connecting to {}", domain_name);
|
||||
info!("Success! connecting to {}", domain_name);
|
||||
stun_counter_vec_copy
|
||||
.with(&prometheus::labels! {"result" => "ok", "domain" => domain_name})
|
||||
.inc();
|
||||
@ -162,7 +177,7 @@ fn main() {
|
||||
.set(finish_time.duration_since(now).unwrap().as_millis() as i64);
|
||||
}
|
||||
Err(ConnectError::Timeout(finish_time)) => {
|
||||
eprintln!(
|
||||
info!(
|
||||
"Stun connection to {} timedout after {} millis",
|
||||
domain_name,
|
||||
finish_time.duration_since(now).unwrap().as_millis()
|
||||
@ -172,13 +187,13 @@ fn main() {
|
||||
.inc();
|
||||
}
|
||||
Err(ConnectError::Err(e)) => {
|
||||
eprintln!("Error connecting to {}: {}", domain_name, e);
|
||||
error!("Error connecting to {}: {}", domain_name, e);
|
||||
stun_counter_vec_copy
|
||||
.with(&prometheus::labels! {"result" => "err", "domain" => domain_name})
|
||||
.inc();
|
||||
}
|
||||
Err(ConnectError::Incomplete) => {
|
||||
eprintln!("Connection to {} was incomplete", domain_name);
|
||||
error!("Connection to {} was incomplete", domain_name);
|
||||
stun_counter_vec_copy
|
||||
.with(&prometheus::labels! {"result" => "incomplete", "domain" => domain_name})
|
||||
.inc();
|
||||
@ -192,9 +207,10 @@ fn main() {
|
||||
parent.schedule(Box::new(connect_thread));
|
||||
}
|
||||
let render_thread = thread::Pending::new(move || {
|
||||
debug!("attempting to start server on {}", LISTENHOST.flag);
|
||||
let server = tiny_http::Server::http(LISTENHOST.flag).unwrap();
|
||||
loop {
|
||||
eprintln!("Waiting for request");
|
||||
info!("Waiting for request");
|
||||
match server.recv() {
|
||||
Ok(req) => {
|
||||
let mut buffer = vec![];
|
||||
@ -205,11 +221,11 @@ fn main() {
|
||||
|
||||
let response = tiny_http::Response::from_data(buffer).with_status_code(200);
|
||||
if let Err(e) = req.respond(response) {
|
||||
eprintln!("Error responding to request {}", e);
|
||||
info!("Error responding to request {}", e);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("Invalid http request! {}", e);
|
||||
info!("Invalid http request! {}", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -217,4 +233,5 @@ fn main() {
|
||||
parent.schedule(Box::new(render_thread));
|
||||
// Blocks forever
|
||||
parent.wait();
|
||||
Ok(())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user