Compare commits

..

No commits in common. "bcc485f2c08bfbfbf330ecbffb4fb0776592c4d8" and "9b1734f8c04d2e3eac62114f71f9bc93c94be43f" have entirely different histories.

5 changed files with 40 additions and 11 deletions

2
Cargo.lock generated
View file

@ -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",

View file

@ -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"]

View file

@ -1 +1 @@
1.618 1.61

View file

@ -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!()
}
*/

View file

@ -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
}); });