Merge remote-tracking branch 'origin/master'

This commit is contained in:
chenbaiyu
2022-01-12 21:40:19 +08:00
4 changed files with 79 additions and 4 deletions

View File

@@ -133,6 +133,16 @@ message LocalAddr {
string version = 5;
}
message PeerDiscovery {
string cmd = 1;
string mac = 2;
string id = 3;
string username = 4;
string hostname = 5;
string platform = 6;
string misc = 7;
}
message RendezvousMessage {
oneof union {
RegisterPeer register_peer = 6;
@@ -151,5 +161,6 @@ message RendezvousMessage {
RelayResponse relay_response = 19;
TestNatRequest test_nat_request = 20;
TestNatResponse test_nat_response = 21;
PeerDiscovery peer_discovery = 22;
}
}

View File

@@ -32,6 +32,7 @@ pub use sodiumoxide;
pub use tokio_socks;
pub use tokio_socks::IntoTargetAddr;
pub use tokio_socks::TargetAddr;
pub use mac_address;
#[cfg(feature = "quic")]
pub type Stream = quic::Connection;

View File

@@ -3,8 +3,8 @@ use anyhow::anyhow;
use bytes::{Bytes, BytesMut};
use futures::{SinkExt, StreamExt};
use protobuf::Message;
use socket2::{Domain, Socket, Type};
use std::net::SocketAddr;
use socket2::{Domain, Protocol, Socket, Type};
use std::net::{SocketAddr, SocketAddrV4};
use tokio::net::{ToSocketAddrs, UdpSocket};
use tokio_socks::{udp::Socks5UdpFramed, IntoTargetAddr, TargetAddr, ToProxyAddrs};
use tokio_util::{codec::BytesCodec, udp::UdpFramed};
@@ -142,3 +142,18 @@ impl FramedSocket {
}
}
}
// const DEFAULT_MULTICAST: &str = "239.255.42.98";
pub fn bind_multicast(addr: &SocketAddrV4, multi_addr: &SocketAddrV4) -> ResultType<FramedSocket> {
assert!(multi_addr.ip().is_multicast(), "Must be multcast address");
let socket = Socket::new(Domain::ipv4(), Type::dgram(), Some(Protocol::udp()))?;
socket.set_reuse_address(true)?;
socket.bind(&socket2::SockAddr::from(*addr))?;
socket.set_multicast_loop_v4(true)?;
socket.join_multicast_v4(multi_addr.ip(), addr.ip())?;
Ok(FramedSocket::Direct(UdpFramed::new(
UdpSocket::from_std(socket.into_udp_socket())?,
BytesCodec::new(),
)))
}