Compare commits
No commits in common. "bcc485f2c08bfbfbf330ecbffb4fb0776592c4d8" and "9b1734f8c04d2e3eac62114f71f9bc93c94be43f" have entirely different histories.
bcc485f2c0
...
9b1734f8c0
5 changed files with 40 additions and 11 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -1324,7 +1324,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jocalsend"
|
name = "jocalsend"
|
||||||
version = "1.6.18"
|
version = "1.6.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"axum",
|
"axum",
|
||||||
"axum-server",
|
"axum-server",
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
[package]
|
[package]
|
||||||
name = "jocalsend"
|
name = "jocalsend"
|
||||||
# 1.61803398874989484
|
# 1.61803398874989484
|
||||||
#-----^
|
#----^
|
||||||
version = "1.6.18"
|
version = "1.6.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
authors = ["Joe Ardent <code@ardent.nebcorp.com>"]
|
authors = ["Joe Ardent <code@ardent.nebcorp.com>"]
|
||||||
keywords = ["p2p", "localsend", "tui", "linux"]
|
keywords = ["p2p", "localsend", "tui", "linux"]
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
1.618
|
1.61
|
||||||
|
|
|
@ -138,3 +138,33 @@ async fn announce_multicast(
|
||||||
socket.send_to(msg.as_bytes(), addr).await?;
|
socket.send_to(msg.as_bytes(), addr).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
async fn announce_unicast(
|
||||||
|
device: &Device,
|
||||||
|
ip: Option<SocketAddr>,
|
||||||
|
client: reqwest::Client,
|
||||||
|
) -> crate::error::Result<()> {
|
||||||
|
// for enumerating subnet peers when multicast fails (https://github.com/localsend/protocol?tab=readme-ov-file#32-http-legacy-mode)
|
||||||
|
let std::net::IpAddr::V4(ip) = local_ip_address::local_ip()? else {
|
||||||
|
unreachable!()
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut _network_ip = ip;
|
||||||
|
let nifs = NetworkInterface::show()?;
|
||||||
|
for addr in nifs.into_iter().flat_map(|i| i.addr) {
|
||||||
|
if let Addr::V4(V4IfAddr {
|
||||||
|
ip: ifip,
|
||||||
|
netmask: Some(netmask),
|
||||||
|
..
|
||||||
|
}) = addr
|
||||||
|
&& ip == ifip
|
||||||
|
{
|
||||||
|
_network_ip = ip & netmask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
13
src/lib.rs
13
src/lib.rs
|
@ -32,7 +32,7 @@ pub const DEFAULT_PORT: u16 = 53317;
|
||||||
pub const MULTICAST_IP: Ipv4Addr = Ipv4Addr::new(224, 0, 0, 167);
|
pub const MULTICAST_IP: Ipv4Addr = Ipv4Addr::new(224, 0, 0, 167);
|
||||||
pub const LISTENING_SOCKET_ADDR: SocketAddrV4 =
|
pub const LISTENING_SOCKET_ADDR: SocketAddrV4 =
|
||||||
SocketAddrV4::new(Ipv4Addr::from_bits(0), DEFAULT_PORT);
|
SocketAddrV4::new(Ipv4Addr::from_bits(0), DEFAULT_PORT);
|
||||||
pub const DEFAULT_INTERVAL: Duration = Duration::from_micros(33333);
|
pub const DEFAULT_INTERVAL: Duration = Duration::from_millis(200);
|
||||||
|
|
||||||
pub type Peers = Arc<Mutex<BTreeMap<String, (SocketAddr, Device)>>>;
|
pub type Peers = Arc<Mutex<BTreeMap<String, (SocketAddr, Device)>>>;
|
||||||
pub type Sessions = Arc<Mutex<BTreeMap<String, Session>>>; // Session ID to Session
|
pub type Sessions = Arc<Mutex<BTreeMap<String, Session>>>; // Session ID to Session
|
||||||
|
@ -114,7 +114,7 @@ impl JocalService {
|
||||||
) -> crate::error::Result<(Self, UnboundedReceiver<JocalEvent>)> {
|
) -> crate::error::Result<(Self, UnboundedReceiver<JocalEvent>)> {
|
||||||
let (tx, rx) = mpsc::unbounded_channel();
|
let (tx, rx) = mpsc::unbounded_channel();
|
||||||
let socket = UdpSocket::bind(LISTENING_SOCKET_ADDR).await?;
|
let socket = UdpSocket::bind(LISTENING_SOCKET_ADDR).await?;
|
||||||
socket.set_multicast_loop_v4(false)?;
|
socket.set_multicast_loop_v4(true)?;
|
||||||
socket.set_multicast_ttl_v4(8)?; // 8 hops out from localnet
|
socket.set_multicast_ttl_v4(8)?; // 8 hops out from localnet
|
||||||
socket.join_multicast_v4(MULTICAST_IP, Ipv4Addr::from_bits(0))?;
|
socket.join_multicast_v4(MULTICAST_IP, Ipv4Addr::from_bits(0))?;
|
||||||
|
|
||||||
|
@ -162,16 +162,15 @@ impl JocalService {
|
||||||
let mut tick = tokio::time::interval(DEFAULT_INTERVAL);
|
let mut tick = tokio::time::interval(DEFAULT_INTERVAL);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
let rstate = service.running_state.lock().await;
|
||||||
|
if *rstate == RunningState::Stopping {
|
||||||
|
break;
|
||||||
|
}
|
||||||
tick.tick().await;
|
tick.tick().await;
|
||||||
service
|
service
|
||||||
.transfer_event_tx
|
.transfer_event_tx
|
||||||
.send(JocalEvent::Tick)
|
.send(JocalEvent::Tick)
|
||||||
.unwrap_or_else(|e| log::warn!("could not send tick event: {e:?}"));
|
.unwrap_or_else(|e| log::warn!("could not send tick event: {e:?}"));
|
||||||
|
|
||||||
let rstate = service.running_state.lock().await;
|
|
||||||
if *rstate == RunningState::Stopping {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
JocalTasks::Tick
|
JocalTasks::Tick
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue