├── .gitignore ├── src ├── main.rs ├── cli.rs ├── network.rs └── audio.rs ├── Cargo.toml ├── LICENSE ├── README.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .vscode 3 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::sync::Arc; 2 | 3 | mod audio; 4 | mod cli; 5 | mod network; 6 | 7 | fn main() -> anyhow::Result<()> { 8 | cli::print_banner(); 9 | 10 | let (counter, _stream) = audio::start()?; 11 | 12 | let interface = cli::parse_interface_from_args()?; 13 | network::start_capture(interface, Arc::clone(&counter))?; 14 | 15 | Ok(()) 16 | } 17 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | authors = ["Vesa Vilhonen "] 3 | categories = ["command-line-utilities"] 4 | description = "Listen to your network traffic with" 5 | edition = "2018" 6 | license = "ISC" 7 | name = "nethoscope" 8 | readme = "README.md" 9 | repository = "https://github.com/vvilhonen/nethoscope" 10 | version = "0.1.1" 11 | 12 | [profile.release] 13 | debug = true 14 | 15 | [dependencies] 16 | anyhow = "1" 17 | cpal = "0.13" 18 | pcap = "0.8" 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Vesa Vilhonen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nethoscope 2 | 3 | Employ your built-in wetware pattern recognition and signal processing facilities to understand your network traffic. 4 | 5 | > Check video on how it works at https://www.youtube.com/watch?v=j1fqy6CmmeM 6 | 7 | ## Installation with [cargo](https://rustup.rs/) 8 | 9 | cargo install nethoscope 10 | 11 | There are various dependencies on each platform described below: 12 | 13 | ### macOS 14 | 15 | Pcap should be included with the macOS so no extra steps required. 16 | 17 | ### Linux 18 | 19 | On debian based systems `libpcap-dev` package should be enough. More information [here](https://github.com/ebfull/pcap#linux). 20 | 21 | ### Windows 22 | 23 | Windows requires pcap compatible library for which the [npcap](https://nmap.org/npcap/) is the best option. 24 | 25 | For using [the binary](https://github.com/vvilhonen/nethoscope/releases) you only need the [npcap installer](https://nmap.org/npcap/dist/npcap-1.10.exe) and for compiling from source, `Lib/x64/wpcap.lib` file needs to be copied to the project root from the [npcap SDK](https://nmap.org/npcap/dist/npcap-sdk-1.06.zip), in addition. 26 | 27 | ## Credits 28 | 29 | This experiment was easily implemented building on these two excellent crates: 30 | 31 | - [pcap](https://github.com/ebfull/pcap) to capture network traffic 32 | - [cpal](https://github.com/RustAudio/cpal) to output audio 33 | 34 | -------------------------------------------------------------------------------- /src/cli.rs: -------------------------------------------------------------------------------- 1 | use std::io::{stdout, Write}; 2 | 3 | pub fn print_banner() { 4 | eprintln!( 5 | "\n\x1b[1mNethoscope 🩺 {}\x1b[0m\n", 6 | env!("CARGO_PKG_VERSION") 7 | ); 8 | } 9 | 10 | pub fn print_progress() -> anyhow::Result<()> { 11 | stdout().write(b".")?; 12 | stdout().flush()?; 13 | Ok(()) 14 | } 15 | 16 | pub fn parse_interface_from_args() -> anyhow::Result> { 17 | let mut args = std::env::args().collect::>(); 18 | if args 19 | .iter() 20 | .any(|arg| arg.starts_with("-h") || arg.starts_with("--help")) 21 | { 22 | eprintln!( 23 | "Usage: {} <\x1b[4minterface name\x1b[0m or omit for the default>\n", 24 | args[0] 25 | ); 26 | 27 | eprintln!("Available interfaces:"); 28 | for device in super::network::available_interfaces()? { 29 | eprintln!( 30 | "name: {}\tdescription: {}", 31 | device.name, 32 | device.desc.unwrap_or("".to_owned()) 33 | ); 34 | } 35 | 36 | std::process::exit(0); 37 | } else if args.len() == 2 { 38 | Ok(Some(args.remove(1))) 39 | } else { 40 | Ok(None) 41 | } 42 | } 43 | 44 | #[cfg(unix)] 45 | pub fn create_capture_permission_instruction() -> String { 46 | format!( 47 | "Couldn't start capture. Run `sudo setcap cap_net_raw,cap_net_admin=eip {}`", 48 | std::env::current_exe().unwrap().display() 49 | ) 50 | } 51 | 52 | #[cfg(not(unix))] 53 | pub fn create_capture_permission_instruction() -> String { 54 | format!("Couldn't start capture. Run with sudo or other with super user privileges") 55 | } 56 | -------------------------------------------------------------------------------- /src/network.rs: -------------------------------------------------------------------------------- 1 | use std::sync::atomic::AtomicUsize; 2 | use std::sync::atomic::Ordering; 3 | use std::sync::Arc; 4 | 5 | use anyhow::Context; 6 | 7 | pub fn start_capture( 8 | interface_name: Option, 9 | counter: Arc, 10 | ) -> anyhow::Result<()> { 11 | let device = match interface_name { 12 | Some(interface_name) => { 13 | let devices = pcap::Device::list().context("Listing network devices")?; 14 | 15 | devices 16 | .into_iter() 17 | .find(|x| x.name == interface_name) 18 | .with_context(|| format!("No device named {}", interface_name)) 19 | } 20 | _ => pcap::Device::lookup().context("Couldn't look up default capture device"), 21 | }?; 22 | 23 | eprintln!( 24 | "Capturing using {} ({})", 25 | device.desc.clone().unwrap_or("N/A".to_owned()), 26 | device.name 27 | ); 28 | eprintln!("Run with \"-h\" to see how to capture with another network device\n"); 29 | 30 | let mut cap = pcap::Capture::from_device(device) 31 | .and_then(|device| device.immediate_mode(true).open()) 32 | .with_context(crate::cli::create_capture_permission_instruction)?; 33 | 34 | loop { 35 | match cap.next() { 36 | Ok(_pck) => { 37 | counter.fetch_add(1, Ordering::SeqCst); 38 | } 39 | Err(pcap::Error::TimeoutExpired) => (), 40 | Err(e) => { 41 | eprintln!("Unknown capture error {}", e); 42 | std::process::exit(1); 43 | } 44 | }; 45 | } 46 | } 47 | 48 | pub fn available_interfaces() -> anyhow::Result> { 49 | Ok(pcap::Device::list()?) 50 | } 51 | -------------------------------------------------------------------------------- /src/audio.rs: -------------------------------------------------------------------------------- 1 | use std::f32::consts::PI; 2 | use std::sync::atomic::AtomicUsize; 3 | use std::sync::atomic::Ordering; 4 | use std::sync::Arc; 5 | 6 | use anyhow::Context; 7 | use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; 8 | 9 | const FREQS: [usize; 7] = [440, 494, 523, 587, 659, 698, 784]; 10 | 11 | pub fn start() -> anyhow::Result<(Arc, cpal::Stream)> { 12 | let host = cpal::default_host(); 13 | let device = host 14 | .default_output_device() 15 | .context("Couldn't open default audio output device")?; 16 | let config = device.default_output_config()?; 17 | 18 | println!( 19 | "Audio output with {} and config {:?}\n", 20 | device.name()?, 21 | config 22 | ); 23 | 24 | let sample_rate = config.sample_rate().0 as f32; 25 | let channels = config.channels() as usize; 26 | 27 | let mut freq = FrequencyFinder::new(); 28 | let counter = Arc::new(AtomicUsize::new(0)); 29 | let counter2 = Arc::clone(&counter); 30 | 31 | let mut index = 0f32; 32 | let mut samples_left = 0; 33 | let mut frequency = 0.0; 34 | 35 | let mut next_value = move || { 36 | if samples_left == 0 { 37 | let count = counter.swap(0, Ordering::SeqCst); 38 | index = 0.0; 39 | 40 | if count == 0 { 41 | frequency = 0.0; 42 | samples_left = 440; 43 | } else { 44 | crate::cli::print_progress().unwrap(); 45 | samples_left = freq.freq(count); 46 | frequency = samples_left as f32; 47 | samples_left *= 10; 48 | } 49 | } 50 | 51 | samples_left -= 1; 52 | index = (index + 1.0) % sample_rate; 53 | (index * frequency * 2.0 * PI / sample_rate).sin() * 0.5 54 | }; 55 | 56 | let stream = device.build_output_stream( 57 | &config.into(), 58 | move |data: &mut [f32], _| { 59 | // println!("Writing {} bytes", data.len()); 60 | for frame in data.chunks_mut(channels) { 61 | let value = next_value(); 62 | for sample in frame.iter_mut() { 63 | *sample = value; 64 | } 65 | } 66 | }, 67 | |err| panic!("{}", err), 68 | )?; 69 | 70 | stream.play()?; 71 | 72 | Ok((counter2, stream)) 73 | } 74 | 75 | pub struct FrequencyFinder { 76 | max: usize, 77 | } 78 | 79 | impl FrequencyFinder { 80 | pub fn new() -> Self { 81 | FrequencyFinder { max: 0 } 82 | } 83 | 84 | pub fn freq(&mut self, pkt_size: usize) -> usize { 85 | if pkt_size > self.max { 86 | self.max = pkt_size 87 | } 88 | let idx = (pkt_size as f32 / self.max as f32 * 6.0).round() as usize; 89 | FREQS[idx] 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "addr2line" 5 | version = "0.14.1" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" 8 | dependencies = [ 9 | "gimli", 10 | ] 11 | 12 | [[package]] 13 | name = "adler" 14 | version = "0.2.3" 15 | source = "registry+https://github.com/rust-lang/crates.io-index" 16 | checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" 17 | 18 | [[package]] 19 | name = "adler32" 20 | version = "1.2.0" 21 | source = "registry+https://github.com/rust-lang/crates.io-index" 22 | checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 23 | 24 | [[package]] 25 | name = "aho-corasick" 26 | version = "0.7.15" 27 | source = "registry+https://github.com/rust-lang/crates.io-index" 28 | checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" 29 | dependencies = [ 30 | "memchr", 31 | ] 32 | 33 | [[package]] 34 | name = "alsa" 35 | version = "0.4.3" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "eb213f6b3e4b1480a60931ca2035794aa67b73103d254715b1db7b70dcb3c934" 38 | dependencies = [ 39 | "alsa-sys", 40 | "bitflags", 41 | "libc", 42 | "nix", 43 | ] 44 | 45 | [[package]] 46 | name = "alsa-sys" 47 | version = "0.3.1" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" 50 | dependencies = [ 51 | "libc", 52 | "pkg-config", 53 | ] 54 | 55 | [[package]] 56 | name = "anyhow" 57 | version = "1.0.38" 58 | source = "registry+https://github.com/rust-lang/crates.io-index" 59 | checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" 60 | 61 | [[package]] 62 | name = "ascii" 63 | version = "0.9.3" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" 66 | 67 | [[package]] 68 | name = "autocfg" 69 | version = "1.0.1" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" 72 | 73 | [[package]] 74 | name = "backtrace" 75 | version = "0.3.56" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" 78 | dependencies = [ 79 | "addr2line", 80 | "cfg-if 1.0.0", 81 | "libc", 82 | "miniz_oxide", 83 | "object", 84 | "rustc-demangle", 85 | ] 86 | 87 | [[package]] 88 | name = "base-x" 89 | version = "0.2.8" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" 92 | 93 | [[package]] 94 | name = "base64" 95 | version = "0.13.0" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 98 | 99 | [[package]] 100 | name = "bindgen" 101 | version = "0.56.0" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239" 104 | dependencies = [ 105 | "bitflags", 106 | "cexpr", 107 | "clang-sys", 108 | "lazy_static", 109 | "lazycell", 110 | "peeking_take_while", 111 | "proc-macro2", 112 | "quote", 113 | "regex", 114 | "rustc-hash", 115 | "shlex", 116 | ] 117 | 118 | [[package]] 119 | name = "bitflags" 120 | version = "1.2.1" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 123 | 124 | [[package]] 125 | name = "bumpalo" 126 | version = "3.6.0" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | checksum = "099e596ef14349721d9016f6b80dd3419ea1bf289ab9b44df8e4dfd3a005d5d9" 129 | 130 | [[package]] 131 | name = "byteorder" 132 | version = "1.4.2" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" 135 | 136 | [[package]] 137 | name = "bytes" 138 | version = "1.0.1" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" 141 | 142 | [[package]] 143 | name = "cc" 144 | version = "1.0.66" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" 147 | 148 | [[package]] 149 | name = "cesu8" 150 | version = "1.1.0" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 153 | 154 | [[package]] 155 | name = "cexpr" 156 | version = "0.4.0" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" 159 | dependencies = [ 160 | "nom", 161 | ] 162 | 163 | [[package]] 164 | name = "cfg-if" 165 | version = "0.1.10" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 168 | 169 | [[package]] 170 | name = "cfg-if" 171 | version = "1.0.0" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 174 | 175 | [[package]] 176 | name = "chunked_transfer" 177 | version = "1.4.0" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" 180 | 181 | [[package]] 182 | name = "clang-sys" 183 | version = "1.1.0" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "5cb92721cb37482245ed88428f72253ce422b3b4ee169c70a0642521bb5db4cc" 186 | dependencies = [ 187 | "glob", 188 | "libc", 189 | "libloading", 190 | ] 191 | 192 | [[package]] 193 | name = "combine" 194 | version = "3.8.1" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" 197 | dependencies = [ 198 | "ascii", 199 | "byteorder", 200 | "either", 201 | "memchr", 202 | "unreachable", 203 | ] 204 | 205 | [[package]] 206 | name = "combine" 207 | version = "4.5.2" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "cc4369b5e4c0cddf64ad8981c0111e7df4f7078f4d6ba98fb31f2e17c4c57b7e" 210 | dependencies = [ 211 | "bytes", 212 | "memchr", 213 | ] 214 | 215 | [[package]] 216 | name = "const_fn" 217 | version = "0.4.5" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" 220 | 221 | [[package]] 222 | name = "cookie" 223 | version = "0.14.3" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "784ad0fbab4f3e9cef09f20e0aea6000ae08d2cb98ac4c0abc53df18803d702f" 226 | dependencies = [ 227 | "percent-encoding", 228 | "time", 229 | "version_check", 230 | ] 231 | 232 | [[package]] 233 | name = "cookie_store" 234 | version = "0.12.0" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "3818dfca4b0cb5211a659bbcbb94225b7127407b2b135e650d717bfb78ab10d3" 237 | dependencies = [ 238 | "cookie", 239 | "idna", 240 | "log", 241 | "publicsuffix", 242 | "serde", 243 | "serde_json", 244 | "time", 245 | "url", 246 | ] 247 | 248 | [[package]] 249 | name = "core-foundation-sys" 250 | version = "0.6.2" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" 253 | 254 | [[package]] 255 | name = "coreaudio-rs" 256 | version = "0.9.1" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "f229761965dad3e9b11081668a6ea00f1def7aa46062321b5ec245b834f6e491" 259 | dependencies = [ 260 | "bitflags", 261 | "coreaudio-sys", 262 | ] 263 | 264 | [[package]] 265 | name = "coreaudio-sys" 266 | version = "0.2.8" 267 | source = "registry+https://github.com/rust-lang/crates.io-index" 268 | checksum = "2b7e3347be6a09b46aba228d6608386739fb70beff4f61e07422da87b0bb31fa" 269 | dependencies = [ 270 | "bindgen", 271 | ] 272 | 273 | [[package]] 274 | name = "cpal" 275 | version = "0.13.1" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | checksum = "05631e2089dfa5d3b6ea1cfbbfd092e2ee5deeb69698911bc976b28b746d3657" 278 | dependencies = [ 279 | "alsa", 280 | "core-foundation-sys", 281 | "coreaudio-rs", 282 | "jni 0.17.0", 283 | "js-sys", 284 | "lazy_static", 285 | "libc", 286 | "mach", 287 | "ndk", 288 | "ndk-glue", 289 | "nix", 290 | "oboe", 291 | "parking_lot", 292 | "stdweb 0.1.3", 293 | "thiserror", 294 | "web-sys", 295 | "winapi", 296 | ] 297 | 298 | [[package]] 299 | name = "crc32fast" 300 | version = "1.2.1" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" 303 | dependencies = [ 304 | "cfg-if 1.0.0", 305 | ] 306 | 307 | [[package]] 308 | name = "darling" 309 | version = "0.10.2" 310 | source = "registry+https://github.com/rust-lang/crates.io-index" 311 | checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" 312 | dependencies = [ 313 | "darling_core", 314 | "darling_macro", 315 | ] 316 | 317 | [[package]] 318 | name = "darling_core" 319 | version = "0.10.2" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" 322 | dependencies = [ 323 | "fnv", 324 | "ident_case", 325 | "proc-macro2", 326 | "quote", 327 | "strsim", 328 | "syn", 329 | ] 330 | 331 | [[package]] 332 | name = "darling_macro" 333 | version = "0.10.2" 334 | source = "registry+https://github.com/rust-lang/crates.io-index" 335 | checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" 336 | dependencies = [ 337 | "darling_core", 338 | "quote", 339 | "syn", 340 | ] 341 | 342 | [[package]] 343 | name = "derivative" 344 | version = "2.2.0" 345 | source = "registry+https://github.com/rust-lang/crates.io-index" 346 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 347 | dependencies = [ 348 | "proc-macro2", 349 | "quote", 350 | "syn", 351 | ] 352 | 353 | [[package]] 354 | name = "discard" 355 | version = "1.0.4" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" 358 | 359 | [[package]] 360 | name = "either" 361 | version = "1.6.1" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 364 | 365 | [[package]] 366 | name = "error-chain" 367 | version = "0.12.4" 368 | source = "registry+https://github.com/rust-lang/crates.io-index" 369 | checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" 370 | dependencies = [ 371 | "backtrace", 372 | "version_check", 373 | ] 374 | 375 | [[package]] 376 | name = "fetch_unroll" 377 | version = "0.2.2" 378 | source = "registry+https://github.com/rust-lang/crates.io-index" 379 | checksum = "c8d44807d562d137f063cbfe209da1c3f9f2fa8375e11166ef495daab7b847f9" 380 | dependencies = [ 381 | "libflate", 382 | "tar", 383 | "ureq", 384 | ] 385 | 386 | [[package]] 387 | name = "filetime" 388 | version = "0.2.14" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" 391 | dependencies = [ 392 | "cfg-if 1.0.0", 393 | "libc", 394 | "redox_syscall 0.2.4", 395 | "winapi", 396 | ] 397 | 398 | [[package]] 399 | name = "fnv" 400 | version = "1.0.7" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 403 | 404 | [[package]] 405 | name = "form_urlencoded" 406 | version = "1.0.0" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" 409 | dependencies = [ 410 | "matches", 411 | "percent-encoding", 412 | ] 413 | 414 | [[package]] 415 | name = "gimli" 416 | version = "0.23.0" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" 419 | 420 | [[package]] 421 | name = "glob" 422 | version = "0.3.0" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" 425 | 426 | [[package]] 427 | name = "ident_case" 428 | version = "1.0.1" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 431 | 432 | [[package]] 433 | name = "idna" 434 | version = "0.2.1" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "de910d521f7cc3135c4de8db1cb910e0b5ed1dc6f57c381cd07e8e661ce10094" 437 | dependencies = [ 438 | "matches", 439 | "unicode-bidi", 440 | "unicode-normalization", 441 | ] 442 | 443 | [[package]] 444 | name = "instant" 445 | version = "0.1.9" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" 448 | dependencies = [ 449 | "cfg-if 1.0.0", 450 | ] 451 | 452 | [[package]] 453 | name = "itoa" 454 | version = "0.4.7" 455 | source = "registry+https://github.com/rust-lang/crates.io-index" 456 | checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" 457 | 458 | [[package]] 459 | name = "jni" 460 | version = "0.14.0" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | checksum = "1981310da491a4f0f815238097d0d43d8072732b5ae5f8bd0d8eadf5bf245402" 463 | dependencies = [ 464 | "cesu8", 465 | "combine 3.8.1", 466 | "error-chain", 467 | "jni-sys", 468 | "log", 469 | "walkdir", 470 | ] 471 | 472 | [[package]] 473 | name = "jni" 474 | version = "0.17.0" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "36bcc950632e48b86da402c5c077590583da5ac0d480103611d5374e7c967a3c" 477 | dependencies = [ 478 | "cesu8", 479 | "combine 4.5.2", 480 | "error-chain", 481 | "jni-sys", 482 | "log", 483 | "walkdir", 484 | ] 485 | 486 | [[package]] 487 | name = "jni-sys" 488 | version = "0.3.0" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 491 | 492 | [[package]] 493 | name = "js-sys" 494 | version = "0.3.47" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65" 497 | dependencies = [ 498 | "wasm-bindgen", 499 | ] 500 | 501 | [[package]] 502 | name = "lazy_static" 503 | version = "1.4.0" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 506 | 507 | [[package]] 508 | name = "lazycell" 509 | version = "1.3.0" 510 | source = "registry+https://github.com/rust-lang/crates.io-index" 511 | checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 512 | 513 | [[package]] 514 | name = "libc" 515 | version = "0.2.86" 516 | source = "registry+https://github.com/rust-lang/crates.io-index" 517 | checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c" 518 | 519 | [[package]] 520 | name = "libflate" 521 | version = "1.0.3" 522 | source = "registry+https://github.com/rust-lang/crates.io-index" 523 | checksum = "389de7875e06476365974da3e7ff85d55f1972188ccd9f6020dd7c8156e17914" 524 | dependencies = [ 525 | "adler32", 526 | "crc32fast", 527 | "libflate_lz77", 528 | "rle-decode-fast", 529 | ] 530 | 531 | [[package]] 532 | name = "libflate_lz77" 533 | version = "1.0.0" 534 | source = "registry+https://github.com/rust-lang/crates.io-index" 535 | checksum = "3286f09f7d4926fc486334f28d8d2e6ebe4f7f9994494b6dab27ddfad2c9b11b" 536 | 537 | [[package]] 538 | name = "libloading" 539 | version = "0.6.7" 540 | source = "registry+https://github.com/rust-lang/crates.io-index" 541 | checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" 542 | dependencies = [ 543 | "cfg-if 1.0.0", 544 | "winapi", 545 | ] 546 | 547 | [[package]] 548 | name = "lock_api" 549 | version = "0.4.2" 550 | source = "registry+https://github.com/rust-lang/crates.io-index" 551 | checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" 552 | dependencies = [ 553 | "scopeguard", 554 | ] 555 | 556 | [[package]] 557 | name = "log" 558 | version = "0.4.14" 559 | source = "registry+https://github.com/rust-lang/crates.io-index" 560 | checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" 561 | dependencies = [ 562 | "cfg-if 1.0.0", 563 | ] 564 | 565 | [[package]] 566 | name = "mach" 567 | version = "0.3.2" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" 570 | dependencies = [ 571 | "libc", 572 | ] 573 | 574 | [[package]] 575 | name = "matches" 576 | version = "0.1.8" 577 | source = "registry+https://github.com/rust-lang/crates.io-index" 578 | checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 579 | 580 | [[package]] 581 | name = "memchr" 582 | version = "2.3.4" 583 | source = "registry+https://github.com/rust-lang/crates.io-index" 584 | checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" 585 | 586 | [[package]] 587 | name = "miniz_oxide" 588 | version = "0.4.3" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" 591 | dependencies = [ 592 | "adler", 593 | "autocfg", 594 | ] 595 | 596 | [[package]] 597 | name = "ndk" 598 | version = "0.2.1" 599 | source = "registry+https://github.com/rust-lang/crates.io-index" 600 | checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" 601 | dependencies = [ 602 | "jni-sys", 603 | "ndk-sys", 604 | "num_enum", 605 | "thiserror", 606 | ] 607 | 608 | [[package]] 609 | name = "ndk-glue" 610 | version = "0.2.1" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" 613 | dependencies = [ 614 | "lazy_static", 615 | "libc", 616 | "log", 617 | "ndk", 618 | "ndk-macro", 619 | "ndk-sys", 620 | ] 621 | 622 | [[package]] 623 | name = "ndk-macro" 624 | version = "0.2.0" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" 627 | dependencies = [ 628 | "darling", 629 | "proc-macro-crate", 630 | "proc-macro2", 631 | "quote", 632 | "syn", 633 | ] 634 | 635 | [[package]] 636 | name = "ndk-sys" 637 | version = "0.2.1" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" 640 | 641 | [[package]] 642 | name = "nethoscope" 643 | version = "0.1.1" 644 | dependencies = [ 645 | "anyhow", 646 | "cpal", 647 | "pcap", 648 | ] 649 | 650 | [[package]] 651 | name = "nix" 652 | version = "0.15.0" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" 655 | dependencies = [ 656 | "bitflags", 657 | "cc", 658 | "cfg-if 0.1.10", 659 | "libc", 660 | "void", 661 | ] 662 | 663 | [[package]] 664 | name = "nom" 665 | version = "5.1.2" 666 | source = "registry+https://github.com/rust-lang/crates.io-index" 667 | checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" 668 | dependencies = [ 669 | "memchr", 670 | "version_check", 671 | ] 672 | 673 | [[package]] 674 | name = "num-derive" 675 | version = "0.3.3" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 678 | dependencies = [ 679 | "proc-macro2", 680 | "quote", 681 | "syn", 682 | ] 683 | 684 | [[package]] 685 | name = "num-traits" 686 | version = "0.2.14" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" 689 | dependencies = [ 690 | "autocfg", 691 | ] 692 | 693 | [[package]] 694 | name = "num_enum" 695 | version = "0.4.3" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" 698 | dependencies = [ 699 | "derivative", 700 | "num_enum_derive", 701 | ] 702 | 703 | [[package]] 704 | name = "num_enum_derive" 705 | version = "0.4.3" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" 708 | dependencies = [ 709 | "proc-macro-crate", 710 | "proc-macro2", 711 | "quote", 712 | "syn", 713 | ] 714 | 715 | [[package]] 716 | name = "object" 717 | version = "0.23.0" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" 720 | 721 | [[package]] 722 | name = "oboe" 723 | version = "0.3.1" 724 | source = "registry+https://github.com/rust-lang/crates.io-index" 725 | checksum = "1aadc2b0867bdbb9a81c4d99b9b682958f49dbea1295a81d2f646cca2afdd9fc" 726 | dependencies = [ 727 | "jni 0.14.0", 728 | "ndk", 729 | "ndk-glue", 730 | "num-derive", 731 | "num-traits", 732 | "oboe-sys", 733 | ] 734 | 735 | [[package]] 736 | name = "oboe-sys" 737 | version = "0.3.0" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "68ff7a51600eabe34e189eec5c995a62f151d8d97e5fbca39e87ca738bb99b82" 740 | dependencies = [ 741 | "fetch_unroll", 742 | ] 743 | 744 | [[package]] 745 | name = "once_cell" 746 | version = "1.5.2" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" 749 | 750 | [[package]] 751 | name = "parking_lot" 752 | version = "0.11.1" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" 755 | dependencies = [ 756 | "instant", 757 | "lock_api", 758 | "parking_lot_core", 759 | ] 760 | 761 | [[package]] 762 | name = "parking_lot_core" 763 | version = "0.8.2" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" 766 | dependencies = [ 767 | "cfg-if 1.0.0", 768 | "instant", 769 | "libc", 770 | "redox_syscall 0.1.57", 771 | "smallvec", 772 | "winapi", 773 | ] 774 | 775 | [[package]] 776 | name = "pcap" 777 | version = "0.8.1" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | checksum = "637123ced9e43bec44bf0bbd024f3de61fbf6dfd31767023f639fc5b8ac92c49" 780 | dependencies = [ 781 | "libc", 782 | "libloading", 783 | "regex", 784 | "widestring", 785 | ] 786 | 787 | [[package]] 788 | name = "peeking_take_while" 789 | version = "0.1.2" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" 792 | 793 | [[package]] 794 | name = "percent-encoding" 795 | version = "2.1.0" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 798 | 799 | [[package]] 800 | name = "pkg-config" 801 | version = "0.3.19" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" 804 | 805 | [[package]] 806 | name = "proc-macro-crate" 807 | version = "0.1.5" 808 | source = "registry+https://github.com/rust-lang/crates.io-index" 809 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 810 | dependencies = [ 811 | "toml", 812 | ] 813 | 814 | [[package]] 815 | name = "proc-macro-hack" 816 | version = "0.5.19" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" 819 | 820 | [[package]] 821 | name = "proc-macro2" 822 | version = "1.0.24" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" 825 | dependencies = [ 826 | "unicode-xid", 827 | ] 828 | 829 | [[package]] 830 | name = "publicsuffix" 831 | version = "1.5.4" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" 834 | dependencies = [ 835 | "error-chain", 836 | "idna", 837 | "lazy_static", 838 | "regex", 839 | "url", 840 | ] 841 | 842 | [[package]] 843 | name = "qstring" 844 | version = "0.7.2" 845 | source = "registry+https://github.com/rust-lang/crates.io-index" 846 | checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" 847 | dependencies = [ 848 | "percent-encoding", 849 | ] 850 | 851 | [[package]] 852 | name = "quote" 853 | version = "1.0.9" 854 | source = "registry+https://github.com/rust-lang/crates.io-index" 855 | checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" 856 | dependencies = [ 857 | "proc-macro2", 858 | ] 859 | 860 | [[package]] 861 | name = "redox_syscall" 862 | version = "0.1.57" 863 | source = "registry+https://github.com/rust-lang/crates.io-index" 864 | checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" 865 | 866 | [[package]] 867 | name = "redox_syscall" 868 | version = "0.2.4" 869 | source = "registry+https://github.com/rust-lang/crates.io-index" 870 | checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" 871 | dependencies = [ 872 | "bitflags", 873 | ] 874 | 875 | [[package]] 876 | name = "regex" 877 | version = "1.4.3" 878 | source = "registry+https://github.com/rust-lang/crates.io-index" 879 | checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" 880 | dependencies = [ 881 | "aho-corasick", 882 | "memchr", 883 | "regex-syntax", 884 | "thread_local", 885 | ] 886 | 887 | [[package]] 888 | name = "regex-syntax" 889 | version = "0.6.22" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" 892 | 893 | [[package]] 894 | name = "ring" 895 | version = "0.16.20" 896 | source = "registry+https://github.com/rust-lang/crates.io-index" 897 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" 898 | dependencies = [ 899 | "cc", 900 | "libc", 901 | "once_cell", 902 | "spin", 903 | "untrusted", 904 | "web-sys", 905 | "winapi", 906 | ] 907 | 908 | [[package]] 909 | name = "rle-decode-fast" 910 | version = "1.0.1" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac" 913 | 914 | [[package]] 915 | name = "rustc-demangle" 916 | version = "0.1.18" 917 | source = "registry+https://github.com/rust-lang/crates.io-index" 918 | checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" 919 | 920 | [[package]] 921 | name = "rustc-hash" 922 | version = "1.1.0" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 925 | 926 | [[package]] 927 | name = "rustc_version" 928 | version = "0.2.3" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 931 | dependencies = [ 932 | "semver", 933 | ] 934 | 935 | [[package]] 936 | name = "rustls" 937 | version = "0.19.0" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" 940 | dependencies = [ 941 | "base64", 942 | "log", 943 | "ring", 944 | "sct", 945 | "webpki", 946 | ] 947 | 948 | [[package]] 949 | name = "ryu" 950 | version = "1.0.5" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" 953 | 954 | [[package]] 955 | name = "same-file" 956 | version = "1.0.6" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 959 | dependencies = [ 960 | "winapi-util", 961 | ] 962 | 963 | [[package]] 964 | name = "scopeguard" 965 | version = "1.1.0" 966 | source = "registry+https://github.com/rust-lang/crates.io-index" 967 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 968 | 969 | [[package]] 970 | name = "sct" 971 | version = "0.6.0" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" 974 | dependencies = [ 975 | "ring", 976 | "untrusted", 977 | ] 978 | 979 | [[package]] 980 | name = "semver" 981 | version = "0.9.0" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 984 | dependencies = [ 985 | "semver-parser", 986 | ] 987 | 988 | [[package]] 989 | name = "semver-parser" 990 | version = "0.7.0" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 993 | 994 | [[package]] 995 | name = "serde" 996 | version = "1.0.123" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" 999 | dependencies = [ 1000 | "serde_derive", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "serde_derive" 1005 | version = "1.0.123" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" 1008 | dependencies = [ 1009 | "proc-macro2", 1010 | "quote", 1011 | "syn", 1012 | ] 1013 | 1014 | [[package]] 1015 | name = "serde_json" 1016 | version = "1.0.62" 1017 | source = "registry+https://github.com/rust-lang/crates.io-index" 1018 | checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486" 1019 | dependencies = [ 1020 | "itoa", 1021 | "ryu", 1022 | "serde", 1023 | ] 1024 | 1025 | [[package]] 1026 | name = "sha1" 1027 | version = "0.6.0" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" 1030 | 1031 | [[package]] 1032 | name = "shlex" 1033 | version = "0.1.1" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" 1036 | 1037 | [[package]] 1038 | name = "smallvec" 1039 | version = "1.6.1" 1040 | source = "registry+https://github.com/rust-lang/crates.io-index" 1041 | checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" 1042 | 1043 | [[package]] 1044 | name = "spin" 1045 | version = "0.5.2" 1046 | source = "registry+https://github.com/rust-lang/crates.io-index" 1047 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 1048 | 1049 | [[package]] 1050 | name = "standback" 1051 | version = "0.2.15" 1052 | source = "registry+https://github.com/rust-lang/crates.io-index" 1053 | checksum = "a2beb4d1860a61f571530b3f855a1b538d0200f7871c63331ecd6f17b1f014f8" 1054 | dependencies = [ 1055 | "version_check", 1056 | ] 1057 | 1058 | [[package]] 1059 | name = "stdweb" 1060 | version = "0.1.3" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" 1063 | 1064 | [[package]] 1065 | name = "stdweb" 1066 | version = "0.4.20" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" 1069 | dependencies = [ 1070 | "discard", 1071 | "rustc_version", 1072 | "stdweb-derive", 1073 | "stdweb-internal-macros", 1074 | "stdweb-internal-runtime", 1075 | "wasm-bindgen", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "stdweb-derive" 1080 | version = "0.5.3" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" 1083 | dependencies = [ 1084 | "proc-macro2", 1085 | "quote", 1086 | "serde", 1087 | "serde_derive", 1088 | "syn", 1089 | ] 1090 | 1091 | [[package]] 1092 | name = "stdweb-internal-macros" 1093 | version = "0.2.9" 1094 | source = "registry+https://github.com/rust-lang/crates.io-index" 1095 | checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" 1096 | dependencies = [ 1097 | "base-x", 1098 | "proc-macro2", 1099 | "quote", 1100 | "serde", 1101 | "serde_derive", 1102 | "serde_json", 1103 | "sha1", 1104 | "syn", 1105 | ] 1106 | 1107 | [[package]] 1108 | name = "stdweb-internal-runtime" 1109 | version = "0.1.5" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" 1112 | 1113 | [[package]] 1114 | name = "strsim" 1115 | version = "0.9.3" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" 1118 | 1119 | [[package]] 1120 | name = "syn" 1121 | version = "1.0.60" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" 1124 | dependencies = [ 1125 | "proc-macro2", 1126 | "quote", 1127 | "unicode-xid", 1128 | ] 1129 | 1130 | [[package]] 1131 | name = "tar" 1132 | version = "0.4.32" 1133 | source = "registry+https://github.com/rust-lang/crates.io-index" 1134 | checksum = "0313546c01d59e29be4f09687bcb4fb6690cec931cc3607b6aec7a0e417f4cc6" 1135 | dependencies = [ 1136 | "filetime", 1137 | "libc", 1138 | "xattr", 1139 | ] 1140 | 1141 | [[package]] 1142 | name = "thiserror" 1143 | version = "1.0.23" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" 1146 | dependencies = [ 1147 | "thiserror-impl", 1148 | ] 1149 | 1150 | [[package]] 1151 | name = "thiserror-impl" 1152 | version = "1.0.23" 1153 | source = "registry+https://github.com/rust-lang/crates.io-index" 1154 | checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" 1155 | dependencies = [ 1156 | "proc-macro2", 1157 | "quote", 1158 | "syn", 1159 | ] 1160 | 1161 | [[package]] 1162 | name = "thread_local" 1163 | version = "1.1.3" 1164 | source = "registry+https://github.com/rust-lang/crates.io-index" 1165 | checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" 1166 | dependencies = [ 1167 | "once_cell", 1168 | ] 1169 | 1170 | [[package]] 1171 | name = "time" 1172 | version = "0.2.25" 1173 | source = "registry+https://github.com/rust-lang/crates.io-index" 1174 | checksum = "1195b046942c221454c2539395f85413b33383a067449d78aab2b7b052a142f7" 1175 | dependencies = [ 1176 | "const_fn", 1177 | "libc", 1178 | "standback", 1179 | "stdweb 0.4.20", 1180 | "time-macros", 1181 | "version_check", 1182 | "winapi", 1183 | ] 1184 | 1185 | [[package]] 1186 | name = "time-macros" 1187 | version = "0.1.1" 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" 1189 | checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" 1190 | dependencies = [ 1191 | "proc-macro-hack", 1192 | "time-macros-impl", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "time-macros-impl" 1197 | version = "0.1.1" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" 1200 | dependencies = [ 1201 | "proc-macro-hack", 1202 | "proc-macro2", 1203 | "quote", 1204 | "standback", 1205 | "syn", 1206 | ] 1207 | 1208 | [[package]] 1209 | name = "tinyvec" 1210 | version = "1.1.1" 1211 | source = "registry+https://github.com/rust-lang/crates.io-index" 1212 | checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" 1213 | dependencies = [ 1214 | "tinyvec_macros", 1215 | ] 1216 | 1217 | [[package]] 1218 | name = "tinyvec_macros" 1219 | version = "0.1.0" 1220 | source = "registry+https://github.com/rust-lang/crates.io-index" 1221 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 1222 | 1223 | [[package]] 1224 | name = "toml" 1225 | version = "0.5.8" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" 1228 | dependencies = [ 1229 | "serde", 1230 | ] 1231 | 1232 | [[package]] 1233 | name = "unicode-bidi" 1234 | version = "0.3.4" 1235 | source = "registry+https://github.com/rust-lang/crates.io-index" 1236 | checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1237 | dependencies = [ 1238 | "matches", 1239 | ] 1240 | 1241 | [[package]] 1242 | name = "unicode-normalization" 1243 | version = "0.1.17" 1244 | source = "registry+https://github.com/rust-lang/crates.io-index" 1245 | checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" 1246 | dependencies = [ 1247 | "tinyvec", 1248 | ] 1249 | 1250 | [[package]] 1251 | name = "unicode-xid" 1252 | version = "0.2.1" 1253 | source = "registry+https://github.com/rust-lang/crates.io-index" 1254 | checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" 1255 | 1256 | [[package]] 1257 | name = "unreachable" 1258 | version = "1.0.0" 1259 | source = "registry+https://github.com/rust-lang/crates.io-index" 1260 | checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" 1261 | dependencies = [ 1262 | "void", 1263 | ] 1264 | 1265 | [[package]] 1266 | name = "untrusted" 1267 | version = "0.7.1" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" 1270 | 1271 | [[package]] 1272 | name = "ureq" 1273 | version = "1.5.4" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "294b85ef5dbc3670a72e82a89971608a1fcc4ed5c7c5a2895230d31a95f0569b" 1276 | dependencies = [ 1277 | "base64", 1278 | "chunked_transfer", 1279 | "cookie", 1280 | "cookie_store", 1281 | "log", 1282 | "once_cell", 1283 | "qstring", 1284 | "rustls", 1285 | "url", 1286 | "webpki", 1287 | "webpki-roots", 1288 | ] 1289 | 1290 | [[package]] 1291 | name = "url" 1292 | version = "2.2.0" 1293 | source = "registry+https://github.com/rust-lang/crates.io-index" 1294 | checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" 1295 | dependencies = [ 1296 | "form_urlencoded", 1297 | "idna", 1298 | "matches", 1299 | "percent-encoding", 1300 | ] 1301 | 1302 | [[package]] 1303 | name = "version_check" 1304 | version = "0.9.2" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" 1307 | 1308 | [[package]] 1309 | name = "void" 1310 | version = "1.0.2" 1311 | source = "registry+https://github.com/rust-lang/crates.io-index" 1312 | checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1313 | 1314 | [[package]] 1315 | name = "walkdir" 1316 | version = "2.3.1" 1317 | source = "registry+https://github.com/rust-lang/crates.io-index" 1318 | checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" 1319 | dependencies = [ 1320 | "same-file", 1321 | "winapi", 1322 | "winapi-util", 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "wasm-bindgen" 1327 | version = "0.2.70" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" 1330 | dependencies = [ 1331 | "cfg-if 1.0.0", 1332 | "wasm-bindgen-macro", 1333 | ] 1334 | 1335 | [[package]] 1336 | name = "wasm-bindgen-backend" 1337 | version = "0.2.70" 1338 | source = "registry+https://github.com/rust-lang/crates.io-index" 1339 | checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7" 1340 | dependencies = [ 1341 | "bumpalo", 1342 | "lazy_static", 1343 | "log", 1344 | "proc-macro2", 1345 | "quote", 1346 | "syn", 1347 | "wasm-bindgen-shared", 1348 | ] 1349 | 1350 | [[package]] 1351 | name = "wasm-bindgen-macro" 1352 | version = "0.2.70" 1353 | source = "registry+https://github.com/rust-lang/crates.io-index" 1354 | checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" 1355 | dependencies = [ 1356 | "quote", 1357 | "wasm-bindgen-macro-support", 1358 | ] 1359 | 1360 | [[package]] 1361 | name = "wasm-bindgen-macro-support" 1362 | version = "0.2.70" 1363 | source = "registry+https://github.com/rust-lang/crates.io-index" 1364 | checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" 1365 | dependencies = [ 1366 | "proc-macro2", 1367 | "quote", 1368 | "syn", 1369 | "wasm-bindgen-backend", 1370 | "wasm-bindgen-shared", 1371 | ] 1372 | 1373 | [[package]] 1374 | name = "wasm-bindgen-shared" 1375 | version = "0.2.70" 1376 | source = "registry+https://github.com/rust-lang/crates.io-index" 1377 | checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" 1378 | 1379 | [[package]] 1380 | name = "web-sys" 1381 | version = "0.3.47" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3" 1384 | dependencies = [ 1385 | "js-sys", 1386 | "wasm-bindgen", 1387 | ] 1388 | 1389 | [[package]] 1390 | name = "webpki" 1391 | version = "0.21.4" 1392 | source = "registry+https://github.com/rust-lang/crates.io-index" 1393 | checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" 1394 | dependencies = [ 1395 | "ring", 1396 | "untrusted", 1397 | ] 1398 | 1399 | [[package]] 1400 | name = "webpki-roots" 1401 | version = "0.21.0" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "82015b7e0b8bad8185994674a13a93306bea76cf5a16c5a181382fd3a5ec2376" 1404 | dependencies = [ 1405 | "webpki", 1406 | ] 1407 | 1408 | [[package]] 1409 | name = "widestring" 1410 | version = "0.2.2" 1411 | source = "registry+https://github.com/rust-lang/crates.io-index" 1412 | checksum = "7157704c2e12e3d2189c507b7482c52820a16dfa4465ba91add92f266667cadb" 1413 | 1414 | [[package]] 1415 | name = "winapi" 1416 | version = "0.3.9" 1417 | source = "registry+https://github.com/rust-lang/crates.io-index" 1418 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1419 | dependencies = [ 1420 | "winapi-i686-pc-windows-gnu", 1421 | "winapi-x86_64-pc-windows-gnu", 1422 | ] 1423 | 1424 | [[package]] 1425 | name = "winapi-i686-pc-windows-gnu" 1426 | version = "0.4.0" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1429 | 1430 | [[package]] 1431 | name = "winapi-util" 1432 | version = "0.1.5" 1433 | source = "registry+https://github.com/rust-lang/crates.io-index" 1434 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1435 | dependencies = [ 1436 | "winapi", 1437 | ] 1438 | 1439 | [[package]] 1440 | name = "winapi-x86_64-pc-windows-gnu" 1441 | version = "0.4.0" 1442 | source = "registry+https://github.com/rust-lang/crates.io-index" 1443 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1444 | 1445 | [[package]] 1446 | name = "xattr" 1447 | version = "0.2.2" 1448 | source = "registry+https://github.com/rust-lang/crates.io-index" 1449 | checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" 1450 | dependencies = [ 1451 | "libc", 1452 | ] 1453 | --------------------------------------------------------------------------------