Skip to content

Commit

Permalink
feat: allow customizing conv generation (#37)
Browse files Browse the repository at this point in the history
  • Loading branch information
zonyitoo committed Jul 10, 2024
1 parent f4dafcf commit dc30202
Showing 1 changed file with 28 additions and 1 deletion.
29 changes: 28 additions & 1 deletion src/stream.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ impl Debug for KcpStream {

impl KcpStream {
/// Create a `KcpStream` connecting to `addr`
///
/// NOTE: `conv` will be randomly generated
pub async fn connect(config: &KcpConfig, addr: SocketAddr) -> KcpResult<KcpStream> {
let udp = match addr.ip() {
IpAddr::V4(..) => UdpSocket::bind("0.0.0.0:0").await?,
Expand All @@ -52,10 +54,35 @@ impl KcpStream {
KcpStream::connect_with_socket(config, udp, addr).await
}

/// Create a `KcpStream` connecting to `addr`
pub async fn connect_with_conv(config: &KcpConfig, conv: u32, addr: SocketAddr) -> KcpResult<KcpStream> {
let udp = match addr.ip() {
IpAddr::V4(..) => UdpSocket::bind("0.0.0.0:0").await?,
IpAddr::V6(..) => UdpSocket::bind("[::]:0").await?,
};

KcpStream::connect_with_socket_conv(config, conv, udp, addr).await
}

/// Create a `KcpStream` with an existed `UdpSocket` connecting to `addr`
///
/// NOTE: `conv` will be randomly generated
pub async fn connect_with_socket(config: &KcpConfig, udp: UdpSocket, addr: SocketAddr) -> KcpResult<KcpStream> {
let mut conv = rand::random();
while conv == 0 {
conv = rand::random();
}
KcpStream::connect_with_socket_conv(config, conv, udp, addr).await
}

/// Create a `KcpStream` with an existed `UdpSocket` connecting to `addr`
pub async fn connect_with_socket_conv(
config: &KcpConfig,
conv: u32,
udp: UdpSocket,
addr: SocketAddr,
) -> KcpResult<KcpStream> {
let udp = Arc::new(udp);
let conv = rand::random();
let socket = KcpSocket::new(config, conv, udp, addr, config.stream)?;

let session = KcpSession::new_shared(socket, config.session_expire, None);
Expand Down

0 comments on commit dc30202

Please sign in to comment.