Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,257 changes: 211 additions & 1,046 deletions Cargo.lock

Large diffs are not rendered by default.

42 changes: 21 additions & 21 deletions crates/core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,30 @@ edition = "2018"
license = "AGPL-3.0-or-later"

[dependencies]
aes = "0.8.2"
bytes = "1.4.0"
aes = "0.8.4"
bytes = "1.11.1"
cfb-mode = "0.8.2"
cookie-factory = "0.3.2"
crc32fast = "1.3.2"
crossbeam-channel = "0.5.8"
delegate = "0.12.0"
futures = "0.3.28"
cookie-factory = "0.3.3"
crc32fast = "1.5.0"
crossbeam-channel = "0.5.15"
delegate = "0.13.5"
futures = "0.3.32"
get_if_addrs = "0.5.3"
lazy_static = "1.4.0"
log = "0.4.17"
md5 = "0.7.0"
lazy_static = "1.5.0"
log = "0.4.29"
md5 = "0.8.0"
nom = { version = "7.1.3", features = ["alloc"] }
quick-xml = { version = "0.36.0", features = ["serialize"] }
rand = "0.8.5"
regex = "1.7.3"
serde = { version = "1.0.106", features = ["derive"] }
thiserror = "1.0.58"
time = { version = "0.3.36" , features = [ "macros", "parsing", "local-offset" ]}
tokio = { version = "1.27.0", features = ["full"] }
tokio-stream = { version = "0.1.12", features = ["sync", "time", "net"] }
tokio-util = { version = "0.7.7", features = ["full", "tracing"] }
quick-xml = { version = "0.39.2", features = ["serialize"] }
rand = "0.10.0"
regex = "1.12.3"
serde = { version = "1.0.228", features = ["derive"] }
thiserror = "2.0.18"
time = { version = "0.3.47", features = [ "macros", "parsing", "local-offset" ]}
tokio = { version = "1.50.0", features = ["full"] }
tokio-stream = { version = "0.1.18", features = ["sync", "time", "net"] }
tokio-util = { version = "0.7.18", features = ["full", "tracing"] }

[dev-dependencies]
assert_matches = "1.5.0"
env_logger = "*"
indoc = "2.0.1"
env_logger = "0.11.9"
indoc = "2.0.7"
4 changes: 2 additions & 2 deletions crates/core/src/bc/xml.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ impl BcXml {
pub(crate) fn try_parse(s: impl BufRead) -> Result<Self, quick_xml::de::DeError> {
quick_xml::de::from_reader(s)
}
pub(crate) fn serialize<W: Write>(&self, mut w: W) -> Result<W, quick_xml::de::DeError> {
pub(crate) fn serialize<W: Write>(&self, mut w: W) -> Result<W, quick_xml::se::SeError> {
let mut writer = quick_xml::writer::Writer::new(&mut w);
writer
.write_event(quick_xml::events::Event::Decl(
Expand All @@ -184,7 +184,7 @@ impl Extension {
pub(crate) fn try_parse(s: impl BufRead) -> Result<Self, quick_xml::de::DeError> {
quick_xml::de::from_reader(s)
}
pub(crate) fn serialize<W: Write>(&self, mut w: W) -> Result<W, quick_xml::de::DeError> {
pub(crate) fn serialize<W: Write>(&self, mut w: W) -> Result<W, quick_xml::se::SeError> {
let mut writer = quick_xml::writer::Writer::new(&mut w);
writer
.write_event(quick_xml::events::Event::Decl(
Expand Down
12 changes: 6 additions & 6 deletions crates/core/src/bc_protocol/connection/discovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use futures::{
};
use lazy_static::lazy_static;
use log::*;
use rand::{seq::SliceRandom, thread_rng, Rng};
use rand::{seq::SliceRandom, RngExt};
use std::collections::{btree_map::Entry, BTreeMap, HashSet};
use std::convert::TryInto;
use std::net::{Ipv4Addr, SocketAddr, ToSocketAddrs};
Expand Down Expand Up @@ -1264,19 +1264,19 @@ fn get_broadcasts(ports: &[u16]) -> Result<Vec<SocketAddr>> {
}

fn generate_tid() -> u32 {
let mut rng = thread_rng();
(rng.gen::<u8>()) as u32
let mut rng = rand::rng();
(rng.random::<u8>()) as u32
}

fn generate_cid() -> i32 {
let mut rng = thread_rng();
rng.gen()
let mut rng = rand::rng();
rng.random()
}

async fn connect() -> Result<UdpSocket> {
let mut ports: Vec<u16> = (53500..54000).collect();
{
let mut rng = thread_rng();
let mut rng = rand::rng();
ports.shuffle(&mut rng);
}

Expand Down
14 changes: 7 additions & 7 deletions crates/core/src/bc_protocol/connection/udpsource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use futures::{
sink::{Sink, SinkExt},
stream::{IntoAsyncRead, Stream, StreamExt, TryStreamExt},
};
use rand::{seq::SliceRandom, thread_rng, Rng};
use rand::{seq::SliceRandom, RngExt};
use std::collections::BTreeMap;
use std::io::{Error as IoError, ErrorKind, Result as IoResult};
use std::net::SocketAddr;
Expand Down Expand Up @@ -381,8 +381,8 @@ impl UdpPayloadInner {
// Might also have to do this for the relay but not sure
let msg = BcUdp::Discovery(UdpDiscovery {
tid: {
let mut rng = thread_rng();
(rng.gen::<u8>()) as u32
let mut rng = rand::rng();
(rng.random::<u8>()) as u32
},
payload: UdpXml::C2dHb(C2dHb {
cid: thread_client_id,
Expand Down Expand Up @@ -442,8 +442,8 @@ impl UdpPayloadInner {
thread_interval.tick().await;
let msg = BcUdp::Discovery(UdpDiscovery {
tid: {
let mut rng = thread_rng();
(rng.gen::<u8>()) as u32
let mut rng = rand::rng();
(rng.random::<u8>()) as u32
},
payload: UdpXml::C2dHb(C2dHb {
cid: thread_client_id,
Expand Down Expand Up @@ -763,7 +763,7 @@ impl futures::AsyncWrite for UdpPayloadSource {
async fn connect() -> Result<UdpSocket> {
let mut ports: Vec<u16> = (53500..54000).collect();
{
let mut rng = thread_rng();
let mut rng = rand::rng();
ports.shuffle(&mut rng);
drop(rng); // Do not hold RNG over an await
}
Expand All @@ -780,7 +780,7 @@ async fn connect() -> Result<UdpSocket> {
async fn connect_try_port(port: u16) -> Result<UdpSocket> {
let mut ports: Vec<u16> = (53500..54000).collect();
{
let mut rng = thread_rng();
let mut rng = rand::rng();
ports.shuffle(&mut rng);
drop(rng); // Do not hold RNG over an await
}
Expand Down
9 changes: 6 additions & 3 deletions crates/core/src/bcudp/xml.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,13 @@ impl UdpXml {
// ))?;
writer
.create_element("P2P")
.write_inner_content::<_, quick_xml::de::DeError>(|writer| {
writer.write_serializable("", &self)?;
.write_inner_content(|writer| {
writer.write_serializable("", &self).map_err(|e| {
std::io::Error::new(std::io::ErrorKind::Other, e)
})?;
Ok(())
})?;
})
.map_err(|e| quick_xml::de::DeError::from(quick_xml::Error::Io(std::sync::Arc::new(e))))?;

Ok(w)
}
Expand Down
12 changes: 6 additions & 6 deletions crates/decoder/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ edition = "2018"
license = "AGPL-3.0-or-later"

[dependencies]
aes = "0.8.2"
anyhow = "1.0.42"
aes = "0.8.4"
anyhow = "1.0.102"
cfb-mode = "0.8.2"
env_logger = "*"
env_logger = "0.11.9"
hex-string = "0.1.0"
md5 = "0.7.0"
requestty = "0.5.0"
log = "0.4.17"
md5 = "0.8.0"
requestty = "0.6.3"
log = "0.4.29"
26 changes: 13 additions & 13 deletions crates/mailnoti/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ edition = "2021"


[dependencies]
anyhow = "1.0.71"
async-std = "1.12.0"
clap = { version = "4.2.2", features = ["derive", "cargo"] }
env_logger = "0.10.0"
anyhow = "1.0.102"
async-std = "1.13.2"
clap = { version = "4.6.0", features = ["derive", "cargo"] }
env_logger = "0.11.9"
get_if_addrs = "0.5.3"
lazy_static = "1.4.0"
log = { version = "0.4.17", features = [ "release_max_level_debug" ] }
mailin-embedded = "0.8.2"
lazy_static = "1.5.0"
log = { version = "0.4.29", features = [ "release_max_level_debug" ] }
mailin-embedded = "0.8.3"
neolink_core = { path = "../core", version = "0.7.0-beta" }
once_cell = "1.19.0"
regex = "1.8.1"
serde = "1.0.163"
tokio = { version = "1.28.1", features = ["full"] }
toml = "0.8.2"
validator = {version="0.18.1", features = ["derive"] }
once_cell = "1.21.4"
regex = "1.12.3"
serde = "1.0.228"
tokio = { version = "1.50.0", features = ["full"] }
toml = "1.0.7"
validator = { version = "0.20.0", features = ["derive"] }
26 changes: 14 additions & 12 deletions crates/pushnoti/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,18 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
anyhow = "1.0.71"
clap = { version = "4.2.2", features = ["derive", "cargo"] }
env_logger = "0.10.0"
fcm-push-listener = { version = "2.0.3" }
lazy_static = "1.4.0"
log = { version = "0.4.17", features = [ "release_max_level_debug" ] }
anyhow = "1.0.102"
clap = { version = "4.6.0", features = ["derive", "cargo"] }
env_logger = "0.11.9"
fcm-push-listener = { version = "4.1.1" }
lazy_static = "1.5.0"
log = { version = "0.4.29", features = [ "release_max_level_debug" ] }
neolink_core = { path = "../core", version = "0.7.0-beta" }
once_cell = "1.19.0"
regex = "1.8.1"
serde = "1.0.163"
tokio = { version = "1.28.1", features = ["full"] }
toml = "0.8.2"
validator = {version="0.18.1", features = ["derive"] }
once_cell = "1.21.4"
regex = "1.12.3"
serde = "1.0.228"
tokio = { version = "1.50.0", features = ["full"] }
toml = "1.0.7"
reqwest = "0.13.2"
tokio-stream = "0.1.18"
validator = { version = "0.20.0", features = ["derive"] }
72 changes: 37 additions & 35 deletions crates/pushnoti/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ use clap::Parser;
use fcm_push_listener::*;
use log::*;
use std::{fs, path::PathBuf};
use tokio::io::AsyncWriteExt;
use tokio_stream::StreamExt;
use validator::Validate;

mod config;
Expand Down Expand Up @@ -32,25 +34,13 @@ async fn main() -> Result<()> {

let camera = find_and_connect(&config, &opt.camera).await?;

// 696841269229 is the reo_iphone FCM Sender_ID
// let registration = fcm_push_listener::register("696841269229").await?;
// 743639030586 is the reo_fcm FCM Sender_ID
// 263684512460 is my test Sender_ID
// let registration = fcm_push_listener::register("743639030586").await?
// I have confirmed that I can recieve test messages with this SenderID
// into this program
// let registration = fcm_push_listener::register("263684512460").await?;
let http = reqwest::Client::new();

// let firebase_app_id = "1:743639030586:android:86f60a4fb7143876";
// let firebase_project_id = "reolink-login";
// let firebase_api_key = "AIzaSyBEUIuWHnnOEwFahxWgQB4Yt4NsgOmkPyE";
// let vapid_key = "";

let sender_id = "743639030586"; // andriod

// let sender_id = "696841269229"; // ios

// let sender_id = "263684512460"; // test
// Firebase credentials for Reolink FCM registration
let firebase_app_id = "1:743639030586:android:86f60a4fb7143876";
let firebase_project_id = "reolink-login";
let firebase_api_key = "AIzaSyBEUIuWHnnOEwFahxWgQB4Yt4NsgOmkPyE";
let vapid_key = None;

let token_path = PathBuf::from("./token.toml");
let registration = if let Ok(Ok(registration)) =
Expand All @@ -60,14 +50,14 @@ async fn main() -> Result<()> {
registration
} else {
info!("Registering new token");
let registration = fcm_push_listener::register(sender_id).await?;
// let registration = fcm_push_listener::register(
// firebase_app_id,
// firebase_project_id,
// firebase_api_key,
// vapid_key,
// )
// .await?;
let registration = fcm_push_listener::register(
&http,
firebase_app_id,
firebase_project_id,
firebase_api_key,
vapid_key,
)
.await?;
let new_token = toml::to_string(&registration)?;
fs::write(token_path, new_token)?;
registration
Expand All @@ -81,14 +71,26 @@ async fn main() -> Result<()> {
.await?;

info!("Listening");
let mut listener = FcmPushListener::create(
registration,
|message: FcmMessage| {
info!("Message JSON: {}", message.payload_json);
info!("Persistent ID: {:?}", message.persistent_id);
},
vec![],
);
listener.connect().await?;
let session = registration.gcm.checkin(&http).await?;
let connection = session.new_connection(vec![]).await?;
let mut stream = MessageStream::wrap(connection, &registration.keys);

while let Some(message) = stream.next().await {
match message? {
Message::Data(data) => {
let payload = String::from_utf8_lossy(&data.body);
info!("Message JSON: {}", payload);
info!("Persistent ID: {:?}", data.persistent_id);
}
Message::HeartbeatPing => {
debug!("Heartbeat ping, sending ack");
stream.write_all(&new_heartbeat_ack()).await?;
}
Message::Other(tag, bytes) => {
debug!("Non-data message: tag={}, {} bytes", tag, bytes.len());
}
}
}

Ok(())
}