Compare commits

..

12 Commits

Author SHA1 Message Date
08d69502de Bump version to 4.3.2 2023-04-26 13:02:10 +01:00
683f59c063 Update Rust API dependencies. 2023-04-26 12:36:10 +01:00
0ef9f16f40 Re-enable v4_migrate option for now. 2023-04-26 12:27:12 +01:00
a5dd650510 Update dependencies. 2023-04-26 12:04:54 +01:00
de90b7d284 Enable redis tls-rustls feature.
Fixes #170.
2023-04-26 11:58:59 +01:00
fe0ef398ec Format Cargo.toml 2023-04-26 11:56:27 +01:00
58bd8eb5b4 Fix Rust fmt error. 2023-04-26 11:52:50 +01:00
0a294e41b5 Fix clippy feedback. 2023-04-13 22:06:44 +01:00
f71d30ca83 Re-implement frame and event download option. 2023-04-12 14:50:33 +01:00
ef0a97ab3d Log .send() error, rather than returning.
Closes https://github.com/chirpstack/chirpstack-docker/issues/80.
2023-04-11 15:10:08 +01:00
e93d3bc534 Update AWS SNS SDK crate. 2023-04-11 14:57:03 +01:00
31e359b314 Disable v3-v4 GW<>NS message migration and make config option.
By making this opt-in, we can reduce the overhead of supporting both v3
and v4 gateway messages. In case of v3 to v4 migration, one would
upgrade all ChirpStack Gateway Bridge instances to the latest v3
version, migrate ChirpStack as described here + enable this config flag:
https://www.chirpstack.io/docs/v3-v4-migration.html

Then upgrade ChirpStack Gateway Bridge to the latest v4 version followed
by disabling / removing this config flag (`v4_migrate`) again.
2023-04-11 14:19:07 +01:00
33 changed files with 679 additions and 514 deletions

539
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "@chirpstack/chirpstack-api-grpc-web",
"version": "4.3.1",
"version": "4.3.2",
"description": "Chirpstack gRPC-web API",
"license": "MIT",
"devDependencies": {

View File

@ -8,7 +8,7 @@ plugins {
}
group = "io.chirpstack"
version = "4.3.1"
version = "4.3.2"
repositories {
mavenCentral()

2
api/js/package.json vendored
View File

@ -1,6 +1,6 @@
{
"name": "@chirpstack/chirpstack-api",
"version": "4.3.1",
"version": "4.3.2",
"description": "Chirpstack JS and TS API",
"license": "MIT",
"devDependencies": {

View File

@ -9,7 +9,7 @@ plugins {
}
group = "io.chirpstack"
version = "4.3.1"
version = "4.3.2"
repositories {
mavenCentral()

View File

@ -18,7 +18,7 @@ CLASSIFIERS = [
setup(
name='chirpstack-api',
version = "4.3.1",
version = "4.3.2",
url='https://github.com/brocaar/chirpstack-api',
author='Orne Brocaar',
author_email='info@brocaar.com',

377
api/rust/Cargo.lock generated vendored
View File

@ -4,9 +4,9 @@ version = 3
[[package]]
name = "anyhow"
version = "1.0.68"
version = "1.0.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
[[package]]
name = "async-trait"
@ -16,7 +16,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.13",
"syn 2.0.15",
]
[[package]]
@ -27,9 +27,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "axum"
version = "0.6.12"
version = "0.6.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "349f8ccfd9221ee7d1f3d4b33e1f8319b3a81ed8f61f2ea40b37b859794b4491"
checksum = "b70caf9f1b0c045f7da350636435b775a9733adf2df56e8aa2a29210fbc335d4"
dependencies = [
"async-trait",
"axum-core",
@ -55,9 +55,9 @@ dependencies = [
[[package]]
name = "axum-core"
version = "0.3.3"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e"
checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
dependencies = [
"async-trait",
"bytes",
@ -94,6 +94,12 @@ version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
[[package]]
name = "cc"
version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
[[package]]
name = "cfg-if"
version = "1.0.0"
@ -102,7 +108,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chirpstack_api"
version = "4.3.1"
version = "4.3.2"
dependencies = [
"hex",
"pbjson",
@ -119,9 +125,9 @@ dependencies = [
[[package]]
name = "chrono"
version = "0.4.23"
version = "0.4.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
dependencies = [
"num-integer",
"num-traits",
@ -134,10 +140,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
[[package]]
name = "fastrand"
version = "1.8.0"
name = "errno"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
dependencies = [
"errno-dragonfly",
"libc",
"windows-sys 0.48.0",
]
[[package]]
name = "errno-dragonfly"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
dependencies = [
"cc",
"libc",
]
[[package]]
name = "fastrand"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
dependencies = [
"instant",
]
@ -156,36 +183,36 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "futures-channel"
version = "0.3.26"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5"
checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
dependencies = [
"futures-core",
]
[[package]]
name = "futures-core"
version = "0.3.26"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608"
checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
[[package]]
name = "futures-sink"
version = "0.3.26"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364"
checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
[[package]]
name = "futures-task"
version = "0.3.26"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366"
checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
[[package]]
name = "futures-util"
version = "0.3.26"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1"
checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
dependencies = [
"futures-core",
"futures-task",
@ -195,9 +222,9 @@ dependencies = [
[[package]]
name = "getrandom"
version = "0.2.8"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
dependencies = [
"cfg-if",
"libc",
@ -206,9 +233,9 @@ dependencies = [
[[package]]
name = "h2"
version = "0.3.15"
version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21"
dependencies = [
"bytes",
"fnv",
@ -231,9 +258,15 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "heck"
version = "0.4.0"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
[[package]]
name = "hex"
@ -277,9 +310,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
[[package]]
name = "hyper"
version = "0.14.25"
version = "0.14.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899"
checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
dependencies = [
"bytes",
"futures-channel",
@ -313,9 +346,9 @@ dependencies = [
[[package]]
name = "indexmap"
version = "1.9.2"
version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
"hashbrown",
@ -330,6 +363,17 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "io-lifetimes"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
dependencies = [
"hermit-abi",
"libc",
"windows-sys 0.48.0",
]
[[package]]
name = "itertools"
version = "0.10.5"
@ -341,9 +385,9 @@ dependencies = [
[[package]]
name = "itoa"
version = "1.0.5"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
[[package]]
name = "lazy_static"
@ -353,9 +397,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.139"
version = "0.2.142"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
[[package]]
name = "linux-raw-sys"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36eb31c1778188ae1e64398743890d0877fef36d11521ac60406b42016e8c2cf"
[[package]]
name = "log"
@ -380,20 +430,20 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "mime"
version = "0.3.16"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
name = "mio"
version = "0.8.5"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
dependencies = [
"libc",
"log",
"wasi",
"windows-sys 0.42.0",
"windows-sys 0.45.0",
]
[[package]]
@ -423,9 +473,9 @@ dependencies = [
[[package]]
name = "once_cell"
version = "1.17.0"
version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
[[package]]
name = "pbjson"
@ -472,9 +522,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
[[package]]
name = "petgraph"
version = "0.6.2"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
dependencies = [
"fixedbitset",
"indexmap",
@ -497,7 +547,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.107",
"syn 1.0.109",
]
[[package]]
@ -520,12 +570,12 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "prettyplease"
version = "0.1.23"
version = "0.1.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78"
checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
dependencies = [
"proc-macro2",
"syn 1.0.107",
"syn 1.0.109",
]
[[package]]
@ -539,9 +589,9 @@ dependencies = [
[[package]]
name = "prost"
version = "0.11.6"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698"
checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
dependencies = [
"bytes",
"prost-derive",
@ -549,9 +599,9 @@ dependencies = [
[[package]]
name = "prost-build"
version = "0.11.6"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e"
checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
dependencies = [
"bytes",
"heck",
@ -564,31 +614,30 @@ dependencies = [
"prost",
"prost-types",
"regex",
"syn 1.0.107",
"syn 1.0.109",
"tempfile",
"which",
]
[[package]]
name = "prost-derive"
version = "0.11.6"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d"
checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
dependencies = [
"anyhow",
"itertools",
"proc-macro2",
"quote",
"syn 1.0.107",
"syn 1.0.109",
]
[[package]]
name = "prost-types"
version = "0.11.6"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788"
checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
dependencies = [
"bytes",
"prost",
]
@ -633,68 +682,73 @@ dependencies = [
[[package]]
name = "redox_syscall"
version = "0.2.16"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
"bitflags",
]
[[package]]
name = "regex"
version = "1.7.1"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
dependencies = [
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.6.28"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
[[package]]
name = "remove_dir_all"
version = "0.5.3"
name = "rustix"
version = "0.37.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
checksum = "a0661814f891c57c930a610266415528da53c4933e6dea5fb350cbfe048a9ece"
dependencies = [
"winapi",
"bitflags",
"errno",
"io-lifetimes",
"libc",
"linux-raw-sys",
"windows-sys 0.48.0",
]
[[package]]
name = "rustversion"
version = "1.0.11"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70"
checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
[[package]]
name = "serde"
version = "1.0.152"
version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.152"
version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.107",
"syn 2.0.15",
]
[[package]]
name = "slab"
version = "0.4.7"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
dependencies = [
"autocfg",
]
@ -711,9 +765,9 @@ dependencies = [
[[package]]
name = "syn"
version = "1.0.107"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
@ -722,9 +776,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.13"
version = "2.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec"
checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
dependencies = [
"proc-macro2",
"quote",
@ -733,29 +787,28 @@ dependencies = [
[[package]]
name = "sync_wrapper"
version = "0.1.1"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]]
name = "tempfile"
version = "3.3.0"
version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
dependencies = [
"cfg-if",
"fastrand",
"libc",
"redox_syscall",
"remove_dir_all",
"winapi",
"rustix",
"windows-sys 0.45.0",
]
[[package]]
name = "tokio"
version = "1.27.0"
version = "1.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f"
dependencies = [
"autocfg",
"bytes",
@ -764,7 +817,7 @@ dependencies = [
"pin-project-lite",
"socket2",
"tokio-macros",
"windows-sys 0.45.0",
"windows-sys 0.48.0",
]
[[package]]
@ -779,20 +832,20 @@ dependencies = [
[[package]]
name = "tokio-macros"
version = "2.0.0"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"
checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.13",
"syn 2.0.15",
]
[[package]]
name = "tokio-stream"
version = "0.1.11"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce"
checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
dependencies = [
"futures-core",
"pin-project-lite",
@ -801,9 +854,9 @@ dependencies = [
[[package]]
name = "tokio-util"
version = "0.7.4"
version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
dependencies = [
"bytes",
"futures-core",
@ -815,9 +868,9 @@ dependencies = [
[[package]]
name = "tonic"
version = "0.9.1"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38bd8e87955eb13c1986671838177d6792cdc52af9bffced0d2c8a9a7f741ab3"
checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a"
dependencies = [
"async-trait",
"axum",
@ -843,15 +896,15 @@ dependencies = [
[[package]]
name = "tonic-build"
version = "0.9.1"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f60a933bbea70c95d633c04c951197ddf084958abaa2ed502a3743bdd8d8dd7"
checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
dependencies = [
"prettyplease",
"proc-macro2",
"prost-build",
"quote",
"syn 1.0.107",
"syn 1.0.109",
]
[[package]]
@ -888,11 +941,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
version = "0.1.37"
version = "0.1.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
checksum = "cf9cf6a813d3f40c88b0b6b6f29a5c95c6cdbf97c1f9cc53fb820200f5ad814d"
dependencies = [
"cfg-if",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@ -900,13 +952,13 @@ dependencies = [
[[package]]
name = "tracing-attributes"
version = "0.1.23"
version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.107",
"syn 2.0.15",
]
[[package]]
@ -926,9 +978,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
[[package]]
name = "unicode-ident"
version = "1.0.6"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
[[package]]
name = "want"
@ -979,28 +1031,22 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
version = "0.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows-sys"
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
"windows-targets",
"windows-targets 0.42.2",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
"windows-targets 0.48.0",
]
[[package]]
@ -1009,13 +1055,28 @@ version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
"windows_aarch64_gnullvm 0.42.2",
"windows_aarch64_msvc 0.42.2",
"windows_i686_gnu 0.42.2",
"windows_i686_msvc 0.42.2",
"windows_x86_64_gnu 0.42.2",
"windows_x86_64_gnullvm 0.42.2",
"windows_x86_64_msvc 0.42.2",
]
[[package]]
name = "windows-targets"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
dependencies = [
"windows_aarch64_gnullvm 0.48.0",
"windows_aarch64_msvc 0.48.0",
"windows_i686_gnu 0.48.0",
"windows_i686_msvc 0.48.0",
"windows_x86_64_gnu 0.48.0",
"windows_x86_64_gnullvm 0.48.0",
"windows_x86_64_msvc 0.48.0",
]
[[package]]
@ -1024,38 +1085,80 @@ version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"

2
api/rust/Cargo.toml vendored
View File

@ -1,7 +1,7 @@
[package]
name = "chirpstack_api"
description = "ChirpStack Protobuf / gRPC API definitions."
version = "4.3.1"
version = "4.3.2"
authors = ["Orne Brocaar <info@brocaar.com>"]
license = "MIT"
homepage = "https://www.chirpstack.io"

View File

@ -1,6 +1,6 @@
[package]
name = "backend"
version = "4.3.1"
version = "4.3.2"
authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2018"
publish = false

View File

@ -2,8 +2,8 @@
name = "chirpstack"
description = "ChirpStack is an open-source LoRaWAN(TM) Network Server"
repository = "https://github.com/chirpstack/chirpstack"
homepage="https://www.chirpstack.io/"
version = "4.3.1"
homepage = "https://www.chirpstack.io/"
version = "4.3.2"
authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2021"
publish = false
@ -23,16 +23,26 @@ handlebars = "4.3"
# Database
validator = "0.16"
diesel = { version = "2.0", features = [ "chrono", "postgres", "r2d2", "uuid", "serde_json", "numeric" ] }
diesel = { version = "2.0", features = [
"chrono",
"postgres",
"r2d2",
"uuid",
"serde_json",
"numeric",
] }
diesel_migrations = { version = "2.0" }
r2d2 = "0.8"
bigdecimal = "0.3"
redis = { version = "0.23", features = ["r2d2", "cluster"] }
redis = { version = "0.23", features = ["r2d2", "cluster", "tls-rustls"] }
pq-sys = { version = "0.4", features = ["pkg-config"] }
# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["fmt", "ansi"], default-features = true }
tracing-subscriber = { version = "0.3", features = [
"fmt",
"ansi",
], default-features = true }
# ChirpStack API definitions
chirpstack_api = { path = "../api/rust", features = ["default", "internal"] }
@ -40,12 +50,16 @@ lrwn = { path = "../lrwn" }
backend = { path = "../backend" }
# HTTP
reqwest = { version = "0.11", features = ["json", "rustls-tls"], default-features = false }
reqwest = { version = "0.11", features = [
"json",
"rustls-tls",
], default-features = false }
# Integrations
aws-types = "0.49"
aws-config = { version = "0.49", default-features = false }
aws-sdk-sns = "0.19"
aws-types = "0.55"
aws-credential-types = "0.55"
aws-config = { version = "0.55", default-features = false }
aws-sdk-sns = "0.25"
hmac = "0.12"
sha2 = "0.10"
urlencoding = "2.1"
@ -54,7 +68,7 @@ gcp_auth = "0.7"
lapin = "2.1"
tokio-executor-trait = "2.1"
tokio-reactor-trait = "1.1"
rdkafka = { version = "0.29", features = ["cmake-build"]}
rdkafka = { version = "0.29", features = ["cmake-build"] }
# gRPC and Protobuf
tonic = "0.9"
@ -93,11 +107,16 @@ paho-mqtt = { version = "0.12", features = ["vendored-ssl"] }
hex = "0.4"
# Codecs
rquickjs = { version = "0.1", features = ["bindgen", "loader", "array-buffer", "chrono"] }
rquickjs = { version = "0.1", features = [
"bindgen",
"loader",
"array-buffer",
"chrono",
] }
# Misc
lazy_static = "1.4"
uuid = { version = "1.3", features = [ "v4", "serde" ] }
uuid = { version = "1.3", features = ["v4", "serde"] }
chrono = "0.4"
async-trait = "0.1"
aes = "0.8"
@ -117,8 +136,16 @@ bytes = "1.4"
# Debian packaging.
[package.metadata.deb]
assets = [
["target/release/chirpstack", "usr/bin/", "755"],
["configuration/*.toml", "etc/chirpstack/", "640"],
[
"target/release/chirpstack",
"usr/bin/",
"755",
],
[
"configuration/*.toml",
"etc/chirpstack/",
"640",
],
]
conf-files = [
"/etc/chirpstack/chirpstack.toml",

View File

@ -37,11 +37,10 @@ impl Algorithm {
}
nb_step -= 1;
} else {
if tx_power_index > 0 {
// Increase the tx-power.
// (note that a decrease in index increases the tx-power)
tx_power_index -= 1;
}
// Increase the tx-power.
// (note that a decrease in index increases the tx-power)
// Subtract only if > 0
tx_power_index = tx_power_index.saturating_sub(1);
nb_step += 1;
}

View File

@ -844,7 +844,7 @@ impl InternalService for Internal {
out.rx1_delay = region_conf.network.rx1_delay as u32;
out.rx1_dr_offset = region_conf.network.rx1_dr_offset as u32;
out.rx2_dr = region_conf.network.rx2_dr as u32;
out.rx2_frequency = region_conf.network.rx2_frequency as u32;
out.rx2_frequency = region_conf.network.rx2_frequency;
out.class_b_ping_slot_dr = region_conf.network.class_b.ping_slot_dr as u32;
out.class_b_ping_slot_frequency = region_conf.network.class_b.ping_slot_frequency;
}

View File

@ -223,7 +223,7 @@ pub fn ul_meta_data_to_rx_info(ul_meta_data: &ULMetaData) -> Result<Vec<gw::Upli
gateway_id: hex::encode(&gw_info.id),
context: gw_info.ul_token.clone(),
rssi: gw_info.rssi.unwrap_or_default() as i32,
snr: gw_info.snr.unwrap_or_default() as f32,
snr: gw_info.snr.unwrap_or_default(),
location: if gw_info.lat.is_some() && gw_info.lon.is_some() {
Some(common::Location {
latitude: gw_info.lat.unwrap(),

View File

@ -287,7 +287,7 @@ impl CayenneLpp {
val.fields.insert(
format!("{}", k),
pbjson_types::Value {
kind: Some(pbjson_types::value::Kind::NumberValue(*v as f64)),
kind: Some(pbjson_types::value::Kind::NumberValue(*v)),
},
);
}
@ -305,7 +305,7 @@ impl CayenneLpp {
val.fields.insert(
format!("{}", k),
pbjson_types::Value {
kind: Some(pbjson_types::value::Kind::NumberValue(*v as f64)),
kind: Some(pbjson_types::value::Kind::NumberValue(*v)),
},
);
}
@ -359,7 +359,7 @@ impl CayenneLpp {
val.fields.insert(
format!("{}", k),
pbjson_types::Value {
kind: Some(pbjson_types::value::Kind::NumberValue(*v as f64)),
kind: Some(pbjson_types::value::Kind::NumberValue(*v)),
},
);
}
@ -377,7 +377,7 @@ impl CayenneLpp {
val.fields.insert(
format!("{}", k),
pbjson_types::Value {
kind: Some(pbjson_types::value::Kind::NumberValue(*v as f64)),
kind: Some(pbjson_types::value::Kind::NumberValue(*v)),
},
);
}

View File

@ -44,7 +44,7 @@ impl serialize::ToSql<Text, Pg> for Codec
where
str: serialize::ToSql<Text, Pg>,
{
fn to_sql<'b>(&self, out: &mut serialize::Output<'b, '_, Pg>) -> serialize::Result {
fn to_sql(&self, out: &mut serialize::Output<'_, '_, Pg>) -> serialize::Result {
<str as serialize::ToSql<Text, Pg>>::to_sql(&self.to_string(), &mut out.reborrow())
}
}

View File

@ -13,7 +13,7 @@ lazy_static! {
static ref CONFIG: Mutex<Arc<Configuration>> = Mutex::new(Arc::new(Default::default()));
}
#[derive(Serialize, Deserialize, Clone)]
#[derive(Default, Serialize, Deserialize, Clone)]
#[serde(default)]
pub struct Configuration {
pub logging: Logging,
@ -33,28 +33,6 @@ pub struct Configuration {
pub regions: Vec<Region>,
}
impl Default for Configuration {
fn default() -> Self {
Configuration {
logging: Default::default(),
postgresql: Default::default(),
redis: Default::default(),
api: Default::default(),
gateway: Default::default(),
network: Default::default(),
monitoring: Default::default(),
integration: Default::default(),
codec: Default::default(),
user_authentication: Default::default(),
join_server: Default::default(),
backend_interfaces: Default::default(),
roaming: Default::default(),
keks: Vec::new(),
regions: vec![],
}
}
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(default)]
pub struct Logging {
@ -637,6 +615,7 @@ pub struct GatewayBackendMqtt {
pub tls_key: String,
#[serde(with = "humantime_serde")]
pub keep_alive_interval: Duration,
pub v4_migrate: bool,
}
impl Default for GatewayBackendMqtt {
@ -655,6 +634,7 @@ impl Default for GatewayBackendMqtt {
tls_cert: "".into(),
tls_key: "".into(),
keep_alive_interval: Duration::from_secs(30),
v4_migrate: true,
}
}
}

View File

@ -23,27 +23,22 @@ pub fn select_downlink_gateway(
min_snr_margin: f32,
rx_info: &mut internal::DeviceGatewayRxInfo,
) -> Result<internal::DeviceGatewayRxInfoItem> {
rx_info.items = rx_info
.items
.iter()
.filter(|rx_info| {
if let Some(tenant_id) = &tenant_id {
if tenant_id.as_bytes().to_vec() == rx_info.tenant_id {
// The tenant is the same as the gateway tenant.
true
} else {
// If tenant_id is different, filter out rx_info elements that have
// is_private_down=true.
!rx_info.is_private_down
}
rx_info.items.retain(|rx_info| {
if let Some(tenant_id) = &tenant_id {
if tenant_id.as_bytes().to_vec() == rx_info.tenant_id {
// The tenant is the same as the gateway tenant.
true
} else {
// If tenant_id is None, filter out rx_info elements that have
// If tenant_id is different, filter out rx_info elements that have
// is_private_down=true.
!rx_info.is_private_down
}
})
.cloned()
.collect();
} else {
// If tenant_id is None, filter out rx_info elements that have
// is_private_down=true.
!rx_info.is_private_down
}
});
if rx_info.items.is_empty() {
return Err(anyhow!(

View File

@ -113,7 +113,7 @@ impl JoinAccept<'_> {
.gateway_tenant_id_map
.get(&gw_id)
.map(|v| v.into_bytes().to_vec())
.unwrap_or_else(|| Vec::new()),
.unwrap_or_else(Vec::new),
}
})
.collect(),

View File

@ -92,7 +92,7 @@ impl PassiveRoamingDownlink {
.gateway_tenant_id_map
.get(&gw_id)
.map(|v| v.into_bytes().to_vec())
.unwrap_or_else(|| Vec::new()),
.unwrap_or_else(Vec::new),
}
})
.collect(),
@ -127,7 +127,7 @@ impl PassiveRoamingDownlink {
let dl_freq_1 = self.dl_meta_data.dl_freq_1.unwrap();
let dl_freq_1 = (dl_freq_1 * 1_000_000.0) as u32;
let data_rate_1 = self.dl_meta_data.data_rate_1.unwrap();
let data_rate_1 = self.region_conf.get_data_rate(data_rate_1 as u8)?;
let data_rate_1 = self.region_conf.get_data_rate(data_rate_1)?;
let rx_delay_1 = self.dl_meta_data.rx_delay_1.unwrap();
let mut tx_info = gw::DownlinkTxInfo {
@ -169,7 +169,7 @@ impl PassiveRoamingDownlink {
let dl_freq_2 = self.dl_meta_data.dl_freq_2.unwrap();
let dl_freq_2 = (dl_freq_2 * 1_000_000.0) as u32;
let data_rate_2 = self.dl_meta_data.data_rate_2.unwrap();
let data_rate_2 = self.region_conf.get_data_rate(data_rate_2 as u8)?;
let data_rate_2 = self.region_conf.get_data_rate(data_rate_2)?;
let rx_delay_1 = self.dl_meta_data.rx_delay_1.unwrap();
let mut tx_info = gw::DownlinkTxInfo {

View File

@ -69,6 +69,7 @@ pub struct MqttBackend<'a> {
client: mqtt::AsyncClient,
templates: handlebars::Handlebars<'a>,
qos: usize,
v4_migrate: bool,
}
#[derive(Serialize)]
@ -197,6 +198,7 @@ impl<'a> MqttBackend<'a> {
client,
templates,
qos: conf.qos,
v4_migrate: conf.v4_migrate,
};
// connect
@ -209,12 +211,14 @@ impl<'a> MqttBackend<'a> {
// Consumer loop.
tokio::spawn({
let region_config_id = region_config_id.to_string();
let v4_migrate = conf.v4_migrate;
async move {
info!("Starting MQTT consumer loop");
while let Some(msg_opt) = stream.next().await {
if let Some(msg) = msg_opt {
message_callback(&region_config_id, region_common_name, msg).await;
message_callback(v4_migrate, &region_config_id, region_common_name, msg)
.await;
}
}
}
@ -271,7 +275,10 @@ impl GatewayBackend for MqttBackend<'_> {
.inc();
let topic = self.get_command_topic(&df.gateway_id, "down")?;
let mut df = df.clone();
df.v4_migrate();
if self.v4_migrate {
df.v4_migrate();
}
let json = gateway_is_json(&df.gateway_id);
let b = match json {
@ -313,6 +320,7 @@ impl GatewayBackend for MqttBackend<'_> {
}
async fn message_callback(
v4_migrate: bool,
region_config_id: &str,
region_common_name: CommonName,
msg: mqtt::Message,
@ -357,7 +365,10 @@ async fn message_callback(
true => serde_json::from_slice(b)?,
false => chirpstack_api::gw::UplinkFrame::decode(&mut Cursor::new(b))?,
};
event.v4_migrate();
if v4_migrate {
event.v4_migrate();
}
if let Some(rx_info) = &mut event.rx_info {
set_gateway_json(&rx_info.gateway_id, json);
@ -381,7 +392,11 @@ async fn message_callback(
true => serde_json::from_slice(b)?,
false => chirpstack_api::gw::GatewayStats::decode(&mut Cursor::new(b))?,
};
event.v4_migrate();
if v4_migrate {
event.v4_migrate();
}
event
.metadata
.insert("region_config_id".to_string(), region_config_id.to_string());
@ -401,7 +416,11 @@ async fn message_callback(
true => serde_json::from_slice(b)?,
false => chirpstack_api::gw::DownlinkTxAck::decode(&mut Cursor::new(b))?,
};
event.v4_migrate();
if v4_migrate {
event.v4_migrate();
}
set_gateway_json(&event.gateway_id, json);
tokio::spawn(downlink::tx_ack::TxAck::handle(event));
} else {

View File

@ -2,11 +2,10 @@ use std::collections::HashMap;
use anyhow::Result;
use async_trait::async_trait;
use aws_sdk_sns::model::MessageAttributeValue;
use aws_types::credentials::future;
use aws_types::credentials::ProvideCredentials;
use aws_credential_types::provider::{future, ProvideCredentials, Result as CredentialsResult};
use aws_credential_types::Credentials;
use aws_sdk_sns::types::MessageAttributeValue;
use aws_types::region::Region;
use aws_types::{credentials, Credentials};
use base64::{engine::general_purpose, Engine as _};
use prost::Message;
use tracing::{info, trace};
@ -30,7 +29,7 @@ impl StaticCredentials {
}
}
fn credentials(&self) -> credentials::Result {
fn credentials(&self) -> CredentialsResult {
Ok(Credentials::new(
self.aws_access_key_id.clone(),
self.aws_secret_access_key.clone(),

View File

@ -57,10 +57,15 @@ impl Integration {
.query(&[("event", event)])
.headers(headers.clone())
.send()
.await?;
.await;
match res.error_for_status() {
Ok(_) => {}
match res {
Ok(res) => match res.error_for_status() {
Ok(_) => {}
Err(e) => {
error!(event = %event, url = %url, error = %e, "Posting event failed");
}
},
Err(e) => {
error!(event = %event, url = %url, error = %e, "Posting event failed");
}

View File

@ -554,7 +554,7 @@ impl<'de> Visitor<'de> for Eui64WrapperVisitor {
E: de::Error,
{
let s = value.to_string().replace('-', "");
let b = hex::decode(&s).map_err(|e| E::custom(format!("{}", e)))?;
let b = hex::decode(s).map_err(|e| E::custom(format!("{}", e)))?;
let eui64 = EUI64::from_slice(&b).map_err(|e| E::custom(format!("{}", e)))?;
Ok(Eui64Wrapper(eui64))
}

View File

@ -129,7 +129,7 @@ impl serialize::ToSql<Text, Pg> for IntegrationKind
where
str: serialize::ToSql<Text, Pg>,
{
fn to_sql<'b>(&self, out: &mut serialize::Output<'b, '_, Pg>) -> serialize::Result {
fn to_sql(&self, out: &mut serialize::Output<'_, '_, Pg>) -> serialize::Result {
<str as serialize::ToSql<Text, Pg>>::to_sql(&self.to_string(), &mut out.reborrow())
}
}
@ -158,7 +158,7 @@ impl deserialize::FromSql<Jsonb, Pg> for IntegrationConfiguration {
}
impl serialize::ToSql<Jsonb, Pg> for IntegrationConfiguration {
fn to_sql<'b>(&self, out: &mut serialize::Output<'b, '_, Pg>) -> serialize::Result {
fn to_sql(&self, out: &mut serialize::Output<'_, '_, Pg>) -> serialize::Result {
let value = serde_json::to_value(self)?;
<serde_json::Value as serialize::ToSql<Jsonb, Pg>>::to_sql(&value, &mut out.reborrow())
}

View File

@ -91,7 +91,7 @@ impl deserialize::FromSql<Jsonb, Pg> for Measurements {
}
impl serialize::ToSql<Jsonb, Pg> for Measurements {
fn to_sql<'b>(&self, out: &mut serialize::Output<'b, '_, Pg>) -> serialize::Result {
fn to_sql(&self, out: &mut serialize::Output<'_, '_, Pg>) -> serialize::Result {
let value = serde_json::to_value(&self.0)?;
<serde_json::Value as serialize::ToSql<Jsonb, Pg>>::to_sql(&value, &mut out.reborrow())
}

View File

@ -50,7 +50,7 @@ pub async fn global_search(
let search = search.to_string();
let (query, tags) = parse_search_query(&search);
let query = format!("%{}%", query);
let tags = serde_json::to_value(&tags).context("To serde_json value")?;
let tags = serde_json::to_value(tags).context("To serde_json value")?;
move || -> Result<Vec<SearchResult>, Error> {
let mut c = get_db_conn()?;

View File

@ -288,7 +288,7 @@ impl Data {
.gateway_tenant_id_map
.get(&gw_id)
.map(|v| v.into_bytes().to_vec())
.unwrap_or_else(|| Vec::new()),
.unwrap_or_else(Vec::new),
}
})
.collect(),

View File

@ -375,13 +375,13 @@ fn filter_rx_info_by_tenant_id(tenant_id: Uuid, uplink: &mut UplinkFrameSet) ->
.gateway_private_up_map
.get(&gateway_id)
.cloned()
.unwrap_or_else(|| true)
.unwrap_or(true)
|| force_gws_private)
|| uplink
.gateway_tenant_id_map
.get(&gateway_id)
.cloned()
.unwrap_or_else(|| Uuid::new_v4())
.unwrap_or_else(Uuid::new_v4)
== tenant_id
{
rx_info_set.push(rx_info.clone());

View File

@ -3,7 +3,7 @@ name = "lrwn"
description = "Library for encoding / decoding LoRaWAN frames."
homepage = "https://www.chirpstack.io"
license = "MIT"
version = "4.3.1"
version = "4.3.2"
authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2018"
repository = "https://github.com/chirpstack/chirpstack"

View File

@ -1,6 +1,6 @@
{
"name": "chirpstack-ui",
"version": "4.3.1",
"version": "4.3.2",
"private": true,
"dependencies": {
"@ant-design/colors": "^6.0.0",
@ -28,6 +28,7 @@
"codemirror": "^5.65.3",
"google-protobuf": "^3.21.2",
"grpc-web": "^1.4.2",
"js-file-download": "^0.4.12",
"leaflet": "^1.7.1",
"leaflet.awesome-markers": "^2.0.5",
"react": "^17.0.2",

View File

@ -1,8 +1,9 @@
import React, { Component } from "react";
import moment from "moment";
import JSONTreeOriginal from "react-json-tree";
import fileDownload from "js-file-download";
import { Tag, Drawer, Button, Table, Spin } from "antd";
import { Tag, Drawer, Button, Table, Spin, Space } from "antd";
import { ZoomInOutlined } from "@ant-design/icons";
import { LogItem } from "@chirpstack/chirpstack-api-grpc-web/api/internal_pb";
@ -14,6 +15,7 @@ interface IProps {
interface IState {
drawerOpen: boolean;
body: any;
drawerTitle: any;
}
class LogTable extends Component<IProps, IState> {
@ -23,6 +25,7 @@ class LogTable extends Component<IProps, IState> {
this.state = {
drawerOpen: false,
body: null,
drawerTitle: null,
};
}
@ -32,15 +35,29 @@ class LogTable extends Component<IProps, IState> {
});
};
onDrawerOpen = (body: any) => {
onDrawerOpen = (time: any, body: any) => {
let ts = new Date(0);
ts.setUTCSeconds(time.seconds);
let drawerTitle = moment(ts).format("YYYY-MM-DD HH:mm:ss");
return () => {
this.setState({
body: body,
drawerTitle: drawerTitle,
drawerOpen: true,
});
};
};
downloadSingleFrame = () => {
fileDownload(JSON.stringify(JSON.parse(this.state.body), null, 4), "single-log.json", "application/json");
};
downloadFrames = () => {
let items = this.props.logs.map((l, i) => JSON.parse(l.getBody()));
fileDownload(JSON.stringify(items, null, 4), "log.json");
};
render() {
let items = this.props.logs.map((l, i) => l.toObject());
let body = JSON.parse(this.state.body);
@ -67,13 +84,14 @@ class LogTable extends Component<IProps, IState> {
};
return (
<div>
<Space direction="vertical" size="large" style={{ width: "100%" }}>
<Drawer
title="Details"
title={`Details: ${this.state.drawerTitle}`}
placement="right"
width={650}
onClose={this.onDrawerClose}
visible={this.state.drawerOpen}
extra={<Button onClick={this.downloadSingleFrame}>Download</Button>}
>
<JSONTreeOriginal
data={body}
@ -85,9 +103,10 @@ class LogTable extends Component<IProps, IState> {
/>
</Drawer>
{items.length !== 0 && (
<div className="spinner">
<Spin />
</div>
<Space direction="horizontal" style={{ float: "right" }} size="large">
<Spin size="small" />
<Button onClick={this.downloadFrames}>Download</Button>
</Space>
)}
<Table
showHeader={false}
@ -117,7 +136,7 @@ class LogTable extends Component<IProps, IState> {
type="primary"
shape="round"
size="small"
onClick={this.onDrawerOpen(obj.body)}
onClick={this.onDrawerOpen(obj.time, obj.body)}
>
{text}
</Button>
@ -144,7 +163,7 @@ class LogTable extends Component<IProps, IState> {
},
]}
/>
</div>
</Space>
);
}
}

View File

@ -111,3 +111,11 @@ pre {
.CodeMirror {
height: 600px;
}
.ant-drawer {
padding-top: 64px;
}
.ant-drawer-body {
padding-bottom: 88px; /* 64 + 24 */
}

View File

@ -1881,7 +1881,7 @@
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@chirpstack/chirpstack-api-grpc-web@file:../api/grpc-web":
version "4.3.0"
version "4.3.1"
dependencies:
"@types/google-protobuf" "^3.15.6"
google-protobuf "^3.21.2"
@ -7025,6 +7025,11 @@ jest@^27.4.3:
import-local "^3.0.2"
jest-cli "^27.5.1"
js-file-download@^0.4.12:
version "0.4.12"
resolved "https://registry.yarnpkg.com/js-file-download/-/js-file-download-0.4.12.tgz#10c70ef362559a5b23cdbdc3bd6f399c3d91d821"
integrity sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"