V0 #1

Closed
RusticMaple wants to merge 105 commits from v0 into main
Showing only changes of commit 58c9e43fa3 - Show all commits

add fragments to v0 outgoing packets

Maple 2026-04-25 12:59:49 +02:00

View file

@ -106,50 +106,55 @@ impl<C: Crypto> Server<C> {
.expect("packet malformed in creation"),
);*/
let mut inner = conn.inner.lock().await;
let seq = inner.server_packet_counter;
let packet = new_data_packet(
NEED_ACK | RELIABLE,
self.param.virtual_port,
conn.addr.virtual_port,
data,
inner.server_packet_counter,
conn.session_id,
0,
&mut inner.crypto_instance,
&self.crypto,
);
inner.server_packet_counter += 1;
let pieces = data.chunks(1000);
let max_piece = pieces.len() - 1;
let mut frag_num = 1;
for (i, piece) in pieces.enumerate() {
let seq = inner.server_packet_counter;
let packet = new_data_packet(
NEED_ACK | RELIABLE,
(&self).param.virtual_port,
conn.addr.virtual_port,
piece,
inner.server_packet_counter,
conn.session_id,
if i == max_piece { 0 } else { frag_num },
&mut inner.crypto_instance,
&(&self).crypto,
);
inner.server_packet_counter += 1;
let packet = Arc::new(packet);
let packet_ref = Arc::downgrade(&packet);
let packet = Arc::new(packet);
let packet_ref = Arc::downgrade(&packet);
inner.unacknowledged_packets.insert(seq, packet);
inner.unacknowledged_packets.insert(seq, packet);
let conn = Arc::downgrade(&conn);
let this = Arc::downgrade(&self);
spawn(async move {
for n in 0..5 {
let Some(data) = packet_ref.upgrade() else {
return;
};
let Some(conn) = conn.upgrade() else {
return;
};
let Some(this) = this.upgrade() else {
return;
};
info!("send attempt {}", n);
self.socket
.send_to(&data, conn.addr.regular_socket_addr)
.await;
break;
}
});
frag_num += 1;
}
drop(inner);
let conn = Arc::downgrade(&conn);
let this = Arc::downgrade(&self);
spawn(async move {
for n in 0..5 {
let Some(data) = packet_ref.upgrade() else {
return;
};
let Some(conn) = conn.upgrade() else {
return;
};
let Some(this) = this.upgrade() else {
return;
};
info!("send attempt {}", n);
self.socket
.send_to(&data, conn.addr.regular_socket_addr)
.await;
break;
}
});
}
async fn connection_thread(
self: Arc<Self>,