add fragments to v0 outgoing packets
This commit is contained in:
parent
731fa91b72
commit
58c9e43fa3
1 changed files with 45 additions and 40 deletions
|
|
@ -106,50 +106,55 @@ impl<C: Crypto> Server<C> {
|
||||||
.expect("packet malformed in creation"),
|
.expect("packet malformed in creation"),
|
||||||
);*/
|
);*/
|
||||||
let mut inner = conn.inner.lock().await;
|
let mut inner = conn.inner.lock().await;
|
||||||
let seq = inner.server_packet_counter;
|
let pieces = data.chunks(1000);
|
||||||
let packet = new_data_packet(
|
let max_piece = pieces.len() - 1;
|
||||||
NEED_ACK | RELIABLE,
|
let mut frag_num = 1;
|
||||||
self.param.virtual_port,
|
for (i, piece) in pieces.enumerate() {
|
||||||
conn.addr.virtual_port,
|
let seq = inner.server_packet_counter;
|
||||||
data,
|
let packet = new_data_packet(
|
||||||
inner.server_packet_counter,
|
NEED_ACK | RELIABLE,
|
||||||
conn.session_id,
|
(&self).param.virtual_port,
|
||||||
0,
|
conn.addr.virtual_port,
|
||||||
&mut inner.crypto_instance,
|
piece,
|
||||||
&self.crypto,
|
inner.server_packet_counter,
|
||||||
);
|
conn.session_id,
|
||||||
inner.server_packet_counter += 1;
|
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 = Arc::new(packet);
|
||||||
let packet_ref = Arc::downgrade(&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);
|
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(
|
async fn connection_thread(
|
||||||
self: Arc<Self>,
|
self: Arc<Self>,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue