diff --git a/.all-contributorsrc b/.all-contributorsrc index 7e9e925e7..a09b86d09 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -547,6 +547,43 @@ "contributions": [ "translation" ] + }, + { + "login": "guilherme-demarchi", + "name": "guilherme-demarchi", + "avatar_url": "https://avatars.githubusercontent.com/u/196574579?v=4", + "profile": "https://github.com/guilherme-demarchi", + "contributions": [ + "translation" + ] + }, + { + "login": "Kapelianovych", + "name": "Yevhen", + "avatar_url": "https://avatars.githubusercontent.com/u/28602579?v=4", + "profile": "https://github.com/Kapelianovych", + "contributions": [ + "translation" + ] + }, + { + "login": "shawnyeager", + "name": "Shawn Yeager", + "avatar_url": "https://avatars.githubusercontent.com/u/980297?v=4", + "profile": "http://shawnyeager.com", + "contributions": [ + "financial" + ] + }, + { + "login": "ZeroDot1", + "name": "ZeroDot1", + "avatar_url": "https://avatars.githubusercontent.com/u/28985171?v=4", + "profile": "http://bit.ly/cBWeb", + "contributions": [ + "design", + "a11y" + ] } ], "contributorsPerLine": 7, diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a73cf7b6..e0fa843e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ All Sniffnet releases with the relative changes are documented in this file. +## [UNRELEASED] +- Identify and tag unassigned/reserved "bogon" IP addresses ([#678](https://github.com/GyulyVGC/sniffnet/pull/678) — fixes [#209](https://github.com/GyulyVGC/sniffnet/issues/209)) +- Show data agglomerates in _Inspect_ page table ([#684](https://github.com/GyulyVGC/sniffnet/pull/684) — fixes [#601](https://github.com/GyulyVGC/sniffnet/issues/601)) +- Updated some of the existing translations to v1.3: + - Portuguese ([#690](https://github.com/GyulyVGC/sniffnet/pull/690)) + - Ukrainian ([#692](https://github.com/GyulyVGC/sniffnet/pull/692)) +- Added new themes _OLED (Night)_ and _OLED (Day)_ based on palettes optimized for OLED displays and users with visual impairments ([#708](https://github.com/GyulyVGC/sniffnet/pull/708)) + ## [1.3.2] - 2025-01-06 - Dropdown menus for network host filters ([#659](https://github.com/GyulyVGC/sniffnet/pull/659) — fixes [#354](https://github.com/GyulyVGC/sniffnet/issues/354)) - Added CLI argument `--adapter []` to allow immediately starting the capture from a given network interface ([#643](https://github.com/GyulyVGC/sniffnet/pull/643) — fixes [#636](https://github.com/GyulyVGC/sniffnet/issues/636)) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 52f7673d5..d7182bae4 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -60,24 +60,28 @@ A big shout-out to all the contributors of Sniffnet ([emoji key](https://allcont Safaraliev Maxim
Safaraliev Maxim

🌍 + Shawn Yeager
Shawn Yeager

💵 The Artifex
The Artifex

🌍 📦 Trịnh Duy Hưng
Trịnh Duy Hưng

🌍 Victor Nilsson
Victor Nilsson

🌍 Wang Zishi
Wang Zishi

🌍 + Yevhen
Yevhen

🌍 ZEROF
ZEROF

💵 - clr
clr

📖 🌍 - ervinpopescu
ervinpopescu

🌍 + ZeroDot1
ZeroDot1

🎨 ️️️️♿️ + clr
clr

📖 🌍 + ervinpopescu
ervinpopescu

🌍 glitsj16
glitsj16

📦 + guilherme-demarchi
guilherme-demarchi

🌍 hirotake111
hirotake111

🌍 luca3s
luca3s

🌍 + + pia
pia

🌍 pin
pin

📦 starccy
starccy

💻 tiansheng li
tiansheng li

💵 - - vtiinanen
vtiinanen

🌍 yossarian
yossarian

🌍 陈寒彤
陈寒彤

🌍 diff --git a/Cargo.lock b/Cargo.lock index 55c466aaa..98ce96295 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -39,7 +39,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -51,7 +51,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -85,7 +85,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" dependencies = [ "alsa-sys", - "bitflags 2.6.0", + "bitflags 2.8.0", "cfg-if", "libc", ] @@ -107,7 +107,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.6.0", + "bitflags 2.8.0", "cc", "cesu8", "jni", @@ -183,11 +183,12 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", + "once_cell", "windows-sys 0.59.0", ] @@ -246,7 +247,7 @@ dependencies = [ "wayland-backend", "wayland-client", "wayland-protocols", - "zbus 5.2.0", + "zbus 5.3.1", ] [[package]] @@ -365,7 +366,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -394,13 +395,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -442,7 +443,7 @@ version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -451,7 +452,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -477,9 +478,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "block" @@ -520,9 +521,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "by_address" @@ -547,7 +548,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -558,9 +559,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "calloop" @@ -568,7 +569,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "log", "polling", "rustix", @@ -590,9 +591,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.7" +version = "1.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +checksum = "e4730490333d58093109dc02c23174c3f4d490998c3fed3cc8e82d57afedb9cf" dependencies = [ "jobserver", "libc", @@ -657,9 +658,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.26" +version = "4.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" +checksum = "8acebd8ad879283633b343856142139f2da2317c96b05b4dd6181c61e2480184" dependencies = [ "clap_builder", "clap_derive", @@ -667,9 +668,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.26" +version = "4.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" +checksum = "f6ba32cbda51c7e1dfd49acc1457ba1a7dec5b64fe360e828acb13ca8dc9c2f9" dependencies = [ "anstream", "anstyle", @@ -679,14 +680,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -815,7 +816,7 @@ dependencies = [ "directories", "serde", "thiserror 1.0.69", - "toml 0.8.19", + "toml 0.8.20", ] [[package]] @@ -863,7 +864,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation 0.10.0", "core-graphics-types 0.2.0", "foreign-types 0.5.0", @@ -887,7 +888,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation 0.10.0", "libc", ] @@ -918,7 +919,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59fd57d82eb4bfe7ffa9b1cec0c05e2fd378155b47f255a67983cb4afe0e80c2" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "fontdb 0.16.2", "log", "rangemap", @@ -960,9 +961,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -1003,9 +1004,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-common" @@ -1045,7 +1046,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "libloading 0.8.6", "winapi", ] @@ -1155,7 +1156,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -1209,7 +1210,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1265,9 +1266,9 @@ checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" [[package]] name = "enumflags2" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" dependencies = [ "enumflags2_derive", "serde", @@ -1275,13 +1276,13 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -1329,9 +1330,9 @@ checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "etagere" -version = "0.2.13" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e2f1e3be19fb10f549be8c1bf013e8675b4066c445e36eb76d2ebb2f54ee495" +checksum = "fc89bf99e5dc15954a60f707c1e09d7540e5cd9af85fa75caa0b510bc08c5342" dependencies = [ "euclid", "svg_fmt", @@ -1515,7 +1516,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -1590,9 +1591,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ "fastrand", "futures-core", @@ -1609,7 +1610,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -1687,10 +1688,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + [[package]] name = "gif" version = "0.13.1" @@ -1757,7 +1770,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "gpu-alloc-types", ] @@ -1767,7 +1780,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] @@ -1789,7 +1802,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "gpu-descriptor-types", "hashbrown 0.14.5", ] @@ -1800,7 +1813,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] @@ -1873,7 +1886,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "com", "libc", "libloading 0.8.6", @@ -1954,15 +1967,15 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -2074,7 +2087,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0013a238275494641bf8f1732a23a808196540dc67b22ff97099c044ae4c8a1c" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "bytes", "dark-light", "glam", @@ -2122,7 +2135,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba25a18cfa6d5cc160aca7e1b34f73ccdff21680fa8702168c09739767b6c66f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "bytemuck", "cosmic-text", "half", @@ -2186,7 +2199,7 @@ version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15708887133671d2bcc6c1d01d1f176f43a64d6cdc3b2bf893396c3ee498295f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "bytemuck", "futures", "glam", @@ -2353,7 +2366,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -2385,9 +2398,9 @@ checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" [[package]] name = "indexmap" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -2404,9 +2417,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "ipnetwork" @@ -2432,15 +2445,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" @@ -2495,9 +2499,9 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -2584,7 +2588,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "libc", "redox_syscall 0.5.8", ] @@ -2619,9 +2623,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "lru" @@ -2741,7 +2745,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "block", "core-graphics-types 0.1.3", "foreign-types 0.5.0", @@ -2764,9 +2768,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ "adler2", "simd-adler32", @@ -2779,7 +2783,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -2790,7 +2794,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" dependencies = [ "bit-set", - "bitflags 2.6.0", + "bitflags 2.8.0", "codespan-reporting", "hexf-parse", "indexmap", @@ -2805,9 +2809,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" dependencies = [ "libc", "log", @@ -2826,7 +2830,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "jni-sys", "log", "ndk-sys 0.5.0+25.2.9519653", @@ -2840,7 +2844,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "jni-sys", "log", "ndk-sys 0.6.0+11769913", @@ -2879,7 +2883,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -2904,7 +2908,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -2945,7 +2949,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -2980,7 +2984,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "block2", "libc", "objc2", @@ -2996,7 +3000,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "block2", "objc2", "objc2-core-location", @@ -3020,7 +3024,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "block2", "objc2", "objc2-foundation", @@ -3052,9 +3056,9 @@ dependencies = [ [[package]] name = "objc2-encode" -version = "4.0.3" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] name = "objc2-foundation" @@ -3062,7 +3066,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "block2", "dispatch", "libc", @@ -3087,7 +3091,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "block2", "objc2", "objc2-foundation", @@ -3099,7 +3103,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "block2", "objc2", "objc2-foundation", @@ -3122,7 +3126,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "block2", "objc2", "objc2-cloud-kit", @@ -3154,7 +3158,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "block2", "objc2", "objc2-core-location", @@ -3204,17 +3208,17 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -3231,20 +3235,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" dependencies = [ "cc", "libc", @@ -3289,9 +3293,9 @@ dependencies = [ [[package]] name = "ouroboros" -version = "0.18.4" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "944fa20996a25aded6b4795c6d63f10014a7a83f8be9828a11860b08c5fc4a67" +checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" dependencies = [ "aliasable", "ouroboros_macro", @@ -3300,16 +3304,15 @@ dependencies = [ [[package]] name = "ouroboros_macro" -version = "0.18.4" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" +checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" dependencies = [ "heck 0.4.1", - "itertools 0.12.1", "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -3342,7 +3345,7 @@ dependencies = [ "by_address", "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -3466,7 +3469,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -3486,22 +3489,22 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -3624,9 +3627,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -3639,7 +3642,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", "version_check", "yansi", ] @@ -3652,9 +3655,9 @@ checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" [[package]] name = "quick-xml" -version = "0.36.2" +version = "0.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" +checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" dependencies = [ "memchr", ] @@ -3672,7 +3675,7 @@ dependencies = [ "rustc-hash 2.1.0", "rustls", "socket2", - "thiserror 2.0.10", + "thiserror 2.0.11", "tokio", "tracing", ] @@ -3684,14 +3687,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", - "getrandom", + "getrandom 0.2.15", "rand", "ring", "rustc-hash 2.1.0", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.10", + "thiserror 2.0.11", "tinyvec", "tracing", "web-time", @@ -3747,14 +3750,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "range-alloc" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" +checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" [[package]] name = "rangemap" @@ -3822,7 +3825,7 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] @@ -3831,7 +3834,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror 1.0.69", ] @@ -3984,7 +3987,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", @@ -4033,7 +4036,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.95", + "syn 2.0.98", "unicode-ident", ] @@ -4076,11 +4079,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.43" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "errno 0.3.10", "libc", "linux-raw-sys 0.4.15", @@ -4089,9 +4092,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.20" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "once_cell", "ring", @@ -4112,9 +4115,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" dependencies = [ "web-time", ] @@ -4146,13 +4149,19 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + [[package]] name = "rustybuzz" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "bytemuck", "libm", "smallvec", @@ -4165,9 +4174,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "same-file" @@ -4233,7 +4242,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -4258,9 +4267,9 @@ checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" [[package]] name = "semver" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" @@ -4279,14 +4288,14 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.135" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -4302,7 +4311,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -4355,7 +4364,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -4445,7 +4454,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "calloop", "calloop-wayland-source", "cursor-icon", @@ -4513,7 +4522,7 @@ dependencies = [ "serde_test", "serial_test", "splines", - "toml 0.8.19", + "toml 0.8.20", "winres", ] @@ -4571,14 +4580,14 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] name = "splines" -version = "4.4.1" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef39a4cf041b421dd2b4dd2da7f30bb7059be7a1872fb4f56114b53303d0e1e" +checksum = "3278aafb315f972aa58d958e3f6b8ef60ceb7723bfedfbd00399c73ed0570583" [[package]] name = "stable_deref_trait" @@ -4621,9 +4630,9 @@ checksum = "ce5d813d71d82c4cbc1742135004e4a79fd870214c155443451c139c9470a0aa" [[package]] name = "svgtypes" -version = "0.15.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794de53cc48eaabeed0ab6a3404a65f40b3e38c067e4435883a65d2aa4ca000e" +checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" dependencies = [ "kurbo 0.11.1", "siphasher", @@ -4702,9 +4711,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.95" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -4728,7 +4737,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -4746,7 +4755,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -4763,13 +4772,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.15.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", "fastrand", - "getrandom", + "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", @@ -4795,11 +4804,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" dependencies = [ - "thiserror-impl 2.0.10", + "thiserror-impl 2.0.11", ] [[package]] @@ -4810,18 +4819,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] name = "thiserror-impl" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -4947,9 +4956,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -4968,15 +4977,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.7.1", ] [[package]] @@ -5025,7 +5034,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -5098,9 +5107,9 @@ checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-linebreak" @@ -5259,36 +5268,46 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -5299,9 +5318,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5309,22 +5328,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-timer" @@ -5343,9 +5365,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" +checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" dependencies = [ "cc", "downcast-rs", @@ -5357,11 +5379,11 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280" +checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "rustix", "wayland-backend", "wayland-scanner", @@ -5373,16 +5395,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cursor-icon", "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b08bc3aafdb0035e7fe0fdf17ba0c09c268732707dca4ae098f60cb28c9e4c" +checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" dependencies = [ "rustix", "wayland-client", @@ -5391,11 +5413,11 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.5" +version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd0ade57c4e6e9a8952741325c30bf82f4246885dca8bf561898b86d0c1f58e" +checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5403,11 +5425,11 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b31cab548ee68c7eb155517f2212049dc151f7cd7910c2b66abfd31c3ee12bd" +checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5416,11 +5438,11 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "782e12f6cd923c3c316130d56205ebab53f55d6666b7faddfad36cecaeeb4022" +checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5429,9 +5451,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.5" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" +checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" dependencies = [ "proc-macro2", "quick-xml", @@ -5440,9 +5462,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.5" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09" +checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" dependencies = [ "dlib", "log", @@ -5452,9 +5474,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -5472,9 +5494,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -5518,7 +5540,7 @@ checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" dependencies = [ "arrayvec", "bit-vec", - "bitflags 2.6.0", + "bitflags 2.8.0", "cfg_aliases 0.1.1", "codespan-reporting", "indexmap", @@ -5546,7 +5568,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.6.0", + "bitflags 2.8.0", "block", "cfg_aliases 0.1.1", "core-graphics-types 0.1.3", @@ -5587,7 +5609,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "js-sys", "web-sys", ] @@ -5987,7 +6009,7 @@ dependencies = [ "ahash 0.8.11", "android-activity", "atomic-waker", - "bitflags 2.6.0", + "bitflags 2.8.0", "block2", "bytemuck", "calloop", @@ -6032,9 +6054,18 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.22" +version = "0.6.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39281189af81c07ec09db316b302a3e67bf9bd7cbf6c820b50e35fee9c2fa980" +checksum = "1e90edd2ac1aa278a5c4599b1d89cf03074b610800f866d4026dc199d7929a28" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" dependencies = [ "memchr", ] @@ -6057,6 +6088,15 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -6123,7 +6163,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "dlib", "log", "once_cell", @@ -6180,7 +6220,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", "synstructure", ] @@ -6224,9 +6264,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.2.0" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb67eadba43784b6fb14857eba0d8fc518686d3ee537066eb6086dc318e2c8a1" +checksum = "2494e4b3f44d8363eef79a8a75fc0649efb710eef65a66b5e688a5eb4afe678a" dependencies = [ "async-broadcast", "async-executor", @@ -6251,11 +6291,11 @@ dependencies = [ "tracing", "uds_windows", "windows-sys 0.59.0", - "winnow", + "winnow 0.6.26", "xdg-home", - "zbus_macros 5.2.0", - "zbus_names 4.1.0", - "zvariant 5.1.0", + "zbus_macros 5.3.1", + "zbus_names 4.1.1", + "zvariant 5.2.0", ] [[package]] @@ -6267,23 +6307,23 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", "zvariant_utils 2.1.0", ] [[package]] name = "zbus_macros" -version = "5.2.0" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d49ebc960ceb660f2abe40a5904da975de6986f2af0d7884b39eec6528c57" +checksum = "445efc01929302aee95e2b25bbb62a301ea8a6369466e4278e58e7d1dfb23631" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.95", - "zbus_names 4.1.0", - "zvariant 5.1.0", - "zvariant_utils 3.0.2", + "syn 2.0.98", + "zbus_names 4.1.1", + "zvariant 5.2.0", + "zvariant_utils 3.1.0", ] [[package]] @@ -6299,14 +6339,14 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.1.0" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856b7a38811f71846fd47856ceee8bccaec8399ff53fb370247e66081ace647b" +checksum = "519629a3f80976d89c575895b05677cbc45eaf9f70d62a364d819ba646409cc8" dependencies = [ "serde", "static_assertions", - "winnow", - "zvariant 5.1.0", + "winnow 0.6.26", + "zvariant 5.2.0", ] [[package]] @@ -6333,7 +6373,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -6353,7 +6393,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", "synstructure", ] @@ -6382,7 +6422,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] @@ -6400,18 +6440,18 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.1.0" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1200ee6ac32f1e5a312e455a949a4794855515d34f9909f4a3e082d14e1a56f" +checksum = "55e6b9b5f1361de2d5e7d9fd1ee5f6f7fcb6060618a1f82f3472f58f2b8d4be9" dependencies = [ "endi", "enumflags2", "serde", "static_assertions", "url", - "winnow", - "zvariant_derive 5.1.0", - "zvariant_utils 3.0.2", + "winnow 0.6.26", + "zvariant_derive 5.2.0", + "zvariant_utils 3.1.0", ] [[package]] @@ -6423,21 +6463,21 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", "zvariant_utils 2.1.0", ] [[package]] name = "zvariant_derive" -version = "5.1.0" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687e3b97fae6c9104fbbd36c73d27d149abf04fb874e2efbd84838763daa8916" +checksum = "573a8dd76961957108b10f7a45bac6ab1ea3e9b7fe01aff88325dc57bb8f5c8b" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.95", - "zvariant_utils 3.0.2", + "syn 2.0.98", + "zvariant_utils 3.1.0", ] [[package]] @@ -6448,19 +6488,19 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn 2.0.98", ] [[package]] name = "zvariant_utils" -version = "3.0.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20d1d011a38f12360e5fcccceeff5e2c42a8eb7f27f0dcba97a0862ede05c9c6" +checksum = "ddd46446ea2a1f353bfda53e35f17633afa79f4fe290a611c94645c69fe96a50" dependencies = [ "proc-macro2", "quote", "serde", "static_assertions", - "syn 2.0.95", - "winnow", + "syn 2.0.98", + "winnow 0.6.26", ] diff --git a/Cargo.toml b/Cargo.toml index e0c1c2027..c269b8e07 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,14 +47,14 @@ confy = "0.6.1" serde = { version = "1.0.217", default-features = false, features = ["derive"] } rodio = { version = "0.20.1", default-features = false, features = ["mp3"] } dns-lookup = "2.0.4" -toml = "0.8.19" -once_cell = "1.20.2" +toml = "0.8.20" +once_cell = "1.20.3" ctrlc = { version = "3.4.5", features = ["termination"] } rfd = "0.15.2" phf = "0.11.3" phf_shared = "0.11.3" -splines = "4.4.1" -clap = { version = "4.5.26", features = ["derive"] } +splines = "4.4.2" +clap = { version = "4.5.29", features = ["derive"] } [target.'cfg(windows)'.dependencies] gag = "1.0.0" @@ -78,7 +78,7 @@ serial_test = { version = "3.2.0", default-features = false } phf_codegen = "0.11.3" phf_shared = "0.11.2" rustrict = { version = "0.7.33", default-features = false, features = ["censor"] } -once_cell = "1.20.2" +once_cell = "1.20.3" [target."cfg(windows)".build-dependencies] winres = "0.1.12" diff --git a/README.md b/README.md index 16319e892..87e6922ac 100644 --- a/README.md +++ b/README.md @@ -235,13 +235,6 @@ ICED_BACKEND=tiny-skia ## Acknowledgements - A big shout-out to [all the contributors](https://github.com/GyulyVGC/sniffnet/blob/main/CONTRIBUTORS.md) of Sniffnet! - - The graphical user interface has been realized with [iced](https://github.com/iced-rs/iced), a cross-platform GUI library for Rust focused on simplicity and type-safety - -

- - - -

- +- IP geolocation and ASN data are provided by [MaxMind](https://www.maxmind.com) - Last but not least, thanks to [every single stargazer](https://github.com/GyulyVGC/sniffnet/stargazers): all forms of support made it possible to keep improving Sniffnet! diff --git a/resources/countries_flags/4x3/zz-bogon.svg b/resources/countries_flags/4x3/zz-bogon.svg new file mode 100644 index 000000000..65c95a2ab --- /dev/null +++ b/resources/countries_flags/4x3/zz-bogon.svg @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/resources/fonts/full/subset_characters.txt b/resources/fonts/full/subset_characters.txt index a8a6af047..f1651f7b0 100644 --- a/resources/fonts/full/subset_characters.txt +++ b/resources/fonts/full/subset_characters.txt @@ -197,7 +197,6 @@ z ό ύ ώ -І А Б В diff --git a/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf b/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf index 9780b9df7..0dab64e65 100644 Binary files a/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf and b/resources/fonts/subset/sarasa-mono-sc-bold.subset.ttf differ diff --git a/resources/fonts/subset/sarasa-mono-sc-regular.subset.ttf b/resources/fonts/subset/sarasa-mono-sc-regular.subset.ttf index fb81133d4..2764dfdeb 100644 Binary files a/resources/fonts/subset/sarasa-mono-sc-regular.subset.ttf and b/resources/fonts/subset/sarasa-mono-sc-regular.subset.ttf differ diff --git a/resources/logos/stickers/glyph_for_dark_bg.svg b/resources/logos/stickers/glyph_for_dark_bg.svg new file mode 100644 index 000000000..e47c6cf09 --- /dev/null +++ b/resources/logos/stickers/glyph_for_dark_bg.svg @@ -0,0 +1,57 @@ + + diff --git a/resources/logos/stickers/glyph_for_light_bg.svg b/resources/logos/stickers/glyph_for_light_bg.svg new file mode 100644 index 000000000..ff295394c --- /dev/null +++ b/resources/logos/stickers/glyph_for_light_bg.svg @@ -0,0 +1,57 @@ + + diff --git a/src/countries/country_utils.rs b/src/countries/country_utils.rs index 39ac6ee8a..593947d87 100644 --- a/src/countries/country_utils.rs +++ b/src/countries/country_utils.rs @@ -6,16 +6,16 @@ use iced::Font; use crate::countries::flags_pictures::{ AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, - BJ, BM, BN, BO, BR, BROADCAST, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, - CN, CO, COMPUTER, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, - ET, FI, FJ, FK, FLAGS_WIDTH_BIG, FLAGS_WIDTH_SMALL, FM, FO, FR, GA, GB, GD, GE, GG, GH, GI, GL, - GM, GN, GQ, GR, GS, GT, GU, GW, GY, HK, HN, HOME, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, - IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, - LT, LU, LV, LY, MA, MC, MD, ME, MG, MH, MK, ML, MM, MN, MO, MP, MR, MS, MT, MU, MULTICAST, MV, - MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, - PN, PR, PS, PT, PW, PY, QA, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SK, SL, SM, SN, SO, - SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, - UG, UNKNOWN, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WS, YE, ZA, ZM, ZW, + BJ, BM, BN, BO, BOGON, BR, BROADCAST, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, + CL, CM, CN, CO, COMPUTER, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, + ER, ES, ET, FI, FJ, FK, FLAGS_WIDTH_BIG, FLAGS_WIDTH_SMALL, FM, FO, FR, GA, GB, GD, GE, GG, GH, + GI, GL, GM, GN, GQ, GR, GS, GT, GU, GW, GY, HK, HN, HOME, HR, HT, HU, ID, IE, IL, IM, IN, IO, + IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, + LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MG, MH, MK, ML, MM, MN, MO, MP, MR, MS, MT, MU, + MULTICAST, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, + PG, PH, PK, PL, PN, PR, PS, PT, PW, PY, QA, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SK, + SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, + TV, TW, TZ, UA, UG, UNKNOWN, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WS, YE, ZA, ZM, ZW, }; use crate::countries::types::country::Country; use crate::gui::styles::container::ContainerType; @@ -26,6 +26,7 @@ use crate::networking::types::traffic_type::TrafficType; use crate::translations::translations_2::{ local_translation, unknown_translation, your_network_adapter_translation, }; +use crate::translations::translations_4::reserved_address_translation; use crate::{Language, StyleType}; fn get_flag_from_country<'a>( @@ -33,6 +34,7 @@ fn get_flag_from_country<'a>( width: f32, is_local: bool, is_loopback: bool, + is_bogon: Option<&str>, traffic_type: TrafficType, language: Language, ) -> (Svg<'a, StyleType>, String) { @@ -287,19 +289,24 @@ fn get_flag_from_country<'a>( Country::ZW => ZW, Country::ZZ => { let (flag, new_tooltip) = if is_loopback { - (COMPUTER, your_network_adapter_translation(language)) + ( + COMPUTER, + your_network_adapter_translation(language).to_string(), + ) } else if traffic_type.eq(&TrafficType::Multicast) { - (MULTICAST, "Multicast") + (MULTICAST, "Multicast".to_string()) } else if traffic_type.eq(&TrafficType::Broadcast) { - (BROADCAST, "Broadcast") + (BROADCAST, "Broadcast".to_string()) } else if is_local { - (HOME, local_translation(language)) + (HOME, local_translation(language).to_string()) + } else if let Some(bogon) = is_bogon { + (BOGON, reserved_address_translation(language, bogon)) } else { - (UNKNOWN, unknown_translation(language)) + (UNKNOWN, unknown_translation(language).to_string()) }; svg_style = SvgType::AdaptColor; - tooltip = new_tooltip.to_string(); + tooltip = new_tooltip; flag } }))) @@ -324,12 +331,14 @@ pub fn get_flag_tooltip<'a>( }; let is_local = host_info.is_local; let is_loopback = host_info.is_loopback; + let is_bogon = host_info.is_bogon; let traffic_type = host_info.traffic_type; let (content, tooltip) = get_flag_from_country( country, width, is_local, is_loopback, + is_bogon, traffic_type, language, ); @@ -358,31 +367,33 @@ pub fn get_flag_tooltip<'a>( pub fn get_computer_tooltip<'a>( is_my_address: bool, is_local: bool, + is_bogon: Option<&str>, traffic_type: TrafficType, language: Language, font: Font, ) -> Tooltip<'a, Message, StyleType> { let content = Svg::new(Handle::from_memory(Vec::from( - match (is_my_address, is_local, traffic_type) { - (true, _, _) => COMPUTER, - (false, _, TrafficType::Multicast) => MULTICAST, - (false, _, TrafficType::Broadcast) => BROADCAST, - (false, true, _) => HOME, - (false, false, TrafficType::Unicast) => UNKNOWN, + match (is_my_address, is_local, is_bogon, traffic_type) { + (true, _, _, _) => COMPUTER, + (false, _, _, TrafficType::Multicast) => MULTICAST, + (false, _, _, TrafficType::Broadcast) => BROADCAST, + (false, true, _, _) => HOME, + (false, false, Some(_), _) => BOGON, + (false, false, None, TrafficType::Unicast) => UNKNOWN, }, ))) .class(SvgType::AdaptColor) .width(FLAGS_WIDTH_BIG) .height(FLAGS_WIDTH_BIG * 0.75); - let tooltip = match (is_my_address, is_local, traffic_type) { - (true, _, _) => your_network_adapter_translation(language), - (false, _, TrafficType::Multicast) => "Multicast", - (false, _, TrafficType::Broadcast) => "Broadcast", - (false, true, _) => local_translation(language), - (false, false, TrafficType::Unicast) => unknown_translation(language), - } - .to_string(); + let tooltip = match (is_my_address, is_local, is_bogon, traffic_type) { + (true, _, _, _) => your_network_adapter_translation(language).to_string(), + (false, _, _, TrafficType::Multicast) => "Multicast".to_string(), + (false, _, _, TrafficType::Broadcast) => "Broadcast".to_string(), + (false, true, _, _) => local_translation(language).to_string(), + (false, false, Some(t), _) => reserved_address_translation(language, t), + (false, false, None, TrafficType::Unicast) => unknown_translation(language).to_string(), + }; Tooltip::new( content, diff --git a/src/countries/flags_pictures.rs b/src/countries/flags_pictures.rs index a1c579837..f13feced8 100644 --- a/src/countries/flags_pictures.rs +++ b/src/countries/flags_pictures.rs @@ -255,3 +255,4 @@ pub const MULTICAST: &[u8] = include_bytes!("../../resources/countries_flags/4x3 pub const BROADCAST: &[u8] = include_bytes!("../../resources/countries_flags/4x3/zz-broadcast.svg"); pub const UNKNOWN: &[u8] = include_bytes!("../../resources/countries_flags/4x3/zz-unknown.svg"); pub const COMPUTER: &[u8] = include_bytes!("../../resources/countries_flags/4x3/zz-computer.svg"); +pub const BOGON: &[u8] = include_bytes!("../../resources/countries_flags/4x3/zz-bogon.svg"); diff --git a/src/gui/pages/connection_details_page.rs b/src/gui/pages/connection_details_page.rs index d293bb5bb..840011dda 100644 --- a/src/gui/pages/connection_details_page.rs +++ b/src/gui/pages/connection_details_page.rs @@ -19,6 +19,7 @@ use crate::networking::manage_packets::{ get_address_to_lookup, get_traffic_type, is_local_connection, is_my_address, }; use crate::networking::types::address_port_pair::AddressPortPair; +use crate::networking::types::bogon::is_bogon; use crate::networking::types::host::Host; use crate::networking::types::icmp_type::IcmpType; use crate::networking::types::info_address_port_pair::InfoAddressPortPair; @@ -304,6 +305,7 @@ fn get_local_tooltip<'a>( get_computer_tooltip( is_my_address(local_address, my_interface_addresses), is_local_connection(local_address, my_interface_addresses), + is_bogon(local_address), get_traffic_type( if address_to_lookup.eq(&key.address1) { &key.address2 diff --git a/src/gui/pages/inspect_page.rs b/src/gui/pages/inspect_page.rs index db824d053..13cb7c145 100644 --- a/src/gui/pages/inspect_page.rs +++ b/src/gui/pages/inspect_page.rs @@ -11,8 +11,10 @@ use iced::widget::{ use iced::widget::{lazy, Button, Column, Container, Row, Scrollable, Text, TextInput}; use iced::{alignment, Alignment, Font, Length, Padding, Pixels}; +use crate::chart::types::chart_type::ChartType; use crate::gui::components::tab::get_pages_tabs; use crate::gui::components::types::my_modal::MyModal; +use crate::gui::pages::overview_page::get_bars; use crate::gui::styles::button::ButtonType; use crate::gui::styles::container::ContainerType; use crate::gui::styles::scrollbar::ScrollbarType; @@ -21,6 +23,8 @@ use crate::gui::styles::text::TextType; use crate::gui::styles::text_input::TextInputType; use crate::gui::types::message::Message; use crate::networking::types::address_port_pair::AddressPortPair; +use crate::networking::types::byte_multiple::ByteMultiple; +use crate::networking::types::data_info::DataInfoWithoutTimestamp; use crate::networking::types::host_data_states::HostStates; use crate::networking::types::info_address_port_pair::InfoAddressPortPair; use crate::networking::types::traffic_direction::TrafficDirection; @@ -116,7 +120,7 @@ fn lazy_report<'a>(sniffer: &Sniffer) -> Column<'a, Message, StyleType> { } = sniffer.configs.lock().unwrap().settings; let font = style.get_extension().font; - let (search_results, results_number) = get_searched_entries(sniffer); + let (search_results, results_number, agglomerate) = get_searched_entries(sniffer); let mut ret_val = Column::new() .height(Length::Fill) @@ -147,6 +151,12 @@ fn lazy_report<'a>(sniffer: &Sniffer) -> Column<'a, Message, StyleType> { .width(Length::Fill), ) .push(Rule::horizontal(5)) + .push(get_agglomerates_row( + font, + agglomerate, + sniffer.traffic_chart.chart_type, + )) + .push(Rule::horizontal(5)) .push(get_change_page_row( font, language, @@ -547,6 +557,43 @@ fn get_button_change_page<'a>(increment: bool) -> Button<'a, Message, StyleType> .on_press(Message::UpdatePageNumber(increment)) } +fn get_agglomerates_row<'a>( + font: Font, + tot: DataInfoWithoutTimestamp, + chart_type: ChartType, +) -> Row<'a, Message, StyleType> { + let tot_packets = tot.incoming_packets + tot.outgoing_packets; + let tot_bytes = tot.incoming_bytes + tot.outgoing_bytes; + let width = ReportCol::FILTER_COLUMNS_WIDTH; + + #[allow(clippy::cast_precision_loss)] + let in_length = if chart_type == ChartType::Packets { + width * (tot.incoming_packets as f32 / tot_packets as f32) + } else { + width * (tot.incoming_bytes as f32 / tot_bytes as f32) + }; + let out_length = width - in_length; + let bars = get_bars(in_length, out_length); + + let bytes_col = Column::new() + .align_x(Alignment::Center) + .width(ReportCol::Bytes.get_width()) + .push(Text::new(ByteMultiple::formatted_string(tot_bytes)).font(font)); + + let packets_col = Column::new() + .align_x(Alignment::Center) + .width(ReportCol::Packets.get_width()) + .push(Text::new(tot_packets.to_string()).font(font)); + + Row::new() + .padding([0, 2]) + .height(40) + .align_y(Alignment::Center) + .push(bars) + .push(bytes_col) + .push(packets_col) +} + fn get_change_page_row<'a>( font: Font, language: Language, diff --git a/src/gui/pages/overview_page.rs b/src/gui/pages/overview_page.rs index 5dae518da..b4324ad41 100644 --- a/src/gui/pages/overview_page.rs +++ b/src/gui/pages/overview_page.rs @@ -736,7 +736,7 @@ fn get_bars_length( (in_len, out_len) } -fn get_bars<'a>(in_len: f32, out_len: f32) -> Row<'a, Message, StyleType> { +pub fn get_bars<'a>(in_len: f32, out_len: f32) -> Row<'a, Message, StyleType> { Row::new() .push(if in_len > 0.0 { Row::new() diff --git a/src/gui/styles/custom_themes/mod.rs b/src/gui/styles/custom_themes/mod.rs index 1ccee9527..315b99570 100644 --- a/src/gui/styles/custom_themes/mod.rs +++ b/src/gui/styles/custom_themes/mod.rs @@ -1,4 +1,5 @@ pub mod dracula; pub mod gruvbox; pub mod nord; +pub mod oled; pub mod solarized; diff --git a/src/gui/styles/custom_themes/oled.rs b/src/gui/styles/custom_themes/oled.rs new file mode 100644 index 000000000..c5f6bd1ec --- /dev/null +++ b/src/gui/styles/custom_themes/oled.rs @@ -0,0 +1,34 @@ +#![allow(clippy::unreadable_literal)] + +//! Themes optimized for OLED displays and visually impaired users +//! + +use iced::color; +use once_cell::sync::Lazy; + +use crate::gui::styles::types::palette::Palette; +use crate::gui::styles::types::palette_extension::PaletteExtension; + +pub static OLED_DARK_PALETTE: Lazy = Lazy::new(|| Palette { + primary: color!(0x000000), + secondary: color!(0x934900), + outgoing: color!(0xF0F0F0), + starred: color!(0xFFFF00), + text_headers: color!(0xE0E0E0), + text_body: color!(0xfcfaf0), +}); + +pub static OLED_DARK_PALETTE_EXTENSION: Lazy = + Lazy::new(|| OLED_DARK_PALETTE.generate_palette_extension()); + +pub static OLED_LIGHT_PALETTE: Lazy = Lazy::new(|| Palette { + primary: color!(0xFFFFFF), + secondary: color!(0x6CB6FF), + outgoing: color!(0x0F0F0F), + starred: color!(0x0000FF), + text_headers: color!(0x1F1F1F), + text_body: color!(0x03050F), +}); + +pub static OLED_LIGHT_PALETTE_EXTENSION: Lazy = + Lazy::new(|| OLED_LIGHT_PALETTE.generate_palette_extension()); diff --git a/src/gui/styles/types/color_remote.rs b/src/gui/styles/types/color_remote.rs index 3f186eb7f..c9763f4c0 100644 --- a/src/gui/styles/types/color_remote.rs +++ b/src/gui/styles/types/color_remote.rs @@ -1,4 +1,4 @@ -//! Remote implemention of [`serde::Deserialize`] and [`serde::Serialize`] for [`iced::Color`]. +//! Remote implementation of [`serde::Deserialize`] and [`serde::Serialize`] for [`iced::Color`]. //! //! This implementation deserializes hexadecimal RGB(A) as string to float RGB(A) and back. //! NOTE: The alpha channel is optional and defaults to #ff or 1.0. @@ -39,7 +39,7 @@ where })? // Iterating over bytes is safe because hex is ASCII. // If the hex is not ASCII or invalid hex, then the iterator will short circuit and fail on `from_str_radix` - // TODO: This can be cleaned up when `iter_array_chunks` is stablized (https://github.com/rust-lang/rust/issues/100450) + // TODO: This can be cleaned up when `iter_array_chunks` is stabilized (https://github.com/rust-lang/rust/issues/100450) .bytes() .step_by(2) // Step by every first hex char of the two char sequence .zip(hex.bytes().skip(2).step_by(2)) // Step by every second hex char diff --git a/src/gui/styles/types/custom_palette.rs b/src/gui/styles/types/custom_palette.rs index 7b14bd601..baa1252bb 100644 --- a/src/gui/styles/types/custom_palette.rs +++ b/src/gui/styles/types/custom_palette.rs @@ -15,6 +15,10 @@ use crate::gui::styles::custom_themes::nord::{ NORD_DARK_PALETTE, NORD_DARK_PALETTE_EXTENSION, NORD_LIGHT_PALETTE, NORD_LIGHT_PALETTE_EXTENSION, }; +use crate::gui::styles::custom_themes::oled::{ + OLED_DARK_PALETTE, OLED_DARK_PALETTE_EXTENSION, OLED_LIGHT_PALETTE, + OLED_LIGHT_PALETTE_EXTENSION, +}; use crate::gui::styles::custom_themes::solarized::{ SOLARIZED_DARK_PALETTE, SOLARIZED_DARK_PALETTE_EXTENSION, SOLARIZED_LIGHT_PALETTE, SOLARIZED_LIGHT_PALETTE_EXTENSION, @@ -51,6 +55,8 @@ pub enum ExtraStyles { NordLight, SolarizedDark, SolarizedLight, + OledDark, + OledLight, CustomToml(CustomPalette), } @@ -66,6 +72,8 @@ impl ExtraStyles { ExtraStyles::NordLight => *NORD_LIGHT_PALETTE, ExtraStyles::SolarizedDark => *SOLARIZED_DARK_PALETTE, ExtraStyles::SolarizedLight => *SOLARIZED_LIGHT_PALETTE, + ExtraStyles::OledDark => *OLED_DARK_PALETTE, + ExtraStyles::OledLight => *OLED_LIGHT_PALETTE, ExtraStyles::CustomToml(custom_palette) => custom_palette.palette, } } @@ -81,6 +89,8 @@ impl ExtraStyles { ExtraStyles::NordLight => *NORD_LIGHT_PALETTE_EXTENSION, ExtraStyles::SolarizedDark => *SOLARIZED_DARK_PALETTE_EXTENSION, ExtraStyles::SolarizedLight => *SOLARIZED_LIGHT_PALETTE_EXTENSION, + ExtraStyles::OledDark => *OLED_DARK_PALETTE_EXTENSION, + ExtraStyles::OledLight => *OLED_LIGHT_PALETTE_EXTENSION, ExtraStyles::CustomToml(custom_palette) => custom_palette.extension, } } @@ -96,6 +106,8 @@ impl ExtraStyles { ExtraStyles::NordLight, ExtraStyles::SolarizedDark, ExtraStyles::SolarizedLight, + ExtraStyles::OledDark, + ExtraStyles::OledLight, ] } } @@ -111,6 +123,8 @@ impl fmt::Display for ExtraStyles { ExtraStyles::NordDark => write!(f, "Nord (Night)"), ExtraStyles::SolarizedLight => write!(f, "Solarized (Day)"), ExtraStyles::SolarizedDark => write!(f, "Solarized (Night)"), + ExtraStyles::OledLight => write!(f, "OLED (Day)"), + ExtraStyles::OledDark => write!(f, "OLED (Night)"), // Custom style names aren't used anywhere so this shouldn't be reached ExtraStyles::CustomToml(_) => unreachable!(), } diff --git a/src/networking/manage_packets.rs b/src/networking/manage_packets.rs index 7f4576bd8..7f2a35f45 100644 --- a/src/networking/manage_packets.rs +++ b/src/networking/manage_packets.rs @@ -12,6 +12,7 @@ use crate::mmdb::asn::get_asn; use crate::mmdb::country::get_country; use crate::mmdb::types::mmdb_reader::MmdbReaders; use crate::networking::types::address_port_pair::AddressPortPair; +use crate::networking::types::bogon::is_bogon; use crate::networking::types::data_info_host::DataInfoHost; use crate::networking::types::host::Host; use crate::networking::types::host_data_states::HostData; @@ -320,6 +321,7 @@ pub fn reverse_dns_lookup( ); let is_loopback = is_loopback(&address_to_lookup); let is_local = is_local_connection(&address_to_lookup, &my_interface_addresses); + let is_bogon = is_bogon(&address_to_lookup); let country = get_country(&address_to_lookup, &mmdb_readers.country); let asn = get_asn(&address_to_lookup, &mmdb_readers.asn); let r_dns = if let Ok(result) = lookup_result { @@ -358,6 +360,7 @@ pub fn reverse_dns_lookup( is_favorite: false, is_loopback, is_local, + is_bogon, traffic_type, }); diff --git a/src/networking/types/bogon.rs b/src/networking/types/bogon.rs new file mode 100644 index 000000000..a546ecbe8 --- /dev/null +++ b/src/networking/types/bogon.rs @@ -0,0 +1,284 @@ +use crate::networking::types::ip_collection::AddressCollection; +use once_cell::sync::Lazy; +use std::net::IpAddr; +use std::str::FromStr; + +pub struct Bogon { + pub range: AddressCollection, + pub description: &'static str, +} + +// IPv4 bogons + +static THIS_NETWORK: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("0.0.0.0-0.255.255.255").unwrap(), + description: "\"this\" network", +}); + +static PRIVATE_USE: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new( + "10.0.0.0-10.255.255.255, 172.16.0.0-172.31.255.255, 192.168.0.0-192.168.255.255", + ) + .unwrap(), + description: "private-use", +}); + +static CARRIER_GRADE: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("100.64.0.0-100.127.255.255").unwrap(), + description: "carrier-grade NAT", +}); + +static LOOPBACK: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("127.0.0.0-127.255.255.255").unwrap(), + description: "loopback", +}); + +static LINK_LOCAL: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("169.254.0.0-169.254.255.255").unwrap(), + description: "link local", +}); + +static IETF_PROTOCOL: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("192.0.0.0-192.0.0.255").unwrap(), + description: "IETF protocol assignments", +}); + +static TEST_NET_1: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("192.0.2.0-192.0.2.255").unwrap(), + description: "TEST-NET-1", +}); + +static NETWORK_INTERCONNECT: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("198.18.0.0-198.19.255.255").unwrap(), + description: "network interconnect device benchmark testing", +}); + +static TEST_NET_2: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("198.51.100.0-198.51.100.255").unwrap(), + description: "TEST-NET-2", +}); + +static TEST_NET_3: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("203.0.113.0-203.0.113.255").unwrap(), + description: "TEST-NET-3", +}); + +static FUTURE_USE: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("240.0.0.0-255.255.255.255").unwrap(), + description: "future use", +}); + +// IPv6 bogons + +static NODE_SCOPE_UNSPECIFIED: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("::").unwrap(), + description: "node-scope unicast unspecified", +}); + +static NODE_SCOPE_LOOPBACK: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("::1").unwrap(), + description: "node-scope unicast loopback", +}); + +static IPV4_MAPPED: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("::ffff:0.0.0.0-::ffff:255.255.255.255").unwrap(), + description: "IPv4-mapped", +}); + +static IPV4_COMPATIBLE: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("::-::255.255.255.255").unwrap(), + description: "IPv4-compatible", +}); + +static REMOTELY_TRIGGERED: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("100::-100::ffff:ffff:ffff:ffff").unwrap(), + description: "remotely triggered black hole", +}); + +static ORCHID: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("2001:10::-2001:1f:ffff:ffff:ffff:ffff:ffff:ffff").unwrap(), + description: "ORCHID", +}); + +static DOCUMENTATION_PREFIX: Lazy = Lazy::new(|| { + Bogon { + range: AddressCollection::new("2001:db8::-2001:db8:ffff:ffff:ffff:ffff:ffff:ffff, 3fff::-3fff:fff:ffff:ffff:ffff:ffff:ffff:ffff") + .unwrap(), + description: "documentation prefix", +} +}); + +static ULA: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap(), + description: "ULA", +}); + +static LINK_LOCAL_UNICAST: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap(), + description: "link-local unicast", +}); + +static SITE_LOCAL_UNICAST: Lazy = Lazy::new(|| Bogon { + range: AddressCollection::new("fec0::-feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap(), + description: "site-local unicast", +}); + +// all bogons + +static BOGONS: Lazy> = Lazy::new(|| { + vec![ + &THIS_NETWORK, + &PRIVATE_USE, + &CARRIER_GRADE, + &LOOPBACK, + &LINK_LOCAL, + &IETF_PROTOCOL, + &TEST_NET_1, + &NETWORK_INTERCONNECT, + &TEST_NET_2, + &TEST_NET_3, + &FUTURE_USE, + &NODE_SCOPE_UNSPECIFIED, + &NODE_SCOPE_LOOPBACK, + &IPV4_MAPPED, + &IPV4_COMPATIBLE, + &REMOTELY_TRIGGERED, + &ORCHID, + &DOCUMENTATION_PREFIX, + &ULA, + &LINK_LOCAL_UNICAST, + &SITE_LOCAL_UNICAST, + ] +}); + +pub fn is_bogon(address: &str) -> Option<&'static str> { + let ip = IpAddr::from_str(address).ok()?; + for bogon in BOGONS.iter() { + if bogon.range.contains(&ip) { + return Some(bogon.description); + } + } + None +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_is_bogon_no() { + assert_eq!(is_bogon("8.8.8.8"), None); + assert_eq!(is_bogon("2001:4860:4860::8888"), None); + } + + #[test] + fn test_is_bogon_this_network() { + assert_eq!(is_bogon("0.1.2.3"), Some("\"this\" network")); + } + + #[test] + fn test_is_bogon_private_use_networks() { + assert_eq!(is_bogon("10.1.2.3"), Some("private-use")); + assert_eq!(is_bogon("172.22.2.3"), Some("private-use")); + assert_eq!(is_bogon("192.168.255.3"), Some("private-use")); + } + + #[test] + fn test_is_bogon_carrier_grade() { + assert_eq!(is_bogon("100.99.2.1"), Some("carrier-grade NAT")); + } + + #[test] + fn test_is_bogon_loopback() { + assert_eq!(is_bogon("127.99.2.1"), Some("loopback")); + } + + #[test] + fn test_is_bogon_link_local() { + assert_eq!(is_bogon("169.254.0.0"), Some("link local")); + } + + #[test] + fn test_is_bogon_ietf() { + assert_eq!(is_bogon("192.0.0.255"), Some("IETF protocol assignments")); + } + + #[test] + fn test_is_bogon_test_net_1() { + assert_eq!(is_bogon("192.0.2.128"), Some("TEST-NET-1")); + } + + #[test] + fn test_is_bogon_network_interconnect() { + assert_eq!( + is_bogon("198.18.2.128"), + Some("network interconnect device benchmark testing") + ); + } + + #[test] + fn test_is_bogon_test_net_2() { + assert_eq!(is_bogon("198.51.100.128"), Some("TEST-NET-2")); + } + + #[test] + fn test_is_bogon_test_net_3() { + assert_eq!(is_bogon("203.0.113.128"), Some("TEST-NET-3")); + } + + #[test] + fn test_is_bogon_future_use() { + assert_eq!(is_bogon("240.0.0.0"), Some("future use")); + } + + #[test] + fn test_node_scope_unspecified() { + assert_eq!(is_bogon("::"), Some("node-scope unicast unspecified")); + } + + #[test] + fn test_node_scope_loopback() { + assert_eq!(is_bogon("::1"), Some("node-scope unicast loopback")); + } + + #[test] + fn test_ipv4_mapped() { + assert_eq!(is_bogon("::ffff:8.8.8.8"), Some("IPv4-mapped")); + } + + #[test] + fn test_ipv4_compatible() { + assert_eq!(is_bogon("::8.8.8.8"), Some("IPv4-compatible")); + } + + #[test] + fn test_remotely_triggered() { + assert_eq!(is_bogon("100::beef"), Some("remotely triggered black hole")); + } + + #[test] + fn test_orchid() { + assert_eq!(is_bogon("2001:10::feed"), Some("ORCHID")); + } + + #[test] + fn test_documentation_prefix() { + assert_eq!(is_bogon("2001:db8::fe90"), Some("documentation prefix")); + assert_eq!(is_bogon("3fff::"), Some("documentation prefix")); + } + + #[test] + fn test_ula() { + assert_eq!(is_bogon("fdff::"), Some("ULA")); + } + + #[test] + fn test_link_local_unicast() { + assert_eq!(is_bogon("feaf::"), Some("link-local unicast")); + } + + #[test] + fn test_site_local_unicast() { + assert_eq!(is_bogon("feea::1"), Some("site-local unicast")); + } +} diff --git a/src/networking/types/data_info.rs b/src/networking/types/data_info.rs index 0408b63b2..766cc3405 100644 --- a/src/networking/types/data_info.rs +++ b/src/networking/types/data_info.rs @@ -122,3 +122,15 @@ impl AddAssign for DataInfo { self.final_timestamp = Local::now(); } } + +#[derive(Clone, Default, Copy)] +pub struct DataInfoWithoutTimestamp { + /// Incoming packets + pub incoming_packets: u128, + /// Outgoing packets + pub outgoing_packets: u128, + /// Incoming bytes + pub incoming_bytes: u128, + /// Outgoing bytes + pub outgoing_bytes: u128, +} diff --git a/src/networking/types/data_info_host.rs b/src/networking/types/data_info_host.rs index 5c052ac96..a8459b951 100644 --- a/src/networking/types/data_info_host.rs +++ b/src/networking/types/data_info_host.rs @@ -14,6 +14,8 @@ pub struct DataInfoHost { pub is_loopback: bool, /// Determine if the connection with this host is local pub is_local: bool, + /// Determine if the connection is with a bogon address + pub is_bogon: Option<&'static str>, /// Determine if the connection with this host is unicast, multicast, or broadcast pub traffic_type: TrafficType, } diff --git a/src/networking/types/ip_collection.rs b/src/networking/types/ip_collection.rs index e2dcfba33..687c47fe1 100644 --- a/src/networking/types/ip_collection.rs +++ b/src/networking/types/ip_collection.rs @@ -4,8 +4,8 @@ use std::str::FromStr; #[derive(Debug, Eq, PartialEq, Clone)] pub(crate) struct AddressCollection { - pub(crate) ips: Vec, - pub(crate) ranges: Vec>, + ips: Vec, + ranges: Vec>, } impl AddressCollection { diff --git a/src/networking/types/mod.rs b/src/networking/types/mod.rs index fe7dec598..93c87318a 100644 --- a/src/networking/types/mod.rs +++ b/src/networking/types/mod.rs @@ -1,5 +1,6 @@ pub mod address_port_pair; pub mod asn; +pub mod bogon; pub mod byte_multiple; pub mod capture_context; pub mod data_info; diff --git a/src/report/get_report_entries.rs b/src/report/get_report_entries.rs index 367a3363d..893f12375 100644 --- a/src/report/get_report_entries.rs +++ b/src/report/get_report_entries.rs @@ -3,18 +3,25 @@ use std::sync::Mutex; use crate::networking::manage_packets::get_address_to_lookup; use crate::networking::types::address_port_pair::AddressPortPair; -use crate::networking::types::data_info::DataInfo; +use crate::networking::types::data_info::{DataInfo, DataInfoWithoutTimestamp}; use crate::networking::types::data_info_host::DataInfoHost; use crate::networking::types::host::Host; use crate::networking::types::info_address_port_pair::InfoAddressPortPair; +use crate::networking::types::traffic_direction::TrafficDirection; use crate::report::types::sort_type::SortType; use crate::{ChartType, InfoTraffic, ReportSortType, Service, Sniffer}; -/// Returns the elements which satisfy the search constraints and belong to the given page, -/// and the total number of elements which satisfy the search constraints +/// Return the elements that satisfy the search constraints and belong to the given page, +/// and the total number of elements which satisfy the search constraints, +/// with their packets, in-bytes, and out-bytes count pub fn get_searched_entries( sniffer: &Sniffer, -) -> (Vec<(AddressPortPair, InfoAddressPortPair)>, usize) { +) -> ( + Vec<(AddressPortPair, InfoAddressPortPair)>, + usize, + DataInfoWithoutTimestamp, +) { + let mut agglomerate = DataInfoWithoutTimestamp::default(); let info_traffic_lock = sniffer.info_traffic.lock().unwrap(); let mut all_results: Vec<(&AddressPortPair, &InfoAddressPortPair)> = info_traffic_lock .map @@ -31,7 +38,18 @@ pub fn get_searched_entries( .search .match_entry(key, value, r_dns_host, is_favorite) }) + .map(|(key, val)| { + if val.traffic_direction == TrafficDirection::Outgoing { + agglomerate.outgoing_packets += val.transmitted_packets; + agglomerate.outgoing_bytes += val.transmitted_bytes; + } else { + agglomerate.incoming_packets += val.transmitted_packets; + agglomerate.incoming_bytes += val.transmitted_bytes; + } + (key, val) + }) .collect(); + all_results.sort_by(|&(_, a), &(_, b)| match sniffer.report_sort_type { ReportSortType { byte_sort, @@ -62,6 +80,7 @@ pub fn get_searched_entries( .map(|&(key, val)| (key.to_owned(), val.to_owned())) .collect(), all_results.len(), + agglomerate, ) } diff --git a/src/report/types/report_col.rs b/src/report/types/report_col.rs index bbcf4c6b5..dd5e5fb40 100644 --- a/src/report/types/report_col.rs +++ b/src/report/types/report_col.rs @@ -41,6 +41,8 @@ impl ReportCol { ReportCol::Packets, ]; + pub(crate) const FILTER_COLUMNS_WIDTH: f32 = 4.0 * SMALL_COL_WIDTH + 2.0 * LARGE_COL_WIDTH; + pub(crate) fn get_title(&self, language: Language) -> String { match self { ReportCol::SrcIp | ReportCol::DstIp => address_translation(language).to_string(), diff --git a/src/secondary_threads/parse_packets.rs b/src/secondary_threads/parse_packets.rs index fdc1a67d3..41a215ca7 100644 --- a/src/secondary_threads/parse_packets.rs +++ b/src/secondary_threads/parse_packets.rs @@ -239,7 +239,7 @@ fn from_null(packet: &[u8]) -> Result { let h = &packet[..4]; let b = [h[0], h[1], h[2], h[3]]; // check both big endian and little endian representations - // as some OS'es use native endianess and others use big endian + // as some OS'es use native endianness and others use big endian matches(u32::from_le_bytes(b)) || matches(u32::from_be_bytes(b)) }; diff --git a/src/translations/mod.rs b/src/translations/mod.rs index 342693ceb..b55b49080 100644 --- a/src/translations/mod.rs +++ b/src/translations/mod.rs @@ -2,4 +2,5 @@ pub mod translations; pub mod translations_2; pub mod translations_3; +pub mod translations_4; pub mod types; diff --git a/src/translations/translations.rs b/src/translations/translations.rs index f173572d0..763cd76b0 100644 --- a/src/translations/translations.rs +++ b/src/translations/translations.rs @@ -13,7 +13,7 @@ pub fn choose_adapters_translation<'a>(language: Language) -> Text<'a, StyleType Language::ES => "Seleccione el adaptador de red que desea inspeccionar", Language::PL => "Wybierz adapter sieciowy do inspekcji", Language::DE => "Wähle einen Netzwerkadapter zum überwachen aus", - Language::UK => "Вибрати мережевий адаптер для інспекції", + Language::UK => "Виберіть мережевий адаптер для перевірки", Language::ZH => "选择需要监控的网络适配器", Language::RO => "Selectați adaptor de rețea pentru a inspecta", Language::KO => "검사할 네트워크 어댑터 선택", @@ -38,7 +38,7 @@ pub fn choose_adapters_translation<'a>(language: Language) -> Text<'a, StyleType // Language::ES => "Protocolo de aplicación", // Language::PL => "Protokół aplikacji", // Language::DE => "Anwendungs-Protokoll", -// Language::UK => "Протокол аплікації", +// Language::UK => "Протокол застосування", // Language::ZH => "目标应用层协议", // Language::RO => "Protocol aplicație", // Language::KO => "어플리케이션 프로토콜", @@ -62,7 +62,7 @@ pub fn select_filters_translation<'a>(language: Language) -> Text<'a, StyleType> Language::ES => "Seleccionar los filtros que se aplicarán al tráfico de red", Language::PL => "Wybierz filtry, które mają być zastosowane na ruchu sieciowym", Language::DE => "Wähle die Filter, die auf den Netzwerkverkehr angewendet werden sollen", - Language::UK => "Вибрати фільтри, які мають бути застосовані до мережевого трафіку", + Language::UK => "Виберіть фільтри, які мають бути застосовані до мережевого руху", Language::ZH => "选择需要监控的目标", Language::RO => "Selectați filtre pentru traficul de rețea", Language::KO => "네트워크 트레픽에 적용할 필터 선택", @@ -322,7 +322,7 @@ pub fn ask_quit_translation<'a>(language: Language) -> Text<'a, StyleType> { Language::ES => "¿Estás seguro de que quieres dejar este análisis?", Language::PL => "Jesteś pewien, że chcesz zakończyć analizę?", Language::DE => "Bist du sicher, dass du diese Analyse beenden willst?", - Language::UK => "Чи справді хочеш закінчити аналіз?", + Language::UK => "Чи справді хочете закінчити аналіз?", Language::ZH => "您确定退出当前监控吗?", Language::RO => "Sunteți sigur că doriți să renunțați la această analiză?", Language::KO => "정말로 분석을 종료하겠습니까?", @@ -372,7 +372,7 @@ pub fn ask_clear_all_translation<'a>(language: Language) -> Text<'a, StyleType> Language::ES => "¿Seguro que quieres borrar las notificaciones?", Language::PL => "Czy na pewno chcesz wyczyścić powiadomienia?", Language::DE => "Bist du sicher, dass du alle Benachrichtigungen löschen willst?", - Language::UK => "Чи справді хочеш видалити всі повідомлення?", + Language::UK => "Чи справді хочете видалити всі повідомлення?", Language::ZH => "确定清除所有通知?", Language::RO => "Sigur doriți să ștergeți notificările?", Language::KO => "알림을 삭제하시겠습니까?", @@ -447,7 +447,7 @@ pub fn network_adapter_translation(language: Language) -> &'static str { Language::ES => "Adaptador de red", Language::PL => "Adapter sieciowy", Language::DE => "Netzwerkadapter", - Language::UK => "Мережквий адаптер", + Language::UK => "Мережевий адаптер", Language::ZH => "网络适配器", Language::RO => "Adaptor de rețea", Language::KO => "네트워크 어뎁터", @@ -484,9 +484,9 @@ pub fn no_addresses_translation<'a>(language: Language, adapter: &str) -> Text<' Language::DE => format!("Es kann kein Netzwerkverkehr beobachtet werden, weil der Adapter keine aktiven Adressen hat...\n\n\ {network_adapter_translation}: {adapter}\n\n\ Wenn du dir sicher bist, dass du mit dem Internet verbunden bist, probier einen anderen Adapter auszuwählen."), - Language::UK => format!("Не зафіксовано жодного мережевого трафіку тому що вибраний адаптер немає активних адрес... \n\n\ + Language::UK => format!("Не зафіксовано жодного мережевого руху, тому що вибраний адаптер не має активних адрес... \n\n\ {network_adapter_translation}: {adapter}\n\n\ - Якщо Ти впевнений, що підключений до інтернету, спробуй вибрати інший адаптер."), + Якщо ви впевнені, що підключені до інтернету, спробуйте вибрати інший адаптер."), Language::ZH => format!("您选择的网络适配器当前无活动网络...\n\n\ {network_adapter_translation}: {adapter}\n\n\ 如果您确信您已成功连接互联网, 请尝试选择其他网络适配器."), @@ -550,9 +550,9 @@ pub fn waiting_translation<'a>(language: Language, adapter: &str) -> Text<'a, St Language::DE => format!("Noch kein Netzwerkverkehr beobachtet. Warten auf Pakete...\n\n\ {network_adapter_translation}: {adapter}\n\n\ Bist du sicher, dass du mit dem Internet verbunden bist und den richtigen Adapter ausgewählt hast?"), - Language::UK => format!("Не зафіксовано жодного мережевого трафіку. Очікування на пакети...\n\n\ + Language::UK => format!("Не зафіксовано жодного мережевого руху. Очікування пакетів...\n\n\ {network_adapter_translation}: {adapter}\n\n\ - Чи Ти дійсно підключений до інтернету і вибрав відповідний мережевий адаптер?"), + Чи ви дійсно підключені до інтернету і вибрали відповідний мережевий адаптер?"), Language::ZH => format!("暂无流量数据. 等待网络活动中......\n\n\ {network_adapter_translation}: {adapter}\n\n\ 您确信您已成功连接到互联网, 并选择了当前正在使用的的网络适配器吗?"), @@ -617,7 +617,7 @@ pub fn some_observed_translation<'a>(language: Language, observed: u128) -> Text Gefilterte Pakete: 0\n\n\ Ein Paar Pakete wurden empfangen, aber es entsprechen noch keine den gewählten Filtern..."), Language::UK => format!("Сума перехоплених пакетів: {observed}\n\n\ - Відфільтровані пакеті: 0\n\n\ + Відфільтровані пакети: 0\n\n\ Деякі пакети були перехоплені, але жоден з них не був вибраний відповідно до вказаних фільтрів..."), Language::ZH => format!("监测到的数据包总数: {observed}\n\n\ 目标数据包总数: 0\n\n\ @@ -758,7 +758,7 @@ pub fn of_total_translation(language: Language, percentage: &str) -> String { // Language::ES => "Paquetes filtrados por protocolo de aplicación:", // Language::PL => "Przefiltrowane pakiety według protokołu aplikacji:", // Language::DE => "Gefilterte Pakete je Anwendungs-Protokoll:", -// Language::UK => "Відфільтровані пакети протоколу аплікації/програми:", +// Language::UK => "Кількість відфільтрованих пакетів на протокол програми:", // Language::ZH => "按应用层协议分类的目标数据包计数:", // Language::RO => "Pachete filtrate pe protocol de aplicație:", // Language::KO => "애플리케이션 프로토콜당 필터링된 패킷 수:", @@ -787,7 +787,7 @@ pub fn of_total_translation(language: Language, percentage: &str) -> String { // Language::DE => "Im Moment nichts zu zeigen.\n\ // Um eine Verbindung zu deinen Favoriten hinzuzufügen, klick das auf das Stern-Symbol neben der Verbindung.", // Language::UK => "Немає, що показати в цей момент.\n\ -// Щоб додати підключення до улюблених, натисни на іконку 'зірочки' біля підключення.", +// Щоб додати підключення до улюблених, натисніть на іконку 'зірочки' біля підключення.", // Language::ZH => "收藏夹还是空的.\n\ // 小贴士: 点击连接右侧的小星星即可收藏到这里哦.", // Language::RO => "Nimic de arătat în acest moment.\n\ @@ -838,7 +838,7 @@ pub fn error_translation(language: Language, error: &str) -> Text { {error}" ), Language::UK => format!( - "Виступила помилка! \n\n\ + "Зʼявилась помилка! \n\n\ {error}" ), Language::ZH => format!( @@ -931,6 +931,7 @@ pub fn error_translation(language: Language, error: &str) -> Text { // Language::FA => "همهٔ پیوندنامه ها", // Language::SE => "Alla protokoll", // Language::UZ => "Barcha protokollar" +// Language::UK => "Усі протоколи" // } // } @@ -1152,7 +1153,7 @@ pub fn notifications_title_translation<'a>(language: Language) -> Text<'a, Style Language::ES => "Personaliza tus notificaciones", Language::PL => "Dostosuj powiadomienia", Language::DE => "Stell deine Benachrichtigungen ein", - Language::UK => "Достосуй повідомлення", + Language::UK => "Налаштування повідомлень", Language::ZH => "自定义通知", Language::RO => "Personalizați-vă notificările", Language::KO => "사용자 지정 알림", @@ -1177,7 +1178,7 @@ pub fn appearance_title_translation<'a>(language: Language) -> Text<'a, StyleTyp Language::ES => "Elige tu tema favorito", Language::PL => "Wybierz swój ulubiony motyw", Language::DE => "Wähl dein Lieblingsdesign", - Language::UK => "Вибери улюблену тему", + Language::UK => "Виберіть улюблену тему", Language::ZH => "选择您喜欢的主题", Language::RO => "Selectați tema preferată", Language::KO => "태마를 선택하세요", @@ -1252,7 +1253,7 @@ pub fn yeti_night_translation(language: Language) -> &'static str { Language::ES => "Tema oscuro original de Sniffnet", Language::PL => "Oryginalny, ciemny motyw Sniffnet", Language::DE => "Sniffnets urspüngliches, dunkles Design", - Language::UK => "Оригінальний, темний мотив Sniffnet", + Language::UK => "Оригінальний, темний стиль Sniffnet-у", Language::ZH => "Sniffnet暗黑", Language::RO => "Tema întunecată originală Sniffnet", Language::KO => "Sniffnet의 기본 다크테마", @@ -1277,7 +1278,7 @@ pub fn yeti_day_translation(language: Language) -> &'static str { Language::ES | Language::PT => "Tema claro original de Sniffnet", Language::PL => "Oryginalny, jasny motyw Sniffnet", Language::DE => "Sniffnets urspüngliches, helles Design", - Language::UK => "Оригінальний, світлий мотив Sniffnet", + Language::UK => "Оригінальний, світлий стиль Sniffnet-у", Language::ZH => "Sniffnet浅色", Language::RO => "Tema deschisă originală Sniffnet", Language::KO => "Sniffnet의 기본 라이트테마", @@ -1494,7 +1495,7 @@ pub fn packets_threshold_translation(language: Language) -> &'static str { Language::ES => "Notificarme cuando se supere un límite de paquetes", Language::PL => "Powiadom mnie, gdy zostanie przekroczony próg pakietów", Language::DE => "Benachrichtige mich, wenn die Pakete eine Schwelle überschreiten", - Language::UK => "Повідом мене про переліміт пакетів", + Language::UK => "Повідом мене про перевищення ліміту пакетів", Language::ZH => "超过设定的数据包数量阈值时通知我", Language::RO => "Anunță-mă când este depășit un prag de pachete", Language::KO => "패킷 임계값을 초과하면 알림", @@ -1519,7 +1520,7 @@ pub fn bytes_threshold_translation(language: Language) -> &'static str { Language::ES => "Notificarme cuando se exceda un límite de bytes", Language::PL => "Powiadom mnie, gdy zostanie przekroczony próg bajtów", Language::DE => "Benachrichtige mich, wenn die Bytes eine Schwelle überschreiten", - Language::UK => "Повідом мене про переліміт байтів", + Language::UK => "Повідом мене про перевищення ліміту байтів", Language::ZH => "超过设定的网络流量阈值时通知我", Language::RO => "Anunță-mă când este depășit un prag de octeți", Language::KO => "바이트 임계값을 초과하면 알림", @@ -1567,7 +1568,7 @@ pub fn specify_multiples_translation(language: Language) -> &'static str { Language::ES => "también puede especificar 'K', 'M' y 'G'", Language::PL => "możesz również określić 'K', 'M' i 'G'", Language::DE => "du kannst auch 'K', 'M' und 'G' verwenden", - Language::UK => "можеш також вибрати 'K', 'M' i 'G'", + Language::UK => "можете також вибрати 'K', 'M' i 'G'", Language::ZH => "您可指定 'K', 'M', 'G'", Language::RO => "puteți specifica 'K', 'M', 'G'", Language::KO => "지정 가능합니다 'K', 'M', 'G'", @@ -1850,8 +1851,8 @@ pub fn no_notifications_set_translation<'a>(language: Language) -> Text<'a, Styl Nachdem du sie aktiviert hast, wird diese Seite eine Liste deiner Benachrichtigungen anzeigen\n\n\ Du kannst die Benachrichtigungen in den Einstellungen aktivieren:", Language::UK => "Повідомлення не активовані!\n\n\ - Після їх активації, на цій сторінці побачиш список своїх повідомлень\n\n\ - Можеш вимкнути повідомлення в налаштуваннях:", + Після їх активації на цій сторінці побачите список своїх повідомлень\n\n\ + Можете вимкнути повідомлення в налаштуваннях:", Language::ZH => "您还没有设定任何通知!\n\n\ 启用它们后,此页面将显示您的通知日志\n\n\ 您可以从设置中设定:", @@ -1921,8 +1922,8 @@ pub fn no_notifications_received_translation<'a>(language: Language) -> Text<'a, Wenn du eine Benachrichtigung erhälst, wird sie hier angezeigt" } Language::UK => { - "Немає що показати в даний момент...\n\n\ - Коли отримаєш повідомлення, побачиш його тут" + "Немає що показати у цей момент...\n\n\ + Коли отримаєте повідомлення, побачите його тут" } Language::ZH => { "还没有任何通知...\n\n\ @@ -1987,7 +1988,7 @@ pub fn only_last_30_translation(language: Language) -> &'static str { Language::ES => "Sólo se muestran las últimas 30 notificaciones", Language::PL => "Wyświetlane jest tylko 30 ostatnich powiadomień", Language::DE => "Nur die letzten 30 Benachrichtigungen werden angezeigt", - Language::UK => "Можеш побачити лише 30 останніх повідомлень", + Language::UK => "Можете побачити лише 30 останніх повідомлень", Language::ZH => "仅显示最近 30 条通知", Language::RO => "Sunt afișate doar ultimele 30 de notificări", Language::KO => "최근 30개의 알림만 표시됩니다", diff --git a/src/translations/translations_2.rs b/src/translations/translations_2.rs index 535b017dc..0e2a2b98f 100644 --- a/src/translations/translations_2.rs +++ b/src/translations/translations_2.rs @@ -42,7 +42,7 @@ pub fn inspect_translation(language: Language) -> &'static str { // Language::FA => "بازرسی", Language::KO => "검사", Language::ZH => "检查", - Language::UK => "Інспектувати", + Language::UK => "Перевірити", Language::RO => "Inspectați", Language::JA => "検査", Language::UZ => "Tekshirish", @@ -115,7 +115,7 @@ pub fn data_representation_translation(language: Language) -> &'static str { Language::ES => "Representación de los datos", Language::KO => "데이터 단위", Language::ZH => "图表数据", - Language::UK => "Представлення даних", + Language::UK => "Відображення даних", Language::RO => "Reprezentarea datelor", Language::PL => "Reprezentacja danych", Language::FR => "Représentation de données", @@ -165,7 +165,7 @@ pub fn only_top_30_items_translation(language: Language) -> &'static str { Language::ES => "Aquí sólo se muestran los 30 primeros elementos", Language::KO => "상위 30개의 아이템만 노출됩니다", Language::ZH => "仅展示前 30 个项目", - Language::UK => "Лише верхні 30 елементи відображаються тут", + Language::UK => "Тут відображаються лише перші 30 елементів", Language::RO => "Doar primele 30 de articole sunt afișate aici", Language::PL => "Tylko 30 pierwszych rzeczy jest wyświetlanych", Language::FR => "Seuls les 30 premiers articles sont affichés ici", @@ -238,7 +238,7 @@ pub fn unknown_translation(language: Language) -> &'static str { Language::ES => "Ubicación desconocida", Language::KO => "알 수 없는 위치", Language::ZH => "未知", - Language::UK => "Невідома локація", + Language::UK => "Невідоме місцезнаходження", Language::RO => "Locație necunoscută", Language::PL => "Nieznana lokalizacja", Language::FR => "Localisation inconnue", @@ -509,7 +509,7 @@ pub fn only_show_favorites_translation(language: Language) -> &'static str { Language::ES => "Mostrar solo los favoritos", Language::KO => "즐겨찾기만 보기", Language::ZH => "仅显示收藏", - Language::UK => "Показувати лише обрані", + Language::UK => "Показувати лише улюблені", Language::RO => "Arată doar favorite", Language::PL => "Pokaż tylko ulubione", Language::FR => "Afficher uniquement les favoris", diff --git a/src/translations/translations_3.rs b/src/translations/translations_3.rs index 7e2005699..e3a03138a 100644 --- a/src/translations/translations_3.rs +++ b/src/translations/translations_3.rs @@ -23,6 +23,8 @@ pub fn general_translation(language: Language) -> &'static str { Language::ZH => "通用", Language::KO => "일반", Language::TR => "Genel", + Language::PT => "Geral", + Language::UK => "Загальні", _ => "General", } } @@ -35,6 +37,7 @@ pub fn zoom_translation(language: Language) -> &'static str { | Language::FR | Language::DE | Language::RO + | Language::PT | Language::SV => "Zoom", // Language::FA => "بزرگنمایی", Language::PL => "Powiększenie", @@ -45,6 +48,7 @@ pub fn zoom_translation(language: Language) -> &'static str { Language::ZH => "缩放", Language::KO => "확대", Language::TR => "Yakınlaştırma", + Language::UK => "Масштабування", _ => "Zoom", } } @@ -67,6 +71,8 @@ pub fn mmdb_files_translation(language: Language) -> &'static str { Language::ZH => "数据库文件", Language::KO => "데이터베이스 파일", Language::TR => "Veri tabanı dosyaları", + Language::PT => "Arquivos da base de dados", + Language::UK => "Файли бази даних", _ => "Database files", } } @@ -89,6 +95,8 @@ pub fn params_not_editable_translation(language: Language) -> &'static str { Language::ZH => "以下参数在分析过程中不能修改", Language::KO => "분석 중 다음의 매개변수들은 수정할 수 없습니다", Language::TR => "Analiz sırasında bu parametrelere müdahale edilemez", + Language::PT => "Os seguintes parâmetros não podem ser modificados durante a análise", + Language::UK => "Наступні параметри не можна змінювати під час аналізу трафіку", _ => "The following parameters can't be modified during the analysis", } } @@ -97,7 +105,7 @@ pub fn custom_style_translation(language: Language) -> &'static str { match language { Language::EN => "Custom style", // Language::FA => "شیوه سفارشی", - Language::ES => "Estilo personalizado", + Language::ES | Language::PT => "Estilo personalizado", Language::IT => "Stile personalizzato", Language::FR => "Style personnalisé", Language::DE => "Benutzerdefinierter Stil", @@ -111,6 +119,7 @@ pub fn custom_style_translation(language: Language) -> &'static str { Language::ZH => "自定义样式", Language::KO => "사용자 지정 스타일", Language::TR => "Kişisel görünüm", + Language::UK => "Власний стиль", _ => "Custom style", } } @@ -131,6 +140,8 @@ pub fn copy_translation(language: Language) -> &'static str { Language::ZH => "复制", Language::KO => "복사", Language::TR => "Kopyala", + Language::PT => "Copiar", + Language::UK => "Копіювати", _ => "Copy", } } @@ -147,12 +158,13 @@ pub fn port_translation(language: Language) -> &'static str { | Language::TR => "Port", // Language::FA => "درگاه", Language::ES => "Puerto", - Language::IT => "Porta", + Language::IT | Language::PT => "Porta", Language::RU => "Порт", Language::JA => "ポート", Language::VI => "Cổng", Language::ZH => "端口", Language::KO => "포트", + Language::UK => "Порт", _ => "Port", } } @@ -161,7 +173,7 @@ pub fn invalid_filters_translation(language: Language) -> &'static str { match language { Language::EN => "Invalid filters", // Language::FA => "صافی نامعتبر", - Language::ES => "Filtros inválidos", + Language::ES | Language::PT => "Filtros inválidos", Language::IT => "Filtri non validi", Language::FR => "Filtres invalides", Language::DE => "Ungültige Filter", @@ -175,6 +187,7 @@ pub fn invalid_filters_translation(language: Language) -> &'static str { Language::ZH => "无效的过滤器", Language::KO => "잘못된 필터", Language::TR => "Geçersiz filtreler", + Language::UK => "Неправильний формат фільтрів", _ => "Invalid filters", } } @@ -196,6 +209,8 @@ pub fn messages_translation(language: Language) -> &'static str { Language::ZH => "信息", Language::KO => "메시지", Language::TR => "Mesajlar", + Language::PT => "Mensagens", + Language::UK => "Повідомлення", _ => "Messages", } } @@ -218,6 +233,8 @@ pub fn link_type_translation(language: Language) -> &'static str { Language::ZH => "链接类型", Language::KO => "링크 유형", Language::TR => "Link türü", + Language::PT => "Tipo de conexão", + Language::UK => "Різновид зʼєднання", _ => "Link type", } } @@ -243,6 +260,8 @@ pub fn unsupported_link_type_translation<'a>( Language::ZH => "Sniffnet 尚不支持与此适配器关联的链接类型...", Language::KO => "이 어댑터와 연결된 링크 유형은 Sniffnet에서 아직 지원되지 않습니다...", Language::TR => "Bu adaptör ile ilişkilendirilmiş link türü henüz Sniffnet tarafından desteklenmiyor...", + Language::PT => "O tipo de conexão associado com este adaptador não é suportado pelo Sniffnet ainda...", + Language::UK => "Різновид зʼєднання, повʼязаний з даним адаптером, ще не підтримується Sniffnet-ом...", _ => "The link type associated with this adapter is not supported by Sniffnet yet...", }; @@ -270,6 +289,8 @@ pub fn style_from_file_translation(language: Language) -> &'static str { Language::ZH => "从文件中选择样式", Language::KO => "파일에서 스타일을 선택하세요", Language::TR => "Dosyadan bir görünüm seç", + Language::PT => "Selecionar estilo a partir de um arquivo", + Language::UK => "Виберіть стиль з файлу", _ => "Select style from a file", } } @@ -292,6 +313,8 @@ pub fn database_from_file_translation(language: Language) -> &'static str { Language::ZH => "选择数据库文件", Language::KO => "데이터베이스 파일 선택", Language::TR => "Veri tabanı dosyası seç", + Language::PT => "Selecione um arquivo de base de dados", + Language::UK => "Виберіть файл бази даних", _ => "Select database file", } } @@ -314,6 +337,8 @@ pub fn filter_by_host_translation(language: Language) -> &'static str { Language::ZH => "按网络主机筛选", Language::KO => "네트워크 호스트로 필터링", Language::TR => "Ağ sunucusuna göre filtrele", + Language::PT => "Filtrar por host de rede", + Language::UK => "Фільтр за хостом мережі", _ => "Filter by network host", } } @@ -333,6 +358,8 @@ pub fn service_translation(language: Language) -> &'static str { Language::ZH => "服务", Language::KO => "서비스", Language::TR => "Servis", + Language::PT => "Serviço", + Language::UK => "Сервіс", _ => "Service", } } @@ -354,6 +381,8 @@ pub fn export_capture_translation(language: Language) -> &'static str { Language::ZH => "导出捕获文件", Language::KO => "캡처 파일 내보내기", Language::TR => "Yakalanan dosyayı dışa aktar", + Language::PT => "Exportar arquivo capturado", + Language::UK => "Експорт файлу захоплення", _ => "Export capture file", } } @@ -374,6 +403,8 @@ pub fn directory_translation(language: Language) -> &'static str { Language::ZH => "目录", Language::KO => "디렉토리", Language::TR => "Klasör", + Language::PT => "Diretório", + Language::UK => "Тека", _ => "Directory", } } @@ -395,6 +426,8 @@ pub fn select_directory_translation(language: Language) -> &'static str { Language::ZH => "选择目标目录", Language::KO => "대상 디렉토리 선택", Language::TR => "Hedef klasörü seç", + Language::PT => "Selecionar diretório de destino", + Language::UK => "Виберіть теку призначення", _ => "Select destination directory", } } @@ -416,6 +449,8 @@ pub fn file_name_translation(language: Language) -> &'static str { Language::ZH => "文件名", Language::KO => "파일 이름", Language::TR => "Dosya adı", + Language::PT => "Nome do arquivo", + Language::UK => "Назва файлу", _ => "File name", } } @@ -437,6 +472,8 @@ pub fn thumbnail_mode_translation(language: Language) -> &'static str { Language::ZH => "缩略图模式", Language::KO => "썸네일 모드", Language::TR => "Küçük resim modu", + Language::PT => "Modo miniatura", + Language::UK => "Режим мініатюри", _ => "Thumbnail mode", } } @@ -458,6 +495,8 @@ pub fn learn_more_translation(language: Language) -> &'static str { Language::ZH => "想知道更多吗?", Language::KO => "더 자세히 알고 싶으십니까?", Language::TR => "Daha fazlasını öğrenmek ister misin?", + Language::PT => "Quer aprender mais?", + Language::UK => "Бажаєте дізнатись більше?", _ => "Do you want to learn more?", } } diff --git a/src/translations/translations_4.rs b/src/translations/translations_4.rs new file mode 100644 index 000000000..88ce5d983 --- /dev/null +++ b/src/translations/translations_4.rs @@ -0,0 +1,13 @@ +#![allow(clippy::match_same_arms)] + +use crate::translations::types::language::Language; + +pub fn reserved_address_translation(language: Language, info: &str) -> String { + match language { + Language::EN => format!("Reserved address ({info})"), + Language::IT => format!("Indirizzo riservato ({info})"), + Language::PT => format!("Endereço reservado ({info})"), + Language::UK => format!("Зарезервована адреса ({info})"), + _ => format!("Reserved address ({info})"), + } +} diff --git a/src/translations/types/language.rs b/src/translations/types/language.rs index 5b3746b14..619a5b1d5 100644 --- a/src/translations/types/language.rs +++ b/src/translations/types/language.rs @@ -126,6 +126,8 @@ impl Language { | Language::ZH | Language::KO | Language::TR + | Language::PT + | Language::UK ) } }